@@ -34,7 +34,11 @@ export type UseIsDark = () => {
3434const $isAfterFirstEffect = createStatefulObservable ( ( ) => false ) ;
3535
3636export function getIsDarkClientSide ( ) {
37- return $isAfterFirstEffect . current ? $clientSideIsDark . current : ssrWasPerformedWithIsDark ;
37+ if ( $isAfterFirstEffect . current ) {
38+ return $clientSideIsDark . current ;
39+ }
40+ assert ( ssrWasPerformedWithIsDark !== undefined ) ;
41+ return ssrWasPerformedWithIsDark ;
3842}
3943
4044function getSystemColorScheme ( ) {
@@ -56,7 +60,7 @@ export const useIsDarkClientSide: UseIsDark = () => {
5660
5761 const isDark =
5862 isFirstRenderingOfTheComponent || ! $isAfterFirstEffect . current
59- ? ssrWasPerformedWithIsDark
63+ ? ( assert ( ssrWasPerformedWithIsDark !== undefined ) , ssrWasPerformedWithIsDark )
6064 : $clientSideIsDark . current ;
6165
6266 const setIsDark = useConstCallback < ReturnType < UseIsDark > [ "setIsDark" ] > (
@@ -97,7 +101,7 @@ export const useIsDarkClientSide: UseIsDark = () => {
97101 } ;
98102} ;
99103
100- let ssrWasPerformedWithIsDark : boolean ;
104+ let ssrWasPerformedWithIsDark : boolean | undefined = undefined ;
101105
102106function getCurrentIsDarkFromHtmlAttribute ( ) : boolean | undefined {
103107 const colorSchemeFromHtmlAttribute = document . documentElement . getAttribute ( data_fr_theme ) ;
@@ -114,6 +118,11 @@ function getCurrentIsDarkFromHtmlAttribute(): boolean | undefined {
114118 assert ( false , `Unrecognized ${ data_fr_theme } attribute value: ${ colorSchemeFromHtmlAttribute } ` ) ;
115119}
116120
121+ // Warning: There is a ton of implicit coupling here,
122+ // scripts/build/early-color-scheme.js
123+ // and
124+ // src/useIsDark/scriptToRunAsap.ts
125+ // need to be updated if anything is changed here.
117126export function startClientSideIsDarkLogic ( params : {
118127 registerEffectAction : ( action : ( ) => void ) => void ;
119128 doPersistDarkModePreferenceWithCookie : boolean ;
0 commit comments