import { SimpleTableConfig } from "../../types/SimpleTableConfig"; import { CustomTheme } from "../../types/CustomTheme"; import HeaderObject, { Accessor } from "../../types/HeaderObject"; import Row from "../../types/Row"; import RowState from "../../types/RowState"; import { DimensionManager } from "../../managers/DimensionManager"; import { ScrollManager } from "../../managers/ScrollManager"; import type { SectionScrollController } from "../../managers/SectionScrollController"; import { SortManager } from "../../managers/SortManager"; import { FilterManager } from "../../managers/FilterManager"; import { SelectionManager } from "../../managers/SelectionManager"; import { RowSelectionManager } from "../../managers/RowSelectionManager"; import type { AnimationCoordinator, CellPosition } from "../../managers/AnimationCoordinator"; import type { AccordionAxis } from "../../utils/accordionAnimation"; import { FlattenRowsResult } from "../../utils/rowFlattening"; import { ProcessRowsResult } from "../../utils/rowProcessing"; import { MergedColumnEditorConfig, ResolvedIcons } from "../initialization/TableInitializer"; export interface RenderContext { /** * Active accordion animation axis for this render. Set on row-grouping or * nested-column collapse/expand toggles (see * {@link SimpleTableVanilla.beginAccordionAnimation}). Cell renderers use it * to initialize incoming cells at zero size in the named axis so the CSS * size transition can grow them while sibling cells FLIP into place. */ accordionAxis?: AccordionAxis; animationCoordinator?: AnimationCoordinator; cellRegistry: Map; collapsedHeaders: Set; collapsedRows: Map; config: SimpleTableConfig; customTheme: CustomTheme; dimensionManager: DimensionManager | null; draggedHeaderRef: { current: HeaderObject | null; }; effectiveHeaders: HeaderObject[]; essentialAccessors: Set; expandedDepths: Set; expandedRows: Map; filterManager: FilterManager | null; getCollapsedRows: () => Map; getCollapsedHeaders?: () => Set; getExpandedRows: () => Map; getHeaders: () => HeaderObject[]; getRowStateMap: () => Map; headerRegistry: Map; headers: HeaderObject[]; hoveredHeaderRef: { current: HeaderObject | null; }; internalIsLoading: boolean; isResizing: boolean; localRows: Row[]; mainBodyRef: { current: HTMLDivElement | null; }; mainHeaderRef: { current: HTMLDivElement | null; }; onRender: () => void; pinnedLeftHeaderRef: { current: HTMLDivElement | null; }; pinnedLeftRef: { current: HTMLDivElement | null; }; pinnedRightHeaderRef: { current: HTMLDivElement | null; }; pinnedRightRef: { current: HTMLDivElement | null; }; resolvedIcons: ResolvedIcons; rowSelectionManager: RowSelectionManager | null; rowStateMap: Map; scrollManager: ScrollManager | null; sectionScrollController: SectionScrollController | null; selectionManager: SelectionManager | null; setCollapsedHeaders: (headers: Set) => void; setCollapsedRows: (rows: Map) => void; setColumnEditorOpen: (open: boolean) => void; setCurrentPage: (page: number) => void; setExpandedRows: (rows: Map) => void; setHeaders: (headers: HeaderObject[]) => void; setIsResizing: (value: boolean) => void; setRowStateMap: (map: Map) => void; sortManager: SortManager | null; /** When true, body cells that stay visible get only position updates (no content/selection recalc). Used during vertical scroll for performance. */ positionOnlyBody?: boolean; /** * Visible portion of the table inside an external scroll parent (in pixels). * Set by {@link SimpleTableVanilla} per render when `config.scrollParent` is * active and no explicit `height`/`maxHeight` is set. Drives virtualization * the same way an explicit `height` does, but the scroll source is external. */ externalViewportHeight?: number; } export interface RenderState { currentPage: number; scrollTop: number; scrollDirection: "up" | "down" | "none"; scrollbarWidth: number; isMainSectionScrollable: boolean; columnEditorOpen: boolean; } export declare class RenderOrchestrator { private tableRenderer; private lastHeadersRef; private lastRowsRef; private flattenedRowsCache; private lastProcessedResult; /** Fingerprint for skipping pagination + height-map work on vertical scroll frames. */ private processRowsScrollReuseKey; private processRowsScrollReuseBase; /** Last painted virtual row range on scroll-raf; when unchanged, DOM work is redundant (native scroll moves content). */ private lastScrollRafPaintedRange; /** Reuse normalized headers across scroll frames when layout inputs are unchanged. */ private scrollRafHeadersMemo; constructor(); getCachedFlattenResult(): FlattenRowsResult | null; getLastProcessedResult(): ProcessRowsResult | null; /** See {@link TableRenderer.getCurrentBodyLayouts}. */ getCurrentBodyLayouts(): Map>; invalidateCache(type?: "body" | "header" | "context" | "all"): void; computeEffectiveHeaders(headers: HeaderObject[], config: SimpleTableConfig, customTheme: CustomTheme, containerWidth?: number): HeaderObject[]; /** * Warms flattened/processed row caches so imperative APIs (e.g. getVisibleRows) are * correct before the first ResizeObserver-driven render, without mutating the DOM. */ primeLastProcessedResult(context: RenderContext, state: RenderState): void; private buildRowModelSnapshot; render(elements: { bodyContainer: HTMLElement; content: HTMLElement; contentWrapper: HTMLElement; footerContainer: HTMLElement; headerContainer: HTMLElement; rootElement: HTMLElement; wrapperContainer: HTMLElement; }, refs: { mainBodyRef: { current: HTMLDivElement | null; }; tableBodyContainerRef: { current: HTMLDivElement | null; }; }, context: RenderContext, state: RenderState, mergedColumnEditorConfig: MergedColumnEditorConfig): void; private renderHeader; private renderBody; private renderFooter; private renderColumnEditor; private renderHorizontalScrollbar; private registerSectionPanes; private buildRendererDeps; cleanup(): void; }