mirror of
https://github.com/TheRealOwenRees/echecsfrance.git
synced 2026-07-23 04:26:57 +00:00
96fda01929
* default to system preferred theme * theme svg in footer * accounted for undefined window
31 lines
800 B
TypeScript
31 lines
800 B
TypeScript
import { Dispatch, SetStateAction, useEffect, useState } from "react";
|
|
|
|
function useDarkMode(): [string, Dispatch<SetStateAction<string>>] {
|
|
const prefersDarkMode =
|
|
typeof window !== "undefined" &&
|
|
window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
|
|
const [theme, setTheme] = useState(
|
|
typeof window !== "undefined"
|
|
? localStorage.theme || (prefersDarkMode ? "dark" : "light")
|
|
: "dark"
|
|
);
|
|
|
|
const colorTheme = theme === "dark" ? "light" : "dark";
|
|
|
|
useEffect(() => {
|
|
const root = window.document.documentElement;
|
|
|
|
root.classList.remove(colorTheme);
|
|
root.classList.add(theme);
|
|
|
|
if (typeof window !== "undefined") {
|
|
localStorage.setItem("theme", theme);
|
|
}
|
|
}, [theme]);
|
|
|
|
return [colorTheme, setTheme];
|
|
}
|
|
|
|
export default useDarkMode;
|