import { defaultLocale, isLocale, localeStorageKey, type Locale } from "./locales"; export function createLocaleStore(storage: () => Pick | undefined) { let locale: Locale = defaultLocale; let restored = false; const listeners = new Set<() => void>(); const emit = () => listeners.forEach((listener) => listener()); return { getSnapshot: () => locale, getServerSnapshot: () => defaultLocale, subscribe(listener: () => void) { listeners.add(listener); if (!restored) { restored = true; try { const saved = storage()?.getItem(localeStorageKey); if (isLocale(saved)) locale = saved; } catch { /* Storage may be disabled by the browser. */ } emit(); } return () => { listeners.delete(listener); }; }, setLocale(value: Locale) { if (!isLocale(value)) return; locale = value; try { storage()?.setItem(localeStorageKey, value); } catch { /* Keep the session choice when storage is unavailable. */ } emit(); }, }; }