"use client"; import { useState, useRef, useEffect } from "react"; import { useTheme } from "@/components/theme-provider"; import { themes } from "@/lib/themes"; export function ThemeSwitcher() { const { theme, setTheme } = useTheme(); const [open, setOpen] = useState(false); const ref = useRef(null); // Close dropdown on outside click useEffect(() => { function handleClick(e: MouseEvent) { if (ref.current && !ref.current.contains(e.target as Node)) { setOpen(false); } } if (open) { document.addEventListener("mousedown", handleClick); return () => document.removeEventListener("mousedown", handleClick); } }, [open]); // Close on Escape useEffect(() => { function handleKey(e: KeyboardEvent) { if (e.key === "Escape") setOpen(false); } if (open) { document.addEventListener("keydown", handleKey); return () => document.removeEventListener("keydown", handleKey); } }, [open]); return (
{open && (
Themes
{themes.map((t) => ( ))}
)}
); }