import { atom } from 'nanostores'; export type Theme = 'dark' | 'light'; export const kTheme = 'bolt_theme'; export function themeIsDark() { return themeStore.get() === 'dark'; } export const DEFAULT_THEME = 'light'; export const themeStore = atom(initStore()); function initStore() { if (!import.meta.env.SSR) { const persistedTheme = localStorage.getItem(kTheme) as Theme | undefined; const themeAttribute = document.querySelector('html')?.getAttribute('data-theme'); return persistedTheme ?? (themeAttribute as Theme) ?? DEFAULT_THEME; } return DEFAULT_THEME; } export function toggleTheme() { const currentTheme = themeStore.get(); const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; themeStore.set(newTheme); localStorage.setItem(kTheme, newTheme); document.querySelector('html')?.setAttribute('data-theme', newTheme); }