/** Callback de suscripción: recibe el nuevo valor y la clave que cambió. En `clear()`, value=undefined. */ export type StoreSubscriber = (value: T | undefined, key: string) => void; export interface StoreOptions { /** Nombre de la base de datos IndexedDB (default: 'outfitkit'). */ name?: string; /** Nombre del objectStore dentro de la DB (default: 'kv'). */ storeName?: string; } export interface Store { /** Resuelve cuando la caché se ha hidratado desde IndexedDB. Espérala antes de leer al arrancar. */ readonly ready: Promise; /** Lee un valor de la caché (SÍNCRONO). `undefined` si no existe. */ get(key: string): T | undefined; /** Escribe un valor: actualiza caché, notifica suscriptores y persiste en IndexedDB (fire-and-forget). */ set(key: string, value: T): void; /** Actualiza un valor a partir del anterior: `fn(prev) => next`. */ update(key: string, fn: (prev: T | undefined) => T): void; /** Borra una clave. */ delete(key: string): void; /** Alias de `delete`. */ remove(key: string): void; /** Vacía el store entero. */ clear(): void; /** ¿Existe la clave en la caché? */ has(key: string): boolean; /** Claves actuales. */ keys(): string[]; /** Pares [clave, valor] actuales. */ entries(): Array<[string, unknown]>; /** Suscríbete a una clave concreta. Devuelve la función de desuscripción. */ subscribe(key: string, cb: StoreSubscriber): () => void; /** Suscríbete a TODOS los cambios. Devuelve la función de desuscripción. */ subscribe(cb: StoreSubscriber): () => void; /** Resuelve cuando se han escrito a IndexedDB todas las operaciones pendientes. */ flush(): Promise; } export declare function createStore(options?: StoreOptions): Store; /** Singleton por defecto (DB 'outfitkit', store 'kv'). Cómodo para uso global rápido. */ export declare const store: Store;