simple-table-core 4.1.5 → 4.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +15 -7
  2. package/dist/cjs/index.js +1 -1
  3. package/dist/cjs/styles.css +1 -1
  4. package/dist/consts/general-consts.d.ts +0 -4
  5. package/dist/core/SimpleTableVanilla.d.ts +19 -272
  6. package/dist/core/api/TableAPIContext.d.ts +74 -0
  7. package/dist/core/api/TableAPIImpl.d.ts +2 -74
  8. package/dist/core/api/buildTableAPIContext.d.ts +61 -0
  9. package/dist/core/dev/UnvirtualizedRowsWarning.d.ts +20 -0
  10. package/dist/core/initialization/createDataManagers.d.ts +37 -0
  11. package/dist/core/initialization/wireMountManagers.d.ts +43 -0
  12. package/dist/core/pipeline/syncPivotPipeline.d.ts +41 -0
  13. package/dist/core/rendering/RenderContext.d.ts +125 -0
  14. package/dist/core/rendering/RenderOrchestrator.d.ts +8 -116
  15. package/dist/core/rendering/SectionRenderer.d.ts +21 -15
  16. package/dist/core/rendering/TableRenderer.d.ts +6 -95
  17. package/dist/core/rendering/TableRendererDeps.d.ts +98 -0
  18. package/dist/core/rendering/buildRenderContext.d.ts +94 -0
  19. package/dist/core/rendering/cellRenderContexts.d.ts +11 -0
  20. package/dist/core/rendering/renderBodySections.d.ts +14 -0
  21. package/dist/core/rendering/renderHeaderSections.d.ts +13 -0
  22. package/dist/core/rendering/sectionCaches.d.ts +24 -0
  23. package/dist/core/rendering/sectionExtraRows.d.ts +19 -0
  24. package/dist/core/rendering/sectionLayout.d.ts +42 -0
  25. package/dist/core/vanilla/VanillaLiveHost.d.ts +103 -0
  26. package/dist/core/vanilla/applyTableUpdate.d.ts +10 -0
  27. package/dist/core/vanilla/createVanillaRenderContext.d.ts +4 -0
  28. package/dist/core/vanilla/destroyTableResources.d.ts +26 -0
  29. package/dist/core/vanilla/syncRowSelectionManager.d.ts +13 -0
  30. package/dist/core/vanilla/tableContainers.d.ts +5 -0
  31. package/dist/core/vanilla/toTableAPIContextHost.d.ts +3 -0
  32. package/dist/hooks/contentHeight.d.ts +3 -1
  33. package/dist/hooks/expandedDepths.d.ts +4 -3
  34. package/dist/hooks/scrollbarWidth.d.ts +0 -43
  35. package/dist/hooks/useAggregatedRows.d.ts +0 -2
  36. package/dist/icons/CloseIcon.d.ts +2 -0
  37. package/dist/icons/index.d.ts +1 -0
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.es.js +1 -1
  40. package/dist/managers/AccordionController.d.ts +39 -0
  41. package/dist/managers/AnimationCoordinator.d.ts +15 -1
  42. package/dist/managers/AutoSizeManager.d.ts +64 -0
  43. package/dist/managers/CellSlideAnimator.d.ts +54 -0
  44. package/dist/managers/DragHandlerManager.d.ts +4 -26
  45. package/dist/managers/ExternalScrollController.d.ts +68 -0
  46. package/dist/managers/PivotManager.d.ts +0 -2
  47. package/dist/managers/ScrollRenderCoalescer.d.ts +32 -0
  48. package/dist/managers/SelectionManager/mouseUtils.d.ts +3 -3
  49. package/dist/styles.css +1 -1
  50. package/dist/types/ColumnEditorCustomRendererProps.d.ts +5 -0
  51. package/dist/types/PivotTypes.d.ts +1 -8
  52. package/dist/types/SimpleTableConfig.d.ts +3 -1
  53. package/dist/types/SimpleTableProps.d.ts +8 -2
  54. package/dist/types/TableAPI.d.ts +2 -2
  55. package/dist/utils/accordionAnimation.d.ts +0 -5
  56. package/dist/utils/bodyCell/editing.d.ts +1 -1
  57. package/dist/utils/bodyCell/editors/booleanDropdown.d.ts +1 -1
  58. package/dist/utils/bodyCell/editors/datePicker.d.ts +1 -1
  59. package/dist/utils/bodyCell/editors/enumDropdown.d.ts +1 -1
  60. package/dist/utils/bodyCell/selection.d.ts +0 -1
  61. package/dist/utils/bodyCell/styling.d.ts +2 -0
  62. package/dist/utils/cellScrollUtils.d.ts +1 -1
  63. package/dist/utils/cellUtils.d.ts +0 -4
  64. package/dist/utils/collapseUtils.d.ts +0 -10
  65. package/dist/utils/columnEditor/createColumnEditor.d.ts +6 -0
  66. package/dist/utils/columnEditor/createColumnEditorPopout.d.ts +6 -0
  67. package/dist/utils/columnEditor/createPivotPanel.d.ts +16 -0
  68. package/dist/utils/externalScroll.d.ts +0 -10
  69. package/dist/utils/filters/createDropdown.d.ts +2 -0
  70. package/dist/utils/formatters.d.ts +0 -2
  71. package/dist/utils/headerCell/eventTracking.d.ts +2 -2
  72. package/dist/utils/headerCell/styling.d.ts +0 -1
  73. package/dist/utils/headerWidthUtils.d.ts +2 -2
  74. package/dist/utils/infiniteScrollUtils.d.ts +0 -1
  75. package/dist/utils/parkAndStagger.d.ts +44 -0
  76. package/dist/utils/resizeUtils/domUpdates.d.ts +1 -1
  77. package/dist/utils/resizeUtils/maxWidth.d.ts +2 -1
  78. package/dist/utils/rowSelectionUtils.d.ts +0 -4
  79. package/dist/utils/rowSeparatorRenderer.d.ts +0 -1
  80. package/dist/utils/rowUtils.d.ts +1 -27
  81. package/dist/utils/setAbsoluteCellPosition.d.ts +31 -0
  82. package/dist/utils/stateRowRenderer.d.ts +0 -1
  83. package/dist/utils/tableDomScope.d.ts +20 -0
  84. package/package.json +4 -3
  85. package/src/styles/base.css +144 -147
  86. package/dist/managers/ColumnManager.d.ts +0 -42
  87. package/dist/managers/RowManager.d.ts +0 -56
  88. package/dist/managers/TableManager.d.ts +0 -72
  89. package/dist/types/BoundingBox.d.ts +0 -11
  90. package/dist/types/DragHandlerProps.d.ts +0 -14
  91. package/dist/types/OnSortProps.d.ts +0 -3
  92. package/dist/types/SharedTableProps.d.ts +0 -24
  93. package/dist/types/TableBodyProps.d.ts +0 -20
  94. package/dist/types/TableHeaderProps.d.ts +0 -17
  95. package/dist/types/TableHeaderSectionProps.d.ts +0 -19
  96. package/dist/types/TableRowProps.d.ts +0 -29
  97. package/dist/utils/columnIndicesUtils.d.ts +0 -15
  98. package/dist/utils/columnVirtualizationUtils.d.ts +0 -128
@@ -0,0 +1,41 @@
1
+ import type ColumnDef from "../../types/ColumnDef";
2
+ import type { Accessor } from "../../types/ColumnDef";
3
+ import type { SimpleTableConfig } from "../../types/SimpleTableConfig";
4
+ import type { CustomTheme } from "../../types/CustomTheme";
5
+ import type Row from "../../types/Row";
6
+ import type { PivotManager } from "../../managers/PivotManager";
7
+ import type { FilterManager } from "../../managers/FilterManager";
8
+ import type { SortManager } from "../../managers/SortManager";
9
+ import type { SelectionManager } from "../../managers/SelectionManager";
10
+ import type { DimensionManager } from "../../managers/DimensionManager";
11
+ import type ExpandedDepthsManager from "../../hooks/expandedDepths";
12
+ import type { RenderOrchestrator } from "../rendering/RenderOrchestrator";
13
+ /** Pivot emits a flat matrix, so consumer row grouping is off while pivot is active. */
14
+ export declare const getEffectiveRowGrouping: (pivotActive: boolean | undefined, rowGrouping: Accessor[] | undefined) => Accessor[] | undefined;
15
+ export interface PivotPipelineInput {
16
+ pivotManager: PivotManager;
17
+ filterManager: FilterManager | null;
18
+ sortManager: SortManager | null;
19
+ selectionManager: SelectionManager | null;
20
+ dimensionManager: DimensionManager | null;
21
+ expandedDepthsManager: ExpandedDepthsManager | null;
22
+ renderOrchestrator: RenderOrchestrator;
23
+ config: SimpleTableConfig;
24
+ customTheme: CustomTheme;
25
+ localRows: Row[];
26
+ pristineDefaultHeaders: ColumnDef[];
27
+ headers: ColumnDef[];
28
+ essentialAccessors: Set<string>;
29
+ collapsedHeaders: Set<Accessor>;
30
+ filteredSourceRows?: Row[];
31
+ }
32
+ export interface PivotPipelineResult {
33
+ headers: ColumnDef[];
34
+ essentialAccessors: Set<string>;
35
+ collapsedHeaders: Set<Accessor>;
36
+ }
37
+ /**
38
+ * Recomputes pivot from filtered source rows and updates sort, selection, and
39
+ * dimension managers. When pivot is off, sort sees the filtered source rows.
40
+ */
41
+ export declare const syncPivotPipeline: (input: PivotPipelineInput) => PivotPipelineResult;
@@ -0,0 +1,125 @@
1
+ import { SimpleTableConfig } from "../../types/SimpleTableConfig";
2
+ import { CustomTheme } from "../../types/CustomTheme";
3
+ import ColumnDef, { Accessor } from "../../types/ColumnDef";
4
+ import type { PivotConfig } from "../../types/PivotTypes";
5
+ import Row from "../../types/Row";
6
+ import RowState from "../../types/RowState";
7
+ import { DimensionManager } from "../../managers/DimensionManager";
8
+ import { ScrollManager } from "../../managers/ScrollManager";
9
+ import type { SectionScrollController } from "../../managers/SectionScrollController";
10
+ import { SortManager } from "../../managers/SortManager";
11
+ import { FilterManager } from "../../managers/FilterManager";
12
+ import { SelectionManager } from "../../managers/SelectionManager";
13
+ import { RowSelectionManager } from "../../managers/RowSelectionManager";
14
+ import type { AnimationCoordinator } from "../../managers/AnimationCoordinator";
15
+ import type { AccordionAxis } from "../../utils/accordionAnimation";
16
+ import type { NestedTableFactory } from "../../utils/nestedGridRowRenderer";
17
+ import { ResolvedIcons } from "../initialization/TableInitializer";
18
+ export interface RenderContext {
19
+ /**
20
+ * Active accordion animation axis for this render. Set on row-grouping or
21
+ * nested-column collapse/expand toggles. Cell renderers use it to initialize
22
+ * incoming cells at zero size in the named axis so the CSS size transition
23
+ * can grow them while sibling cells FLIP into place.
24
+ */
25
+ accordionAxis?: AccordionAxis;
26
+ animationCoordinator?: AnimationCoordinator;
27
+ cellRegistry: Map<string, any>;
28
+ collapsedHeaders: Set<Accessor>;
29
+ collapsedRows: Map<string, number>;
30
+ config: SimpleTableConfig;
31
+ customTheme: CustomTheme;
32
+ dimensionManager: DimensionManager | null;
33
+ draggedHeaderRef: {
34
+ current: ColumnDef | null;
35
+ };
36
+ effectiveHeaders: ColumnDef[];
37
+ essentialAccessors: Set<string>;
38
+ expandedDepths: Set<number>;
39
+ expandedRows: Map<string, number>;
40
+ filterManager: FilterManager | null;
41
+ getCollapsedRows: () => Map<string, number>;
42
+ getCollapsedHeaders?: () => Set<Accessor>;
43
+ getExpandedRows: () => Map<string, number>;
44
+ getHeaders: () => ColumnDef[];
45
+ /** Last ingested column definitions — the reset target for the column editor's reset button. */
46
+ getPristineDefaultHeaders: () => ColumnDef[];
47
+ getPivot: () => PivotConfig | null;
48
+ setPivot: (pivot: PivotConfig | null) => void;
49
+ getRowStateMap: () => Map<string | number, RowState>;
50
+ headerRegistry: Map<string, any>;
51
+ headers: ColumnDef[];
52
+ /**
53
+ * Unique id for this table instance. Scopes row-hover cell tracking so
54
+ * multiple tables on one page with overlapping rowIds don't cross-hover.
55
+ */
56
+ hoverScopeId: string;
57
+ hoveredHeaderRef: {
58
+ current: ColumnDef | null;
59
+ };
60
+ internalIsLoading: boolean;
61
+ isResizing: boolean;
62
+ localRows: Row[];
63
+ /** Injected factory for nested grid tables (breaks the SimpleTableVanilla import cycle). */
64
+ createNestedTable?: NestedTableFactory;
65
+ mainBodyRef: {
66
+ current: HTMLDivElement | null;
67
+ };
68
+ mainHeaderRef: {
69
+ current: HTMLDivElement | null;
70
+ };
71
+ onRender: () => void;
72
+ /** Natural-width shrink floors (accessor -> px) for auto-expand column resize. */
73
+ getShrinkFloors?: () => Map<string, number>;
74
+ /** Persist user-set widths (drag / double-click auto-fit) as natural widths. */
75
+ onAutoExpandNaturalWidths?: (widths: Map<string, number>) => void;
76
+ pinnedLeftHeaderRef: {
77
+ current: HTMLDivElement | null;
78
+ };
79
+ pinnedLeftRef: {
80
+ current: HTMLDivElement | null;
81
+ };
82
+ pinnedRightHeaderRef: {
83
+ current: HTMLDivElement | null;
84
+ };
85
+ pinnedRightRef: {
86
+ current: HTMLDivElement | null;
87
+ };
88
+ resolvedIcons: ResolvedIcons;
89
+ rowSelectionManager: RowSelectionManager | null;
90
+ rowStateMap: Map<string | number, RowState>;
91
+ scrollManager: ScrollManager | null;
92
+ sectionScrollController: SectionScrollController | null;
93
+ selectionManager: SelectionManager | null;
94
+ setCollapsedHeaders: (headers: Set<Accessor>) => void;
95
+ setCollapsedRows: (rows: Map<string, number>) => void;
96
+ setColumnEditorOpen: (open: boolean) => void;
97
+ setCurrentPage: (page: number) => void;
98
+ setExpandedRows: (rows: Map<string, number>) => void;
99
+ setHeaders: (headers: ColumnDef[]) => void;
100
+ setIsResizing: (value: boolean) => void;
101
+ setRowStateMap: (map: Map<string | number, any>) => void;
102
+ sortManager: SortManager | null;
103
+ /** When true, body cells that stay visible get only position updates (no content/selection recalc). Used during vertical scroll for performance. */
104
+ positionOnlyBody?: boolean;
105
+ /**
106
+ * Mid column-header drag. Row model is unchanged — reuse last flatten/process
107
+ * results and only repaint header/body lefts.
108
+ */
109
+ columnDragging?: boolean;
110
+ /**
111
+ * Visible portion of the table inside an external scroll parent (in pixels).
112
+ * Set per render when `config.scrollParent` is active and no explicit
113
+ * `height`/`maxHeight` is set. Drives virtualization the same way an
114
+ * explicit `height` does, but the scroll source is external.
115
+ */
116
+ externalViewportHeight?: number;
117
+ }
118
+ export interface RenderState {
119
+ currentPage: number;
120
+ scrollTop: number;
121
+ scrollDirection: "up" | "down" | "none";
122
+ scrollbarWidth: number;
123
+ isMainSectionScrollable: boolean;
124
+ columnEditorOpen: boolean;
125
+ }
@@ -1,123 +1,13 @@
1
1
  import { SimpleTableConfig } from "../../types/SimpleTableConfig";
2
2
  import { CustomTheme } from "../../types/CustomTheme";
3
- import ColumnDef, { Accessor } from "../../types/ColumnDef";
4
- import Row from "../../types/Row";
5
- import RowState from "../../types/RowState";
6
- import { DimensionManager } from "../../managers/DimensionManager";
7
- import { ScrollManager } from "../../managers/ScrollManager";
8
- import type { SectionScrollController } from "../../managers/SectionScrollController";
9
- import { SortManager } from "../../managers/SortManager";
10
- import { FilterManager } from "../../managers/FilterManager";
11
- import { SelectionManager } from "../../managers/SelectionManager";
12
- import { RowSelectionManager } from "../../managers/RowSelectionManager";
13
- import type { AnimationCoordinator, CellPosition } from "../../managers/AnimationCoordinator";
14
- import type { AccordionAxis } from "../../utils/accordionAnimation";
15
- import type { NestedTableFactory } from "../../utils/nestedGridRowRenderer";
3
+ import ColumnDef from "../../types/ColumnDef";
4
+ import type { CellPosition } from "../../managers/AnimationCoordinator";
5
+ import type { HeaderScrollLiveSelection } from "./SectionRenderer";
6
+ import { MergedColumnEditorConfig } from "../initialization/TableInitializer";
16
7
  import { FlattenRowsResult } from "../../utils/rowFlattening";
17
8
  import { ProcessRowsResult } from "../../utils/rowProcessing";
18
- import { MergedColumnEditorConfig, ResolvedIcons } from "../initialization/TableInitializer";
19
- export interface RenderContext {
20
- /**
21
- * Active accordion animation axis for this render. Set on row-grouping or
22
- * nested-column collapse/expand toggles (see
23
- * {@link SimpleTableVanilla.beginAccordionAnimation}). Cell renderers use it
24
- * to initialize incoming cells at zero size in the named axis so the CSS
25
- * size transition can grow them while sibling cells FLIP into place.
26
- */
27
- accordionAxis?: AccordionAxis;
28
- animationCoordinator?: AnimationCoordinator;
29
- cellRegistry: Map<string, any>;
30
- collapsedHeaders: Set<Accessor>;
31
- collapsedRows: Map<string, number>;
32
- config: SimpleTableConfig;
33
- customTheme: CustomTheme;
34
- dimensionManager: DimensionManager | null;
35
- draggedHeaderRef: {
36
- current: ColumnDef | null;
37
- };
38
- effectiveHeaders: ColumnDef[];
39
- essentialAccessors: Set<string>;
40
- expandedDepths: Set<number>;
41
- expandedRows: Map<string, number>;
42
- filterManager: FilterManager | null;
43
- getCollapsedRows: () => Map<string, number>;
44
- getCollapsedHeaders?: () => Set<Accessor>;
45
- getExpandedRows: () => Map<string, number>;
46
- getHeaders: () => ColumnDef[];
47
- /** Pristine snapshot of the configured column definitions — the reset target for the column editor's reset button. */
48
- getPristineDefaultHeaders: () => ColumnDef[];
49
- getRowStateMap: () => Map<string | number, RowState>;
50
- headerRegistry: Map<string, any>;
51
- headers: ColumnDef[];
52
- /**
53
- * Unique id for this table instance. Scopes row-hover cell tracking so
54
- * multiple tables on one page with overlapping rowIds don't cross-hover.
55
- */
56
- hoverScopeId: string;
57
- hoveredHeaderRef: {
58
- current: ColumnDef | null;
59
- };
60
- internalIsLoading: boolean;
61
- isResizing: boolean;
62
- localRows: Row[];
63
- /** Injected factory for nested grid tables (breaks the SimpleTableVanilla import cycle). */
64
- createNestedTable?: NestedTableFactory;
65
- mainBodyRef: {
66
- current: HTMLDivElement | null;
67
- };
68
- mainHeaderRef: {
69
- current: HTMLDivElement | null;
70
- };
71
- onRender: () => void;
72
- /** Natural-width shrink floors (accessor -> px) for auto-expand column resize. */
73
- getShrinkFloors?: () => Map<string, number>;
74
- /** Persist user-set widths (drag / double-click auto-fit) as natural widths. */
75
- onAutoExpandNaturalWidths?: (widths: Map<string, number>) => void;
76
- pinnedLeftHeaderRef: {
77
- current: HTMLDivElement | null;
78
- };
79
- pinnedLeftRef: {
80
- current: HTMLDivElement | null;
81
- };
82
- pinnedRightHeaderRef: {
83
- current: HTMLDivElement | null;
84
- };
85
- pinnedRightRef: {
86
- current: HTMLDivElement | null;
87
- };
88
- resolvedIcons: ResolvedIcons;
89
- rowSelectionManager: RowSelectionManager | null;
90
- rowStateMap: Map<string | number, RowState>;
91
- scrollManager: ScrollManager | null;
92
- sectionScrollController: SectionScrollController | null;
93
- selectionManager: SelectionManager | null;
94
- setCollapsedHeaders: (headers: Set<Accessor>) => void;
95
- setCollapsedRows: (rows: Map<string, number>) => void;
96
- setColumnEditorOpen: (open: boolean) => void;
97
- setCurrentPage: (page: number) => void;
98
- setExpandedRows: (rows: Map<string, number>) => void;
99
- setHeaders: (headers: ColumnDef[]) => void;
100
- setIsResizing: (value: boolean) => void;
101
- setRowStateMap: (map: Map<string | number, any>) => void;
102
- sortManager: SortManager | null;
103
- /** When true, body cells that stay visible get only position updates (no content/selection recalc). Used during vertical scroll for performance. */
104
- positionOnlyBody?: boolean;
105
- /**
106
- * Visible portion of the table inside an external scroll parent (in pixels).
107
- * Set by {@link SimpleTableVanilla} per render when `config.scrollParent` is
108
- * active and no explicit `height`/`maxHeight` is set. Drives virtualization
109
- * the same way an explicit `height` does, but the scroll source is external.
110
- */
111
- externalViewportHeight?: number;
112
- }
113
- export interface RenderState {
114
- currentPage: number;
115
- scrollTop: number;
116
- scrollDirection: "up" | "down" | "none";
117
- scrollbarWidth: number;
118
- isMainSectionScrollable: boolean;
119
- columnEditorOpen: boolean;
120
- }
9
+ import type { RenderContext, RenderState } from "./RenderContext";
10
+ export type { RenderContext, RenderState } from "./RenderContext";
121
11
  export declare class RenderOrchestrator {
122
12
  private tableRenderer;
123
13
  private lastHeadersRef;
@@ -136,6 +26,8 @@ export declare class RenderOrchestrator {
136
26
  getLastProcessedResult(): ProcessRowsResult | null;
137
27
  /** See {@link TableRenderer.getCurrentBodyLayouts}. */
138
28
  getCurrentBodyLayouts(): Map<HTMLElement, Map<string, CellPosition>>;
29
+ /** Re-virtualize main header and body cells for a new horizontal scroll position. */
30
+ virtualizeMainColumnsForScroll(scrollLeft: number, liveSelection?: HeaderScrollLiveSelection): void;
139
31
  setOnRendererHostDiscard(cb: ((host: HTMLElement) => void) | undefined): void;
140
32
  invalidateCache(type?: "body" | "header" | "context" | "all"): void;
141
33
  /** @see TableRenderer.invalidateCustomFooterCache */
@@ -1,8 +1,13 @@
1
- import ColumnDef, { Accessor } from "../../types/ColumnDef";
2
1
  import { HeaderRenderContext } from "../../utils/headerCellRenderer";
3
2
  import { CellRenderContext } from "../../utils/bodyCellRenderer";
4
3
  import TableRow from "../../types/TableRow";
4
+ import ColumnDef, { Accessor } from "../../types/ColumnDef";
5
5
  import type { AnimationCoordinator, CellPosition } from "../../managers/AnimationCoordinator";
6
+ /** Live selection sets merged into the last header paint during horizontal scroll. */
7
+ export interface HeaderScrollLiveSelection {
8
+ columnsWithSelectedCells: Set<number>;
9
+ selectedColumns: Set<number>;
10
+ }
6
11
  export interface HeaderSectionParams {
7
12
  headers: ColumnDef[];
8
13
  collapsedHeaders: Set<Accessor>;
@@ -51,26 +56,27 @@ export declare class SectionRenderer {
51
56
  * renderer subtrees (React portals, etc.) before the nodes are discarded.
52
57
  */
53
58
  private onRendererHostDiscard?;
54
- private bodyCellsCache;
55
- private headerCellsCache;
56
- private contextCache;
59
+ private caches;
57
60
  private bodySectionSnapshots;
58
61
  private nextColIndexMap;
59
62
  private stateRowsMap;
60
63
  private nestedGridRowsMap;
64
+ private mainHeaderScrollPaint;
65
+ private mainBodyScrollPaint;
61
66
  renderHeaderSection(params: HeaderSectionParams): HTMLElement;
62
67
  renderBodySection(params: BodySectionParams): HTMLElement;
63
- private renderNestedGridRows;
64
- private renderStateRows;
65
- private calculateAbsoluteHeaderCells;
66
- private calculateAbsoluteBodyCells;
67
- private getLeafHeaders;
68
- private createHeadersHash;
69
- private createHeightOffsetsHash;
70
- private createContextHash;
71
- private getCachedBodyCells;
72
- private getCachedHeaderCells;
73
- private getCachedContext;
68
+ /**
69
+ * Re-virtualize main header cells for a new horizontal scroll position.
70
+ * No-op until the main header has painted. When `liveSelection` is passed,
71
+ * header selected classes use those sets instead of the last painted context.
72
+ */
73
+ virtualizeMainHeaderForScroll(scrollLeft: number, liveSelection?: HeaderScrollLiveSelection): void;
74
+ /**
75
+ * Re-virtualize main body cells for a new horizontal scroll position.
76
+ * Updates cell positions only (no content/selection refresh). No-op until
77
+ * the main body has painted.
78
+ */
79
+ virtualizeMainBodyForScroll(scrollLeft: number): void;
74
80
  setOnRendererHostDiscard(cb: ((host: HTMLElement) => void) | undefined): void;
75
81
  invalidateCache(type?: "body" | "header" | "context" | "all"): void;
76
82
  /**
@@ -1,98 +1,7 @@
1
- import ColumnDef, { Accessor } from "../../types/ColumnDef";
2
- import { SimpleTableConfig } from "../../types/SimpleTableConfig";
3
- import { CustomTheme } from "../../types/CustomTheme";
4
- import { DimensionManager } from "../../managers/DimensionManager";
5
- import type { SectionScrollController } from "../../managers/SectionScrollController";
6
- import { SortManager } from "../../managers/SortManager";
7
- import { FilterManager } from "../../managers/FilterManager";
8
- import { SelectionManager } from "../../managers/SelectionManager";
9
- import { RowSelectionManager } from "../../managers/RowSelectionManager";
10
- import type { AnimationCoordinator, CellPosition } from "../../managers/AnimationCoordinator";
11
- import type { AccordionAxis } from "../../utils/accordionAnimation";
12
- import type { NestedTableFactory } from "../../utils/nestedGridRowRenderer";
13
- export interface TableRendererDeps {
14
- /** Accordion animation axis for the in-flight collapse/expand. See {@link RenderContext.accordionAxis}. */
15
- accordionAxis?: AccordionAxis;
16
- animationCoordinator?: AnimationCoordinator;
17
- /**
18
- * True when the table is using an external `scrollParent` (no `height`/`maxHeight`).
19
- * In this mode the main body container does not scroll — the parent does — so
20
- * the sticky-parents container reads its scrollTop from `stickyParentsScrollTop`
21
- * (sourced from the table's external-aware state) instead of `mainBodyRef.scrollTop`.
22
- */
23
- externalScrollActive?: boolean;
24
- /** Externally-tracked scrollTop (already translated into table coordinates). */
25
- stickyParentsScrollTop?: number;
26
- cellRegistry: Map<string, any>;
27
- collapsedHeaders: Set<Accessor>;
28
- collapsedRows: Map<string, number>;
29
- config: SimpleTableConfig;
30
- customTheme: CustomTheme;
31
- dimensionManager: DimensionManager | null;
32
- draggedHeaderRef: {
33
- current: ColumnDef | null;
34
- };
35
- effectiveHeaders: ColumnDef[];
36
- essentialAccessors: Set<string>;
37
- expandedDepths: Set<number>;
38
- expandedRows: Map<string, number>;
39
- filterManager: FilterManager | null;
40
- getCollapsedHeaders?: () => Set<Accessor>;
41
- getCollapsedRows: () => Map<string, number>;
42
- getExpandedRows: () => Map<string, number>;
43
- getHeaders: () => ColumnDef[];
44
- /** Pristine snapshot of the configured column definitions — the reset target for the column editor's reset button. */
45
- getPristineDefaultHeaders: () => ColumnDef[];
46
- getRowStateMap: () => Map<string | number, any>;
47
- headerRegistry: Map<string, any>;
48
- headers: ColumnDef[];
49
- /** Unique id for this table instance — scopes row-hover cell tracking. */
50
- hoverScopeId: string;
51
- hoveredHeaderRef: {
52
- current: ColumnDef | null;
53
- };
54
- internalIsLoading: boolean;
55
- isResizing: boolean;
56
- localRows: any[];
57
- mainBodyRef: {
58
- current: HTMLDivElement | null;
59
- };
60
- mainHeaderRef: {
61
- current: HTMLDivElement | null;
62
- };
63
- onRender: () => void;
64
- /** Natural-width shrink floors (accessor -> px) for auto-expand column resize. */
65
- getShrinkFloors?: () => Map<string, number>;
66
- /** Persist user-set widths (drag / double-click auto-fit) as natural widths. */
67
- onAutoExpandNaturalWidths?: (widths: Map<string, number>) => void;
68
- pinnedLeftHeaderRef: {
69
- current: HTMLDivElement | null;
70
- };
71
- pinnedLeftRef: {
72
- current: HTMLDivElement | null;
73
- };
74
- pinnedRightHeaderRef: {
75
- current: HTMLDivElement | null;
76
- };
77
- pinnedRightRef: {
78
- current: HTMLDivElement | null;
79
- };
80
- positionOnlyBody?: boolean; /** When true, scroll path updates cell geometry only (no full content/selection refresh); row separators still sync. */
81
- resolvedIcons: any;
82
- rowSelectionManager: RowSelectionManager | null;
83
- rowStateMap: Map<string | number, any>;
84
- sectionScrollController: SectionScrollController | null;
85
- selectionManager: SelectionManager | null;
86
- setCollapsedHeaders: (headers: Set<Accessor>) => void;
87
- setCollapsedRows: (rows: Map<string, number>) => void;
88
- setExpandedRows: (rows: Map<string, number>) => void;
89
- setHeaders: (headers: ColumnDef[]) => void;
90
- setIsResizing: (value: boolean) => void;
91
- setRowStateMap: (map: Map<string | number, any>) => void;
92
- sortManager: SortManager | null;
93
- /** Injected factory for nested grid tables (breaks the SimpleTableVanilla import cycle). */
94
- createNestedTable?: NestedTableFactory;
95
- }
1
+ import { type HeaderScrollLiveSelection } from "./SectionRenderer";
2
+ import type { CellPosition } from "../../managers/AnimationCoordinator";
3
+ import type { TableRendererDeps } from "./TableRendererDeps";
4
+ export type { TableRendererDeps } from "./TableRendererDeps";
96
5
  export declare class TableRenderer {
97
6
  private sectionRenderer;
98
7
  private footerInstance;
@@ -117,6 +26,8 @@ export declare class TableRenderer {
117
26
  invalidateCustomFooterCache(): void;
118
27
  /** See {@link SectionRenderer.getCurrentBodyLayouts}. */
119
28
  getCurrentBodyLayouts(): Map<HTMLElement, Map<string, CellPosition>>;
29
+ /** Re-virtualize main header and body cells for a new horizontal scroll position. */
30
+ virtualizeMainColumnsForScroll(scrollLeft: number, liveSelection?: HeaderScrollLiveSelection): void;
120
31
  renderHeader(container: HTMLElement, calculatedHeaderHeight: number, maxHeaderDepth: number, deps: TableRendererDeps): void;
121
32
  renderBody(container: HTMLElement, processedResult: any, deps: TableRendererDeps): void;
122
33
  renderFooter(container: HTMLElement, totalRows: number, currentPage: number, onPageChange: (page: number) => void, deps: TableRendererDeps): void;
@@ -0,0 +1,98 @@
1
+ import ColumnDef, { Accessor } from "../../types/ColumnDef";
2
+ import type { PivotConfig } from "../../types/PivotTypes";
3
+ import { SimpleTableConfig } from "../../types/SimpleTableConfig";
4
+ import { CustomTheme } from "../../types/CustomTheme";
5
+ import { DimensionManager } from "../../managers/DimensionManager";
6
+ import type { SectionScrollController } from "../../managers/SectionScrollController";
7
+ import { SortManager } from "../../managers/SortManager";
8
+ import { FilterManager } from "../../managers/FilterManager";
9
+ import { SelectionManager } from "../../managers/SelectionManager";
10
+ import { RowSelectionManager } from "../../managers/RowSelectionManager";
11
+ import type { AnimationCoordinator } from "../../managers/AnimationCoordinator";
12
+ import type { AccordionAxis } from "../../utils/accordionAnimation";
13
+ import type { NestedTableFactory } from "../../utils/nestedGridRowRenderer";
14
+ export interface TableRendererDeps {
15
+ /** Accordion animation axis for the in-flight collapse/expand. See {@link RenderContext.accordionAxis}. */
16
+ accordionAxis?: AccordionAxis;
17
+ animationCoordinator?: AnimationCoordinator;
18
+ /**
19
+ * True when the table is using an external `scrollParent` (no `height`/`maxHeight`).
20
+ * In this mode the main body container does not scroll — the parent does — so
21
+ * the sticky-parents container reads its scrollTop from `stickyParentsScrollTop`
22
+ * (sourced from the table's external-aware state) instead of `mainBodyRef.scrollTop`.
23
+ */
24
+ externalScrollActive?: boolean;
25
+ /** Externally-tracked scrollTop (already translated into table coordinates). */
26
+ stickyParentsScrollTop?: number;
27
+ cellRegistry: Map<string, any>;
28
+ collapsedHeaders: Set<Accessor>;
29
+ collapsedRows: Map<string, number>;
30
+ config: SimpleTableConfig;
31
+ customTheme: CustomTheme;
32
+ dimensionManager: DimensionManager | null;
33
+ draggedHeaderRef: {
34
+ current: ColumnDef | null;
35
+ };
36
+ effectiveHeaders: ColumnDef[];
37
+ essentialAccessors: Set<string>;
38
+ expandedDepths: Set<number>;
39
+ expandedRows: Map<string, number>;
40
+ filterManager: FilterManager | null;
41
+ getCollapsedHeaders?: () => Set<Accessor>;
42
+ getCollapsedRows: () => Map<string, number>;
43
+ getExpandedRows: () => Map<string, number>;
44
+ getHeaders: () => ColumnDef[];
45
+ /** Last ingested column definitions — the reset target for the column editor's reset button. */
46
+ getPristineDefaultHeaders: () => ColumnDef[];
47
+ getPivot: () => PivotConfig | null;
48
+ setPivot: (pivot: PivotConfig | null) => void;
49
+ getRowStateMap: () => Map<string | number, any>;
50
+ headerRegistry: Map<string, any>;
51
+ headers: ColumnDef[];
52
+ /** Unique id for this table instance — scopes row-hover cell tracking. */
53
+ hoverScopeId: string;
54
+ hoveredHeaderRef: {
55
+ current: ColumnDef | null;
56
+ };
57
+ internalIsLoading: boolean;
58
+ isResizing: boolean;
59
+ localRows: any[];
60
+ mainBodyRef: {
61
+ current: HTMLDivElement | null;
62
+ };
63
+ mainHeaderRef: {
64
+ current: HTMLDivElement | null;
65
+ };
66
+ onRender: () => void;
67
+ /** Natural-width shrink floors (accessor -> px) for auto-expand column resize. */
68
+ getShrinkFloors?: () => Map<string, number>;
69
+ /** Persist user-set widths (drag / double-click auto-fit) as natural widths. */
70
+ onAutoExpandNaturalWidths?: (widths: Map<string, number>) => void;
71
+ pinnedLeftHeaderRef: {
72
+ current: HTMLDivElement | null;
73
+ };
74
+ pinnedLeftRef: {
75
+ current: HTMLDivElement | null;
76
+ };
77
+ pinnedRightHeaderRef: {
78
+ current: HTMLDivElement | null;
79
+ };
80
+ pinnedRightRef: {
81
+ current: HTMLDivElement | null;
82
+ };
83
+ positionOnlyBody?: boolean; /** When true, scroll path updates cell geometry only (no full content/selection refresh); row separators still sync. */
84
+ resolvedIcons: any;
85
+ rowSelectionManager: RowSelectionManager | null;
86
+ rowStateMap: Map<string | number, any>;
87
+ sectionScrollController: SectionScrollController | null;
88
+ selectionManager: SelectionManager | null;
89
+ setCollapsedHeaders: (headers: Set<Accessor>) => void;
90
+ setCollapsedRows: (rows: Map<string, number>) => void;
91
+ setExpandedRows: (rows: Map<string, number>) => void;
92
+ setHeaders: (headers: ColumnDef[]) => void;
93
+ setIsResizing: (value: boolean) => void;
94
+ setRowStateMap: (map: Map<string | number, any>) => void;
95
+ sortManager: SortManager | null;
96
+ /** Injected factory for nested grid tables (breaks the SimpleTableVanilla import cycle). */
97
+ createNestedTable?: NestedTableFactory;
98
+ }
@@ -0,0 +1,94 @@
1
+ import type ColumnDef from "../../types/ColumnDef";
2
+ import type { Accessor } from "../../types/ColumnDef";
3
+ import type { SimpleTableConfig } from "../../types/SimpleTableConfig";
4
+ import type { CustomTheme } from "../../types/CustomTheme";
5
+ import type Row from "../../types/Row";
6
+ import type RowState from "../../types/RowState";
7
+ import type { PivotConfig } from "../../types/PivotTypes";
8
+ import type { AnimationCoordinator } from "../../managers/AnimationCoordinator";
9
+ import type { DimensionManager } from "../../managers/DimensionManager";
10
+ import type { ScrollManager } from "../../managers/ScrollManager";
11
+ import type { SectionScrollController } from "../../managers/SectionScrollController";
12
+ import type { SortManager } from "../../managers/SortManager";
13
+ import type { FilterManager } from "../../managers/FilterManager";
14
+ import type { SelectionManager } from "../../managers/SelectionManager";
15
+ import type { RowSelectionManager } from "../../managers/RowSelectionManager";
16
+ import type { AccordionAxis } from "../../utils/accordionAnimation";
17
+ import type { NestedTableFactory } from "../../utils/nestedGridRowRenderer";
18
+ import type { ResolvedIcons } from "../initialization/TableInitializer";
19
+ import type { RenderContext } from "./RenderContext";
20
+ export interface RenderContextSource {
21
+ accordionAxis: AccordionAxis;
22
+ animationCoordinator: AnimationCoordinator;
23
+ cellRegistry: Map<string, any>;
24
+ collapsedHeaders: Set<Accessor>;
25
+ collapsedRows: Map<string, number>;
26
+ config: SimpleTableConfig;
27
+ customTheme: CustomTheme;
28
+ dimensionManager: DimensionManager | null;
29
+ draggedHeaderRef: {
30
+ current: ColumnDef | null;
31
+ };
32
+ essentialAccessors: Set<string>;
33
+ expandedDepths: Set<number>;
34
+ expandedRows: Map<string, number>;
35
+ filterManager: FilterManager | null;
36
+ headerRegistry: Map<string, any>;
37
+ headers: ColumnDef[];
38
+ hoverScopeId: string;
39
+ hoveredHeaderRef: {
40
+ current: ColumnDef | null;
41
+ };
42
+ internalIsLoading: boolean;
43
+ isResizing: boolean;
44
+ localRows: Row[];
45
+ createNestedTable: NestedTableFactory;
46
+ mainBodyRef: {
47
+ current: HTMLDivElement | null;
48
+ };
49
+ mainHeaderRef: {
50
+ current: HTMLDivElement | null;
51
+ };
52
+ pinnedLeftHeaderRef: {
53
+ current: HTMLDivElement | null;
54
+ };
55
+ pinnedLeftRef: {
56
+ current: HTMLDivElement | null;
57
+ };
58
+ pinnedRightHeaderRef: {
59
+ current: HTMLDivElement | null;
60
+ };
61
+ pinnedRightRef: {
62
+ current: HTMLDivElement | null;
63
+ };
64
+ positionOnlyBody?: boolean;
65
+ columnDragging?: boolean;
66
+ externalViewportHeight?: number;
67
+ resolvedIcons: ResolvedIcons;
68
+ rowSelectionManager: RowSelectionManager | null;
69
+ rowStateMap: Map<string | number, RowState>;
70
+ scrollManager: ScrollManager | null;
71
+ sectionScrollController: SectionScrollController | null;
72
+ selectionManager: SelectionManager | null;
73
+ sortManager: SortManager | null;
74
+ onRender: () => void;
75
+ getShrinkFloors: () => Map<string, number>;
76
+ onAutoExpandNaturalWidths: (widths: Map<string, number>) => void;
77
+ setIsResizing: (value: boolean) => void;
78
+ setHeaders: (headers: ColumnDef[]) => void;
79
+ setCollapsedHeaders: (headers: Set<Accessor>) => void;
80
+ setCollapsedRows: (rowsOrUpdater: Map<string, number> | ((prev: Map<string, number>) => Map<string, number>)) => void;
81
+ setExpandedRows: (rowsOrUpdater: Map<string, number> | ((prev: Map<string, number>) => Map<string, number>)) => void;
82
+ setRowStateMap: (mapOrUpdater: Map<string | number, any> | ((prev: Map<string | number, any>) => Map<string | number, any>)) => void;
83
+ getCollapsedRows: () => Map<string, number>;
84
+ getCollapsedHeaders: () => Set<Accessor>;
85
+ getExpandedRows: () => Map<string, number>;
86
+ getHeaders: () => ColumnDef[];
87
+ getPristineDefaultHeaders: () => ColumnDef[];
88
+ getPivot: () => PivotConfig | null;
89
+ setPivot: (pivot: PivotConfig | null) => void;
90
+ getRowStateMap: () => Map<string | number, RowState>;
91
+ setColumnEditorOpen: (open: boolean) => void;
92
+ setCurrentPage: (page: number) => void;
93
+ }
94
+ export declare const buildRenderContext: (source: RenderContextSource) => RenderContext;