| import { useState, useEffect } from 'react'; | |
| type Theme = 'light' | 'dark'; | |
| const THEME_STORAGE_KEY = 'app-theme'; | |
| export const useTheme = () => { | |
| const [theme, setTheme] = useState(() => { | |
| // Get theme from localStorage or default to 'dark' | |
| if (typeof window !== 'undefined') { | |
| const stored = localStorage.getItem(THEME_STORAGE_KEY) as Theme | null; | |
| return stored || 'dark'; | |
| } | |
| return 'dark'; | |
| }) as [Theme, (value: Theme | ((prev: Theme) => Theme)) => void]; | |
| useEffect(() => { | |
| // Apply theme to document | |
| const root = document.documentElement; | |
| if (theme === 'dark') { | |
| root.classList.add('dark'); | |
| } else { | |
| root.classList.remove('dark'); | |
| } | |
| // Save to localStorage | |
| localStorage.setItem(THEME_STORAGE_KEY, theme); | |
| }, [theme]); | |
| const toggleTheme = () => { | |
| setTheme((prev) => (prev === 'dark' ? 'light' : 'dark')); | |
| }; | |
| return { theme, toggleTheme, setTheme }; | |
| }; | |