@infinite-table/infinite-react 4.4.1 → 5.0.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 (6) hide show
  1. package/index.d.ts +288 -86
  2. package/index.dev.js +1216 -598
  3. package/index.dev.mjs +1216 -598
  4. package/index.js +1216 -598
  5. package/index.mjs +1216 -598
  6. package/package.json +2 -2
package/index.d.ts CHANGED
@@ -118,7 +118,82 @@ declare class DeepMap<KeyType, ValueType> {
118
118
 
119
119
  declare type VoidFn = () => void;
120
120
 
121
+ declare type TableRenderRange = {
122
+ start: [number, number];
123
+ end: [number, number];
124
+ rowFixed?: FixedPosition;
125
+ colFixed?: FixedPosition;
126
+ };
121
127
  declare type FixedPosition = false | 'start' | 'end';
128
+ declare type WhichDirection = {
129
+ horizontal?: boolean;
130
+ vertical?: boolean;
131
+ };
132
+ declare type ItemSizeFunction = (index: number) => number;
133
+ interface IBrain {
134
+ getColCount: () => number;
135
+ getRowCount: () => number;
136
+ getFixedCellInfo: () => {
137
+ fixedRowsStart: number;
138
+ fixedColsStart: number;
139
+ fixedRowsEnd: number;
140
+ fixedColsEnd: number;
141
+ };
142
+ getRowspanParent: (rowIndex: number, colIndex: number) => number;
143
+ getColspanParent: (rowIndex: number, colIndex: number) => number;
144
+ getRowHeight: (rowIndex: number) => number;
145
+ getColWidth: (colIndex: number) => number;
146
+ getRowHeightWithSpan: (rowIndex: number, colIndex: number, rowspan: number) => number;
147
+ getColWidthWithSpan: (rowIndex: number, colIndex: number, colspan: number) => number;
148
+ isRowFixedStart: (rowIndex: number) => boolean;
149
+ isRowFixedEnd: (rowIndex: number) => boolean;
150
+ getScrollPosition: () => ScrollPosition;
151
+ getItemOffsetFor: (itemIndex: number, direction: 'horizontal' | 'vertical') => number;
152
+ getItemSize: (itemIndex: number, direction: 'horizontal' | 'vertical') => number;
153
+ getItemAt: (scrollPos: number, direction: 'horizontal' | 'vertical') => number;
154
+ getAvailableSize: () => Size;
155
+ getFixedStartRowsHeight: () => number;
156
+ getFixedEndRowsHeight: (options?: {
157
+ skipScroll: boolean;
158
+ }) => number;
159
+ getFixedStartColsWidth: () => number;
160
+ getFixedEndColsWidth: (options?: {
161
+ skipScroll: boolean;
162
+ }) => number;
163
+ getFixedEndColsOffsets: (options?: {
164
+ skipScroll: boolean;
165
+ }) => number[];
166
+ getFixedEndRowsOffsets: (options?: {
167
+ skipScroll: boolean;
168
+ }) => number[];
169
+ isRowFixed: (rowIndex: number) => boolean;
170
+ isColFixed: (colIndex: number) => boolean;
171
+ getRenderRange: () => TableRenderRange;
172
+ getExtraSpanCellsForRange: (options: {
173
+ horizontal: {
174
+ startIndex: number;
175
+ endIndex: number;
176
+ };
177
+ vertical: {
178
+ startIndex: number;
179
+ endIndex: number;
180
+ };
181
+ }) => [number, number][];
182
+ getRowspan: (rowIndex: number, colIndex: number) => number;
183
+ getColspan: (rowIndex: number, colIndex: number) => number;
184
+ getCellOffset: (rowIndex: number, colIndex: number) => {
185
+ x: number;
186
+ y: number;
187
+ };
188
+ name: string;
189
+ onRenderRangeChange: (fn: (renderRange: TableRenderRange) => void) => VoidFunction;
190
+ onScroll: (fn: OnScrollFn) => VoidFunction;
191
+ onAvailableSizeChange: (fn: (size: Size) => void) => VoidFunction;
192
+ onDestroy: (fn: VoidFunction) => void;
193
+ onScrollStart: (fn: VoidFunction) => VoidFunction;
194
+ onScrollStop: (fn: (scrollPos: ScrollPosition) => void) => VoidFunction;
195
+ }
196
+
122
197
  declare type SpanFunction = ({ rowIndex, colIndex, }: {
123
198
  rowIndex: number;
124
199
  colIndex: number;
@@ -127,7 +202,6 @@ declare type RenderRangeType = {
127
202
  startIndex: number;
128
203
  endIndex: number;
129
204
  };
130
- declare type ItemSizeFunction = (index: number) => number;
131
205
  declare type MatrixBrainOptions = {
132
206
  width: number;
133
207
  height: number;
@@ -138,16 +212,7 @@ declare type MatrixBrainOptions = {
138
212
  rowspan?: SpanFunction;
139
213
  colspan?: SpanFunction;
140
214
  };
141
- declare type TableRenderRange = {
142
- start: [number, number];
143
- end: [number, number];
144
- rowFixed?: FixedPosition;
145
- colFixed?: FixedPosition;
146
- };
147
- declare type WhichDirection = {
148
- horizontal?: boolean;
149
- vertical?: boolean;
150
- };
215
+
151
216
  declare type FnOnRenderRangeChange = (range: TableRenderRange) => void;
152
217
  declare type FnOnDirectionalRenderRangeChange = (range: [number, number]) => void;
153
218
  declare type FnOnRenderCountChange = ({ horizontal, vertical, }: {
@@ -155,39 +220,61 @@ declare type FnOnRenderCountChange = ({ horizontal, vertical, }: {
155
220
  vertical: number;
156
221
  }) => void;
157
222
  declare type OnAvailableSizeChange = (size: Size) => void;
158
- declare class MatrixBrain extends Logger {
223
+ declare type ShouldUpdateRenderCountOptions = {
224
+ horizontalChange: boolean;
225
+ colsChanged: boolean;
226
+ colWidthChanged: boolean;
227
+ widthChanged: boolean;
228
+ colspanChanged: boolean;
229
+ verticalChange: boolean;
230
+ rowsChanged: boolean;
231
+ rowHeightChanged: boolean;
232
+ heightChanged: boolean;
233
+ rowspanChanged: boolean;
234
+ };
235
+ declare class MatrixBrain extends Logger implements IBrain {
159
236
  private scrolling;
160
- private width;
237
+ protected availableWidth: MatrixBrainOptions['width'];
238
+ protected availableRenderWidth: number;
239
+ isHorizontalLayoutBrain: boolean;
161
240
  name: string;
162
- private height;
163
- private cols;
164
- private rows;
165
- private rowHeight;
166
- private colWidth;
241
+ protected availableHeight: MatrixBrainOptions['height'];
242
+ protected availableRenderHeight: number;
243
+ protected cols: MatrixBrainOptions['cols'];
244
+ protected rows: MatrixBrainOptions['rows'];
245
+ /**
246
+ * This is only here for easier accessing in the renderer, when the horizontal layout is enabled.
247
+ * In this way, the API is the same for both brains, so we don't have to cast the brain type in the renderer.
248
+ */
249
+ set rowsPerPage(rowsPerPage: number);
250
+ get rowsPerPage(): number;
251
+ protected _rowsPerPage: number;
252
+ protected rowHeight: MatrixBrainOptions['rowHeight'];
253
+ protected colWidth: MatrixBrainOptions['colWidth'];
167
254
  private rowspan;
168
255
  private colspan;
169
256
  private rowspanParent;
170
257
  private rowspanValue;
171
- private rowHeightCache;
172
- private rowOffsetCache;
258
+ protected rowHeightCache: number[];
259
+ protected rowOffsetCache: number[];
173
260
  private verticalTotalSize;
174
261
  private colspanParent;
175
262
  private colspanValue;
176
- private colWidthCache;
177
- private colOffsetCache;
263
+ protected colWidthCache: number[];
264
+ protected colOffsetCache: number[];
178
265
  private horizontalTotalSize;
179
266
  private horizontalRenderCount?;
180
267
  private verticalRenderCount?;
181
- private horizontalRenderRange;
182
- private verticalRenderRange;
183
- private extraSpanCells;
268
+ protected horizontalRenderRange: RenderRangeType;
269
+ protected verticalRenderRange: RenderRangeType;
270
+ protected extraSpanCells: [number, number][];
184
271
  private scrollPosition;
185
272
  private onScrollFns;
186
273
  private onRenderRangeChangeFns;
187
274
  private onVerticalRenderRangeChangeFns;
188
275
  private onHorizontalRenderRangeChangeFns;
189
276
  private onDestroyFns;
190
- private destroyed;
277
+ protected destroyed: boolean;
191
278
  private onRenderCountChangeFns;
192
279
  private onAvailableSizeChangeFns;
193
280
  private onScrollStartFns;
@@ -210,37 +297,38 @@ declare class MatrixBrain extends Logger {
210
297
  * Number of rows that are fixed at the end
211
298
  */
212
299
  private fixedRowsEnd;
213
- constructor(name?: string);
300
+ constructor(name: string);
214
301
  private reset;
215
302
  private resetVertical;
216
303
  private resetHorizontal;
217
304
  setScrollStopDelay: (scrollStopDelay: number) => void;
305
+ getVirtualColIndex(colIndex: number, _opts?: {
306
+ pageIndex: number;
307
+ }): number;
218
308
  getRowCount: () => number;
219
309
  getColCount: () => number;
220
- update: (options: Partial<MatrixBrainOptions>) => void;
221
- setRowAndColumnSizes({ rowHeight, colWidth, }: {
222
- rowHeight: number | ItemSizeFunction;
223
- colWidth: number | ItemSizeFunction;
224
- }): void;
225
- setRowsAndCols: ({ rows, cols }: {
226
- rows: number;
227
- cols: number;
228
- }) => void;
229
- setAvailableSize(size: Partial<Size>, config?: {
230
- skipUpdateRenderCount?: boolean;
231
- }): void;
232
- updateRenderCount: (which?: WhichDirection) => void;
233
- private doUpdateRenderCount;
310
+ update(options: Partial<MatrixBrainOptions>, shouldUpdateRenderCount?: (options: ShouldUpdateRenderCountOptions) => boolean): void;
311
+ /**
312
+ *
313
+ * @param options.left - if true, extends the left side with the amount of current visible columns, otherwise with the specified number
314
+ * @param options.right - if true, extends the right side with the amount of current visible columns, otherwise with the specified number
315
+ */
316
+ extendRenderRange(options: {
317
+ left?: number | boolean;
318
+ right?: number | boolean;
319
+ }): () => void;
320
+ updateRenderCount(which?: WhichDirection): void;
321
+ protected doUpdateRenderCount(which?: WhichDirection): void;
234
322
  get scrollTopMax(): number;
235
323
  get scrollLeftMax(): number;
236
324
  private setScrolling;
237
325
  private notifyScrollStart;
238
326
  private notifyScrollStop;
239
- setScrollPosition: (scrollPosition: ScrollPosition, callback?: ((scrollPos: ScrollPosition) => void) | undefined) => void;
240
- private notifyAvailableSizeChange;
241
- private notifyRenderRangeChange;
242
- private notifyVerticalRenderRangeChange;
243
- private notifyHorizontalRenderRangeChange;
327
+ setScrollPosition(scrollPosition: ScrollPosition, callback?: (scrollPos: ScrollPosition) => void): void;
328
+ protected notifyAvailableSizeChange: () => void;
329
+ protected notifyRenderRangeChange(): void;
330
+ protected notifyVerticalRenderRangeChange: () => void;
331
+ protected notifyHorizontalRenderRangeChange: () => void;
244
332
  private notifyScrollChange;
245
333
  private computeDirectionalRenderCount;
246
334
  getFixedSize(direction: 'horizontal' | 'vertical'): number;
@@ -318,12 +406,15 @@ declare class MatrixBrain extends Logger {
318
406
  endIndex: number;
319
407
  };
320
408
  getItemAt: (scrollPos: number, direction: 'horizontal' | 'vertical') => number;
321
- getCellOffset: (rowIndex: number, colIndex: number) => {
409
+ getCellOffset(rowIndex: number, colIndex: number): {
322
410
  x: number;
323
411
  y: number;
324
412
  };
325
- getItemOffsetFor: (itemIndex: number, direction: 'horizontal' | 'vertical') => number;
326
- private computeCacheFor;
413
+ getInitialRowHeight(): number | ItemSizeFunction;
414
+ getInitialCols(): number;
415
+ getInitialRows(): number;
416
+ getItemOffsetFor(itemIndex: number, direction: 'horizontal' | 'vertical'): number;
417
+ protected computeCacheFor: (itemIndex: number, direction: 'horizontal' | 'vertical') => void;
327
418
  private getItemSizeCacheFor;
328
419
  private computeItemSpanUpTo;
329
420
  private getCellSpan;
@@ -343,11 +434,13 @@ declare class MatrixBrain extends Logger {
343
434
  * @returns the size of the specified item
344
435
  */
345
436
  getItemSize: (itemIndex: number, direction: 'horizontal' | 'vertical') => number;
346
- getTotalSize: () => {
437
+ getRowIndexInPage(rowIndex: number): number;
438
+ getPageIndexForRow(_rowIndex: number): number;
439
+ getVirtualizedContentSize(): {
347
440
  height: number;
348
441
  width: number;
349
442
  };
350
- getTotalSizeFor: (direction: 'horizontal' | 'vertical') => number;
443
+ getVirtualizedContentSizeFor(direction: 'horizontal' | 'vertical'): number;
351
444
  setRenderRange: ({ horizontal, vertical, extraCells, }: {
352
445
  horizontal: RenderRangeType;
353
446
  vertical: RenderRangeType;
@@ -373,8 +466,12 @@ declare class MatrixBrain extends Logger {
373
466
  width: number;
374
467
  height: number;
375
468
  };
469
+ protected getAvailableRenderSize: () => {
470
+ width: number;
471
+ height: number;
472
+ };
376
473
  private notifyDestroy;
377
- destroy: () => void;
474
+ destroy(): void;
378
475
  }
379
476
 
380
477
  declare enum InfiniteTableActionType {
@@ -397,6 +494,7 @@ declare type InfiniteTableAction = {
397
494
  declare type InfiniteTableBaseCellProps<T> = {
398
495
  column: InfiniteTableComputedColumn<T>;
399
496
  align?: InfiniteTableColumnAlignValues;
497
+ horizontalLayoutPageIndex: number | null;
400
498
  rowId?: any;
401
499
  renderChildren: () => Renderable;
402
500
  width: number;
@@ -489,6 +587,7 @@ declare type InfiniteTableColumnHeaderParam<DATA_TYPE, COL_TYPE = InfiniteTableC
489
587
  columnSortInfo: DataSourceSingleSortInfo<DATA_TYPE> | null;
490
588
  columnFilterValue: DataSourceFilterValueItem<DATA_TYPE> | null;
491
589
  selectionMode: DataSourcePropSelectionMode;
590
+ horizontalLayoutPageIndex: null | number;
492
591
  allRowsSelected: boolean;
493
592
  someRowsSelected: boolean;
494
593
  filtered: boolean;
@@ -518,6 +617,9 @@ declare type InfiniteTableColumnRenderBag = {
518
617
  };
519
618
  declare type InfiniteTableColumnRenderParamBase<DATA_TYPE, COL_TYPE = InfiniteTableComputedColumn<DATA_TYPE>> = {
520
619
  domRef: InfiniteTableCellProps<DATA_TYPE>['domRef'];
620
+ htmlElementRef: React__default.MutableRefObject<HTMLElement | null>;
621
+ rowIndexInHorizontalLayoutPage: null | number;
622
+ horizontalLayoutPageIndex: null | number;
521
623
  value: string | number | Renderable;
522
624
  align: InfiniteTableColumnAlignValues;
523
625
  verticalAlign: InfiniteTableColumnVerticalAlignValues;
@@ -586,6 +688,8 @@ declare type InfiniteTableColumnTypeNames = 'string' | 'number' | 'date' | strin
586
688
  declare type InfiniteTableColumnStylingFnParams<T> = {
587
689
  value: Renderable;
588
690
  column: InfiniteTableComputedColumn<T>;
691
+ rowIndexInHorizontalLayoutPage: null | number;
692
+ horizontalLayoutPageIndex: null | number;
589
693
  inEdit: boolean;
590
694
  rowHasSelectedCells: boolean;
591
695
  editError: InfiniteTableColumnRenderParamBase<T>['editError'];
@@ -1169,6 +1273,85 @@ declare class RowDetailState<KeyType = any> extends BooleanCollectionState<RowDe
1169
1273
  toggleRowDetails(key: KeyType): void;
1170
1274
  }
1171
1275
 
1276
+ declare type SubscriptionCallbackOnChangeFn<T> = (node: T | null) => void;
1277
+ interface SubscriptionCallback<T> {
1278
+ (node: T, callback?: () => void): void;
1279
+ get: () => T | null;
1280
+ destroy: VoidFn;
1281
+ onChange: (fn: SubscriptionCallbackOnChangeFn<T>) => VoidFn;
1282
+ }
1283
+
1284
+ /**
1285
+ * This class abstracts the following behavior:
1286
+ *
1287
+ * in the DOM, we have a list (flat, so no nesting) of elements that represent table cells
1288
+ * At any one time, just a fraction of all table cells are rendered/present in the DOM
1289
+ * and we need to keep track and know for each element what cell represents and for each
1290
+ * rendered cell, to what element it is currently mapped (so we need a bi-directional mapping)
1291
+ *
1292
+ * This class has tests - see tests/mapped-cells.spec.ts
1293
+ */
1294
+ declare class MappedCells<T_ADDITIONAL_CELL_INFO = any> extends Logger {
1295
+ /**
1296
+ * This is the mapping from element index to cell info.
1297
+ * The index in the array is the element index while the value at the position is an array where
1298
+ * the first number is the row index and the second number is the column index.
1299
+ */
1300
+ private elementIndexToCell;
1301
+ /**
1302
+ * This is the mapping from cell address to element index.
1303
+ * The key in the map is the cell address (built like this: `${rowIndex}:${columnIndex}`)
1304
+ * while the value is the element index it is being rendered to.
1305
+ */
1306
+ private cellToElementIndex;
1307
+ private cellAdditionalInfo;
1308
+ /**
1309
+ * Keeps the JSX of rendered elements in memory, so we can possibly reuse it later.
1310
+ */
1311
+ private renderedElements;
1312
+ private withCellAdditionalInfo;
1313
+ constructor(opts?: {
1314
+ withCellAdditionalInfo: boolean;
1315
+ });
1316
+ getElementFromListForColumn: (elementsOutsideItemRange: number[], colIndex: number) => number | undefined;
1317
+ init(): void;
1318
+ reset(): void;
1319
+ destroy(): void;
1320
+ /**
1321
+ * Retrieves the elements that contain rendered cells that are outside
1322
+ * of the specified range
1323
+ *
1324
+ * @param start in [rowIndex, colIndex] format - represents the topmost-leftmost cell visible of the render range
1325
+ * @param end in [rowIndex, colIndex] format - represents the bottom-right corner of the visible range. The end is not inclusive,
1326
+ * so the last visible cell will be [rowIndex-1, colIndex-1]
1327
+ *
1328
+ * @returns an array of element indexes that are outside the specified range
1329
+ */
1330
+ getElementsOutsideRenderRange: (range: TableRenderRange) => number[];
1331
+ isCellRendered: (rowIndex: number, columnIndex: number) => boolean;
1332
+ getCellAdditionalInfo: (rowIndex: number, columnIndex: number) => T_ADDITIONAL_CELL_INFO | undefined;
1333
+ isElementRendered: (elementIndex: number) => boolean;
1334
+ getElementsForRowIndex: (rowIndex: number) => number[];
1335
+ getAdditionalInfoForRowIndex: (rowIndex: number) => T_ADDITIONAL_CELL_INFO[];
1336
+ getRenderedNodeAtElement: (elementIndex: number) => Renderable | null;
1337
+ getRenderedCellAtElement: (elementIndex: number) => [
1338
+ number,
1339
+ number
1340
+ ] | null;
1341
+ getRenderedNodeForCell: (rowIndex: number, columnIndex: number) => Renderable | null;
1342
+ getElementIndexForCell: (rowIndex: number, columnIndex: number) => number | null;
1343
+ renderCellAtElement: (rowIndex: number, colIndex: number, elementIndex: number, renderNode: Renderable | undefined, cellAdditionalInfo?: T_ADDITIONAL_CELL_INFO | undefined) => void;
1344
+ discardCell: (rowIndex: number, colIndex: number) => void;
1345
+ discardElement: (elementIndex: number) => [
1346
+ number,
1347
+ number
1348
+ ] | null;
1349
+ discardElementsStartingWith: (elIndex: number, callback?: ((index: number, cell: [
1350
+ number,
1351
+ number
1352
+ ] | null) => void) | undefined) => boolean;
1353
+ }
1354
+
1172
1355
  declare type TableRenderCellFnParam = {
1173
1356
  domRef: RefCallback<HTMLElement>;
1174
1357
  rowIndex: number;
@@ -1196,19 +1379,25 @@ declare type TableRenderDetailRowFnParam = {
1196
1379
  };
1197
1380
  declare type TableRenderCellFn = (param: TableRenderCellFnParam) => Renderable;
1198
1381
  declare type TableRenderDetailRowFn = (param: TableRenderDetailRowFnParam) => Renderable;
1382
+ declare type HorizontalLayoutColVisibilityOptions = {
1383
+ horizontalLayoutPageIndex?: number;
1384
+ };
1199
1385
  declare class ReactHeadlessTableRenderer extends Logger {
1200
- private brain;
1386
+ protected brain: MatrixBrain;
1201
1387
  debugId: string;
1202
- private destroyed;
1388
+ protected destroyed: boolean;
1203
1389
  private scrolling;
1204
1390
  cellHoverClassNames: string[];
1205
1391
  private itemDOMElements;
1206
- private itemDOMRefs;
1207
- private updaters;
1392
+ protected itemDOMRefs: RefCallback<HTMLElement>[];
1393
+ protected updaters: SubscriptionCallback<Renderable>[];
1208
1394
  private detailRowDOMElements;
1209
1395
  private detailRowDOMRefs;
1210
1396
  private detailRowUpdaters;
1211
- private mappedCells;
1397
+ protected mappedCells: MappedCells<{
1398
+ renderRowIndex: number;
1399
+ renderColIndex: number;
1400
+ }>;
1212
1401
  private mappedDetailRows;
1213
1402
  private items;
1214
1403
  private detailItems;
@@ -1228,7 +1417,7 @@ declare class ReactHeadlessTableRenderer extends Logger {
1228
1417
  scrollLeft?: boolean | undefined;
1229
1418
  scrollTop?: boolean | undefined;
1230
1419
  }, zIndex: number | 'auto' | undefined | null) => void;
1231
- constructor(brain: MatrixBrain);
1420
+ constructor(brain: MatrixBrain, debugId?: string);
1232
1421
  getFullyVisibleRowsRange: () => {
1233
1422
  start: number;
1234
1423
  end: number;
@@ -1240,7 +1429,7 @@ declare class ReactHeadlessTableRenderer extends Logger {
1240
1429
  getScrollPositionForScrollColumnIntoView: (colIndex: number, config?: {
1241
1430
  scrollAdjustPosition?: ScrollAdjustPosition;
1242
1431
  offset?: number;
1243
- }) => ScrollPosition | null;
1432
+ } & HorizontalLayoutColVisibilityOptions) => ScrollPosition | null;
1244
1433
  getScrollPositionForScrollCellIntoView: (rowIndex: number, colIndex: number, config?: {
1245
1434
  rowScrollAdjustPosition?: ScrollAdjustPosition;
1246
1435
  colScrollAdjustPosition?: ScrollAdjustPosition;
@@ -1252,31 +1441,46 @@ declare class ReactHeadlessTableRenderer extends Logger {
1252
1441
  isRowVisible: (rowIndex: number, offsetMargin?: number) => boolean;
1253
1442
  isRowRendered: (rowIndex: number) => boolean;
1254
1443
  isCellVisible: (rowIndex: number, colIndex: number) => boolean;
1255
- isCellFullyVisible: (rowIndex: number, colIndex: number) => boolean;
1256
- isColumnFullyVisible: (colIndex: number, offsetMargin?: number) => boolean;
1257
- isColumnVisible: (colIndex: number, offsetMargin?: number) => boolean;
1258
- isCellRendered: (rowIndex: number, colIndex: number) => boolean;
1259
- isColumnRendered: (colIndex: number) => boolean;
1444
+ isCellFullyVisible: (rowIndex: number, colIndex: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1445
+ isColumnFullyVisible: (colIndex: number, offsetMargin?: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1446
+ isColumnVisible: (colIndex: number, offsetMargin?: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1447
+ isCellRendered: (rowIndex: number, colIndex: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1448
+ isColumnRendered: (colIndex: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1260
1449
  getExtraSpanCellsForRange: (range: TableRenderRange) => [number, number][];
1261
- renderRange: (range: TableRenderRange, { renderCell, renderDetailRow, force, onRender, }: {
1262
- force?: boolean | undefined;
1450
+ isCellRenderedAndMappedCorrectly(row: number, col: number): {
1451
+ rendered: boolean;
1452
+ mapped: boolean;
1453
+ };
1454
+ renderRange(range: TableRenderRange, { renderCell, renderDetailRow, force, onRender, }: {
1455
+ force?: boolean;
1263
1456
  renderCell: TableRenderCellFn;
1264
- renderDetailRow?: TableRenderDetailRowFn | undefined;
1457
+ renderDetailRow?: TableRenderDetailRowFn;
1265
1458
  onRender: (items: Renderable[]) => void;
1266
- }) => Renderable[];
1459
+ }): Renderable[];
1267
1460
  private renderElement;
1268
1461
  private renderDetailElement;
1269
1462
  getFixedRanges: (currentRenderRange: TableRenderRange) => TableRenderRange[];
1270
- private isCellFixed;
1271
- private isCellCovered;
1463
+ protected isCellFixed: (rowIndex: number, colIndex: number) => {
1464
+ row: FixedPosition;
1465
+ col: FixedPosition;
1466
+ };
1467
+ protected isCellCovered: (rowIndex: number, colIndex: number) => false | number[];
1272
1468
  private renderDetailRowAtElement;
1273
- private renderCellAtElement;
1274
- private onMouseEnter;
1469
+ protected getCellRealCoordinates(rowIndex: number, colIndex: number): {
1470
+ rowIndex: number;
1471
+ colIndex: number;
1472
+ };
1473
+ protected renderCellAtElement(rowIndex: number, colIndex: number, elementIndex: number, renderCell: TableRenderCellFn): void;
1474
+ protected onMouseEnter: (rowIndex: number) => void;
1275
1475
  private addHoverClass;
1276
- private onMouseLeave;
1476
+ protected onMouseLeave: (rowIndex: number) => void;
1277
1477
  private removeHoverClass;
1278
- private updateHoverClassNamesForRow;
1279
- private updateElementPosition;
1478
+ protected updateHoverClassNamesForRow: (rowIndex: number) => void;
1479
+ protected updateElementPosition: (elementIndex: number, options?: {
1480
+ hidden: boolean;
1481
+ rowspan: number;
1482
+ colspan: number;
1483
+ } | undefined) => void;
1280
1484
  private updateDetailElementPosition;
1281
1485
  private onScrollStart;
1282
1486
  private onScrollStop;
@@ -1285,14 +1489,6 @@ declare class ReactHeadlessTableRenderer extends Logger {
1285
1489
  reset(): void;
1286
1490
  }
1287
1491
 
1288
- declare type SubscriptionCallbackOnChangeFn<T> = (node: T | null) => void;
1289
- interface SubscriptionCallback<T> {
1290
- (node: T, callback?: () => void): void;
1291
- get: () => T | null;
1292
- destroy: VoidFn;
1293
- onChange: (fn: SubscriptionCallbackOnChangeFn<T>) => VoidFn;
1294
- }
1295
-
1296
1492
  declare class ScrollListener {
1297
1493
  private scrollPosition;
1298
1494
  private onScrollFns;
@@ -1318,11 +1514,13 @@ declare type ContextMenuLocationWithEvent = Partial<CellContextMenuLocation> & {
1318
1514
  target: HTMLElement;
1319
1515
  };
1320
1516
  interface InfiniteTableSetupState<T> {
1517
+ brain: MatrixBrain;
1518
+ headerBrain: MatrixBrain;
1321
1519
  renderer: ReactHeadlessTableRenderer;
1520
+ onRenderUpdater: SubscriptionCallback<Renderable>;
1322
1521
  lastRowToExpandRef: MutableRefObject<any | null>;
1323
1522
  lastRowToCollapseRef: MutableRefObject<any | null>;
1324
1523
  getDOMNodeForCell: (cellPos: CellPositionByIndex) => HTMLElement | null;
1325
- onRenderUpdater: SubscriptionCallback<Renderable>;
1326
1524
  propsCache: Map<keyof InfiniteTableProps<T>, WeakMap<any, any>>;
1327
1525
  columnsWhenInlineGroupRenderStrategy?: Record<string, InfiniteTableColumn<T>>;
1328
1526
  domRef: MutableRefObject<HTMLDivElement | null>;
@@ -1361,8 +1559,6 @@ interface InfiniteTableSetupState<T> {
1361
1559
  keyDown: SubscriptionCallback<KeyboardEvent>;
1362
1560
  columnsWhenGrouping?: InfiniteTablePropColumns<T>;
1363
1561
  bodySize: Size;
1364
- brain: MatrixBrain;
1365
- headerBrain: MatrixBrain;
1366
1562
  focused: boolean;
1367
1563
  ready: boolean;
1368
1564
  columnReorderDragColumnId: false | string;
@@ -1406,6 +1602,7 @@ interface InfiniteTableMappedState<T> {
1406
1602
  groupColumn: InfiniteTableProps<T>['groupColumn'];
1407
1603
  onKeyDown: InfiniteTableProps<T>['onKeyDown'];
1408
1604
  onCellClick: InfiniteTableProps<T>['onCellClick'];
1605
+ wrapRowsHorizontally: InfiniteTableProps<T>['wrapRowsHorizontally'];
1409
1606
  rowDetailCache: RowDetailCache<RowDetailCacheKey, RowDetailCacheEntry>;
1410
1607
  headerOptions: NonUndefined<InfiniteTableProps<T>['headerOptions']>;
1411
1608
  draggableColumnsRestrictTo: NonUndefined<InfiniteTableProps<T>['draggableColumnsRestrictTo']>;
@@ -2255,6 +2452,7 @@ declare function useInfiniteHeaderCell<T>(): {
2255
2452
  columnSortInfo: DataSourceSingleSortInfo<T> | null;
2256
2453
  columnFilterValue: DataSourceFilterValueItem<T> | null;
2257
2454
  selectionMode: DataSourcePropSelectionMode;
2455
+ horizontalLayoutPageIndex: number | null;
2258
2456
  allRowsSelected: boolean;
2259
2457
  someRowsSelected: boolean;
2260
2458
  filtered: boolean;
@@ -5082,11 +5280,14 @@ declare type InfiniteTablePropColumnGroups = Record<string, InfiniteTableColumnG
5082
5280
  declare type InfiniteTablePropCollapsedColumnGroups = Map<string[], string>;
5083
5281
  declare type InfiniteTableColumnGroupHeaderRenderParams = {
5084
5282
  columnGroup: InfiniteTableComputedColumnGroup;
5283
+ horizontalLayoutPageIndex: number | null;
5085
5284
  };
5086
5285
  declare type InfiniteTableColumnGroupHeaderRenderFunction = (params: InfiniteTableColumnGroupHeaderRenderParams) => Renderable;
5286
+ declare type InfiniteTableColumnGroupStyleFunction = (params: InfiniteTableColumnGroupHeaderRenderParams) => React$1.CSSProperties;
5087
5287
  declare type InfiniteTableColumnGroup = {
5088
5288
  columnGroup?: string;
5089
5289
  header?: Renderable | InfiniteTableColumnGroupHeaderRenderFunction;
5290
+ style?: React$1.CSSProperties | InfiniteTableColumnGroupStyleFunction;
5090
5291
  };
5091
5292
  declare type InfiniteTableComputedColumnGroup = InfiniteTableColumnGroup & {
5092
5293
  id: string;
@@ -5181,6 +5382,7 @@ interface InfiniteTableProps<T> {
5181
5382
  children?: React$1.JSX.Element | React$1.JSX.Element[] | React$1.ReactNode;
5182
5383
  loadingText?: Renderable;
5183
5384
  components?: InfiniteTablePropComponents<T>;
5385
+ wrapRowsHorizontally?: boolean;
5184
5386
  keyboardShortcuts?: InfiniteTablePropKeyboardShorcut[];
5185
5387
  viewportReservedWidth?: number;
5186
5388
  onViewportReservedWidthChange?: (viewportReservedWidth: number) => void;