export interface WorkerCanvasSize { width: number; height: number; top: number; left: number; pixelRatio: number; } export interface SerializedDomEvent { type: string; pointerId?: number; pointerType?: string; button?: number; buttons?: number; altKey?: boolean; ctrlKey?: boolean; metaKey?: boolean; shiftKey?: boolean; movementX?: number; movementY?: number; clientX?: number; clientY?: number; offsetX?: number; offsetY?: number; pageX?: number; pageY?: number; screenX?: number; screenY?: number; deltaX?: number; deltaY?: number; deltaZ?: number; deltaMode?: number; } export interface WorkerRendererStats { drawCalls: number; frameCalls: number; triangles: number; points: number; lines: number; /** Rolling average frame interval in milliseconds. */ frameTime: number; frameTiming: WorkerFrameTimingStats; } export interface WorkerFrameTimingStats { /** Number of actively rendered frames in the rolling window. */ samples: number; fps: number; average: number; p95: number; max: number; /** Percentage of samples above the 25 ms budget. */ missedFramePercent: number; } export interface WorkerErrorData { message: string; name?: string; stack?: string; } export type HostToWorkerMessage = { type: 'init'; canvas: OffscreenCanvas; size: WorkerCanvasSize; } | { type: 'resize'; size: WorkerCanvasSize; } | { type: 'dom-event'; event: SerializedDomEvent; } | { type: 'request'; id: number; command: string; payload?: unknown; } | { type: 'dispose'; }; export type WorkerToHostMessage = { type: 'initialized'; } | { type: 'ready'; detail?: unknown; } | { type: 'status'; message: string; } | { type: 'stats'; stats: WorkerRendererStats; } | { type: 'event'; eventType: string; detail?: unknown; } | { type: 'response'; id: number; result?: unknown; error?: WorkerErrorData; } | { type: 'error'; error: WorkerErrorData; } | { type: 'disposed'; }; export declare function serializeError(error: unknown): WorkerErrorData;