| "use client" | |
| import { useEffect, useState } from "react" | |
| import { useTheme } from "next-themes" | |
| import { Sun, Moon } from "lucide-react" | |
| import { Button } from "@/components/ui/button" | |
| export function ThemeToggle() { | |
| const { theme, setTheme } = useTheme() | |
| const [mounted, setMounted] = useState(false) | |
| useEffect(() => setMounted(true), []) | |
| const cycleTheme = () => { | |
| const next = theme === "light" ? "dark" : theme === "dark" ? "system" : "light" | |
| setTheme(next) | |
| } | |
| if (!mounted) return null | |
| return ( | |
| <Button | |
| variant="ghost" | |
| size="icon" | |
| className="relative" | |
| onClick={cycleTheme} | |
| aria-label={`Toggle theme (current: ${theme ?? "system"})`} | |
| > | |
| <Sun className="h-5 w-5 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" /> | |
| <Moon className="absolute h-5 w-5 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" /> | |
| </Button> | |
| ) | |
| } | |