Skip to content

Commit bd30be4

Browse files
authored
feat: upgrade theme button to theme dropdown (#33)
Theme button is upgraded to theme dropdown to include system as an option. Resolves #29
1 parent 3718cc4 commit bd30be4

File tree

1 file changed

+43
-10
lines changed

1 file changed

+43
-10
lines changed

src/components/theme-switch.tsx

+43-10
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1-
import { IconMoon, IconSun } from '@tabler/icons-react'
1+
import { useEffect } from 'react'
2+
import { IconCheck, IconMoon, IconSun } from '@tabler/icons-react'
3+
import { cn } from '@/lib/utils'
4+
import {
5+
DropdownMenu,
6+
DropdownMenuContent,
7+
DropdownMenuItem,
8+
DropdownMenuTrigger,
9+
} from '@/components/ui/dropdown-menu'
210
import { useTheme } from './theme-provider'
311
import { Button } from './custom/button'
4-
import { useEffect } from 'react'
512

613
export default function ThemeSwitch() {
714
const { theme, setTheme } = useTheme()
@@ -14,14 +21,40 @@ export default function ThemeSwitch() {
1421
metaThemeColor && metaThemeColor.setAttribute('content', themeColor)
1522
}, [theme])
1623

24+
console.log(theme)
25+
1726
return (
18-
<Button
19-
size='icon'
20-
variant='ghost'
21-
className='rounded-full'
22-
onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}
23-
>
24-
{theme === 'light' ? <IconMoon size={20} /> : <IconSun size={20} />}
25-
</Button>
27+
<DropdownMenu>
28+
<DropdownMenuTrigger asChild>
29+
<Button variant='ghost' size='icon' className='scale-95 rounded-full'>
30+
<IconSun className='size-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0' />
31+
<IconMoon className='absolute size-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100' />
32+
<span className='sr-only'>Toggle theme</span>
33+
</Button>
34+
</DropdownMenuTrigger>
35+
<DropdownMenuContent align='end'>
36+
<DropdownMenuItem onClick={() => setTheme('light')}>
37+
Light{' '}
38+
<IconCheck
39+
size={14}
40+
className={cn('ml-auto', theme !== 'light' && 'hidden')}
41+
/>
42+
</DropdownMenuItem>
43+
<DropdownMenuItem onClick={() => setTheme('dark')}>
44+
Dark
45+
<IconCheck
46+
size={14}
47+
className={cn('ml-auto', theme !== 'dark' && 'hidden')}
48+
/>
49+
</DropdownMenuItem>
50+
<DropdownMenuItem onClick={() => setTheme('system')}>
51+
System
52+
<IconCheck
53+
size={14}
54+
className={cn('ml-auto', theme !== 'system' && 'hidden')}
55+
/>
56+
</DropdownMenuItem>
57+
</DropdownMenuContent>
58+
</DropdownMenu>
2659
)
2760
}

0 commit comments

Comments
 (0)