diff --git a/web/src/App.tsx b/web/src/App.tsx index f7ac110..e18c604 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -95,6 +95,13 @@ function getISOWeek(date: Date): number { type AppMode = 'login' | 'files' | 'editor' function App() { + // Apply theme from localStorage to
on every render of the app. + // Theme state lives inside ScheduleApp; this just applies the persisted value. + useEffect(() => { + const t = (localStorage.getItem('tkb-theme') as 'dark' | 'light') || 'dark' + document.body.classList.toggle('light', t === 'light') + }, []) + // Auto-reload when server restarts with a new version (new deploy) useEffect(() => { let serverVersion: string | null = null @@ -477,6 +484,14 @@ function ScheduleApp({ fileId, fileName, data, compareFileId, onBack, onFileName const [showD8, setShowD8] = useState(true) const [showSazlt, setShowSazlt] = useState(true) const [hide162, setHide162] = useState(false) + const [theme, setTheme] = useState<'dark' | 'light'>(() => + (localStorage.getItem('tkb-theme') as 'dark' | 'light') || 'dark' + ) + + useEffect(() => { + document.body.classList.toggle('light', theme === 'light') + localStorage.setItem('tkb-theme', theme) + }, [theme]) const [hiddenValues, setHiddenValues] = useState