export interface TableLayoutElements { viewport: HTMLElement | null; contentTable: HTMLTableElement | null; stickyHeaderTable: HTMLTableElement | null; collapseAllOverlay: HTMLElement | null; frame: HTMLElement | null; interactiveHead: HTMLTableSectionElement | null; } export interface TableLayoutMode { documentStickyHeader: boolean; floatingCollapseAll: boolean; clampVerticalOverscroll: boolean; } export interface TableOverflowState { start: boolean; end: boolean; scrollable: boolean; } export interface TableLayoutControllerOptions { elements: () => TableLayoutElements; mode: () => TableLayoutMode; overflowChanged: (state: TableOverflowState) => void; verticalEdgeWheel?: (deltaY: number) => boolean; } export interface TableLayoutMetricInput { viewportInlineSize: number; viewportBlockSize: number; scrollInlineSize: number; scrollBlockSize: number; scrollInlineOffset: number; collapseHeadBlockStart?: number; collapseFrameBlockStart?: number; } export interface TableLayoutMetrics { visibleInlineSize: number; overflow: TableOverflowState; inlineOffset: number; maxInlineOffset: number; collapseBlockOffset: number | null; } /** Pure geometry resolution shared by the controller and focused tests. */ export declare function resolveTableLayoutMetrics(input: TableLayoutMetricInput): TableLayoutMetrics; /** * Owns table viewport observation. It resolves newly rendered geometry * immediately so the first paint has the correct viewport-width chrome, then * batches observer-driven scroll and resize reads/writes into one animation frame. * The component remains responsible only for refs and reactive overflow state. */ export declare class TableLayoutController { private readonly options; private connected; private connectedViewport; private connectedContentTable; private resizeObserver; private frame; private overflow; private inlineOffset; private maxInlineOffset; private maxBlockOffset; private lastMode; constructor(options: TableLayoutControllerOptions); connect(): void; disconnect(): void; /** Reconcile newly rendered refs, observers, and pending geometry. */ refresh(forceGeometry?: boolean): void; private schedule; private readonly handleScroll; private readonly handleWheel; private clampInlineOffset; private clampBlockOffset; private sync; private setProperty; } //# sourceMappingURL=table-layout-controller.d.ts.map