11import { DARK , LIGHT } from "../../constants" ;
22import { ColorSchemePreference , ResolvedScheme , useStore } from "../../utils" ;
33import { memo , useEffect } from "react" ;
4-
5- declare global {
6- // skipcq: JS-0102, JS-0239
7- var u : ( mode : ColorSchemePreference , systemMode : ResolvedScheme ) => void ;
8- // skipcq: JS-0102, JS-0239
9- var m : MediaQueryList ;
10- }
11-
12- /** function to be injected in script tag for avoiding FOUC */
13- export const noFOUCScript = ( storageKey : string ) => {
14- const [ SYSTEM , DARK ] = [ "system" , "dark" ] as const ;
15- window . u = ( mode : ColorSchemePreference , systemMode : ResolvedScheme ) => {
16- const resolvedMode = mode === SYSTEM ? systemMode : mode ;
17- const el = document . documentElement ;
18- if ( resolvedMode === DARK ) el . classList . add ( DARK ) ;
19- else el . classList . remove ( DARK ) ;
20- [
21- [ "sm" , systemMode ] ,
22- [ "rm" , resolvedMode ] ,
23- [ "m" , mode ] ,
24- ] . forEach ( ( [ dataLabel , value ] ) => el . setAttribute ( `data-${ dataLabel } ` , value ) ) ;
25- // System mode is decided by current system state and need not be stored in localStorage
26- localStorage . setItem ( storageKey , mode ) ;
27- } ;
28- window . m = matchMedia ( `(prefers-color-scheme: ${ DARK } )` ) ;
29- u ( ( localStorage . getItem ( storageKey ) ?? SYSTEM ) as ColorSchemePreference , m . matches ? DARK : "" ) ;
30- } ;
4+ import { noFOUCScript } from "./no-fouc" ;
315
326let media : MediaQueryList ,
337 updateDOM : ( mode : ColorSchemePreference , systemMode : ResolvedScheme ) => void ;
@@ -40,14 +14,17 @@ interface ScriptProps {
4014}
4115
4216/** Avoid rerender of script */
43- const Script = memo ( ( { n, k } : ScriptProps ) => (
44- < script
45- suppressHydrationWarning
46- // skipcq: JS-0440
47- dangerouslySetInnerHTML = { { __html : `(${ noFOUCScript . toString ( ) } )('${ k } ')` } }
48- nonce = { n }
49- />
50- ) ) ;
17+ const Script = memo (
18+ ( { n, k } : ScriptProps ) => (
19+ < script
20+ suppressHydrationWarning
21+ // skipcq: JS-0440
22+ dangerouslySetInnerHTML = { { __html : `(${ noFOUCScript . toString ( ) } )('${ k } ')` } }
23+ nonce = { n }
24+ />
25+ ) ,
26+ ( ) => false ,
27+ ) ;
5128
5229export interface CoreProps {
5330 /** themeTransition: force apply CSS transition property to all the elements during theme switching. E.g., `all .3s`
0 commit comments