| import { useState, useEffect } from "react"; | |
| export type Theme = "light" | "dark"; | |
| export function useTheme(): Theme { | |
| const [theme, setTheme] = useState<Theme>(() => { | |
| if (typeof window === "undefined") return "light"; | |
| return window.matchMedia("(prefers-color-scheme: dark)").matches | |
| ? "dark" | |
| : "light"; | |
| }); | |
| useEffect(() => { | |
| const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); | |
| const handleChange = (e: MediaQueryListEvent) => { | |
| setTheme(e.matches ? "dark" : "light"); | |
| }; | |
| mediaQuery.addEventListener("change", handleChange); | |
| return () => mediaQuery.removeEventListener("change", handleChange); | |
| }, []); | |
| return theme; | |
| } | |