Spaces:
Running
Running
| import { Moon, Sun } from "lucide-react"; | |
| import { Button } from "@/components/ui/button"; | |
| import { useEffect, useState } from "react"; | |
| export function ThemeToggle() { | |
| const [theme, setTheme] = useState<"light" | "dark">("light"); | |
| useEffect(() => { | |
| const stored = localStorage.getItem("theme"); | |
| if (stored === "dark" || (!stored && window.matchMedia("(prefers-color-scheme: dark)").matches)) { | |
| setTheme("dark"); | |
| document.documentElement.classList.add("dark"); | |
| } | |
| }, []); | |
| const toggleTheme = () => { | |
| const newTheme = theme === "light" ? "dark" : "light"; | |
| setTheme(newTheme); | |
| localStorage.setItem("theme", newTheme); | |
| document.documentElement.classList.toggle("dark"); | |
| }; | |
| return ( | |
| <Button | |
| size="icon" | |
| variant="ghost" | |
| onClick={toggleTheme} | |
| data-testid="button-theme-toggle" | |
| > | |
| {theme === "light" ? ( | |
| <Moon className="h-4 w-4" /> | |
| ) : ( | |
| <Sun className="h-4 w-4" /> | |
| )} | |
| </Button> | |
| ); | |
| } | |