diff --git a/src/App.tsx b/src/App.tsx index 05e2777..971cadc 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -17,6 +17,7 @@ import DaySchedule from './components/day-schedule'; import SimulationChart from './components/simulation-chart'; import Settings from './components/settings'; import LanguageSelector from './components/language-selector'; +import ThemeSelector from './components/theme-selector'; import DisclaimerModal from './components/disclaimer-modal'; import DataManagementModal from './components/data-management-modal'; import { Button } from './components/ui/button'; @@ -91,6 +92,33 @@ const MedPlanAssistant = () => { uiSettings } = appState; + // Apply theme based on user preference or system setting + React.useEffect(() => { + const theme = uiSettings.theme || 'system'; + const root = document.documentElement; + + const applyTheme = (isDark: boolean) => { + if (isDark) { + root.classList.add('dark'); + } else { + root.classList.remove('dark'); + } + }; + + if (theme === 'system') { + // Detect system preference + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); + applyTheme(mediaQuery.matches); + + // Listen for system theme changes + const listener = (e: MediaQueryListEvent) => applyTheme(e.matches); + mediaQuery.addEventListener('change', listener); + return () => mediaQuery.removeEventListener('change', listener); + } else { + applyTheme(theme === 'dark'); + } + }, [uiSettings.theme]); + const { showDayTimeOnXAxis, chartView, @@ -137,11 +165,18 @@ const MedPlanAssistant = () => {
{t('appSubtitle')}
diff --git a/src/components/language-selector.tsx b/src/components/language-selector.tsx index 0289fdd..2166564 100644 --- a/src/components/language-selector.tsx +++ b/src/components/language-selector.tsx @@ -10,22 +10,18 @@ import React from 'react'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './ui/select'; -import { Label } from './ui/label'; const LanguageSelector = ({ currentLanguage, onLanguageChange, t }: any) => { return ( -