Spaces:
Sleeping
Sleeping
| "use client"; | |
| import { useEffect, useState } from "react"; | |
| import { Moon, Sun } from "lucide-react"; | |
| import { useTheme } from "next-themes"; | |
| import { Button } from "@/components/ui/button"; | |
| export function ModeToggle() { | |
| const { resolvedTheme, setTheme } = useTheme(); | |
| const [mounted, setMounted] = useState(false); | |
| useEffect(() => setMounted(true), []); | |
| // Avoid a hydration mismatch: render a stable placeholder until mounted. | |
| const isDark = mounted ? resolvedTheme === "dark" : false; | |
| return ( | |
| <Button | |
| variant="ghost" | |
| size="icon" | |
| aria-label="Toggle theme" | |
| title={mounted ? `Switch to ${isDark ? "light" : "dark"} mode` : "Toggle theme"} | |
| onClick={() => setTheme(isDark ? "light" : "dark")} | |
| > | |
| <Sun className="size-4 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" /> | |
| <Moon className="absolute size-4 scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" /> | |
| </Button> | |
| ); | |
| } | |