// SPDX-License-Identifier: AGPL-3.0-or-later import React, { useEffect, useState } from 'react'; /* Dev-scoped Dark/Light theme toggle for the theme lab. * * Flips `document.documentElement.dataset.theme` and persists to * **sessionStorage** intentionally — the lab is a tab-scoped * exploration tool. Global persistence (across reloads, all users) * is the user-facing Config toggle that ships in Task 6. */ export const THEME_SESSION_KEY = 'decnet_theme_lab'; export type Theme = 'dark' | 'light'; export function readLabTheme(): Theme { try { const v = sessionStorage.getItem(THEME_SESSION_KEY); return v === 'light' ? 'light' : 'dark'; } catch { return 'dark'; } } export function applyTheme(theme: Theme): void { document.documentElement.dataset.theme = theme; } const ThemeToggle: React.FC = () => { const [theme, setTheme] = useState(() => readLabTheme()); useEffect(() => { applyTheme(theme); try { sessionStorage.setItem(THEME_SESSION_KEY, theme); } catch { /* ignore */ } }, [theme]); return (
); }; export default ThemeToggle;