import { createContext, useState, useEffect, useMemo } from "react"; const getInitialTheme = () => { if (typeof window !== "undefined" && window.localStorage) { const storedPrefs = window.localStorage.getItem("theme-mode"); if (typeof storedPrefs === "string") { return storedPrefs; } const userMedia = window.matchMedia("(prefers-color-scheme: dark)"); if (userMedia.matches) { return "dark"; } } return "dark"; // dark as the default mode }; export const ThemeContext = createContext(); export function ThemeProvider({ initialTheme, children }) { const [theme, setTheme] = useState(getInitialTheme); const rawSetTheme = (rawTheme) => { const root = window.document.getElementById("page_wrapper"); const isDark = rawTheme === "dark"; root.classList.remove(isDark ? "light" : "dark"); root.classList.add(rawTheme); localStorage.setItem("theme-mode", rawTheme); }; if (initialTheme) { rawSetTheme(initialTheme); } useEffect(() => { rawSetTheme(theme); }, [theme]); const value = useMemo(() => ({ theme, setTheme }), [theme]); return {children}; }