import type { TableColumn, TableGroup, TableRow } from './table-types'; /** * Token-aligned body-row track contracts: 40 / 62 / 84, plus wrapping-secondary * 106. Estimates only; measured heights replace these after paint. */ export declare const TABLE_VIRTUAL_ROW_TRACK_SIZE: { readonly 1: 40; readonly 2: 62; readonly 3: 84; readonly 4: 106; }; export declare const TABLE_VIRTUAL_GROUP_HEADER_SIZE: 40; export declare const TABLE_VIRTUAL_MIN_OVERSCAN_ROWS = 8; export declare const TABLE_VIRTUAL_VIEWPORT_REQUIRED_HEADING = "Bounded height required"; export declare const TABLE_VIRTUAL_VIEWPORT_REQUIRED_BODY = "Virtual mode requires height, maxHeight, or fitViewport."; export declare const TABLE_VIRTUAL_TOTAL_SUMMARY_LABEL = "{total} items"; export type TableVirtualItemKind = 'group' | 'row'; export interface TableVirtualItem { kind: TableVirtualItemKind; id: string; groupId?: string; rowId?: string; estimatedSize: number; variableSize: boolean; } export type TableVirtualNode = { kind: 'spacer'; size: number; key: string; } | { kind: 'row'; index: number; item: TableVirtualItem; } | { kind: 'group'; groupId: string; headerIndex: number; nodes: Array>; }; export interface TableVirtualPlan { totalSize: number; itemCount: number; start: number; end: number; nodes: TableVirtualNode[]; mountedIds: ReadonlySet; mountedIndexes: ReadonlySet; } export interface FlattenTableVirtualItemsInput { grouped: boolean; rows: TableRow[]; groups: TableGroup[]; collapsedGroupIds: ReadonlySet | readonly string[]; columns: TableColumn[]; } export interface ResolveTableVirtualPlanInput { items: readonly TableVirtualItem[]; sizes: readonly number[]; scrollOffset: number; viewportSize: number; pinnedRowIds?: ReadonlySet; } export interface TableVirtualIndex { items: readonly TableVirtualItem[]; sizes: readonly number[]; prefix: readonly number[]; itemCount: number; totalSize: number; hasVariableSize: boolean; grouped: boolean; groupHeaderIndexes: readonly number[]; headerIndexByGroup: ReadonlyMap; groupEndByHeader: ReadonlyMap; rowIndexById: ReadonlyMap; itemIndexById: ReadonlyMap; } export interface ResolveTableVirtualIndexedPlanInput { scrollOffset: number; viewportSize: number; scrollDirection?: 'backward' | 'forward' | 'none'; pinnedRowIds?: ReadonlySet; } /** Map a cell recipe onto the named track stack used for first-paint estimates. */ export declare function estimateTableCellTrackCount(value: TableRow['cells'][string], column: TableColumn): number; /** Tallest named track stack across the row's visible cells. */ export declare function estimateTableRowBlockSize(row: TableRow, columns: readonly TableColumn[]): number; export declare function flattenTableVirtualItems(input: FlattenTableVirtualItemsInput): TableVirtualItem[]; export declare function tableVirtualOverscanPx(viewportSize: number): number; export declare function buildTableVirtualPrefixSums(sizes: readonly number[]): number[]; /** Largest item index whose start offset is <= `offset`. */ export declare function findTableVirtualIndexAtOffset(prefix: readonly number[], offset: number): number; export declare function tableVirtualItemSizes(items: readonly TableVirtualItem[], measures: ReadonlyMap): number[]; export declare function sameTableVirtualPlan(left: TableVirtualPlan | null | undefined, right: TableVirtualPlan | null | undefined): boolean; /** Precompute dataset-wide lookup state. Rebuild only when items or their sizes change. */ export declare function createTableVirtualIndex(items: readonly TableVirtualItem[], sizes: readonly number[]): TableVirtualIndex; /** Resolve the mounted slice from cached dataset-wide lookup state. */ export declare function resolveTableVirtualPlanFromIndex(index: TableVirtualIndex, input: ResolveTableVirtualIndexedPlanInput): TableVirtualPlan; /** Resolve a one-off plan. Controllers retain and reuse a prepared index. */ export declare function resolveTableVirtualPlan(input: ResolveTableVirtualPlanInput): TableVirtualPlan; //# sourceMappingURL=table-virtual-model.d.ts.map