import type { SpreadMode } from './spread.js'; import type { LoadProgress } from '../source/types.js'; export type Listener = (payload: T) => void; /** Events typed as `void` are emitted with no payload argument. */ type PayloadArgs = [T] extends [void] ? [] : [payload: T]; /** Minimal typed event emitter keyed by an event map. */ export declare class Emitter { #private; /** Subscribe; returns an unsubscribe function. */ on(type: K, listener: Listener): () => void; off(type: K, listener: Listener): void; emit(type: K, ...args: PayloadArgs): void; clear(): void; } /** * Public event surface of a Zine instance. Payloads are provisional and will * firm up as the engine wires the emitters that fire them. */ export interface ZineEventMap { ready: void; flipStart: { from: number; to: number; }; flipEnd: { page: number; }; pageChanged: { page: number; }; /** Pages regrouped: the spread mode changed, or a narrow container forced one page. */ spreadChanged: { mode: SpreadMode; singlePage: boolean; }; zoomChanged: { scale: number; }; /** The document is downloading. Fires only for sources that report byte progress (a PDF from a * URL); use it to drive a custom loading indicator, and hide it on `ready`. */ progress: LoadProgress; sourceError: { index: number; error: unknown; }; rendererFallback: { from: string; to: string; }; } export type ZineEmitter = Emitter; export {};