import * as React from "react"; const PREFIX = "puck:"; function load(key: string, fallback: () => T): T { try { const raw = localStorage.getItem(PREFIX + key); if (raw == null) return fallback(); // merge over fallback so new fields added later get their defaults const parsed = JSON.parse(raw); const base = fallback(); return typeof base === "object" && base !== null && !Array.isArray(base) ? { ...base, ...(parsed as object) } : (parsed as T); } catch (e) { console.error(`puck: failed to load ${key}, using defaults`, e); return fallback(); } } /** useState backed by localStorage. `fallback` runs only when nothing is stored. */ export function usePersistent(key: string, fallback: () => T) { const [value, setValue] = React.useState(() => load(key, fallback)); React.useEffect(() => { try { localStorage.setItem(PREFIX + key, JSON.stringify(value)); } catch (e) { console.error(`puck: failed to persist ${key}`, e); } }, [key, value]); return [value, setValue] as const; } /** Wipe all of Puck's persisted state (the "forget everything" escape hatch). */ export function forgetEverything() { for (const k of Object.keys(localStorage)) { if (k.startsWith(PREFIX)) localStorage.removeItem(k); } }