MCPcopy Create free account
hub / github.com/adobe/react-spectrum / useCurrentColorScheme

Function useCurrentColorScheme

packages/dev/docs/src/ThemeSwitcher.js:21–43  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

19import {theme} from '@react-spectrum/theme-default';
20
21function 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
45export function ThemeProvider({
46 children,

Callers 2

ThemeProviderFunction · 0.85
ThemeSwitcher.jsFile · 0.85

Calls 2

addEventListenerMethod · 0.80
removeEventListenerMethod · 0.80

Tested by

no test coverage detected