import { type TableVirtualItem, type TableVirtualPlan } from './table-virtual-model'; export interface TableVirtualControllerState { enabled: boolean; items: readonly TableVirtualItem[]; pinnedRowIds: ReadonlySet; viewport: HTMLElement | null; viewportSize: number; } export interface TableVirtualControllerOptions { state: () => TableVirtualControllerState; windowChanged: (plan: TableVirtualPlan | null) => void; requestAnimationFrame?: (callback: FrameRequestCallback) => number; cancelAnimationFrame?: (handle: number) => void; } /** Binds viewport scroll/resize to a recycled row window. Scroll offset stays off render state. */ export declare class TableVirtualController { private readonly options; private connected; private connectedViewport; private resizeObserver; private measurementObserver; private measurementTargets; private viewportWidth; private viewportSize; private frame; private measures; private measuredIds; private plan; private index; private indexedItems; private indexDirty; private scrollOffset; private scrollDirection; private pendingReset; private readonly raf; private readonly caf; constructor(options: TableVirtualControllerOptions); connect(): void; disconnect(): void; refresh(): void; schedule: () => void; /** Drop cached heights after column, density, or wrap geometry changes. */ invalidateMeasures(): void; /** Rebuild from a new index and pin the viewport to the start. */ resetToTop(): void; sizeFor(item: TableVirtualItem): number; currentPlan(): TableVirtualPlan | null; currentViewportSize(): number; /** Measure painted rows and correct scroll when estimates were wrong. */ collectMeasurements(root: ParentNode | null): void; private applyMeasurements; private syncMeasurementTargets; private readonly handleViewportResize; private readonly handleScroll; private sync; private emit; private ensureIndex; private unbindViewport; private cancelFrame; } //# sourceMappingURL=table-virtual-controller.d.ts.map