1+ 'use client' ;
2+
3+ import {
4+ DropdownMenuGroup ,
5+ DropdownMenuPortal ,
6+ DropdownMenuRadioGroup ,
7+ DropdownMenuRadioItem ,
8+ DropdownMenuSub ,
9+ DropdownMenuSubContent ,
10+ DropdownMenuSubTrigger
11+ } from "@/components/ui/dropdown-menu"
12+ import { useKeymapType } from "@/hooks/useKeymapType"
13+ import { KeymapType } from "@/lib/types"
14+ import {
15+ CodeIcon ,
16+ Laptop ,
17+ Moon ,
18+ Sun
19+ } from "lucide-react"
20+ import { useTheme } from "next-themes"
21+ import { useMemo } from "react"
22+
23+ export const AppearanceDropdownMenuGroup = ( ) => {
24+ const { theme : _theme , setTheme } = useTheme ( ) ;
25+ const [ keymapType , setKeymapType ] = useKeymapType ( ) ;
26+
27+ const theme = useMemo ( ( ) => {
28+ return _theme ?? "light" ;
29+ } , [ _theme ] ) ;
30+
31+ const ThemeIcon = useMemo ( ( ) => {
32+ switch ( theme ) {
33+ case "light" :
34+ return < Sun className = "h-4 w-4 mr-2" /> ;
35+ case "dark" :
36+ return < Moon className = "h-4 w-4 mr-2" /> ;
37+ case "system" :
38+ return < Laptop className = "h-4 w-4 mr-2" /> ;
39+ default :
40+ return < Laptop className = "h-4 w-4 mr-2" /> ;
41+ }
42+ } , [ theme ] ) ;
43+
44+ return (
45+ < DropdownMenuGroup >
46+ < DropdownMenuSub >
47+ < DropdownMenuSubTrigger >
48+ { ThemeIcon }
49+ < span > Theme</ span >
50+ </ DropdownMenuSubTrigger >
51+ < DropdownMenuPortal >
52+ < DropdownMenuSubContent >
53+ < DropdownMenuRadioGroup value = { theme } onValueChange = { setTheme } >
54+ < DropdownMenuRadioItem value = "light" >
55+ Light
56+ </ DropdownMenuRadioItem >
57+ < DropdownMenuRadioItem value = "dark" >
58+ Dark
59+ </ DropdownMenuRadioItem >
60+ < DropdownMenuRadioItem value = "system" >
61+ System
62+ </ DropdownMenuRadioItem >
63+ </ DropdownMenuRadioGroup >
64+ </ DropdownMenuSubContent >
65+ </ DropdownMenuPortal >
66+ </ DropdownMenuSub >
67+ < DropdownMenuSub >
68+ < DropdownMenuSubTrigger >
69+ < CodeIcon className = "h-4 w-4 mr-2" />
70+ < span > Code navigation</ span >
71+ </ DropdownMenuSubTrigger >
72+ < DropdownMenuPortal >
73+ < DropdownMenuSubContent >
74+ < DropdownMenuRadioGroup value = { keymapType } onValueChange = { ( value ) => setKeymapType ( value as KeymapType ) } >
75+ < DropdownMenuRadioItem value = "default" >
76+ Default
77+ </ DropdownMenuRadioItem >
78+ < DropdownMenuRadioItem value = "vim" >
79+ Vim
80+ </ DropdownMenuRadioItem >
81+ </ DropdownMenuRadioGroup >
82+ </ DropdownMenuSubContent >
83+ </ DropdownMenuPortal >
84+ </ DropdownMenuSub >
85+ </ DropdownMenuGroup >
86+ )
87+ }
0 commit comments