export interface ScaffoldConfig { showColumnHeader: boolean; showRowHeader: boolean; headerHeight: number; rowHeaderWidth: number; showGroupPanel: boolean; groupPanelHeight: number; /** Height of the multi-level column-group header band. 0 (default) when there are no groups. */ columnGroupHeight?: number; } /** * Builds and owns the static DOM scaffold using a single-scroller model: * one scroll container holds everything, so the native scrollbars span the whole * grid. The data cells scroll normally; the column header, row header, and * top-left corner are `position: sticky` panels that the browser keeps pinned on * the compositor as the canvas scrolls (header pins vertically, row header * horizontally, corner both) — no per-frame JS, so they never flicker. A gutter * (rowHeaderWidth × headerHeight) is reserved at the top-left so the cells start * past the headers. */ export declare class ViewportRenderer { private host; readonly viewport: HTMLElement; readonly canvas: HTMLElement; readonly cells: HTMLElement; readonly mergeLayer: HTMLElement; readonly headerInner: HTMLElement; /** Top header band holding multi-level column-group cells. Present only when there are groups. */ readonly columnGroupInner?: HTMLElement; readonly rowHeaderInner: HTMLElement; readonly gutterLeft: number; readonly gutterTop: number; /** Host bar for the grouping panel, present only when it is enabled. */ readonly groupPanel?: HTMLElement; readonly frozenCols: HTMLElement; readonly frozenColsHeader: HTMLElement; readonly frozenRows: HTMLElement; readonly frozenRowsHeader: HTMLElement; readonly frozenCorner: HTMLElement; private corner; constructor(host: HTMLElement, config: ScaffoldConfig); resize(totalWidth: number, totalHeight: number): void; /** * Size the pinned body/row-header/frozen-column panels to the visible viewport * so they clip their translated content. Called on mount and on resize. */ setViewport(width: number, height: number): void; /** Size and show/hide the frozen bands for the current freeze counts. */ setFrozen(colsWidth: number, rowsHeight: number): void; dispose(): void; }