fix(ui): harden theme toggle accessibility

This commit is contained in:
vince 2026-06-20 00:58:30 +02:00
parent cdb269e505
commit b923ac8947
8 changed files with 75 additions and 9 deletions

View file

@ -22,7 +22,7 @@ export function resolveInitialUiTheme(
storage?: ReadableThemeStorage | null,
fallback: UiTheme = "dark",
): UiTheme {
const stored = readStoredTheme(storage);
const stored = safeReadStoredTheme(storage);
return isUiTheme(stored) ? stored : fallback;
}
@ -33,12 +33,26 @@ export function persistUiTheme(
): void {
if (!storage) return;
if ("setItem" in storage) {
storage.setItem(UI_THEME_STORAGE_KEY, theme);
return;
}
try {
if ("setItem" in storage) {
storage.setItem(UI_THEME_STORAGE_KEY, theme);
return;
}
storage.set(UI_THEME_STORAGE_KEY, theme);
storage.set(UI_THEME_STORAGE_KEY, theme);
} catch {
// Browser storage may be blocked or quota-constrained.
}
}
function safeReadStoredTheme(
storage?: ReadableThemeStorage | null,
): string | undefined {
try {
return readStoredTheme(storage);
} catch {
return undefined;
}
}
function readStoredTheme(