@infinite-table/infinite-react 4.4.1 → 4.4.2-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 +10 -10
  2. package/index.d.ts +295 -87
  3. package/index.dev.js +1441 -760
  4. package/index.dev.mjs +1442 -761
  5. package/index.js +1441 -760
  6. package/index.mjs +1442 -761
  7. package/package.json +2 -2
package/index.css CHANGED
@@ -320,15 +320,15 @@
320
320
  overflow-y: hidden;
321
321
  }
322
322
 
323
- /* vanilla-extract-css-ns:src/components/InfiniteTable/components/ActiveCellIndicator.css.ts.vanilla.css?source=LkFjdGl2ZUNlbGxJbmRpY2F0b3JfQWN0aXZlSW5kaWNhdG9yV3JhcHBlckNsc19fbnhicTFjMCB7CiAgd2lkdGg6IHZhcigtLWFjdGl2ZUNlbGxDb2xXaWR0aF9fMTZoa2JrYzcpOwogIGhlaWdodDogdmFyKC0tYWN0aXZlQ2VsbFJvd0hlaWdodF9fMTZoa2JrYzMpOwp9Ci5BY3RpdmVDZWxsSW5kaWNhdG9yX0FjdGl2ZUNlbGxJbmRpY2F0b3JfX254YnExYzEgewogIC0tYWN0aXZlQ2VsbE9mZnNldFhfXzE2aGtia2M0OiB2YXIoLS1hY3RpdmVDZWxsQ29sT2Zmc2V0X18xNmhrYmtjOCk7CiAgLS1hY3RpdmVDZWxsT2Zmc2V0WV9fMTZoa2JrYzU6IHZhcigtLWFjdGl2ZUNlbGxSb3dPZmZzZXRfXzE2aGtia2MyKTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKHZhcigtLWFjdGl2ZUNlbGxPZmZzZXRYX18xNmhrYmtjNCksIHZhcigtLWFjdGl2ZUNlbGxPZmZzZXRZX18xNmhrYmtjNSksIDBweCk7CiAgaW5zZXQ6IHZhcigtLWluZmluaXRlLWFjdGl2ZS1jZWxsLWluZGljYXRvci1pbnNldCk7CiAgYm9yZGVyOiB2YXIoLS1pbmZpbml0ZS1hY3RpdmUtY2VsbC1ib3JkZXIsIHZhcigtLWluZmluaXRlLWFjdGl2ZS1jZWxsLWJvcmRlci13aWR0aCkgdmFyKC0taW5maW5pdGUtYWN0aXZlLWNlbGwtYm9yZGVyLXN0eWxlKSB2YXIoLS1pbmZpbml0ZS1hY3RpdmUtY2VsbC1ib3JkZXItY29sb3IsIHZhcigtLWluZmluaXRlLWFjY2VudC1jb2xvcikpKTsKICBiYWNrZ3JvdW5kOiB2YXIoLS1pbmZpbml0ZS1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWRlZmF1bHQpOwp9Ci5BY3RpdmVDZWxsSW5kaWNhdG9yX0FjdGl2ZUNlbGxJbmRpY2F0b3JDbHNfdmlzaWJsZV9fbnhicTFjMiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLkFjdGl2ZUNlbGxJbmRpY2F0b3JfQWN0aXZlQ2VsbEluZGljYXRvckNsc19oaWRkZW5fX254YnExYzMgewogIGRpc3BsYXk6IG5vbmU7Cn0= */
323
+ /* vanilla-extract-css-ns:src/components/InfiniteTable/components/ActiveCellIndicator.css.ts.vanilla.css?source=LkFjdGl2ZUNlbGxJbmRpY2F0b3JfQWN0aXZlSW5kaWNhdG9yV3JhcHBlckNsc19fbnhicTFjMCB7CiAgd2lkdGg6IHZhcigtLWFjdGl2ZUNlbGxDb2xXaWR0aF9fMTZoa2JrYzkpOwogIGhlaWdodDogdmFyKC0tYWN0aXZlQ2VsbFJvd0hlaWdodF9fMTZoa2JrYzQpOwp9Ci5BY3RpdmVDZWxsSW5kaWNhdG9yX0FjdGl2ZUNlbGxJbmRpY2F0b3JfX254YnExYzEgewogIC0tYWN0aXZlQ2VsbE9mZnNldFhfXzE2aGtia2M1OiB2YXIoLS1hY3RpdmVDZWxsQ29sT2Zmc2V0X18xNmhrYmtjYSk7CiAgLS1hY3RpdmVDZWxsT2Zmc2V0WV9fMTZoa2JrYzY6IHZhcigtLWFjdGl2ZUNlbGxSb3dPZmZzZXRfXzE2aGtia2MyKTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKHZhcigtLWFjdGl2ZUNlbGxPZmZzZXRYX18xNmhrYmtjNSksIHZhcigtLWFjdGl2ZUNlbGxPZmZzZXRZX18xNmhrYmtjNiksIDBweCk7CiAgaW5zZXQ6IHZhcigtLWluZmluaXRlLWFjdGl2ZS1jZWxsLWluZGljYXRvci1pbnNldCk7CiAgYm9yZGVyOiB2YXIoLS1pbmZpbml0ZS1hY3RpdmUtY2VsbC1ib3JkZXIsIHZhcigtLWluZmluaXRlLWFjdGl2ZS1jZWxsLWJvcmRlci13aWR0aCkgdmFyKC0taW5maW5pdGUtYWN0aXZlLWNlbGwtYm9yZGVyLXN0eWxlKSB2YXIoLS1pbmZpbml0ZS1hY3RpdmUtY2VsbC1ib3JkZXItY29sb3IsIHZhcigtLWluZmluaXRlLWFjY2VudC1jb2xvcikpKTsKICBiYWNrZ3JvdW5kOiB2YXIoLS1pbmZpbml0ZS1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWRlZmF1bHQpOwp9Ci5BY3RpdmVDZWxsSW5kaWNhdG9yX0FjdGl2ZUNlbGxJbmRpY2F0b3JDbHNfdmlzaWJsZV9fbnhicTFjMiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLkFjdGl2ZUNlbGxJbmRpY2F0b3JfQWN0aXZlQ2VsbEluZGljYXRvckNsc19oaWRkZW5fX254YnExYzMgewogIGRpc3BsYXk6IG5vbmU7Cn0= */
324
324
  .ActiveCellIndicator_ActiveIndicatorWrapperCls__nxbq1c0 {
325
- width: var(--activeCellColWidth__16hkbkc7);
326
- height: var(--activeCellRowHeight__16hkbkc3);
325
+ width: var(--activeCellColWidth__16hkbkc9);
326
+ height: var(--activeCellRowHeight__16hkbkc4);
327
327
  }
328
328
  .ActiveCellIndicator_ActiveCellIndicator__nxbq1c1 {
329
- --activeCellOffsetX__16hkbkc4: var(--activeCellColOffset__16hkbkc8);
330
- --activeCellOffsetY__16hkbkc5: var(--activeCellRowOffset__16hkbkc2);
331
- transform: translate3d(var(--activeCellOffsetX__16hkbkc4), var(--activeCellOffsetY__16hkbkc5), 0px);
329
+ --activeCellOffsetX__16hkbkc5: var(--activeCellColOffset__16hkbkca);
330
+ --activeCellOffsetY__16hkbkc6: var(--activeCellRowOffset__16hkbkc2);
331
+ transform: translate3d(var(--activeCellOffsetX__16hkbkc5), var(--activeCellOffsetY__16hkbkc6), 0px);
332
332
  inset: var(--infinite-active-cell-indicator-inset);
333
333
  border: var(--infinite-active-cell-border, var(--infinite-active-cell-border-width) var(--infinite-active-cell-border-style) var(--infinite-active-cell-border-color, var(--infinite-accent-color)));
334
334
  background: var(--infinite-active-cell-background-default);
@@ -340,17 +340,17 @@
340
340
  display: none;
341
341
  }
342
342
 
343
- /* vanilla-extract-css-ns:src/components/InfiniteTable/components/ActiveRowIndicator.css.ts.vanilla.css?source=#H4sIAAAAAAAAA62TzW7CMBCE73mKvVSKK4yAQw9wQj312heI/FeyZbGjtSGgineviEUFagOpxNX+PLMz1o6XJuHOvYf2zVs0KgWu/jiqPmcvxPsJfBUAUqL/QI/JSdWhkkMrdWDrWMZ0IDeHneLyPjfq4YwjugKFWBQAjKs6/dLmrU+4cVJzaOPpgeFApBXLFm2qu5dZ6/5YfQNdDN6JDhk8u4vHV3Ff0QQKvVkuFftA43zKl0Lk7rUy6xWHrbc3W/yhbrtfYJ2L3OC+RA+RV3rAHzw23wgSKx8bxc4nMIpMOZ1MnkAOCioVNbUaGDfDQsAznCxyucdiPGgLXylWO4yoyZ0XctotpMXYkDrMQVMw6/8J1mit82e92bWeD94tiuM3HNfm3SUEAAA= */
343
+ /* vanilla-extract-css-ns:src/components/InfiniteTable/components/ActiveRowIndicator.css.ts.vanilla.css?source=#H4sIAAAAAAAAA62TwWrDMAyG73kKXQbxqEvWwQ7pacdd+wJBsd1Eq2cHxW1aRt99NGYlhaUJozdjffy/fgkt31Wgg9n47sNpUhg8F398FZ+rN8vHDL4TACnJbclRMBJ7VLLvZOlZG5ZtOFmTwwE5neYWI5wy1t6AQqwTAKaqDjlkl3esThuNWQxa6UiHek4rPSjE48NNKypv/WiWoeIYqIwLsShEnGaJalex3zt9d4pX6r77AOtd5BcdU3LQclXO2MFj8y0gMLq2QTYugEKr0pcsewI5K6hE29Q4M26EhYBnuFjE4Z6T5ay72hhFjSmichF4b34vbdVfmqa2sXjKobRe7f6ru0XbXoVfb4Wdd2adnH8AzVggHQcEAAA= */
344
344
  .ActiveRowIndicator_ActiveRowIndicator__j26lrx0 {
345
345
  --infinite-active-row-border-style: var(--infinite-active-row-border-style, var(--infinite-active-cell-border-style));
346
- right: var(--infinite-runtime-browser-scrollbar-width);
346
+ right: 0;
347
347
  border: var(--infinite-active-row-border, var(--infinite-active-row-border-width, var(--infinite-active-cell-border-width)) var(--infinite-active-row-border-style, var(--infinite-active-cell-border-style)) var(--infinite-active-row-border-color, var(--infinite-active-cell-border-color, var(--infinite-accent-color))));
348
348
  background: var(--infinite-active-row-background, var(--infinite-active-cell-background, color-mix(in srgb, var(--infinite-active-row-border-color, var(--infinite-active-cell-border-color, var(--infinite-accent-color))), transparent calc(100% - var(--infinite-active-row-background-alpha, var(--infinite-active-cell-background-alpha)) * 100%))));
349
349
  }
350
- .ActiveRowIndicator_ActiveRowIndicatorCls_visible__j26lrx1 {
350
+ .ActiveRowIndicator_ActiveRowIndicatorRecipe_active_true__j26lrx2 {
351
351
  display: block;
352
352
  }
353
- .ActiveRowIndicator_ActiveRowIndicatorCls_hidden__j26lrx2 {
353
+ .ActiveRowIndicator_ActiveRowIndicatorRecipe_active_false__j26lrx3 {
354
354
  display: none;
355
355
  }
356
356
 
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;
@@ -569,6 +671,11 @@ declare type InfiniteTableColumnRenderFunctionForNormalRows<DATA_TYPE, COL_TYPE
569
671
  }) => Renderable | null;
570
672
  declare type InfiniteTableColumnRenderFunction<DATA_TYPE, COL_TYPE = InfiniteTableComputedColumn<DATA_TYPE>> = (renderParams: InfiniteTableColumnCellContextType<DATA_TYPE, COL_TYPE>) => Renderable | null;
571
673
  declare type InfiniteTableColumnHeaderRenderFunction<T> = (headerParams: InfiniteTableColumnHeaderParam<T>) => Renderable;
674
+ declare type InfiniteTableColumnOrHeaderRenderFunction<T> = (params: (InfiniteTableColumnCellContextType<T> & {
675
+ rowInfo: InfiniteTableRowInfo<T>;
676
+ }) | (InfiniteTableColumnHeaderParam<T> & {
677
+ rowInfo: null;
678
+ })) => ReturnType<InfiniteTableColumnRenderFunction<T>>;
572
679
  declare type InfiniteTableColumnContentFocusable<T> = boolean | InfiniteTableColumnContentFocusableFn<T>;
573
680
  declare type InfiniteTableColumnEditable<T> = boolean | InfiniteTableColumnEditableFn<T>;
574
681
  declare type InfiniteTableColumnContentFocusableFn<T> = (params: InfiniteTableColumnContentFocusableParams<T>) => boolean;
@@ -586,6 +693,8 @@ declare type InfiniteTableColumnTypeNames = 'string' | 'number' | 'date' | strin
586
693
  declare type InfiniteTableColumnStylingFnParams<T> = {
587
694
  value: Renderable;
588
695
  column: InfiniteTableComputedColumn<T>;
696
+ rowIndexInHorizontalLayoutPage: null | number;
697
+ horizontalLayoutPageIndex: null | number;
589
698
  inEdit: boolean;
590
699
  rowHasSelectedCells: boolean;
591
700
  editError: InfiniteTableColumnRenderParamBase<T>['editError'];
@@ -681,7 +790,7 @@ declare type InfiniteTableColumn<DATA_TYPE> = {
681
790
  renderRowDetailIcon?: boolean | InfiniteTableColumnRenderFunction<DATA_TYPE>;
682
791
  renderSortIcon?: InfiniteTableColumnHeaderRenderFunction<DATA_TYPE>;
683
792
  renderFilterIcon?: InfiniteTableColumnHeaderRenderFunction<DATA_TYPE>;
684
- renderSelectionCheckBox?: boolean | InfiniteTableColumnRenderFunction<DATA_TYPE>;
793
+ renderSelectionCheckBox?: boolean | InfiniteTableColumnOrHeaderRenderFunction<DATA_TYPE>;
685
794
  renderMenuIcon?: boolean | InfiniteTableColumnHeaderRenderFunction<DATA_TYPE>;
686
795
  renderHeaderSelectionCheckBox?: boolean | InfiniteTableColumnHeaderRenderFunction<DATA_TYPE>;
687
796
  components?: {
@@ -1169,6 +1278,85 @@ declare class RowDetailState<KeyType = any> extends BooleanCollectionState<RowDe
1169
1278
  toggleRowDetails(key: KeyType): void;
1170
1279
  }
1171
1280
 
1281
+ declare type SubscriptionCallbackOnChangeFn<T> = (node: T | null) => void;
1282
+ interface SubscriptionCallback<T> {
1283
+ (node: T, callback?: () => void): void;
1284
+ get: () => T | null;
1285
+ destroy: VoidFn;
1286
+ onChange: (fn: SubscriptionCallbackOnChangeFn<T>) => VoidFn;
1287
+ }
1288
+
1289
+ /**
1290
+ * This class abstracts the following behavior:
1291
+ *
1292
+ * in the DOM, we have a list (flat, so no nesting) of elements that represent table cells
1293
+ * At any one time, just a fraction of all table cells are rendered/present in the DOM
1294
+ * and we need to keep track and know for each element what cell represents and for each
1295
+ * rendered cell, to what element it is currently mapped (so we need a bi-directional mapping)
1296
+ *
1297
+ * This class has tests - see tests/mapped-cells.spec.ts
1298
+ */
1299
+ declare class MappedCells<T_ADDITIONAL_CELL_INFO = any> extends Logger {
1300
+ /**
1301
+ * This is the mapping from element index to cell info.
1302
+ * The index in the array is the element index while the value at the position is an array where
1303
+ * the first number is the row index and the second number is the column index.
1304
+ */
1305
+ private elementIndexToCell;
1306
+ /**
1307
+ * This is the mapping from cell address to element index.
1308
+ * The key in the map is the cell address (built like this: `${rowIndex}:${columnIndex}`)
1309
+ * while the value is the element index it is being rendered to.
1310
+ */
1311
+ private cellToElementIndex;
1312
+ private cellAdditionalInfo;
1313
+ /**
1314
+ * Keeps the JSX of rendered elements in memory, so we can possibly reuse it later.
1315
+ */
1316
+ private renderedElements;
1317
+ private withCellAdditionalInfo;
1318
+ constructor(opts?: {
1319
+ withCellAdditionalInfo: boolean;
1320
+ });
1321
+ getElementFromListForColumn: (elementsOutsideItemRange: number[], colIndex: number) => number | undefined;
1322
+ init(): void;
1323
+ reset(): void;
1324
+ destroy(): void;
1325
+ /**
1326
+ * Retrieves the elements that contain rendered cells that are outside
1327
+ * of the specified range
1328
+ *
1329
+ * @param start in [rowIndex, colIndex] format - represents the topmost-leftmost cell visible of the render range
1330
+ * @param end in [rowIndex, colIndex] format - represents the bottom-right corner of the visible range. The end is not inclusive,
1331
+ * so the last visible cell will be [rowIndex-1, colIndex-1]
1332
+ *
1333
+ * @returns an array of element indexes that are outside the specified range
1334
+ */
1335
+ getElementsOutsideRenderRange: (range: TableRenderRange) => number[];
1336
+ isCellRendered: (rowIndex: number, columnIndex: number) => boolean;
1337
+ getCellAdditionalInfo: (rowIndex: number, columnIndex: number) => T_ADDITIONAL_CELL_INFO | undefined;
1338
+ isElementRendered: (elementIndex: number) => boolean;
1339
+ getElementsForRowIndex: (rowIndex: number) => number[];
1340
+ getAdditionalInfoForRowIndex: (rowIndex: number) => T_ADDITIONAL_CELL_INFO[];
1341
+ getRenderedNodeAtElement: (elementIndex: number) => Renderable | null;
1342
+ getRenderedCellAtElement: (elementIndex: number) => [
1343
+ number,
1344
+ number
1345
+ ] | null;
1346
+ getRenderedNodeForCell: (rowIndex: number, columnIndex: number) => Renderable | null;
1347
+ getElementIndexForCell: (rowIndex: number, columnIndex: number) => number | null;
1348
+ renderCellAtElement: (rowIndex: number, colIndex: number, elementIndex: number, renderNode: Renderable | undefined, cellAdditionalInfo?: T_ADDITIONAL_CELL_INFO | undefined) => void;
1349
+ discardCell: (rowIndex: number, colIndex: number) => void;
1350
+ discardElement: (elementIndex: number) => [
1351
+ number,
1352
+ number
1353
+ ] | null;
1354
+ discardElementsStartingWith: (elIndex: number, callback?: ((index: number, cell: [
1355
+ number,
1356
+ number
1357
+ ] | null) => void) | undefined) => boolean;
1358
+ }
1359
+
1172
1360
  declare type TableRenderCellFnParam = {
1173
1361
  domRef: RefCallback<HTMLElement>;
1174
1362
  rowIndex: number;
@@ -1196,19 +1384,25 @@ declare type TableRenderDetailRowFnParam = {
1196
1384
  };
1197
1385
  declare type TableRenderCellFn = (param: TableRenderCellFnParam) => Renderable;
1198
1386
  declare type TableRenderDetailRowFn = (param: TableRenderDetailRowFnParam) => Renderable;
1387
+ declare type HorizontalLayoutColVisibilityOptions = {
1388
+ horizontalLayoutPageIndex?: number;
1389
+ };
1199
1390
  declare class ReactHeadlessTableRenderer extends Logger {
1200
- private brain;
1391
+ protected brain: MatrixBrain;
1201
1392
  debugId: string;
1202
- private destroyed;
1393
+ protected destroyed: boolean;
1203
1394
  private scrolling;
1204
1395
  cellHoverClassNames: string[];
1205
1396
  private itemDOMElements;
1206
- private itemDOMRefs;
1207
- private updaters;
1397
+ protected itemDOMRefs: RefCallback<HTMLElement>[];
1398
+ protected updaters: SubscriptionCallback<Renderable>[];
1208
1399
  private detailRowDOMElements;
1209
1400
  private detailRowDOMRefs;
1210
1401
  private detailRowUpdaters;
1211
- private mappedCells;
1402
+ protected mappedCells: MappedCells<{
1403
+ renderRowIndex: number;
1404
+ renderColIndex: number;
1405
+ }>;
1212
1406
  private mappedDetailRows;
1213
1407
  private items;
1214
1408
  private detailItems;
@@ -1228,7 +1422,7 @@ declare class ReactHeadlessTableRenderer extends Logger {
1228
1422
  scrollLeft?: boolean | undefined;
1229
1423
  scrollTop?: boolean | undefined;
1230
1424
  }, zIndex: number | 'auto' | undefined | null) => void;
1231
- constructor(brain: MatrixBrain);
1425
+ constructor(brain: MatrixBrain, debugId?: string);
1232
1426
  getFullyVisibleRowsRange: () => {
1233
1427
  start: number;
1234
1428
  end: number;
@@ -1236,11 +1430,12 @@ declare class ReactHeadlessTableRenderer extends Logger {
1236
1430
  getScrollPositionForScrollRowIntoView: (rowIndex: number, config?: {
1237
1431
  scrollAdjustPosition?: ScrollAdjustPosition;
1238
1432
  offset?: number;
1433
+ colIndex?: number;
1239
1434
  }) => ScrollPosition | null;
1240
1435
  getScrollPositionForScrollColumnIntoView: (colIndex: number, config?: {
1241
1436
  scrollAdjustPosition?: ScrollAdjustPosition;
1242
1437
  offset?: number;
1243
- }) => ScrollPosition | null;
1438
+ } & HorizontalLayoutColVisibilityOptions) => ScrollPosition | null;
1244
1439
  getScrollPositionForScrollCellIntoView: (rowIndex: number, colIndex: number, config?: {
1245
1440
  rowScrollAdjustPosition?: ScrollAdjustPosition;
1246
1441
  colScrollAdjustPosition?: ScrollAdjustPosition;
@@ -1252,31 +1447,46 @@ declare class ReactHeadlessTableRenderer extends Logger {
1252
1447
  isRowVisible: (rowIndex: number, offsetMargin?: number) => boolean;
1253
1448
  isRowRendered: (rowIndex: number) => boolean;
1254
1449
  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;
1450
+ isCellFullyVisible: (rowIndex: number, colIndex: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1451
+ isColumnFullyVisible: (colIndex: number, offsetMargin?: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1452
+ isColumnVisible: (colIndex: number, offsetMargin?: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1453
+ isCellRendered: (rowIndex: number, colIndex: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1454
+ isColumnRendered: (colIndex: number, opts?: HorizontalLayoutColVisibilityOptions | undefined) => boolean;
1260
1455
  getExtraSpanCellsForRange: (range: TableRenderRange) => [number, number][];
1261
- renderRange: (range: TableRenderRange, { renderCell, renderDetailRow, force, onRender, }: {
1262
- force?: boolean | undefined;
1456
+ isCellRenderedAndMappedCorrectly(row: number, col: number): {
1457
+ rendered: boolean;
1458
+ mapped: boolean;
1459
+ };
1460
+ renderRange(range: TableRenderRange, { renderCell, renderDetailRow, force, onRender, }: {
1461
+ force?: boolean;
1263
1462
  renderCell: TableRenderCellFn;
1264
- renderDetailRow?: TableRenderDetailRowFn | undefined;
1463
+ renderDetailRow?: TableRenderDetailRowFn;
1265
1464
  onRender: (items: Renderable[]) => void;
1266
- }) => Renderable[];
1465
+ }): Renderable[];
1267
1466
  private renderElement;
1268
1467
  private renderDetailElement;
1269
1468
  getFixedRanges: (currentRenderRange: TableRenderRange) => TableRenderRange[];
1270
- private isCellFixed;
1271
- private isCellCovered;
1469
+ protected isCellFixed: (rowIndex: number, colIndex: number) => {
1470
+ row: FixedPosition;
1471
+ col: FixedPosition;
1472
+ };
1473
+ protected isCellCovered: (rowIndex: number, colIndex: number) => false | number[];
1272
1474
  private renderDetailRowAtElement;
1273
- private renderCellAtElement;
1274
- private onMouseEnter;
1475
+ protected getCellRealCoordinates(rowIndex: number, colIndex: number): {
1476
+ rowIndex: number;
1477
+ colIndex: number;
1478
+ };
1479
+ protected renderCellAtElement(rowIndex: number, colIndex: number, elementIndex: number, renderCell: TableRenderCellFn): void;
1480
+ protected onMouseEnter: (rowIndex: number) => void;
1275
1481
  private addHoverClass;
1276
- private onMouseLeave;
1482
+ protected onMouseLeave: (rowIndex: number) => void;
1277
1483
  private removeHoverClass;
1278
- private updateHoverClassNamesForRow;
1279
- private updateElementPosition;
1484
+ protected updateHoverClassNamesForRow: (rowIndex: number) => void;
1485
+ protected updateElementPosition: (elementIndex: number, options?: {
1486
+ hidden: boolean;
1487
+ rowspan: number;
1488
+ colspan: number;
1489
+ } | undefined) => void;
1280
1490
  private updateDetailElementPosition;
1281
1491
  private onScrollStart;
1282
1492
  private onScrollStop;
@@ -1285,14 +1495,6 @@ declare class ReactHeadlessTableRenderer extends Logger {
1285
1495
  reset(): void;
1286
1496
  }
1287
1497
 
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
1498
  declare class ScrollListener {
1297
1499
  private scrollPosition;
1298
1500
  private onScrollFns;
@@ -1318,11 +1520,13 @@ declare type ContextMenuLocationWithEvent = Partial<CellContextMenuLocation> & {
1318
1520
  target: HTMLElement;
1319
1521
  };
1320
1522
  interface InfiniteTableSetupState<T> {
1523
+ brain: MatrixBrain;
1524
+ headerBrain: MatrixBrain;
1321
1525
  renderer: ReactHeadlessTableRenderer;
1526
+ onRenderUpdater: SubscriptionCallback<Renderable>;
1322
1527
  lastRowToExpandRef: MutableRefObject<any | null>;
1323
1528
  lastRowToCollapseRef: MutableRefObject<any | null>;
1324
1529
  getDOMNodeForCell: (cellPos: CellPositionByIndex) => HTMLElement | null;
1325
- onRenderUpdater: SubscriptionCallback<Renderable>;
1326
1530
  propsCache: Map<keyof InfiniteTableProps<T>, WeakMap<any, any>>;
1327
1531
  columnsWhenInlineGroupRenderStrategy?: Record<string, InfiniteTableColumn<T>>;
1328
1532
  domRef: MutableRefObject<HTMLDivElement | null>;
@@ -1361,8 +1565,6 @@ interface InfiniteTableSetupState<T> {
1361
1565
  keyDown: SubscriptionCallback<KeyboardEvent>;
1362
1566
  columnsWhenGrouping?: InfiniteTablePropColumns<T>;
1363
1567
  bodySize: Size;
1364
- brain: MatrixBrain;
1365
- headerBrain: MatrixBrain;
1366
1568
  focused: boolean;
1367
1569
  ready: boolean;
1368
1570
  columnReorderDragColumnId: false | string;
@@ -1406,6 +1608,7 @@ interface InfiniteTableMappedState<T> {
1406
1608
  groupColumn: InfiniteTableProps<T>['groupColumn'];
1407
1609
  onKeyDown: InfiniteTableProps<T>['onKeyDown'];
1408
1610
  onCellClick: InfiniteTableProps<T>['onCellClick'];
1611
+ wrapRowsHorizontally: InfiniteTableProps<T>['wrapRowsHorizontally'];
1409
1612
  rowDetailCache: RowDetailCache<RowDetailCacheKey, RowDetailCacheEntry>;
1410
1613
  headerOptions: NonUndefined<InfiniteTableProps<T>['headerOptions']>;
1411
1614
  draggableColumnsRestrictTo: NonUndefined<InfiniteTableProps<T>['draggableColumnsRestrictTo']>;
@@ -2255,6 +2458,7 @@ declare function useInfiniteHeaderCell<T>(): {
2255
2458
  columnSortInfo: DataSourceSingleSortInfo<T> | null;
2256
2459
  columnFilterValue: DataSourceFilterValueItem<T> | null;
2257
2460
  selectionMode: DataSourcePropSelectionMode;
2461
+ horizontalLayoutPageIndex: number | null;
2258
2462
  allRowsSelected: boolean;
2259
2463
  someRowsSelected: boolean;
2260
2464
  filtered: boolean;
@@ -5082,11 +5286,14 @@ declare type InfiniteTablePropColumnGroups = Record<string, InfiniteTableColumnG
5082
5286
  declare type InfiniteTablePropCollapsedColumnGroups = Map<string[], string>;
5083
5287
  declare type InfiniteTableColumnGroupHeaderRenderParams = {
5084
5288
  columnGroup: InfiniteTableComputedColumnGroup;
5289
+ horizontalLayoutPageIndex: number | null;
5085
5290
  };
5086
5291
  declare type InfiniteTableColumnGroupHeaderRenderFunction = (params: InfiniteTableColumnGroupHeaderRenderParams) => Renderable;
5292
+ declare type InfiniteTableColumnGroupStyleFunction = (params: InfiniteTableColumnGroupHeaderRenderParams) => React$1.CSSProperties;
5087
5293
  declare type InfiniteTableColumnGroup = {
5088
5294
  columnGroup?: string;
5089
5295
  header?: Renderable | InfiniteTableColumnGroupHeaderRenderFunction;
5296
+ style?: React$1.CSSProperties | InfiniteTableColumnGroupStyleFunction;
5090
5297
  };
5091
5298
  declare type InfiniteTableComputedColumnGroup = InfiniteTableColumnGroup & {
5092
5299
  id: string;
@@ -5181,6 +5388,7 @@ interface InfiniteTableProps<T> {
5181
5388
  children?: React$1.JSX.Element | React$1.JSX.Element[] | React$1.ReactNode;
5182
5389
  loadingText?: Renderable;
5183
5390
  components?: InfiniteTablePropComponents<T>;
5391
+ wrapRowsHorizontally?: boolean;
5184
5392
  keyboardShortcuts?: InfiniteTablePropKeyboardShorcut[];
5185
5393
  viewportReservedWidth?: number;
5186
5394
  onViewportReservedWidthChange?: (viewportReservedWidth: number) => void;