'use client'; import { createContext, useContext, useEffect, useState, type ReactNode } from 'react'; type Theme = 'light' | 'dark'; interface ThemeContextType { theme: Theme; toggleTheme: () => void; } const ThemeContext = createContext({ theme: 'light', toggleTheme: () => {}, }); export function useTheme() { return useContext(ThemeContext); } export function ThemeProvider({ children }: { children: ReactNode }) { const [theme, setTheme] = useState('light'); const [mounted, setMounted] = useState(false); useEffect(() => { const rafId = window.requestAnimationFrame(() => { setMounted(true); const stored = localStorage.getItem('qr-theme') as Theme | null; if (stored) { setTheme(stored); } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) { setTheme('dark'); } }); return () => window.cancelAnimationFrame(rafId); }, []); useEffect(() => { if (!mounted) return; document.documentElement.classList.toggle('dark', theme === 'dark'); localStorage.setItem('qr-theme', theme); }, [theme, mounted]); const toggleTheme = () => { setTheme((prev) => (prev === 'light' ? 'dark' : 'light')); }; if (!mounted) { return
; } return ( {children} ); }