import { useEffect } from 'react'; import { useConfigStore } from '../../stores/useConfigStore'; export default function ThemeManager() { const { config, loadConfig } = useConfigStore(); // Load config on mount useEffect(() => { loadConfig(); }, [loadConfig]); // Apply theme when config changes useEffect(() => { if (!config) return; const applyTheme = (theme: string) => { const root = document.documentElement; const isDark = theme === 'dark'; // Set DaisyUI theme root.setAttribute('data-theme', theme); // Set inline style for immediate visual feedback root.style.backgroundColor = isDark ? '#1d232a' : '#FAFBFC'; // Set Tailwind dark mode class if (isDark) { root.classList.add('dark'); } else { root.classList.remove('dark'); } }; const theme = config.theme || 'system'; // Sync to localStorage for early boot check localStorage.setItem('app-theme-preference', theme); if (theme === 'system') { const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); const handleSystemChange = (e: MediaQueryListEvent | MediaQueryList) => { const systemTheme = e.matches ? 'dark' : 'light'; applyTheme(systemTheme); }; // Initial alignment handleSystemChange(mediaQuery); // Listen for changes mediaQuery.addEventListener('change', handleSystemChange); return () => mediaQuery.removeEventListener('change', handleSystemChange); } else { applyTheme(theme); } }, [config?.theme]); return null; // This component handles side effects only }