@@ -10,6 +10,9 @@ function toggleTheme() {
1010 setTheme ( "dark" ) ;
1111 updateItemToggleTheme ( ) ;
1212 } else if ( localStorage . getItem ( "theme-storage" ) === "dark" ) {
13+ setTheme ( "auto" ) ;
14+ updateItemToggleTheme ( ) ;
15+ } else {
1316 setTheme ( "light" ) ;
1417 updateItemToggleTheme ( ) ;
1518 }
@@ -20,38 +23,57 @@ function updateItemToggleTheme() {
2023
2124 const darkModeStyle = document . getElementById ( "darkModeStyle" ) ;
2225 if ( darkModeStyle ) {
23- darkModeStyle . disabled = ( mode === "light" ) ;
26+ if ( mode === "dark" || ( mode === "auto" && getSystemPrefersDark ( ) ) ) {
27+ darkModeStyle . disabled = false ;
28+ } else {
29+ darkModeStyle . disabled = true ;
30+ }
2431 }
2532
2633 const sunIcon = document . getElementById ( "sun-icon" ) ;
2734 const moonIcon = document . getElementById ( "moon-icon" ) ;
28- if ( sunIcon && moonIcon ) {
29- sunIcon . style . display = ( mode === "dark" ) ? "block" : "none" ;
30- moonIcon . style . display = ( mode === "light" ) ? "block" : "none" ;
35+ const autoIcon = document . getElementById ( "auto-icon" ) ;
36+ if ( sunIcon && moonIcon && autoIcon ) {
37+ sunIcon . style . display = ( mode === "light" ) ? "block" : "none" ;
38+ moonIcon . style . display = ( mode === "dark" ) ? "block" : "none" ;
39+ autoIcon . style . display = ( mode === "auto" ) ? "block" : "none" ;
40+
41+ if ( mode === "auto" ) {
42+ autoIcon . style . filter = getSystemPrefersDark ( ) ? "invert(1)" : "invert(0)" ;
43+ }
3144 }
3245
3346 let htmlElement = document . querySelector ( "html" ) ;
34- if ( mode === "dark" ) {
47+ if ( mode === "dark" || ( mode === "auto" && getSystemPrefersDark ( ) ) ) {
3548 htmlElement . classList . remove ( "light" )
3649 htmlElement . classList . add ( "dark" )
37- } else if ( mode === "light" ) {
50+ } else {
3851 htmlElement . classList . remove ( "dark" )
3952 htmlElement . classList . add ( "light" )
4053 }
4154}
4255
56+ function getSystemPrefersDark ( ) {
57+ return window . matchMedia && window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ;
58+ }
59+
4360function getSavedTheme ( ) {
4461 let currentTheme = localStorage . getItem ( "theme-storage" ) ;
4562 if ( ! currentTheme ) {
46- if ( window . matchMedia && window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ) {
47- currentTheme = "dark" ;
48- } else {
49- currentTheme = "light" ;
50- }
63+ currentTheme = getSystemPrefersDark ( ) ? "dark" : "light" ;
5164 }
5265
5366 return currentTheme ;
5467}
5568
5669// Update the toggle theme on page load
5770updateItemToggleTheme ( ) ;
71+
72+ // Listen for system theme changes in auto mode
73+ if ( window . matchMedia ) {
74+ window . matchMedia ( '(prefers-color-scheme: dark)' ) . addEventListener ( 'change' , function ( e ) {
75+ if ( getSavedTheme ( ) === "auto" ) {
76+ updateItemToggleTheme ( ) ;
77+ }
78+ } ) ;
79+ }
0 commit comments