/** * renderer — orchestrates the hot path: layout → paint (Frame) → diff → encode * (ANSI) → a single write. Keeps ONE retained frame, with a pool of 2 buffers. * Holds the painters for every component, focusable ones included. */ import type { Node } from '../components/index.js'; import type { Differ } from '../diff/index.js'; import type { Size } from '../frame/index.js'; import type { Terminal } from '../terminal/index.js'; import type { Theme } from '../theme/index.js'; /** Per-frame context the painters read (focus, animation, caret). */ export interface RenderContext { readonly focusKey?: string; readonly tick?: number; readonly elapsedMs?: number; readonly caret?: number; } export interface RenderStats { readonly frame: number; readonly changedLines: number; readonly changedCells: number; readonly bytesWritten: number; readonly layoutMicros: number; readonly paintMicros: number; readonly diffMicros: number; readonly encodeMicros: number; } export interface RenderOptions { readonly terminal: Terminal; readonly theme?: Theme; readonly differ?: Differ; readonly synchronized?: boolean; } export interface Renderer { readonly size: Size; render(root: Node, ctx?: RenderContext): RenderStats; invalidateAll(): void; resize(size: Size): void; setTheme(theme: Theme): void; debugFrame(): string; } export declare function createRenderer(options: RenderOptions): Renderer; //# sourceMappingURL=index.d.ts.map