import { writable, type Writable } from 'svelte/store'; type PersistentStoreOptions = { key: string; defaultValue: T; parse: (stored: string | null) => T; onChange?: (value: T) => void; }; type PersistentStore = { subscribe: Writable['subscribe']; set: (value: T) => void; init: () => void; }; export function createPersistentStore({ key, defaultValue, parse, onChange, }: PersistentStoreOptions): PersistentStore { const store = writable(defaultValue); function apply(value: T): void { store.set(value); onChange?.(value); } return { subscribe: store.subscribe, set(value: T): void { localStorage.setItem(key, value); apply(value); }, init(): void { apply(parse(localStorage.getItem(key))); }, }; }