/** One persistent notification — unlike a transient toast, it stays in the log until dismissed. */ export interface NotificationEntry { id: string; /** Severity/category (`"info"`, `"success"`, `"warning"`, `"danger"`, or a game kind). */ kind: string; title: string; body?: string; /** Creation time from the injected clock. */ at: number; read: boolean; meta?: TMeta; } /** Fields accepted by {@link NotificationStore.push}. */ export interface NotificationInput { id?: string; kind?: string; title: string; body?: string; at?: number; meta?: TMeta; } /** Filter for {@link NotificationStore.list}. */ export interface NotificationFilter { kind?: string; unreadOnly?: boolean; } /** Serializable, observable log of persistent notifications with read tracking. */ export interface NotificationStore { push(input: NotificationInput): NotificationEntry; /** Newest-first; filter by kind and/or unread. Stable identity between changes for the unfiltered read. */ list(filter?: NotificationFilter): readonly NotificationEntry[]; unreadCount(): number; markRead(id: string): void; markAllRead(): void; remove(id: string): boolean; clear(): void; subscribe(listener: () => void): () => void; snapshot(): readonly NotificationEntry[]; restore(snapshot: readonly NotificationEntry[]): void; } /** Options for {@link createNotificationCenter}. */ export interface NotificationCenterOptions { /** Injected clock (ms). Default `Date.now`. */ now?: () => number; /** Keep only the newest `cap` notifications. Default 100; 0 = unbounded. */ cap?: number; } /** * A persistent notification log with read/unread tracking — the "notification * center" surface toasts don't cover. Newest-first, capped, serializable, and * observable; a game pushes durable events (quest updates, trades, party news) * here and a HUD renders the list + an unread badge. `snapshot`/`restore` * round-trip through a save. * * @capability notification-center persistent, read-tracked notification log (newest-first, capped, serializable) behind an unread badge — the durable counterpart to transient toasts */ export declare function createNotificationCenter(options?: NotificationCenterOptions): NotificationStore;