import { useEffect, useState } from "react"; export enum Theme { "dark" = "dark", "light" = "light", } export const useTheme = () => { const [theme, setTheme] = useState(Theme.light); const toggle = () => { const nextTheme = theme === "dark" ? Theme.light : Theme.dark; setTheme(nextTheme); }; useEffect(() => { const body = document.body; if (theme === "dark") { body.setAttribute("theme-mode", "dark"); return; } if (theme === "light") { body.setAttribute("theme-mode", "light"); return; } }, [theme]); useEffect(() => { const mql = window.matchMedia("(prefers-color-scheme: dark)"); function matchMode(e) { if (e.matches) { setTheme(Theme.dark); } else { setTheme(Theme.light); } } matchMode(mql); mql.addEventListener("change", matchMode); }, []); return { theme, toggle, }; };