gemini / src /components /common /ThemeManager.tsx
yinming
feat: Antigravity API Proxy for HuggingFace Spaces
bbb1195
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
}