@infinite-table/infinite-react 6.0.19 → 6.1.0-canary.0

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 (7) hide show
  1. package/index.css +11 -9
  2. package/index.d.ts +143 -97
  3. package/index.dev.js +1303 -887
  4. package/index.dev.mjs +1308 -892
  5. package/index.js +1303 -887
  6. package/index.mjs +1308 -892
  7. package/package.json +2 -2
package/index.css CHANGED
@@ -967,7 +967,7 @@
967
967
  }
968
968
  }
969
969
 
970
- /* vanilla-extract-css-ns:src/components/InfiniteTable/theme-minimalist.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+3X3WrbMBQA4Ps8xYHctDCFJNto0W4G68r2GIp0HIvKkjiS68Douw+r2eY6jn+WbGM0F7nJ+fE5cvRBFtpm2uqILOZYILOiQMYKbXUhjA6Rk3PxDSwG0uDbDICxn1mZESHXdss2Qj5syZVWcXgUdNXIEVKijUw64+j6w5H60ve1CKWUGMJAD+Uq29cFiRx192hWVbmO2IqnIg7z9d3bm3e3rSC56kWDSMIGLwht7Mh0So3MLtCWffv8CrXXSZUBvSARf6zMYf757n59f9PKzVEoJCbRGLZxpJA4WGfbJ3CYxkhv89iZ3MyKznNY+R0EZ7Q6MsSLtkLpMnBYdk/QPJChOftTmw81mA2vMm7hSquYc1j6XStJyKgf97naKi3Ty9E2YOSw9rt0SvtPXbr4uq/8knb6hMak+wcQcRdZ+uFkjgoOpfdIUoQ0FkDmbGQVPk+7cUY9f20wRiQWvJDabjksF8v3WNSxp9nTrH31C6eQMVM3mRBqgzEUPySn0XyQo97q8zY+kLCn/WnVfXNf+L3we+H39fCrBD2Mj5wL37r3nyMydX8FkM1XYpWtN0co67yH/w1lnRD/bco6h7hQ9s8p+1ig0gKuPGGGtL9tLMjaAA719b9OTx/yY8p/0tM1OY8n5xFljCkDqkxxZaosp9gyTZfRvkwU5jeMGafMWGcmSTPSmrHajPTmJHH6zBlU56g7ffLU9iR/vgN8VbUc6xIAAA== */
970
+ /* vanilla-extract-css-ns:src/components/InfiniteTable/theme-minimalist.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+3X3WrbMBQA4Ps8xYHAaGEKSbbRod0M1pXtMRTpOBaVJXEk14HRdx9Ws811HP8s2dhoLnKT8+Nz5OiDLLTNtNURWcyxQGZFgYwV2upCGB0iJ+fia1gMpMG3GQBjP7MyI0Ku7ZZthLzfkiut4vAg6KqRI6REG5l0xtH1hyP1pe9rEUopMYSBHspVtq8LEjnq7tGsqnIdsRVPRRzm69s3N2/ft4LkqmcNIgkbvCC0sSPTKTUyu0Bb9u3zK9ReJ1UG9IJE/LEyh/nn27v13U0rN0ehkJhEY9jGkULiYJ1tn8BhGiO9zWNncjMrOs9h5XcQnNHqyBDP2gqly8Bh2T1B80CG5uxPbT7UYDa8yriFK61izmHpd60kIaN+2Odqq7RML0fbgJHD2u/SKe0/dekrWHzd135JW31CY9INBIi4iyz9dDJHBYfSeyQpQhoMIHM2sgqf5t04o56+NhgjEgteSG23HJaL5Tss6tjj7HHWvvyFU8iYqZtMCLXJGIofotNoPghSb/V5Gx9Y2NP+tOq+uS8AXwC+APySAFaC7sdHzsVv3fvPIZm6vwDK5iuxytabI5h13sT/BrNOiv82Zp1DXDD7BzD7WKDSAq48YYa0v28syFoBDjUA1+npQ4JM+Wd6uifnEeU8poxRZcCVKbJMteUUXab5MlqYicb8hjLjnBkrzSRrRmoz1puR4pxkTr86g+4clafPnlqfJNB3mAjZ//MSAAA= */
971
971
  .infinite-theme-name--minimalist:root,
972
972
  .infinite-theme-name--minimalist {
973
973
  --infinite-flashing-background: var(--infinite-accent-color);
@@ -989,7 +989,7 @@
989
989
  --infinite-cell-border-right: none;
990
990
  --infinite-cell-border-width: 0px;
991
991
  --infinite-active-cell-indicator-inset: 2px 1px 1px 1px;
992
- .InfiniteHeaderCell {
992
+ & .InfiniteHeaderCell {
993
993
  text-transform: uppercase;
994
994
  font-weight: bold;
995
995
  letter-spacing: 0.05em;
@@ -1019,7 +1019,7 @@
1019
1019
  --infinite-cell-border-right: none;
1020
1020
  --infinite-cell-border-width: 0px;
1021
1021
  --infinite-active-cell-indicator-inset: 2px 1px 1px 1px;
1022
- .InfiniteHeaderCell {
1022
+ & .InfiniteHeaderCell {
1023
1023
  text-transform: uppercase;
1024
1024
  font-weight: bold;
1025
1025
  letter-spacing: 0.05em;
@@ -1047,7 +1047,7 @@
1047
1047
  --infinite-cell-border-right: none;
1048
1048
  --infinite-cell-border-width: 0px;
1049
1049
  --infinite-active-cell-indicator-inset: 2px 1px 1px 1px;
1050
- .InfiniteHeaderCell {
1050
+ & .InfiniteHeaderCell {
1051
1051
  text-transform: uppercase;
1052
1052
  font-weight: bold;
1053
1053
  letter-spacing: 0.05em;
@@ -1075,7 +1075,7 @@
1075
1075
  --infinite-cell-border-right: none;
1076
1076
  --infinite-cell-border-width: 0px;
1077
1077
  --infinite-active-cell-indicator-inset: 2px 1px 1px 1px;
1078
- .InfiniteHeaderCell {
1078
+ & .InfiniteHeaderCell {
1079
1079
  text-transform: uppercase;
1080
1080
  font-weight: bold;
1081
1081
  letter-spacing: 0.05em;
@@ -1335,7 +1335,7 @@
1335
1335
  }
1336
1336
  }
1337
1337
 
1338
- /* vanilla-extract-css-ns:src/components/InfiniteTable/theme-shadcn.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+1WSY7bMBC8+xU8BWMg1NgD5KJ8IHlBzjTZtohQbKJJ2bNg/h6IUjK0Fsoxcgp00EWsKrZ6UxXaHrXVAXiooAZuRQ2c+0ooaUtCDJ9ZkYGwtw1jnP9BHI3wlbYnfhDy54mwsapkZ0EPCUZICTZwiQZp+3WG37ichG+kBO8XNBRebE4FiJCmNVJW5c1Dx/x4ux0SokqKPSLBDPYq+pTjSNeCXkaEJNAUrsAHamTQZxhR0iTfckUFQsHEHXUTQOU+5jcRjOEHJAVUMosWFmGc9KkKy+CkEoGE9U4Q2JBhVHgGytV9Wn7mwzI681wCr1+BV8IqA8sBTbZgmqqArmR798w8Gq3SjoznE9Vvm6KT0FZpKQIS19ZDKNmTe45a/ZOhfoTMhXGVKNmu2OfwXbQ3N93MXQqOojFhSuFxV+xziTJwnG6p2xovRV20ClXJdqMMEV7u7Aq8cFTqfvK4kQaDun0svkwRPRiQ7SDnuFniYg/PXDMUrcE29yUgMsethS5GltlQkagD1FxpLw5mkIb5pTJBRCekDi/tIDzNoh2B97PJ7jZzF2XxvWd/i8vmBwnngOJPlbG+Dw8YAtbjnXG9HqIcY5/KWKhegbFkqvrUTZRtWNte633TPu+b4f+/RgWcm3aI/uIodQ25s7HfSESzXiTL/HeiV/YnI3s/Mxfr6rdWv7X6rdVvrX5r9Vur3/of/dYv9jXEpJIRAAA= */
1338
+ /* vanilla-extract-css-ns:src/components/InfiniteTable/theme-shadcn.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+1Wy27bMBC8+yt4CmKgVOwAvag/0H5BzzS5MolSXGJJ2UmL/HuhRxtaD9o1egp00MWaGa52h+spjKuMMxF41FADd6IGzoMWSrqSEOMnVmQg7NeGMc7/IiorgjbuyA9C/jgSNk6V7CToMcEIKcFFLtEibb8s8BufkwiNlBDCFQ2FZ5dTASKkeY2UpYN97Jnvv27HhE4lxVZIsIC9qD7leDK1oNcJISk0hSsIkRoZzQkmlLTJtxyhQSiYOaNuIqjcx/whgrX8gKSASubQwVUYJ3PU8To4mUQk4YIXBC5mGBpPQLm5z8svfFhGZ5lLEMxP4Fo4ZeF6QbMWTFsV0Zds719YQGtU6sju/cz0W1P0EsYpI0VE4sYFiCV79i+d1vBkqO8lc2G9FiXbFfscvq/2ZtMtnKWgEo2NcwpPu2Kfa5SFat5StxkvRZ2Nirpku0mHCM93ugLPHJW6nzw10uiibp+Kz3PEABZke5Fz3CzxqocXjhmL1uCa+xrQMafWQt9VltlQHdFEqLkyQRzsqA3LS2WGiF5IE1/bi/C8iPYEISw2u9/MfZUPrPg28L926+Y7Ce+Bur9VxgYnHjBGrKdb43JBdIKMPZTdqAYFxpJ7NTRvZnDj6Q5ab5v2eduME0CNCji37TX6h1dpbsi9myaORDSbRrLM/yd6EYAysvczc7WuiWtNXGviWhPXmrjWxLUmro+ZuH4DZ2OYjZYRAAA= */
1339
1339
  .infinite-theme-name--shadcn:root,
1340
1340
  .infinite-theme-name--shadcn {
1341
1341
  --infinite-flashing-background: var(--infinite-accent-color);
@@ -1371,7 +1371,7 @@
1371
1371
  --infinite-menu-item-disabled-background: transparent;
1372
1372
  --infinite-menu-item-disabled-opacity: 0.2;
1373
1373
  --infinite-menu-item-pressed-background: hsl(var(--accent));
1374
- .InfiniteHeaderWrapper {
1374
+ & .InfiniteHeaderWrapper {
1375
1375
  border-bottom: var(--infinite-cell-border-top);
1376
1376
  &:hover {
1377
1377
  background-color: var(--infinite-row-hover-background);
@@ -1416,7 +1416,7 @@
1416
1416
  --infinite-menu-item-disabled-background: transparent;
1417
1417
  --infinite-menu-item-disabled-opacity: 0.2;
1418
1418
  --infinite-menu-item-pressed-background: hsl(var(--accent));
1419
- .InfiniteHeaderWrapper {
1419
+ & .InfiniteHeaderWrapper {
1420
1420
  border-bottom: var(--infinite-cell-border-top);
1421
1421
  &:hover {
1422
1422
  background-color: var(--infinite-row-hover-background);
@@ -1798,9 +1798,11 @@
1798
1798
  height: var(--infinite-header-cell-icon-size);
1799
1799
  }
1800
1800
 
1801
- /* vanilla-extract-css-ns:src/components/InfiniteTable/components/icons/ExpandCollapseIcon.css.ts.vanilla.css?source=LkV4cGFuZENvbGxhcHNlSWNvbl9FeHBhbmRlckljb25DbHNfXzZyZG15ZzAgewogIGZpbGw6IHZhcigtLWluZmluaXRlLWV4cGFuZC1jb2xsYXBzZS1pY29uLWNvbG9yKTsKfQouRXhwYW5kQ29sbGFwc2VJY29uX0V4cGFuZGVySWNvbkNsc1ZhcmlhbnRzX2Rpc2FibGVkX3RydWVfXzZyZG15ZzYgewogIGN1cnNvcjogYXV0bzsKICBvcGFjaXR5OiAwLjQ7Cn0= */
1801
+ /* vanilla-extract-css-ns:src/components/InfiniteTable/components/icons/ExpandCollapseIcon.css.ts.vanilla.css?source=LkV4cGFuZENvbGxhcHNlSWNvbl9FeHBhbmRlckljb25DbHNfXzZyZG15ZzAgewogIGZpbGw6IHZhcigtLWluZmluaXRlLWV4cGFuZC1jb2xsYXBzZS1pY29uLWNvbG9yKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKfQouRXhwYW5kQ29sbGFwc2VJY29uX0V4cGFuZGVySWNvbkNsc1ZhcmlhbnRzX2Rpc2FibGVkX3RydWVfXzZyZG15ZzYgewogIGN1cnNvcjogYXV0bzsKICBvcGFjaXR5OiAwLjQ7Cn0= */
1802
1802
  .ExpandCollapseIcon_ExpanderIconCls__6rdmyg0 {
1803
1803
  fill: var(--infinite-expand-collapse-icon-color);
1804
+ display: inline-block;
1805
+ vertical-align: bottom;
1804
1806
  }
1805
1807
  .ExpandCollapseIcon_ExpanderIconClsVariants_disabled_true__6rdmyg6 {
1806
1808
  cursor: auto;
package/index.d.ts CHANGED
@@ -78,7 +78,7 @@ declare type Pair<KeyType, ValueType> = {
78
78
  length: number;
79
79
  revision?: number;
80
80
  };
81
- declare type DeepMapVisitFn<KeyType, ValueType> = (pair: Pair<KeyType, ValueType>, keys: KeyType[], next: VoidFn$1) => void;
81
+ declare type DeepMapVisitFn<KeyType, ValueType, ReturnType = void> = (pair: Pair<KeyType, ValueType>, keys: KeyType[], next: VoidFn$1) => ReturnType;
82
82
  declare class DeepMap<KeyType, ValueType> {
83
83
  private map;
84
84
  private length;
@@ -105,9 +105,11 @@ declare class DeepMap<KeyType, ValueType> {
105
105
  has(keys: KeyType[]): boolean;
106
106
  private visitKey;
107
107
  visit: (fn: DeepMapVisitFn<KeyType, ValueType>) => void;
108
+ visitSome: (fn: (value: ValueType, keys: KeyType[], indexInGroup: number, next?: VoidFn$1 | undefined) => boolean) => void;
108
109
  visitDepthFirst: (fn: (value: ValueType, keys: KeyType[], indexInGroup: number, next?: VoidFn$1 | undefined) => void) => void;
109
110
  private visitWithNext;
110
111
  private getArray;
112
+ rawKeysAt(keys: KeyType[]): KeyType[];
111
113
  valuesAt(keys: KeyType[]): ValueType[];
112
114
  values(): Generator<ValueType, void, unknown>;
113
115
  keys(): Generator<KeyType[], void, unknown>;
@@ -1522,86 +1524,6 @@ declare class RowDetailState<KeyType = any> extends BooleanCollectionState<RowDe
1522
1524
  toggleRowDetails(key: KeyType): void;
1523
1525
  }
1524
1526
 
1525
- declare type SubscriptionCallbackOnChangeFn<T> = (node: T | null) => void;
1526
- interface SubscriptionCallback<T> {
1527
- (node: T, callback?: () => void): void;
1528
- get: () => T | null;
1529
- destroy: VoidFn;
1530
- onChange: (fn: SubscriptionCallbackOnChangeFn<T>) => VoidFn;
1531
- }
1532
-
1533
- /**
1534
- * This class abstracts the following behavior:
1535
- *
1536
- * in the DOM, we have a list (flat, so no nesting) of elements that represent table cells
1537
- * At any one time, just a fraction of all table cells are rendered/present in the DOM
1538
- * and we need to keep track and know for each element what cell represents and for each
1539
- * rendered cell, to what element it is currently mapped (so we need a bi-directional mapping)
1540
- *
1541
- * This class has tests - see tests/mapped-cells.spec.ts
1542
- */
1543
- declare class MappedCells<T_ADDITIONAL_CELL_INFO = any> extends Logger {
1544
- /**
1545
- * This is the mapping from element index to cell info.
1546
- * The index in the array is the element index while the value at the position is an array where
1547
- * the first number is the row index and the second number is the column index.
1548
- */
1549
- private elementIndexToCell;
1550
- /**
1551
- * This is the mapping from cell address to element index.
1552
- * The key in the map is the cell address (built like this: `${rowIndex}:${columnIndex}`)
1553
- * while the value is the element index it is being rendered to.
1554
- */
1555
- private cellToElementIndex;
1556
- private cellAdditionalInfo;
1557
- /**
1558
- * Keeps the JSX of rendered elements in memory, so we can possibly reuse it later.
1559
- */
1560
- private renderedElements;
1561
- private withCellAdditionalInfo;
1562
- constructor(opts?: {
1563
- withCellAdditionalInfo: boolean;
1564
- });
1565
- getElementFromListForColumn: (elementsOutsideItemRange: number[], colIndex: number) => number | undefined;
1566
- getElementFromListForRow: (elementsOutsideItemRange: number[], _rowIndex: number) => number | undefined;
1567
- init(): void;
1568
- reset(): void;
1569
- destroy(): void;
1570
- /**
1571
- * Retrieves the elements that contain rendered cells that are outside
1572
- * of the specified range
1573
- *
1574
- * @param start in [rowIndex, colIndex] format - represents the topmost-leftmost cell visible of the render range
1575
- * @param end in [rowIndex, colIndex] format - represents the bottom-right corner of the visible range. The end is not inclusive,
1576
- * so the last visible cell will be [rowIndex-1, colIndex-1]
1577
- *
1578
- * @returns an array of element indexes that are outside the specified range
1579
- */
1580
- getElementsOutsideRenderRange: (range: TableRenderRange) => number[];
1581
- isCellRendered: (rowIndex: number, columnIndex: number) => boolean;
1582
- getCellAdditionalInfo: (rowIndex: number, columnIndex: number) => T_ADDITIONAL_CELL_INFO | undefined;
1583
- isElementRendered: (elementIndex: number) => boolean;
1584
- getElementsForRowIndex: (rowIndex: number) => number[];
1585
- getAdditionalInfoForRowIndex: (rowIndex: number) => T_ADDITIONAL_CELL_INFO[];
1586
- getRenderedNodeAtElement: (elementIndex: number) => Renderable | null;
1587
- getRenderedCellAtElement: (elementIndex: number) => [
1588
- number,
1589
- number
1590
- ] | null;
1591
- getRenderedNodeForCell: (rowIndex: number, columnIndex: number) => Renderable | null;
1592
- getElementIndexForCell: (rowIndex: number, columnIndex: number) => number | null;
1593
- renderCellAtElement: (rowIndex: number, colIndex: number, elementIndex: number, renderNode: Renderable | undefined, cellAdditionalInfo?: T_ADDITIONAL_CELL_INFO | undefined) => void;
1594
- discardCell: (rowIndex: number, colIndex: number) => void;
1595
- discardElement: (elementIndex: number) => [
1596
- number,
1597
- number
1598
- ] | null;
1599
- discardElementsStartingWith: (elIndex: number, callback?: ((index: number, cell: [
1600
- number,
1601
- number
1602
- ] | null) => void) | undefined) => boolean;
1603
- }
1604
-
1605
1527
  declare type TableRenderCellFnParam = {
1606
1528
  domRef: RefCallback<HTMLElement>;
1607
1529
  rowIndex: number;
@@ -1638,25 +1560,140 @@ declare type RenderRangeOptions = {
1638
1560
  declare type HorizontalLayoutColVisibilityOptions = {
1639
1561
  horizontalLayoutPageIndex?: number;
1640
1562
  };
1641
- declare class ReactHeadlessTableRenderer extends Logger {
1563
+
1564
+ interface GridCellInterface<T_ADDITIONAL_CELL_INFO = any> {
1565
+ debugId: string;
1566
+ update(content: Renderable, additionalInfo?: T_ADDITIONAL_CELL_INFO): void;
1567
+ getElement(): HTMLElement | null;
1568
+ getNode(): Renderable;
1569
+ destroy(): void;
1570
+ onMount(callback: (cell: GridCellInterface<T_ADDITIONAL_CELL_INFO>) => void): void;
1571
+ getAdditionalInfo(): T_ADDITIONAL_CELL_INFO | undefined;
1572
+ ref: (htmlElement: HTMLElement) => void;
1573
+ }
1574
+
1575
+ declare type CellPos = [number, number];
1576
+
1577
+ declare class GridCellManager<T_ADDITIONAL_CELL_INFO> extends Logger {
1578
+ private matrix;
1579
+ private matrixWithHistory;
1580
+ private cellToMatrixPosition;
1581
+ private pool;
1582
+ debugId: string;
1583
+ private offRemoveCell;
1584
+ constructor(debugId: string);
1585
+ private onRemoveCell;
1586
+ set poolSize(cellCount: number);
1587
+ get poolSize(): number;
1588
+ getDetachedCell(): GridCellInterface<T_ADDITIONAL_CELL_INFO>;
1589
+ private setCellPositionInMatrix;
1590
+ renderNodeAtCell(node: Renderable, cell: GridCellInterface<T_ADDITIONAL_CELL_INFO>, cellPos: CellPos, additionalInfo?: T_ADDITIONAL_CELL_INFO): GridCellInterface<T_ADDITIONAL_CELL_INFO>;
1591
+ getCellPosition(cell: GridCellInterface<T_ADDITIONAL_CELL_INFO>): CellPos | null;
1592
+ getCellAt(cellPos: CellPos): GridCellInterface<T_ADDITIONAL_CELL_INFO> | undefined;
1593
+ /**
1594
+ * This gets a cell for a given position.
1595
+ * If there's already a cell currently attached at that position, it will be returned.
1596
+ *
1597
+ * Otherwise, we try to return the most optimal cell to use for that position.
1598
+ * If the optimise parameter is set to 'row', we will try to return a detached cell
1599
+ * that was last rendered in that row.
1600
+ *
1601
+ * If the optimise parameter is set to 'column', we will try to return a detached cell
1602
+ * that was last rendered in that column.
1603
+ *
1604
+ * @param cellPos [rowIndex, colIndex]
1605
+ * @param optimise 'row' | 'column'
1606
+ */
1607
+ getCellFor(cellPos: CellPos, optimise: 'row' | 'column'): GridCellInterface<T_ADDITIONAL_CELL_INFO>;
1608
+ isCellAttached(cell: GridCellInterface<T_ADDITIONAL_CELL_INFO>): boolean;
1609
+ isCellAttachedAt(cellPos: CellPos): boolean;
1610
+ getMatrix(): Renderable[][];
1611
+ getAllCells(): GridCellInterface<T_ADDITIONAL_CELL_INFO>[];
1612
+ getCellsForRow(rowIndex: number): GridCellInterface<T_ADDITIONAL_CELL_INFO>[];
1613
+ getOneAttachedCell(): any;
1614
+ getRowsWithCells(): number[];
1615
+ getColumnsWithCells(): number[];
1616
+ isRowAttached(rowIndex: number): boolean;
1617
+ isColumnAttached(colIndex: number): boolean;
1618
+ detachRow(rowIndex: number): void;
1619
+ detachCol(colIndex: number): void;
1620
+ detachCell(cell: GridCellInterface<T_ADDITIONAL_CELL_INFO>): void;
1621
+ detachCells(cells: Set<GridCellInterface<T_ADDITIONAL_CELL_INFO>>): void;
1622
+ detachRowsStartingWith(rowIndex: number): void;
1623
+ detachColsStartingWith(colIndex: number): void;
1624
+ detachCellsStartingAt(cellPos: CellPos): void;
1625
+ detachCellAt(cellPos: CellPos): void;
1626
+ getCellsOutsideRenderRange: (range: TableRenderRange) => Set<GridCellInterface<T_ADDITIONAL_CELL_INFO>>;
1627
+ getCellFromListForRow(cells: Set<GridCellInterface<T_ADDITIONAL_CELL_INFO>>, rowIndex: number): GridCellInterface<T_ADDITIONAL_CELL_INFO> | undefined;
1628
+ getCellFromListForColumn(cells: Set<GridCellInterface<T_ADDITIONAL_CELL_INFO>>, colIndex: number): GridCellInterface<T_ADDITIONAL_CELL_INFO> | undefined;
1629
+ getCellCountInMatrix(): number;
1630
+ destroy(): void;
1631
+ reset(): void;
1632
+ makeDetachedCellsEmpty(): void;
1633
+ }
1634
+
1635
+ /**
1636
+ * This is only used for rendering Detail rows in a master-detail DataGrid
1637
+ */
1638
+ interface ListRowInterface {
1639
+ debugId: string;
1640
+ update(content: Renderable): void;
1641
+ getElement(): HTMLElement | null;
1642
+ getNode(): Renderable;
1643
+ destroy(): void;
1644
+ onMount(callback: (row: ListRowInterface) => void): void;
1645
+ ref: (htmlElement: HTMLElement) => void;
1646
+ }
1647
+
1648
+ declare class ListRowManager extends Logger {
1649
+ private pool;
1650
+ private indexToRow;
1651
+ private rowToIndex;
1652
+ debugId: string;
1653
+ private offRemoveRow;
1654
+ constructor(debugId: string);
1655
+ private onRemoveRow;
1656
+ set poolSize(rowCount: number);
1657
+ get poolSize(): number;
1658
+ getDetachedRow(): ListRowInterface;
1659
+ /**
1660
+ * This gets a row for a given position.
1661
+ * If there's already a row currently attached at that position, it will be returned.
1662
+ *
1663
+ * Otherwise, we return another row.
1664
+ * @param rowIndex
1665
+ */
1666
+ getRowFor(rowIndex: number): ListRowInterface;
1667
+ private setRowIndexInList;
1668
+ detachStartingWith(rowIndex: number): void;
1669
+ getRowAt(rowPos: number): ListRowInterface | undefined;
1670
+ getRowIndex(row: ListRowInterface): number | undefined;
1671
+ isRowAttached(row: ListRowInterface): boolean;
1672
+ isRowAttachedAt(rowIndex: number): boolean;
1673
+ getList(): Renderable[];
1674
+ getAttachedCount(): number;
1675
+ forEachAttachedRow(fn: (row: ListRowInterface) => void): void;
1676
+ getAttachedIndexes(): number[];
1677
+ getAllRows(): ListRowInterface[];
1678
+ detachRowAt(rowIndex: number): void;
1679
+ detachRow(row: ListRowInterface): void;
1680
+ renderNodeAtRow(node: Renderable, row: ListRowInterface, rowIndex: number): ListRowInterface;
1681
+ makeDetachedRowsEmpty(): void;
1682
+ destroy(): void;
1683
+ reset(): void;
1684
+ }
1685
+
1686
+ declare class GridRenderer extends Logger {
1642
1687
  protected brain: MatrixBrain;
1643
1688
  debugId: string;
1644
1689
  protected destroyed: boolean;
1645
1690
  private scrolling;
1646
1691
  cellHoverClassNames: string[];
1647
- private itemDOMElements;
1648
- protected itemDOMRefs: RefCallback<HTMLElement>[];
1649
- protected updaters: SubscriptionCallback<Renderable>[];
1650
- private detailRowDOMElements;
1651
- private detailRowDOMRefs;
1652
- private detailRowUpdaters;
1653
- protected mappedCells: MappedCells<{
1692
+ protected cellManager: GridCellManager<{
1654
1693
  renderRowIndex: number;
1655
1694
  renderColIndex: number;
1656
1695
  }>;
1657
- private mappedDetailRows;
1658
- private items;
1659
- private detailItems;
1696
+ protected rowManager: ListRowManager;
1660
1697
  private lastEnteredRow;
1661
1698
  private lastExitedRow;
1662
1699
  private onDestroy;
@@ -1710,8 +1747,6 @@ declare class ReactHeadlessTableRenderer extends Logger {
1710
1747
  mapped: boolean;
1711
1748
  };
1712
1749
  renderRange(range: TableRenderRange, { renderCell, renderDetailRow, force, onRender }: RenderRangeOptions): Renderable[];
1713
- private renderElement;
1714
- private renderDetailElement;
1715
1750
  getFixedRanges: (currentRenderRange: TableRenderRange) => TableRenderRange[];
1716
1751
  protected isCellFixed: (rowIndex: number, colIndex: number) => {
1717
1752
  row: FixedPosition;
@@ -1723,13 +1758,16 @@ declare class ReactHeadlessTableRenderer extends Logger {
1723
1758
  rowIndex: number;
1724
1759
  colIndex: number;
1725
1760
  };
1726
- protected renderCellAtElement(rowIndex: number, colIndex: number, elementIndex: number, renderCell: TableRenderCellFn): void;
1761
+ protected renderCellAt(rowIndex: number, colIndex: number, cell: GridCellInterface, renderCell: TableRenderCellFn): void;
1727
1762
  protected onMouseEnter: (rowIndex: number) => void;
1728
1763
  private addHoverClass;
1729
1764
  protected onMouseLeave: (rowIndex: number) => void;
1730
1765
  private removeHoverClass;
1731
1766
  protected updateHoverClassNamesForRow: (rowIndex: number) => void;
1732
- protected updateElementPosition: (elementIndex: number, options?: {
1767
+ protected updateElementPosition: (cell: GridCellInterface<{
1768
+ renderRowIndex: number;
1769
+ renderColIndex: number;
1770
+ }>, options?: {
1733
1771
  hidden: boolean;
1734
1772
  rowspan: number;
1735
1773
  colspan: number;
@@ -1742,6 +1780,14 @@ declare class ReactHeadlessTableRenderer extends Logger {
1742
1780
  reset(): void;
1743
1781
  }
1744
1782
 
1783
+ declare type SubscriptionCallbackOnChangeFn<T> = (node: T | null) => void;
1784
+ interface SubscriptionCallback<T> {
1785
+ (node: T, callback?: () => void): void;
1786
+ get: () => T | null;
1787
+ destroy: VoidFn;
1788
+ onChange: (fn: SubscriptionCallbackOnChangeFn<T>) => VoidFn;
1789
+ }
1790
+
1745
1791
  declare class ScrollListener {
1746
1792
  private scrollPosition;
1747
1793
  private onScrollFns;
@@ -1769,7 +1815,7 @@ declare type ContextMenuLocationWithEvent = Partial<CellContextMenuLocation> & {
1769
1815
  interface InfiniteTableSetupState<T> {
1770
1816
  brain: MatrixBrain;
1771
1817
  headerBrain: MatrixBrain;
1772
- renderer: ReactHeadlessTableRenderer;
1818
+ renderer: GridRenderer;
1773
1819
  onRenderUpdater: SubscriptionCallback<Renderable>;
1774
1820
  forceBodyRerenderTimestamp: number;
1775
1821
  lastRowToExpandRef: MutableRefObject<any | null>;