@@ -9,41 +9,31 @@ const DarkModeToggle = () => {
99 const [ isHovered , setIsHovered ] = useState ( false ) ;
1010
1111 useEffect ( ( ) => {
12- // Sync with localStorage and system preference on mount
1312 const theme = localStorage . getItem ( 'theme' ) ;
1413 const prefersDark = window . matchMedia (
1514 '(prefers-color-scheme: dark)' ,
1615 ) . matches ;
1716
18- if ( theme === 'dark' ) {
19- document . documentElement . classList . add ( 'dark' ) ;
20- setIsDarkMode ( true ) ;
21- } else if ( theme === 'light' ) {
22- document . documentElement . classList . remove ( 'dark' ) ;
23- setIsDarkMode ( false ) ;
24- } else {
25- // If no preference saved, respect system preference
26- if ( prefersDark ) {
17+ setIsDarkMode ( ( ) => {
18+ const next = theme === 'dark' || ( ! theme && prefersDark ) ;
19+
20+ if ( next ) {
2721 document . documentElement . classList . add ( 'dark' ) ;
28- setIsDarkMode ( true ) ;
2922 } else {
3023 document . documentElement . classList . remove ( 'dark' ) ;
31- setIsDarkMode ( false ) ;
3224 }
33- }
3425
35- // Listen for system theme changes (only if no manual preference is set)
26+ return next ;
27+ } ) ;
28+
3629 const mediaQuery = window . matchMedia ( '(prefers-color-scheme: dark)' ) ;
3730 const handleThemeChange = ( e : MediaQueryListEvent ) => {
38- // Only update if user hasn't set a manual preference
3931 if ( ! localStorage . getItem ( 'theme' ) ) {
40- if ( e . matches ) {
41- document . documentElement . classList . add ( 'dark' ) ;
42- setIsDarkMode ( true ) ;
43- } else {
44- document . documentElement . classList . remove ( 'dark' ) ;
45- setIsDarkMode ( false ) ;
46- }
32+ setIsDarkMode ( ( ) => {
33+ const next = e . matches ;
34+ document . documentElement . classList . toggle ( 'dark' , next ) ;
35+ return next ;
36+ } ) ;
4737 }
4838 } ;
4939
0 commit comments