import { createContext, useState, useEffect, useCallback } from 'react'; import type { ReactNode } from 'react'; type Theme = 'light' | 'dark'; interface ThemeContextValue { theme: Theme; toggleTheme: () => void; } export const ThemeContext = createContext(null); interface ThemeProviderProps { children: ReactNode; } const getInitialTheme = (): Theme => { const stored = localStorage.getItem('theme'); if (stored === 'light' || stored === 'dark') { return stored; } return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; }; const ThemeProvider = ({ children }: ThemeProviderProps) => { const [theme, setTheme] = useState(getInitialTheme); useEffect(() => { if (theme === 'dark') { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } localStorage.setItem('theme', theme); }, [theme]); const toggleTheme = useCallback(() => { setTheme((prev) => (prev === 'light' ? 'dark' : 'light')); }, []); return ( {children} ); }; export default ThemeProvider;