@rozie-ui/data-table-lit 0.2.7 → 0.3.2

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.
package/dist/index.d.cts CHANGED
@@ -120,13 +120,17 @@ declare class DataTable extends DataTable_base {
120
120
  */
121
121
  undoLimit: number;
122
122
  /**
123
- * Opt-in vertical **row windowing**. When `true`, only the visible slice of rows renders inside a bounded `rdt-scroll` container (with leading/trailing spacer rows preserving total scroll height), windowing over the full filtered + sorted (pre-pagination) model and suppressing the client pagination chrome. Default `false` is byte-identical to a non-virtual table.
123
+ * Opt-in windowing grammar: `false` (default, off — byte-identical to a non-virtual table) | `true` or `'rows'` (vertical row windowing; `true` is byte-behavior-identical to every existing consumer, zero churn) | `'columns'` (horizontal column windowing) | `'both'` (both axes windowed). Row windowing renders only the visible slice of rows inside a bounded `rdt-scroll` container (with leading/trailing spacer rows preserving total scroll height), windowing over the full filtered + sorted (pre-pagination) model and suppressing the client pagination chrome. Column windowing renders only the visible slice of leaf columns inside the same `rdt-scroll` container. An unrecognised string behaves as `false`.
124
124
  */
125
- virtual: boolean;
125
+ virtual: boolean | string;
126
126
  /**
127
- * Estimated row height (px) seeding the windowing engine before `measureElement` refines actual heights. Only consulted when `virtual` is on.
127
+ * Estimated row height (px) — the first-paint seed for the windowing engine before any row has been measured. Only consulted when rows are windowed. When `autoMeasure` is `true`, later renders progressively refine the estimate from measured content; when `autoMeasure` is `false` this remains the explicit override for every render.
128
128
  */
129
129
  estimateRowHeight: number;
130
+ /**
131
+ * Opt-in content-driven row-size estimation. When `true`, the windowing engine feeds `estimateSize()` a running mean of measured row heights instead of the fixed `estimateRowHeight` seed, so `getTotalSize()` converges to the true content total on a large table with variable-height rows. Falls back to `estimateRowHeight` before any row has been measured. Default `false` keeps the estimate fixed at `estimateRowHeight` for every render (today's behavior).
132
+ */
133
+ autoMeasure: boolean;
130
134
  /**
131
135
  * A CSS length string bounding the `rdt-scroll` container when `virtual` is on (e.g. `'400px'`). Mirrored to the `--rozie-data-table-max-height` custom property; the prop wins, the token is the fallback.
132
136
  */
@@ -249,7 +253,11 @@ declare class DataTable extends DataTable_base {
249
253
  virtualizer: any;
250
254
  virtualizerCleanup: any;
251
255
  gridScrollEl: any;
256
+ colVirtualizer: any;
257
+ colVirtualizerCleanup: any;
252
258
  remeasurePending: boolean;
259
+ remeasureRaf: any;
260
+ remeasureDisposed: boolean;
253
261
  GRID_PAGE_STEP: number;
254
262
  gridRoot: any;
255
263
  programmatic: number;
@@ -263,8 +271,6 @@ declare class DataTable extends DataTable_base {
263
271
  effectiveColumnPinning: () => any;
264
272
  currentState: () => any;
265
273
  currentData: () => any;
266
- isSafeKey: (k: any) => boolean;
267
- wrapAggregationFn: (fn: any) => string | ((columnId: any, leafRows: any, childRows: any) => any);
268
274
  buildConfigDef: (c: any) => {
269
275
  id: string;
270
276
  header: any;
@@ -299,13 +305,17 @@ declare class DataTable extends DataTable_base {
299
305
  };
300
306
  columns?: undefined;
301
307
  };
308
+ columnDefsCache: any[] | null;
309
+ columnDefsCacheColumnsRef: any;
310
+ columnDefsCacheColRegRef: any;
311
+ columnDefsIndexCache: any;
302
312
  columnDefs: () => any[];
313
+ defIndex: () => any;
303
314
  SELECT_COL_ID: string;
304
315
  EXPANDER_COL_ID: string;
305
316
  selectionEnabled: () => boolean;
306
317
  tableColumns: () => any[];
307
318
  writeSorting: (next: any) => void;
308
- applyUpdater: (updater: any, current: any) => any;
309
319
  writeExpanded: (next: any) => void;
310
320
  writeGrouping: (next: any) => void;
311
321
  writeGlobalFilter: (next: any) => void;
@@ -340,12 +350,39 @@ declare class DataTable extends DataTable_base {
340
350
  onColumnOrderChangeCb: (updater: any) => void;
341
351
  onColumnPinningChangeCb: (updater: any) => void;
342
352
  onColumnSizingInfoChangeCb: (updater: any) => void;
353
+ resolveVirtual: () => "rows" | "columns" | "both" | "off";
354
+ rowsWindowed: () => boolean;
355
+ colsWindowed: () => boolean;
356
+ isWindowed: () => boolean;
357
+ autoMeasureOn: () => boolean;
358
+ columnCount: () => number;
359
+ columnSize: (i: number) => number;
360
+ forcedColumns: () => number[];
361
+ windowedCells: (row: any) => any;
343
362
  windowSource: () => any;
344
363
  scheduleRemeasure: () => void;
364
+ teardownRemeasure: () => void;
345
365
  pinnedEditIndex: () => any;
346
366
  pinnedMeasurement: (pin: any) => any;
347
367
  remeasureWindow: () => void;
348
368
  virtualItemKey: (i: any) => any;
369
+ COL_OVERSCAN: number;
370
+ colRtlObserver: any;
371
+ colRtlObserverEl: any;
372
+ isColRtl: () => boolean;
373
+ ensureColRtlWatch: () => void;
374
+ teardownColRtlWatch: () => void;
375
+ columnVirtualizerOptions: () => any;
376
+ measuredRowTotal: number;
377
+ measuredRowCount: number;
378
+ lastFedRowEstimate: number;
379
+ foldedRowHeights: Record<number, number>;
380
+ windowVerBumpPending: boolean;
381
+ bumpWindowVer: () => void;
382
+ ESTIMATE_REFEED_DELTA_PX: number;
383
+ estimateRowSize: (i: number) => number;
384
+ foldMeasuredRow: (index: number, height: number) => void;
385
+ refineRowEstimate: () => void;
349
386
  virtualizerOptions: () => any;
350
387
  pinMeasurement: (pin: number) => {
351
388
  start: number;
@@ -358,6 +395,11 @@ declare class DataTable extends DataTable_base {
358
395
  padBottom: () => number;
359
396
  pmIndexInWindow: (items: any, idx: any) => boolean;
360
397
  rowIsOutsideWindow: (r: any) => boolean;
398
+ windowedColIndices: () => any;
399
+ colPadLeft: () => any;
400
+ colPadRight: () => number;
401
+ colIsOutsideWindow: (c: any) => boolean;
402
+ afterRowRemeasure: () => void;
361
403
  announceState: {
362
404
  sorting: unknown;
363
405
  columnFilters: unknown;
@@ -416,11 +458,16 @@ declare class DataTable extends DataTable_base {
416
458
  onToggleExpand: (row: any, evt: any) => void;
417
459
  bodyCellStyle: (row: any, colId: any) => string;
418
460
  rowIsGrouped: (row: any) => boolean;
461
+ rowIndexIsGrouped: (rowIndex: any) => boolean;
419
462
  groupingActive: () => boolean;
420
463
  cellIsGrouped: (cellCtx: any) => boolean;
421
464
  cellIsAggregated: (cellCtx: any) => boolean;
422
465
  cellIsPlaceholder: (cellCtx: any) => boolean;
423
466
  groupSubRowCount: (row: any) => any;
467
+ groupRowDescriptorCache: any;
468
+ groupRowDescriptorCacheVer: any;
469
+ groupRowDescriptor: (row: any) => any;
470
+ cellSlotRow: (row: any) => any;
424
471
  groupingKeys: () => any;
425
472
  groupableColumns: () => any[];
426
473
  stopEvent: (evt: any) => void;
@@ -467,7 +514,6 @@ declare class DataTable extends DataTable_base {
467
514
  bodyAriaRowIndex: (row: any) => number;
468
515
  visibleColCount: () => any;
469
516
  bodyRowCount: () => number;
470
- clamp: (v: any, lo: any, hi: any) => any;
471
517
  headerLeafLevel: () => number;
472
518
  headerCountAtLevel: (level: any) => any;
473
519
  headerAt: (level: any, colIndex: any) => any;
@@ -491,7 +537,6 @@ declare class DataTable extends DataTable_base {
491
537
  col: number;
492
538
  };
493
539
  currentCellEl: () => any;
494
- focusables: (cellEl: any) => any[];
495
540
  enterControl: () => void;
496
541
  cycleWithinCell: (cellEl: any, forward: any) => void;
497
542
  onGridKeyDown: (e: any) => void;
@@ -502,6 +547,9 @@ declare class DataTable extends DataTable_base {
502
547
  onGridFocusOut: (e: any) => void;
503
548
  recoverGridFocus: (rowKey: any, col: any, level: any, guardMoved?: boolean) => void;
504
549
  clampActiveCell: (rowCount: any, colCount: any) => void;
550
+ windowedHeadersFor: (hg: any, hgLevel: any) => any;
551
+ windowedColSpan: () => any;
552
+ remeasureColumnWindow: () => void;
505
553
  gridEmptyFallback: boolean;
506
554
  rangeTransition: boolean;
507
555
  rangeClickPending: boolean;
@@ -533,9 +581,7 @@ declare class DataTable extends DataTable_base {
533
581
  c0: any;
534
582
  c1: any;
535
583
  };
536
- escapeTsvField: (s: any) => any;
537
584
  rangeToTsv: () => string;
538
- parseTsv: (text: any) => any[];
539
585
  copyRange: () => void;
540
586
  applyGridToRange: (grid: any, originRow: any, originCol: any) => {
541
587
  wrote: number;
@@ -543,15 +589,20 @@ declare class DataTable extends DataTable_base {
543
589
  };
544
590
  rowOriginalAt: (rowIndex: any) => any;
545
591
  rowIdAt: (rowIndex: any) => any;
546
- tileGridToBox: (grid: any, box: any) => any;
547
592
  pasteRange: () => void;
548
593
  cutRange: () => void;
549
594
  clearActiveRange: () => void;
550
- tileIndex: (i: any, lo: any, hi: any) => any;
551
595
  fillRange: (sourceBox: any, endCell: any) => void;
552
596
  fillDragging: boolean;
553
597
  fillDragMove: any;
554
598
  fillDragUp: any;
599
+ fillEdgeScrollRaf: any;
600
+ FILL_EDGE_SCROLL_PX: number;
601
+ FILL_EDGE_SCROLL_STEP: number;
602
+ edgeDelta: (clientX: any, clientY: any) => {
603
+ dx: number;
604
+ dy: number;
605
+ };
555
606
  teardownFillDrag: () => void;
556
607
  cellIndexFromPoint: (clientX: any, clientY: any) => {
557
608
  r: number;
@@ -570,7 +621,6 @@ declare class DataTable extends DataTable_base {
570
621
  cellAriaInvalid: (rowIndex: any, colIndex: any) => "true" | null;
571
622
  runValidator: (colId: any, value: any, row: any) => string | true;
572
623
  setInvalid: (msg: any) => void;
573
- replaceRowValue: (rows: any, rowIndex: any, field: any, value: any) => any[];
574
624
  sourceIndexOfRow: (visibleRowIndex: any) => any;
575
625
  editingColumnId: () => any;
576
626
  editingColumnField: () => any;
@@ -582,7 +632,6 @@ declare class DataTable extends DataTable_base {
582
632
  cellValueAt: (rowIndex: any, colIndex: any) => any;
583
633
  beginEdit: (rowIndex: any, colIndex: any, seed: any) => void;
584
634
  focusCellWhenReady: (row: any, col: any) => void;
585
- indexOfRowIn: (rows: any, rowOriginal: any, rowId: any) => number;
586
635
  endEdit: () => void;
587
636
  endRowEdit: () => void;
588
637
  editorAutofocusFor: (colId: any, rowIndex: any) => boolean;
@@ -595,7 +644,6 @@ declare class DataTable extends DataTable_base {
595
644
  beginRowEdit: (row: any) => void;
596
645
  commitRow: () => boolean;
597
646
  cancelRow: () => void;
598
- replaceRowValues: (rows: any, rowIndex: any, fieldValues: any) => any[];
599
647
  nextEditableCell: (fromRow: any, fromCol: any) => {
600
648
  row: any;
601
649
  col: any;
package/dist/index.d.mts CHANGED
@@ -120,13 +120,17 @@ declare class DataTable extends DataTable_base {
120
120
  */
121
121
  undoLimit: number;
122
122
  /**
123
- * Opt-in vertical **row windowing**. When `true`, only the visible slice of rows renders inside a bounded `rdt-scroll` container (with leading/trailing spacer rows preserving total scroll height), windowing over the full filtered + sorted (pre-pagination) model and suppressing the client pagination chrome. Default `false` is byte-identical to a non-virtual table.
123
+ * Opt-in windowing grammar: `false` (default, off — byte-identical to a non-virtual table) | `true` or `'rows'` (vertical row windowing; `true` is byte-behavior-identical to every existing consumer, zero churn) | `'columns'` (horizontal column windowing) | `'both'` (both axes windowed). Row windowing renders only the visible slice of rows inside a bounded `rdt-scroll` container (with leading/trailing spacer rows preserving total scroll height), windowing over the full filtered + sorted (pre-pagination) model and suppressing the client pagination chrome. Column windowing renders only the visible slice of leaf columns inside the same `rdt-scroll` container. An unrecognised string behaves as `false`.
124
124
  */
125
- virtual: boolean;
125
+ virtual: boolean | string;
126
126
  /**
127
- * Estimated row height (px) seeding the windowing engine before `measureElement` refines actual heights. Only consulted when `virtual` is on.
127
+ * Estimated row height (px) — the first-paint seed for the windowing engine before any row has been measured. Only consulted when rows are windowed. When `autoMeasure` is `true`, later renders progressively refine the estimate from measured content; when `autoMeasure` is `false` this remains the explicit override for every render.
128
128
  */
129
129
  estimateRowHeight: number;
130
+ /**
131
+ * Opt-in content-driven row-size estimation. When `true`, the windowing engine feeds `estimateSize()` a running mean of measured row heights instead of the fixed `estimateRowHeight` seed, so `getTotalSize()` converges to the true content total on a large table with variable-height rows. Falls back to `estimateRowHeight` before any row has been measured. Default `false` keeps the estimate fixed at `estimateRowHeight` for every render (today's behavior).
132
+ */
133
+ autoMeasure: boolean;
130
134
  /**
131
135
  * A CSS length string bounding the `rdt-scroll` container when `virtual` is on (e.g. `'400px'`). Mirrored to the `--rozie-data-table-max-height` custom property; the prop wins, the token is the fallback.
132
136
  */
@@ -249,7 +253,11 @@ declare class DataTable extends DataTable_base {
249
253
  virtualizer: any;
250
254
  virtualizerCleanup: any;
251
255
  gridScrollEl: any;
256
+ colVirtualizer: any;
257
+ colVirtualizerCleanup: any;
252
258
  remeasurePending: boolean;
259
+ remeasureRaf: any;
260
+ remeasureDisposed: boolean;
253
261
  GRID_PAGE_STEP: number;
254
262
  gridRoot: any;
255
263
  programmatic: number;
@@ -263,8 +271,6 @@ declare class DataTable extends DataTable_base {
263
271
  effectiveColumnPinning: () => any;
264
272
  currentState: () => any;
265
273
  currentData: () => any;
266
- isSafeKey: (k: any) => boolean;
267
- wrapAggregationFn: (fn: any) => string | ((columnId: any, leafRows: any, childRows: any) => any);
268
274
  buildConfigDef: (c: any) => {
269
275
  id: string;
270
276
  header: any;
@@ -299,13 +305,17 @@ declare class DataTable extends DataTable_base {
299
305
  };
300
306
  columns?: undefined;
301
307
  };
308
+ columnDefsCache: any[] | null;
309
+ columnDefsCacheColumnsRef: any;
310
+ columnDefsCacheColRegRef: any;
311
+ columnDefsIndexCache: any;
302
312
  columnDefs: () => any[];
313
+ defIndex: () => any;
303
314
  SELECT_COL_ID: string;
304
315
  EXPANDER_COL_ID: string;
305
316
  selectionEnabled: () => boolean;
306
317
  tableColumns: () => any[];
307
318
  writeSorting: (next: any) => void;
308
- applyUpdater: (updater: any, current: any) => any;
309
319
  writeExpanded: (next: any) => void;
310
320
  writeGrouping: (next: any) => void;
311
321
  writeGlobalFilter: (next: any) => void;
@@ -340,12 +350,39 @@ declare class DataTable extends DataTable_base {
340
350
  onColumnOrderChangeCb: (updater: any) => void;
341
351
  onColumnPinningChangeCb: (updater: any) => void;
342
352
  onColumnSizingInfoChangeCb: (updater: any) => void;
353
+ resolveVirtual: () => "rows" | "columns" | "both" | "off";
354
+ rowsWindowed: () => boolean;
355
+ colsWindowed: () => boolean;
356
+ isWindowed: () => boolean;
357
+ autoMeasureOn: () => boolean;
358
+ columnCount: () => number;
359
+ columnSize: (i: number) => number;
360
+ forcedColumns: () => number[];
361
+ windowedCells: (row: any) => any;
343
362
  windowSource: () => any;
344
363
  scheduleRemeasure: () => void;
364
+ teardownRemeasure: () => void;
345
365
  pinnedEditIndex: () => any;
346
366
  pinnedMeasurement: (pin: any) => any;
347
367
  remeasureWindow: () => void;
348
368
  virtualItemKey: (i: any) => any;
369
+ COL_OVERSCAN: number;
370
+ colRtlObserver: any;
371
+ colRtlObserverEl: any;
372
+ isColRtl: () => boolean;
373
+ ensureColRtlWatch: () => void;
374
+ teardownColRtlWatch: () => void;
375
+ columnVirtualizerOptions: () => any;
376
+ measuredRowTotal: number;
377
+ measuredRowCount: number;
378
+ lastFedRowEstimate: number;
379
+ foldedRowHeights: Record<number, number>;
380
+ windowVerBumpPending: boolean;
381
+ bumpWindowVer: () => void;
382
+ ESTIMATE_REFEED_DELTA_PX: number;
383
+ estimateRowSize: (i: number) => number;
384
+ foldMeasuredRow: (index: number, height: number) => void;
385
+ refineRowEstimate: () => void;
349
386
  virtualizerOptions: () => any;
350
387
  pinMeasurement: (pin: number) => {
351
388
  start: number;
@@ -358,6 +395,11 @@ declare class DataTable extends DataTable_base {
358
395
  padBottom: () => number;
359
396
  pmIndexInWindow: (items: any, idx: any) => boolean;
360
397
  rowIsOutsideWindow: (r: any) => boolean;
398
+ windowedColIndices: () => any;
399
+ colPadLeft: () => any;
400
+ colPadRight: () => number;
401
+ colIsOutsideWindow: (c: any) => boolean;
402
+ afterRowRemeasure: () => void;
361
403
  announceState: {
362
404
  sorting: unknown;
363
405
  columnFilters: unknown;
@@ -416,11 +458,16 @@ declare class DataTable extends DataTable_base {
416
458
  onToggleExpand: (row: any, evt: any) => void;
417
459
  bodyCellStyle: (row: any, colId: any) => string;
418
460
  rowIsGrouped: (row: any) => boolean;
461
+ rowIndexIsGrouped: (rowIndex: any) => boolean;
419
462
  groupingActive: () => boolean;
420
463
  cellIsGrouped: (cellCtx: any) => boolean;
421
464
  cellIsAggregated: (cellCtx: any) => boolean;
422
465
  cellIsPlaceholder: (cellCtx: any) => boolean;
423
466
  groupSubRowCount: (row: any) => any;
467
+ groupRowDescriptorCache: any;
468
+ groupRowDescriptorCacheVer: any;
469
+ groupRowDescriptor: (row: any) => any;
470
+ cellSlotRow: (row: any) => any;
424
471
  groupingKeys: () => any;
425
472
  groupableColumns: () => any[];
426
473
  stopEvent: (evt: any) => void;
@@ -467,7 +514,6 @@ declare class DataTable extends DataTable_base {
467
514
  bodyAriaRowIndex: (row: any) => number;
468
515
  visibleColCount: () => any;
469
516
  bodyRowCount: () => number;
470
- clamp: (v: any, lo: any, hi: any) => any;
471
517
  headerLeafLevel: () => number;
472
518
  headerCountAtLevel: (level: any) => any;
473
519
  headerAt: (level: any, colIndex: any) => any;
@@ -491,7 +537,6 @@ declare class DataTable extends DataTable_base {
491
537
  col: number;
492
538
  };
493
539
  currentCellEl: () => any;
494
- focusables: (cellEl: any) => any[];
495
540
  enterControl: () => void;
496
541
  cycleWithinCell: (cellEl: any, forward: any) => void;
497
542
  onGridKeyDown: (e: any) => void;
@@ -502,6 +547,9 @@ declare class DataTable extends DataTable_base {
502
547
  onGridFocusOut: (e: any) => void;
503
548
  recoverGridFocus: (rowKey: any, col: any, level: any, guardMoved?: boolean) => void;
504
549
  clampActiveCell: (rowCount: any, colCount: any) => void;
550
+ windowedHeadersFor: (hg: any, hgLevel: any) => any;
551
+ windowedColSpan: () => any;
552
+ remeasureColumnWindow: () => void;
505
553
  gridEmptyFallback: boolean;
506
554
  rangeTransition: boolean;
507
555
  rangeClickPending: boolean;
@@ -533,9 +581,7 @@ declare class DataTable extends DataTable_base {
533
581
  c0: any;
534
582
  c1: any;
535
583
  };
536
- escapeTsvField: (s: any) => any;
537
584
  rangeToTsv: () => string;
538
- parseTsv: (text: any) => any[];
539
585
  copyRange: () => void;
540
586
  applyGridToRange: (grid: any, originRow: any, originCol: any) => {
541
587
  wrote: number;
@@ -543,15 +589,20 @@ declare class DataTable extends DataTable_base {
543
589
  };
544
590
  rowOriginalAt: (rowIndex: any) => any;
545
591
  rowIdAt: (rowIndex: any) => any;
546
- tileGridToBox: (grid: any, box: any) => any;
547
592
  pasteRange: () => void;
548
593
  cutRange: () => void;
549
594
  clearActiveRange: () => void;
550
- tileIndex: (i: any, lo: any, hi: any) => any;
551
595
  fillRange: (sourceBox: any, endCell: any) => void;
552
596
  fillDragging: boolean;
553
597
  fillDragMove: any;
554
598
  fillDragUp: any;
599
+ fillEdgeScrollRaf: any;
600
+ FILL_EDGE_SCROLL_PX: number;
601
+ FILL_EDGE_SCROLL_STEP: number;
602
+ edgeDelta: (clientX: any, clientY: any) => {
603
+ dx: number;
604
+ dy: number;
605
+ };
555
606
  teardownFillDrag: () => void;
556
607
  cellIndexFromPoint: (clientX: any, clientY: any) => {
557
608
  r: number;
@@ -570,7 +621,6 @@ declare class DataTable extends DataTable_base {
570
621
  cellAriaInvalid: (rowIndex: any, colIndex: any) => "true" | null;
571
622
  runValidator: (colId: any, value: any, row: any) => string | true;
572
623
  setInvalid: (msg: any) => void;
573
- replaceRowValue: (rows: any, rowIndex: any, field: any, value: any) => any[];
574
624
  sourceIndexOfRow: (visibleRowIndex: any) => any;
575
625
  editingColumnId: () => any;
576
626
  editingColumnField: () => any;
@@ -582,7 +632,6 @@ declare class DataTable extends DataTable_base {
582
632
  cellValueAt: (rowIndex: any, colIndex: any) => any;
583
633
  beginEdit: (rowIndex: any, colIndex: any, seed: any) => void;
584
634
  focusCellWhenReady: (row: any, col: any) => void;
585
- indexOfRowIn: (rows: any, rowOriginal: any, rowId: any) => number;
586
635
  endEdit: () => void;
587
636
  endRowEdit: () => void;
588
637
  editorAutofocusFor: (colId: any, rowIndex: any) => boolean;
@@ -595,7 +644,6 @@ declare class DataTable extends DataTable_base {
595
644
  beginRowEdit: (row: any) => void;
596
645
  commitRow: () => boolean;
597
646
  cancelRow: () => void;
598
- replaceRowValues: (rows: any, rowIndex: any, fieldValues: any) => any[];
599
647
  nextEditableCell: (fromRow: any, fromCol: any) => {
600
648
  row: any;
601
649
  col: any;