Files
stocklet/web/src/stores/theme.ts
Declan Teevan 53ea5021d7 feat: openapi-fetch typing
feat: base page layout for implementation

todo: fix light/dark mode toggling
2025-08-10 10:50:52 +01:00

35 lines
886 B
TypeScript

import { writable } from 'svelte/store';
function getInitialDark(): boolean {
if (typeof window === 'undefined') return false;
try {
const saved = localStorage.getItem('color-scheme');
if (saved === 'dark') return true;
if (saved === 'light') return false;
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
} catch {
return false;
}
}
export const darkMode = writable<boolean>(getInitialDark());
export function setDarkMode(value: boolean): void {
darkMode.set(value);
}
export function toggleDarkMode(): void {
darkMode.update((v) => !v);
}
if (typeof window !== 'undefined') {
darkMode.subscribe((isDark) => {
const root = document.documentElement;
root.classList.toggle('dark', isDark);
try {
localStorage.setItem('color-scheme', isDark ? 'dark' : 'light');
} catch {
// ignore storage write errors
}
});
}