dashboard / frontend /src /ThemeToggle.tsx
timchen0618
Deploy research dashboard
b03f016
import { useEffect, useState } from "react";
export function useTheme() {
const [dark, setDark] = useState(() => {
if (typeof window === "undefined") return true;
const stored = localStorage.getItem("raca-theme");
return stored ? stored === "dark" : true; // dark by default
});
useEffect(() => {
const root = document.documentElement;
if (dark) {
root.classList.add("dark");
root.classList.remove("light");
} else {
root.classList.add("light");
root.classList.remove("dark");
}
localStorage.setItem("raca-theme", dark ? "dark" : "light");
}, [dark]);
return { dark, toggle: () => setDark((d) => !d) };
}
export default function ThemeToggle({ dark, toggle }: { dark: boolean; toggle: () => void }) {
return (
<button
onClick={toggle}
className="px-2 py-1 text-xs rounded border border-gray-600 dark:border-gray-600 text-gray-500 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 transition-colors"
title={dark ? "Switch to light mode" : "Switch to dark mode"}
>
{dark ? "โ˜€๏ธ" : "๐ŸŒ™"}
</button>
);
}