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