@@ -9,11 +9,17 @@ import {
99 DropdownMenuItem ,
1010 DropdownMenuTrigger ,
1111} from '@/components/ui/dropdown-menu' ;
12- import { Moon , Sun , Monitor } from 'lucide-react' ;
12+ import { Check , Monitor , Moon , Sun } from 'lucide-react' ;
1313
1414export function ThemeToggle ( ) {
1515 const { setTheme, theme } = useTheme ( ) ;
1616
17+ const themes = [
18+ { name : 'light' , label : 'Light' , icon : < Sun className = "mr-2 h-4 w-4" /> } ,
19+ { name : 'dark' , label : 'Dark' , icon : < Moon className = "mr-2 h-4 w-4" /> } ,
20+ { name : 'system' , label : 'System' , icon : < Monitor className = "mr-2 h-4 w-4" /> } ,
21+ ] ;
22+
1723 return (
1824 < DropdownMenu >
1925 < DropdownMenuTrigger asChild >
@@ -24,18 +30,35 @@ export function ThemeToggle() {
2430 </ Button >
2531 </ DropdownMenuTrigger >
2632 < DropdownMenuContent align = "end" >
27- < DropdownMenuItem onClick = { ( ) => setTheme ( 'light' ) } >
28- < Sun className = "mr-2 h-4 w-4" />
29- < span > Light</ span >
30- </ DropdownMenuItem >
31- < DropdownMenuItem onClick = { ( ) => setTheme ( 'dark' ) } >
32- < Moon className = "mr-2 h-4 w-4" />
33- < span > Dark</ span >
34- </ DropdownMenuItem >
35- < DropdownMenuItem onClick = { ( ) => setTheme ( 'system' ) } >
36- < Monitor className = "mr-2 h-4 w-4" />
37- < span > System</ span >
38- </ DropdownMenuItem >
33+ { themes . map ( ( { name, label, icon } ) => (
34+ < DropdownMenuItem
35+ key = { name }
36+ className = "cursor-pointer justify-between"
37+ onClick = { ( ) => setTheme ( name ) }
38+ >
39+ < div className = "flex items-center" >
40+ { icon }
41+ < span > { label } </ span >
42+ </ div >
43+ < div > { theme === name && < Check className = "h-4 w-4" /> } </ div >
44+ </ DropdownMenuItem >
45+ ) ) }
46+ { /* Uncomment the following lines if you want to allow users to select themes manually */ }
47+ { /*<DropdownMenuItem className="cursor-pointer" onClick={() => setTheme('light')}>*/ }
48+ { /* <Sun className="mr-2 h-4 w-4" />*/ }
49+ { /* <span>Light</span>*/ }
50+ { /* {theme === 'light' && <Check />}*/ }
51+ { /*</DropdownMenuItem>*/ }
52+ { /*<DropdownMenuItem className="cursor-pointer" onClick={() => setTheme('dark')}>*/ }
53+ { /* <Moon className="mr-2 h-4 w-4" />*/ }
54+ { /* <span>Dark</span>*/ }
55+ { /* {theme === 'dark' && <Check />}*/ }
56+ { /*</DropdownMenuItem>*/ }
57+ { /*<DropdownMenuItem className="cursor-pointer" onClick={() => setTheme('system')}>*/ }
58+ { /* <Monitor className="mr-2 h-4 w-4" />*/ }
59+ { /* <span>System</span>*/ }
60+ { /* {theme === 'system' && <Check />}*/ }
61+ { /*</DropdownMenuItem>*/ }
3962 </ DropdownMenuContent >
4063 </ DropdownMenu >
4164 ) ;
0 commit comments