()
| 19 | import {theme} from '@react-spectrum/theme-default'; |
| 20 | |
| 21 | function useCurrentColorScheme() { |
| 22 | let mq = useMemo(() => window.matchMedia('(prefers-color-scheme: dark)'), []); |
| 23 | let getCurrentColorScheme = useCallback( |
| 24 | () => localStorage.theme || (mq.matches ? 'dark' : 'light'), |
| 25 | [mq] |
| 26 | ); |
| 27 | let [colorScheme, setColorScheme] = useState(() => getCurrentColorScheme()); |
| 28 | |
| 29 | useEffect(() => { |
| 30 | let onChange = () => { |
| 31 | setColorScheme(getCurrentColorScheme()); |
| 32 | }; |
| 33 | |
| 34 | mq.addListener(onChange); |
| 35 | window.addEventListener('storage', onChange); |
| 36 | return () => { |
| 37 | mq.removeListener(onChange); |
| 38 | window.removeEventListener('storage', onChange); |
| 39 | }; |
| 40 | }, [getCurrentColorScheme, mq]); |
| 41 | |
| 42 | return colorScheme; |
| 43 | } |
| 44 | |
| 45 | export function ThemeProvider({ |
| 46 | children, |
no test coverage detected