export type RouterResult = { consume?: boolean; data?: string; } | undefined; export type RouterListener = (data: string) => RouterResult; export interface RegisterOptions { /** Stable name for debugging and unsubscription tracking. */ name: string; /** When true, this listener is bypassed while any overlay is active. * Use for keys that "activate" a widget (e.g. ↓ to open a strip) — the * overlay needs the same key for navigation. Default: false. */ skipWhenOverlayActive?: boolean; } export declare class ForgeInputRouter { private listeners; private overlayDepth; register(listener: RouterListener, opts: RegisterOptions): () => void; pushOverlay(): void; popOverlay(): void; isOverlayActive(): boolean; /** * Mirrors pi's listener-chain semantics (tui.ts:544-560): * - Each listener may return { consume: true } to stop dispatch. * - Each listener may return { data: rewritten } to alter the value the * next listener (and ultimately the focused overlay) sees. * - Listeners flagged skipWhenOverlayActive=true are silently bypassed * whenever overlayDepth > 0. */ dispatch(data: string): RouterResult; } export declare function getInputRouter(): ForgeInputRouter; /** Test helper — replace the singleton with a fresh router. */ export declare function __resetInputRouterForTesting(): void;