@@ -2,45 +2,49 @@ import { createSignal, onMount } from "solid-js";
22
33export default function ThemeToggle ( ) {
44 const [ isDarkMode , setIsDarkMode ] = createSignal ( false ) ;
5-
5+
66 // Initialize theme based on localStorage or system preference
77 onMount ( ( ) => {
8- if ( typeof localStorage !== ' undefined' ) {
9- const savedTheme = localStorage . getItem ( ' theme' ) ;
10- if ( savedTheme === ' dark' ) {
8+ if ( typeof localStorage !== " undefined" ) {
9+ const savedTheme = localStorage . getItem ( " theme" ) ;
10+ if ( savedTheme === " dark" ) {
1111 setIsDarkMode ( true ) ;
12- } else if ( savedTheme === ' light' ) {
12+ } else if ( savedTheme === " light" ) {
1313 setIsDarkMode ( false ) ;
1414 } else {
1515 // Check system preference if no saved preference
16- const prefersDark = window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ;
16+ const prefersDark = window . matchMedia (
17+ "(prefers-color-scheme: dark)" ,
18+ ) . matches ;
1719 setIsDarkMode ( prefersDark ) ;
18- localStorage . setItem ( ' theme' , prefersDark ? ' dark' : ' light' ) ;
20+ localStorage . setItem ( " theme" , prefersDark ? " dark" : " light" ) ;
1921 }
2022 }
2123 } ) ;
22-
24+
2325 // Handle theme toggle
2426 const toggleTheme = ( ) => {
2527 const newTheme = ! isDarkMode ( ) ;
2628 setIsDarkMode ( newTheme ) ;
27-
29+
2830 // Update theme in localStorage and document
29- const themeName = newTheme ? ' dark' : ' light' ;
30- if ( typeof localStorage !== ' undefined' ) {
31- localStorage . setItem ( ' theme' , themeName ) ;
31+ const themeName = newTheme ? " dark" : " light" ;
32+ if ( typeof localStorage !== " undefined" ) {
33+ localStorage . setItem ( " theme" , themeName ) ;
3234 }
33- document . documentElement . setAttribute ( ' data-theme' , themeName ) ;
35+ document . documentElement . setAttribute ( " data-theme" , themeName ) ;
3436 } ;
35-
37+
3638 return (
3739 < label class = "swap swap-rotate btn btn-ghost btn-circle" >
38- < input
39- type = "checkbox"
40- class = "theme-controller"
41- checked = { isDarkMode ( ) }
42- onChange = { toggleTheme }
40+ < input
41+ type = "checkbox"
42+ class = "theme-controller"
43+ checked = { isDarkMode ( ) }
44+ onChange = { toggleTheme }
4345 />
46+ { /* 屏幕阅读器专用文本 */ }
47+ < span class = "sr-only" > 切换主题模式</ span >
4448 { /* Sun icon */ }
4549 < svg
4650 class = "swap-on fill-current w-5 h-5"
@@ -59,4 +63,4 @@ export default function ThemeToggle() {
5963 </ svg >
6064 </ label >
6165 ) ;
62- }
66+ }
0 commit comments