ludocomito's picture
init
d328b13
raw
history blame
961 Bytes
"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>
)
}