import type { CellMetrics } from "../../renderer/dom/dom-renderer.js"; import type { TerminalEventRecord } from "../recording.js"; import type { TerminalDebugNode, TerminalNode } from "./types.js"; export interface EventManager { register: (node: Omit & { id?: string; }) => TerminalNode; update: (id: string, next: Partial>) => void; unregister: (id: string) => void; setMetrics: (next: CellMetrics) => void; canSelectAt: (cellX: number, cellY: number) => boolean; autoScrollSelectionAt: (originCellX: number, originCellY: number, pointerCellY: number) => number; focus: (id: string | null) => void; getFocused: () => string | null; debugNodes: () => TerminalDebugNode[]; attach: () => void; dispose: () => void; } export declare function createEventManager(container: HTMLElement, metrics: CellMetrics, options?: Readonly<{ record?: (event: TerminalEventRecord) => void; textInputTarget?: HTMLElement | null; debugIme?: boolean; onFocusChange?: (prev: string | null, next: string | null) => void; /** * When true, native DOM listeners are not attached until manager.attach() * is called explicitly. Used by TerminalProvider so selection capture * listeners can be registered first. */ deferAttach?: boolean; }>): EventManager;