1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35"use client"
import { Moon, Sun } from "lucide-react"
import { useEffect, useState } from "react"
export function ThemeToggle() {
const [theme, setTheme] = useState<"light" | "dark">("light")
useEffect(() => {
const savedTheme = localStorage.getItem("theme") as "light" | "dark" | null
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches
const initialTheme = savedTheme || (prefersDark ? "dark" : "light")
setTheme(initialTheme)
document.documentElement.classList.toggle("dark", initialTheme === "dark")
}, [])
const toggleTheme = () => {
const newTheme = theme === "light" ? "dark" : "light"
setTheme(newTheme)
localStorage.setItem("theme", newTheme)
document.documentElement.classList.toggle("dark", newTheme === "dark")
}
return (
<button
onClick={toggleTheme}
className="rounded-md p-2 hover:bg-accent transition-colors"
aria-label="Toggle theme"
>
{theme === "light" ? <Moon size={20} /> : <Sun size={20} />}
</button>
)
}