1+ < div class ="relative inline-block ">
2+ < div class ="flex items-center gap-1 rounded-full border border-gray-200 bg-white p-1 shadow-sm dark:border-gray-800 dark:bg-gray-900 ">
3+ < button data-theme-btn ="light " onclick ="__setTheme('light') " class ="inline-flex size-8 items-center justify-center rounded-full text-gray-500 transition-all hover:bg-gray-100 hover:text-gray-900 focus:outline-none dark:hover:bg-gray-800 dark:hover:text-gray-100 " title ="Light Mode ">
4+ < svg xmlns ="http://www.w3.org/2000/svg " fill ="none " viewBox ="0 0 24 24 " stroke-width ="1.5 " stroke ="currentColor " class ="size-5 "> < path stroke-linecap ="round " stroke-linejoin ="round " d ="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z " /> </ svg >
5+ </ button >
6+ < button data-theme-btn ="dark " onclick ="__setTheme('dark') " class ="inline-flex size-8 items-center justify-center rounded-full text-gray-500 transition-all hover:bg-gray-100 hover:text-gray-900 focus:outline-none dark:hover:bg-gray-800 dark:hover:text-gray-100 " title ="Dark Mode ">
7+ < svg xmlns ="http://www.w3.org/2000/svg " fill ="none " viewBox ="0 0 24 24 " stroke-width ="1.5 " stroke ="currentColor " class ="size-5 "> < path stroke-linecap ="round " stroke-linejoin ="round " d ="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z " /> </ svg >
8+ </ button >
9+ < button data-theme-btn ="system " onclick ="__setTheme('system') " class ="inline-flex size-8 items-center justify-center rounded-full text-gray-500 transition-all hover:bg-gray-100 hover:text-gray-900 focus:outline-none dark:hover:bg-gray-800 dark:hover:text-gray-100 " title ="System Preference ">
10+ < svg xmlns ="http://www.w3.org/2000/svg " fill ="none " viewBox ="0 0 24 24 " stroke-width ="1.5 " stroke ="currentColor " class ="size-5 "> < path stroke-linecap ="round " stroke-linejoin ="round " d ="M9 17.25v1.007a3 3 0 0 1-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0 1 15 18.257V17.25m6-12V15a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 15V5.25m18 0A2.25 2.25 0 0 0 18.75 3H5.25A2.25 2.25 0 0 0 3 5.25m18 0V12a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 12V5.25 " /> </ svg >
11+ </ button >
12+ </ div >
13+ < script >
14+ ( function ( ) {
15+ const applyTheme = ( m ) => {
16+ const root = document . documentElement ;
17+ const isD = m === "dark" || ( m === "system" && window . matchMedia ( "(prefers-color-scheme: dark)" ) . matches ) ;
18+ root . classList . toggle ( "dark" , isD ) ;
19+ document . querySelectorAll ( "[data-theme-btn]" ) . forEach ( ( b ) => {
20+ const act = b . dataset . themeBtn === m ;
21+ b . classList . toggle ( "bg-gray-100" , act ) ; b . classList . toggle ( "dark:bg-gray-800" , act ) ;
22+ b . classList . toggle ( "text-primary-600" , act ) ; b . classList . toggle ( "dark:text-primary-400" , act ) ;
23+ } ) ;
24+ } ;
25+ window . __setTheme = ( m ) => { localStorage . setItem ( "theme" , m ) ; applyTheme ( m ) ; } ;
26+ applyTheme ( localStorage . getItem ( "theme" ) || "system" ) ;
27+ } ) ( ) ;
28+ </ script >
29+ </ div >
0 commit comments