File size: 948 Bytes
ff92aff 2251e03 ff92aff 2251e03 ff92aff | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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 };
};
|