-
Notifications
You must be signed in to change notification settings - Fork 164
/
Copy pathThemeSelector.tsx
62 lines (55 loc) · 1.38 KB
/
ThemeSelector.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import { useRegisterActions, Action } from 'kbar'
import { useTheme } from 'next-themes'
import { Icon, Button } from 'components/ui'
const ThemeSelector = () => {
const { theme, setTheme, resolvedTheme } = useTheme()
const actions: Action[] = [
{
id: 'theme',
name: 'Select theme…',
shortcut: ['t'],
keywords: 'theme appearance',
section: 'Preferences',
},
{
id: 'theme-light',
name: 'Light',
shortcut: [],
keywords: 'light',
section: '',
perform: () => setTheme('light'),
parent: 'theme',
},
{
id: 'theme-dark',
name: 'Dark',
shortcut: [],
keywords: 'dark',
section: '',
perform: () => setTheme('dark'),
parent: 'theme',
},
{
id: 'theme-system',
name: 'System',
shortcut: [],
keywords: 'system',
section: '',
perform: () => setTheme('system'),
parent: 'theme',
},
]
useRegisterActions(actions, [actions])
const handleThemChange = () => {
setTheme(theme === 'dark' ? 'light' : 'dark')
}
return (
<Button transparent onClick={handleThemChange}>
<Icon
name={resolvedTheme === 'dark' ? 'contrast-2-fill' : 'contrast-2-line'}
className="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white"
/>
</Button>
)
}
export default ThemeSelector