aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/src/components/theme-toggle.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/components/theme-toggle.tsx')
-rw-r--r--frontend/src/components/theme-toggle.tsx50
1 files changed, 50 insertions, 0 deletions
diff --git a/frontend/src/components/theme-toggle.tsx b/frontend/src/components/theme-toggle.tsx
new file mode 100644
index 0000000..17df44e
--- /dev/null
+++ b/frontend/src/components/theme-toggle.tsx
@@ -0,0 +1,50 @@
+"use client"
+
+import * as React from "react"
+import { Moon, Sun, Monitor } from "lucide-react"
+import { useTheme } from "next-themes"
+
+import { Button } from "@/components/ui/button"
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu"
+
+export function ThemeToggle() {
+ const { setTheme, theme } = useTheme()
+
+ return (
+ <DropdownMenu>
+ <DropdownMenuTrigger asChild>
+ <Button
+ variant="ghost"
+ size="icon"
+ className="nav-button-transparent backdrop-blur-sm"
+ >
+ <Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
+ <Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
+ <span className="sr-only">Toggle theme</span>
+ </Button>
+ </DropdownMenuTrigger>
+ <DropdownMenuContent align="end" className="nav-dropdown-transparent">
+ <DropdownMenuItem onClick={() => setTheme("light")} className="flex items-center gap-2 nav-dropdown-item">
+ <Sun className="h-4 w-4" />
+ Light
+ {theme === "light" && <span className="ml-auto text-xs">✓</span>}
+ </DropdownMenuItem>
+ <DropdownMenuItem onClick={() => setTheme("dark")} className="flex items-center gap-2 nav-dropdown-item">
+ <Moon className="h-4 w-4" />
+ Dark
+ {theme === "dark" && <span className="ml-auto text-xs">✓</span>}
+ </DropdownMenuItem>
+ <DropdownMenuItem onClick={() => setTheme("system")} className="flex items-center gap-2 nav-dropdown-item">
+ <Monitor className="h-4 w-4" />
+ System
+ {theme === "system" && <span className="ml-auto text-xs">✓</span>}
+ </DropdownMenuItem>
+ </DropdownMenuContent>
+ </DropdownMenu>
+ )
+} \ No newline at end of file