@@ -23,6 +23,8 @@ const DARK_THEME = {
23
23
'footer-background' : '#555' ,
24
24
} ;
25
25
26
+ const LOCAL_STORAGE_THEME = 'registryUiTheme' ;
27
+
26
28
let THEME ;
27
29
28
30
const normalizeKey = ( k ) =>
@@ -33,9 +35,16 @@ const normalizeKey = (k) =>
33
35
34
36
const preferDarkMode = ( { theme } ) => {
35
37
if ( theme === 'auto' ) {
36
- if ( typeof window . matchMedia === 'function' ) {
37
- const prefersDarkScheme = window . matchMedia ( '(prefers-color-scheme: dark)' ) ;
38
- return prefersDarkScheme && prefersDarkScheme . matches ;
38
+ switch ( localStorage . getItem ( LOCAL_STORAGE_THEME ) ) {
39
+ case 'dark' :
40
+ return true ;
41
+ case 'light' :
42
+ return false ;
43
+ default :
44
+ if ( typeof window . matchMedia === 'function' ) {
45
+ const prefersDarkScheme = window . matchMedia ( '(prefers-color-scheme: dark)' ) ;
46
+ return prefersDarkScheme && prefersDarkScheme . matches ;
47
+ }
39
48
}
40
49
}
41
50
return theme === 'dark' ;
@@ -49,5 +58,7 @@ export const loadTheme = (props, style) => {
49
58
. map ( ( [ k , v ] ) => [ normalizeKey ( k ) , v ] )
50
59
. forEach ( ( [ k , v ] ) => ( THEME [ k ] = v ) ) ;
51
60
Object . entries ( THEME ) . forEach ( ( [ k , v ] ) => style . setProperty ( `--${ k } ` , v ) ) ;
52
- return isDarkMode ? 'dark' : 'light' ;
61
+ const theme = isDarkMode ? 'dark' : 'light' ;
62
+ localStorage . setItem ( LOCAL_STORAGE_THEME , theme ) ;
63
+ return theme ;
53
64
} ;
0 commit comments