material-react-table 3.0.0-alpha.0 → 3.0.0-beta.1

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.esm.js CHANGED
@@ -235,6 +235,20 @@ const createRow = (table, originalRow, rowIndex = -1, depth = 0, subRows, parent
235
235
  [getColumnId(col)]: '',
236
236
  }))), rowIndex, depth, subRows, parentId);
237
237
 
238
+ const fuzzy$1 = (rowA, rowB, columnId) => {
239
+ let dir = 0;
240
+ if (rowA.columnFiltersMeta[columnId]) {
241
+ dir = compareItems(rowA.columnFiltersMeta[columnId], rowB.columnFiltersMeta[columnId]);
242
+ }
243
+ // Provide a fallback for when the item ranks are equal
244
+ return dir === 0
245
+ ? sortingFns.alphanumeric(rowA, rowB, columnId)
246
+ : dir;
247
+ };
248
+ const MRT_SortingFns = Object.assign(Object.assign({}, sortingFns), { fuzzy: fuzzy$1 });
249
+ const rankGlobalFuzzy = (rowA, rowB) => Math.max(...Object.values(rowB.columnFiltersMeta).map((v) => v.rank)) -
250
+ Math.max(...Object.values(rowA.columnFiltersMeta).map((v) => v.rank));
251
+
238
252
  const parseFromValuesOrFunc = (fn, arg) => (fn instanceof Function ? fn(arg) : fn);
239
253
  const getValueAndLabel = (option) => {
240
254
  var _a, _b;
@@ -253,108 +267,6 @@ const getValueAndLabel = (option) => {
253
267
  return { label, value };
254
268
  };
255
269
 
256
- const isCellEditable = ({ cell, table, }) => {
257
- const { enableEditing } = table.options;
258
- const { column: { columnDef }, row, } = cell;
259
- return (!cell.getIsPlaceholder() &&
260
- parseFromValuesOrFunc(enableEditing, row) &&
261
- parseFromValuesOrFunc(columnDef.enableEditing, row) !== false);
262
- };
263
- const openEditingCell = ({ cell, table, }) => {
264
- const { options: { editDisplayMode }, refs: { editInputRefs }, } = table;
265
- const { column } = cell;
266
- if (isCellEditable({ cell, table }) && editDisplayMode === 'cell') {
267
- table.setEditingCell(cell);
268
- queueMicrotask(() => {
269
- var _a;
270
- const textField = editInputRefs.current[column.id];
271
- if (textField) {
272
- textField.focus();
273
- (_a = textField.select) === null || _a === void 0 ? void 0 : _a.call(textField);
274
- }
275
- });
276
- }
277
- };
278
-
279
- function defaultDisplayColumnProps({ header, id, size, tableOptions, }) {
280
- const { defaultDisplayColumn, displayColumnDefOptions, localization } = tableOptions;
281
- return Object.assign(Object.assign(Object.assign(Object.assign({}, defaultDisplayColumn), { header: header ? localization[header] : '', size }), displayColumnDefOptions === null || displayColumnDefOptions === void 0 ? void 0 : displayColumnDefOptions[id]), { id });
282
- }
283
- const showRowPinningColumn = (tableOptions) => {
284
- const { enableRowPinning, rowPinningDisplayMode } = tableOptions;
285
- return !!(enableRowPinning && !(rowPinningDisplayMode === null || rowPinningDisplayMode === void 0 ? void 0 : rowPinningDisplayMode.startsWith('select')));
286
- };
287
- const showRowDragColumn = (tableOptions) => {
288
- const { enableRowDragging, enableRowOrdering } = tableOptions;
289
- return !!(enableRowDragging || enableRowOrdering);
290
- };
291
- const showRowExpandColumn = (tableOptions) => {
292
- const { enableExpanding, enableGrouping, renderDetailPanel, state: { grouping }, } = tableOptions;
293
- return !!(enableExpanding ||
294
- (enableGrouping && (grouping === null || grouping === void 0 ? void 0 : grouping.length)) ||
295
- renderDetailPanel);
296
- };
297
- const showRowActionsColumn = (tableOptions) => {
298
- const { createDisplayMode, editDisplayMode, enableEditing, enableRowActions, state: { creatingRow }, } = tableOptions;
299
- return !!(enableRowActions ||
300
- (creatingRow && createDisplayMode === 'row') ||
301
- (enableEditing && ['modal', 'row'].includes(editDisplayMode !== null && editDisplayMode !== void 0 ? editDisplayMode : '')));
302
- };
303
- const showRowSelectionColumn = (tableOptions) => !!tableOptions.enableRowSelection;
304
- const showRowNumbersColumn = (tableOptions) => !!tableOptions.enableRowNumbers;
305
- const showRowSpacerColumn = (tableOptions) => tableOptions.layoutMode === 'grid-no-grow';
306
- const getLeadingDisplayColumnIds = (tableOptions) => [
307
- showRowPinningColumn(tableOptions) && 'mrt-row-pin',
308
- showRowDragColumn(tableOptions) && 'mrt-row-drag',
309
- tableOptions.positionActionsColumn === 'first' &&
310
- showRowActionsColumn(tableOptions) &&
311
- 'mrt-row-actions',
312
- tableOptions.positionExpandColumn === 'first' &&
313
- showRowExpandColumn(tableOptions) &&
314
- 'mrt-row-expand',
315
- showRowSelectionColumn(tableOptions) && 'mrt-row-select',
316
- showRowNumbersColumn(tableOptions) && 'mrt-row-numbers',
317
- ].filter(Boolean);
318
- const getTrailingDisplayColumnIds = (tableOptions) => [
319
- tableOptions.positionActionsColumn === 'last' &&
320
- showRowActionsColumn(tableOptions) &&
321
- 'mrt-row-actions',
322
- tableOptions.positionExpandColumn === 'last' &&
323
- showRowExpandColumn(tableOptions) &&
324
- 'mrt-row-expand',
325
- showRowSpacerColumn(tableOptions) && 'mrt-row-spacer',
326
- ].filter(Boolean);
327
- const getDefaultColumnOrderIds = (tableOptions, reset = false) => {
328
- const { state: { columnOrder: currentColumnOrderIds = [] }, } = tableOptions;
329
- const leadingDisplayColIds = getLeadingDisplayColumnIds(tableOptions);
330
- const trailingDisplayColIds = getTrailingDisplayColumnIds(tableOptions);
331
- const defaultColumnDefIds = getAllLeafColumnDefs(tableOptions.columns).map((columnDef) => getColumnId(columnDef));
332
- let allLeafColumnDefIds = reset
333
- ? defaultColumnDefIds
334
- : Array.from(new Set([...currentColumnOrderIds, ...defaultColumnDefIds]));
335
- allLeafColumnDefIds = allLeafColumnDefIds.filter((colId) => !leadingDisplayColIds.includes(colId) &&
336
- !trailingDisplayColIds.includes(colId));
337
- return [
338
- ...leadingDisplayColIds,
339
- ...allLeafColumnDefIds,
340
- ...trailingDisplayColIds,
341
- ];
342
- };
343
-
344
- const fuzzy$1 = (rowA, rowB, columnId) => {
345
- let dir = 0;
346
- if (rowA.columnFiltersMeta[columnId]) {
347
- dir = compareItems(rowA.columnFiltersMeta[columnId], rowB.columnFiltersMeta[columnId]);
348
- }
349
- // Provide a fallback for when the item ranks are equal
350
- return dir === 0
351
- ? sortingFns.alphanumeric(rowA, rowB, columnId)
352
- : dir;
353
- };
354
- const MRT_SortingFns = Object.assign(Object.assign({}, sortingFns), { fuzzy: fuzzy$1 });
355
- const rankGlobalFuzzy = (rowA, rowB) => Math.max(...Object.values(rowB.columnFiltersMeta).map((v) => v.rank)) -
356
- Math.max(...Object.values(rowA.columnFiltersMeta).map((v) => v.rank));
357
-
358
270
  const getMRT_Rows = (table, all) => {
359
271
  const { getCenterRows, getPrePaginationRowModel, getRowModel, getState, getTopRows, options: { createDisplayMode, enablePagination, enableRowPinning, manualPagination, positionCreatingRow, rowPinningDisplayMode, }, } = table;
360
272
  const { creatingRow, pagination } = getState();
@@ -495,6 +407,187 @@ const getMRT_SelectAllHandler = ({ table }) => (event, value, forceAll) => {
495
407
  lastSelectedRowId.current = null;
496
408
  };
497
409
 
410
+ const isCellEditable = ({ cell, table, }) => {
411
+ const { enableEditing } = table.options;
412
+ const { column: { columnDef }, row, } = cell;
413
+ return (!cell.getIsPlaceholder() &&
414
+ parseFromValuesOrFunc(enableEditing, row) &&
415
+ parseFromValuesOrFunc(columnDef.enableEditing, row) !== false);
416
+ };
417
+ const openEditingCell = ({ cell, table, }) => {
418
+ const { options: { editDisplayMode }, refs: { editInputRefs }, } = table;
419
+ const { column } = cell;
420
+ if (isCellEditable({ cell, table }) && editDisplayMode === 'cell') {
421
+ table.setEditingCell(cell);
422
+ queueMicrotask(() => {
423
+ var _a;
424
+ const textField = editInputRefs.current[column.id];
425
+ if (textField) {
426
+ textField.focus();
427
+ (_a = textField.select) === null || _a === void 0 ? void 0 : _a.call(textField);
428
+ }
429
+ });
430
+ }
431
+ };
432
+ const cellNavigation = ({ cell, cellElements, cellValue, containerElement, event, header, parentElement, table, }) => {
433
+ var _a, _b, _c, _d, _e, _f, _g, _h;
434
+ if (cellValue && (event.ctrlKey || event.metaKey) && event.key === 'c') {
435
+ navigator.clipboard.writeText(cellValue);
436
+ }
437
+ else if (['Enter', ' '].includes(event.key)) {
438
+ if (((_a = cell === null || cell === void 0 ? void 0 : cell.column) === null || _a === void 0 ? void 0 : _a.id) === 'mrt-row-select') {
439
+ getMRT_RowSelectionHandler({
440
+ row: cell.row,
441
+ table,
442
+ //@ts-ignore
443
+ staticRowIndex: +event.target.getAttribute('data-index'),
444
+ })(event);
445
+ }
446
+ else if (((_b = header === null || header === void 0 ? void 0 : header.column) === null || _b === void 0 ? void 0 : _b.id) === 'mrt-row-select' &&
447
+ table.options.enableSelectAll) {
448
+ getMRT_SelectAllHandler({
449
+ table,
450
+ })(event);
451
+ }
452
+ else if (((_c = cell === null || cell === void 0 ? void 0 : cell.column) === null || _c === void 0 ? void 0 : _c.id) === 'mrt-row-expand' &&
453
+ (cell.row.getCanExpand() ||
454
+ ((_e = (_d = table.options).renderDetailPanel) === null || _e === void 0 ? void 0 : _e.call(_d, { row: cell.row, table })))) {
455
+ cell.row.toggleExpanded();
456
+ }
457
+ else if (((_f = header === null || header === void 0 ? void 0 : header.column) === null || _f === void 0 ? void 0 : _f.id) === 'mrt-row-expand' &&
458
+ table.options.enableExpandAll) {
459
+ table.toggleAllRowsExpanded();
460
+ }
461
+ else if ((_g = header === null || header === void 0 ? void 0 : header.column) === null || _g === void 0 ? void 0 : _g.getCanSort()) {
462
+ header.column.toggleSorting();
463
+ }
464
+ else if ((cell === null || cell === void 0 ? void 0 : cell.column.id) === 'mrt-row-pin') {
465
+ cell.row.getIsPinned()
466
+ ? cell.row.pin(false)
467
+ : cell.row.pin(((_h = table.options.rowPinningDisplayMode) === null || _h === void 0 ? void 0 : _h.includes('bottom'))
468
+ ? 'bottom'
469
+ : 'top');
470
+ }
471
+ }
472
+ else if (['ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {
473
+ event.preventDefault();
474
+ const currentCell = event.currentTarget;
475
+ const currentRow = parentElement || currentCell.closest('tr');
476
+ const tableElement = containerElement || currentCell.closest('table');
477
+ const allCells = cellElements ||
478
+ Array.from((tableElement === null || tableElement === void 0 ? void 0 : tableElement.querySelectorAll('th, td')) || []);
479
+ const currentCellIndex = allCells.indexOf(currentCell);
480
+ const currentIndex = parseInt(currentCell.getAttribute('data-index') || '0');
481
+ let nextCell = undefined;
482
+ //home/end first or last cell in row
483
+ const findEdgeCell = (rowIndex, edge) => {
484
+ var _a;
485
+ const row = rowIndex === 'c'
486
+ ? currentRow
487
+ : rowIndex === 'f'
488
+ ? tableElement === null || tableElement === void 0 ? void 0 : tableElement.querySelector('tr')
489
+ : (_a = tableElement === null || tableElement === void 0 ? void 0 : tableElement.lastElementChild) === null || _a === void 0 ? void 0 : _a.lastElementChild;
490
+ const rowCells = Array.from((row === null || row === void 0 ? void 0 : row.children) || []);
491
+ const targetCell = edge === 'f' ? rowCells[0] : rowCells[rowCells.length - 1];
492
+ return targetCell;
493
+ };
494
+ const findAdjacentCell = (columnIndex, searchDirection) => {
495
+ const searchArray = searchDirection === 'f'
496
+ ? allCells.slice(currentCellIndex + 1)
497
+ : allCells.slice(0, currentCellIndex).reverse();
498
+ return searchArray.find((cell) => cell.matches(`[data-index="${columnIndex}"]`));
499
+ };
500
+ switch (event.key) {
501
+ case 'ArrowRight':
502
+ nextCell = findAdjacentCell(currentIndex + 1, 'f');
503
+ break;
504
+ case 'ArrowLeft':
505
+ nextCell = findAdjacentCell(currentIndex - 1, 'b');
506
+ break;
507
+ case 'ArrowUp':
508
+ nextCell = findAdjacentCell(currentIndex, 'b');
509
+ break;
510
+ case 'ArrowDown':
511
+ nextCell = findAdjacentCell(currentIndex, 'f');
512
+ break;
513
+ case 'Home':
514
+ nextCell = findEdgeCell(event.ctrlKey ? 'f' : 'c', 'f');
515
+ break;
516
+ case 'End':
517
+ nextCell = findEdgeCell(event.ctrlKey ? 'l' : 'c', 'l');
518
+ break;
519
+ }
520
+ if (nextCell) {
521
+ nextCell.focus();
522
+ }
523
+ }
524
+ };
525
+
526
+ function defaultDisplayColumnProps({ header, id, size, tableOptions, }) {
527
+ const { defaultDisplayColumn, displayColumnDefOptions, localization } = tableOptions;
528
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, defaultDisplayColumn), { header: header ? localization[header] : '', size }), displayColumnDefOptions === null || displayColumnDefOptions === void 0 ? void 0 : displayColumnDefOptions[id]), { id });
529
+ }
530
+ const showRowPinningColumn = (tableOptions) => {
531
+ const { enableRowPinning, rowPinningDisplayMode } = tableOptions;
532
+ return !!(enableRowPinning && !(rowPinningDisplayMode === null || rowPinningDisplayMode === void 0 ? void 0 : rowPinningDisplayMode.startsWith('select')));
533
+ };
534
+ const showRowDragColumn = (tableOptions) => {
535
+ const { enableRowDragging, enableRowOrdering } = tableOptions;
536
+ return !!(enableRowDragging || enableRowOrdering);
537
+ };
538
+ const showRowExpandColumn = (tableOptions) => {
539
+ const { enableExpanding, enableGrouping, renderDetailPanel, state: { grouping }, } = tableOptions;
540
+ return !!(enableExpanding ||
541
+ (enableGrouping && (grouping === null || grouping === void 0 ? void 0 : grouping.length)) ||
542
+ renderDetailPanel);
543
+ };
544
+ const showRowActionsColumn = (tableOptions) => {
545
+ const { createDisplayMode, editDisplayMode, enableEditing, enableRowActions, state: { creatingRow }, } = tableOptions;
546
+ return !!(enableRowActions ||
547
+ (creatingRow && createDisplayMode === 'row') ||
548
+ (enableEditing && ['modal', 'row'].includes(editDisplayMode !== null && editDisplayMode !== void 0 ? editDisplayMode : '')));
549
+ };
550
+ const showRowSelectionColumn = (tableOptions) => !!tableOptions.enableRowSelection;
551
+ const showRowNumbersColumn = (tableOptions) => !!tableOptions.enableRowNumbers;
552
+ const showRowSpacerColumn = (tableOptions) => tableOptions.layoutMode === 'grid-no-grow';
553
+ const getLeadingDisplayColumnIds = (tableOptions) => [
554
+ showRowPinningColumn(tableOptions) && 'mrt-row-pin',
555
+ showRowDragColumn(tableOptions) && 'mrt-row-drag',
556
+ tableOptions.positionActionsColumn === 'first' &&
557
+ showRowActionsColumn(tableOptions) &&
558
+ 'mrt-row-actions',
559
+ tableOptions.positionExpandColumn === 'first' &&
560
+ showRowExpandColumn(tableOptions) &&
561
+ 'mrt-row-expand',
562
+ showRowSelectionColumn(tableOptions) && 'mrt-row-select',
563
+ showRowNumbersColumn(tableOptions) && 'mrt-row-numbers',
564
+ ].filter(Boolean);
565
+ const getTrailingDisplayColumnIds = (tableOptions) => [
566
+ tableOptions.positionActionsColumn === 'last' &&
567
+ showRowActionsColumn(tableOptions) &&
568
+ 'mrt-row-actions',
569
+ tableOptions.positionExpandColumn === 'last' &&
570
+ showRowExpandColumn(tableOptions) &&
571
+ 'mrt-row-expand',
572
+ showRowSpacerColumn(tableOptions) && 'mrt-row-spacer',
573
+ ].filter(Boolean);
574
+ const getDefaultColumnOrderIds = (tableOptions, reset = false) => {
575
+ const { state: { columnOrder: currentColumnOrderIds = [] }, } = tableOptions;
576
+ const leadingDisplayColIds = getLeadingDisplayColumnIds(tableOptions);
577
+ const trailingDisplayColIds = getTrailingDisplayColumnIds(tableOptions);
578
+ const defaultColumnDefIds = getAllLeafColumnDefs(tableOptions.columns).map((columnDef) => getColumnId(columnDef));
579
+ let allLeafColumnDefIds = reset
580
+ ? defaultColumnDefIds
581
+ : Array.from(new Set([...currentColumnOrderIds, ...defaultColumnDefIds]));
582
+ allLeafColumnDefIds = allLeafColumnDefIds.filter((colId) => !leadingDisplayColIds.includes(colId) &&
583
+ !trailingDisplayColIds.includes(colId));
584
+ return [
585
+ ...leadingDisplayColIds,
586
+ ...allLeafColumnDefIds,
587
+ ...trailingDisplayColIds,
588
+ ];
589
+ };
590
+
498
591
  const MRT_AggregationFns = Object.assign({}, aggregationFns);
499
592
 
500
593
  const fuzzy = (row, columnId, filterValue, addMeta) => {
@@ -505,44 +598,51 @@ const fuzzy = (row, columnId, filterValue, addMeta) => {
505
598
  return itemRank.passed;
506
599
  };
507
600
  fuzzy.autoRemove = (val) => !val;
508
- const contains = (row, id, filterValue) => row
509
- .getValue(id)
510
- .toString()
511
- .toLowerCase()
512
- .trim()
513
- .includes(filterValue.toString().toLowerCase().trim());
601
+ const contains = (row, id, filterValue) => {
602
+ var _a;
603
+ return !!((_a = row
604
+ .getValue(id)) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase().trim().includes(filterValue.toString().toLowerCase().trim()));
605
+ };
514
606
  contains.autoRemove = (val) => !val;
515
- const startsWith = (row, id, filterValue) => row
516
- .getValue(id)
517
- .toString()
518
- .toLowerCase()
519
- .trim()
520
- .startsWith(filterValue.toString().toLowerCase().trim());
607
+ const startsWith = (row, id, filterValue) => {
608
+ var _a;
609
+ return !!((_a = row
610
+ .getValue(id)) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase().trim().startsWith(filterValue.toString().toLowerCase().trim()));
611
+ };
521
612
  startsWith.autoRemove = (val) => !val;
522
- const endsWith = (row, id, filterValue) => row
523
- .getValue(id)
524
- .toString()
525
- .toLowerCase()
526
- .trim()
527
- .endsWith(filterValue.toString().toLowerCase().trim());
613
+ const endsWith = (row, id, filterValue) => {
614
+ var _a;
615
+ return !!((_a = row
616
+ .getValue(id)) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase().trim().endsWith(filterValue.toString().toLowerCase().trim()));
617
+ };
528
618
  endsWith.autoRemove = (val) => !val;
529
- const equals = (row, id, filterValue) => row.getValue(id).toString().toLowerCase().trim() ===
530
- (filterValue === null || filterValue === void 0 ? void 0 : filterValue.toString().toLowerCase().trim());
619
+ const equals = (row, id, filterValue) => {
620
+ var _a;
621
+ return ((_a = row.getValue(id)) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase().trim()) ===
622
+ filterValue.toString().toLowerCase().trim();
623
+ };
531
624
  equals.autoRemove = (val) => !val;
532
- const notEquals = (row, id, filterValue) => row.getValue(id).toString().toLowerCase().trim() !==
533
- filterValue.toString().toLowerCase().trim();
625
+ const notEquals = (row, id, filterValue) => {
626
+ var _a;
627
+ return ((_a = row.getValue(id)) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase().trim()) !==
628
+ filterValue.toString().toLowerCase().trim();
629
+ };
534
630
  notEquals.autoRemove = (val) => !val;
535
- const greaterThan = (row, id, filterValue) => !isNaN(+filterValue) && !isNaN(+row.getValue(id))
536
- ? +row.getValue(id) > +filterValue
537
- : row.getValue(id).toString().toLowerCase().trim() >
538
- (filterValue === null || filterValue === void 0 ? void 0 : filterValue.toString().toLowerCase().trim());
631
+ const greaterThan = (row, id, filterValue) => {
632
+ var _a, _b, _c;
633
+ return !isNaN(+filterValue) && !isNaN(+row.getValue(id))
634
+ ? +((_a = row.getValue(id)) !== null && _a !== void 0 ? _a : 0) > +filterValue
635
+ : ((_c = ((_b = row.getValue(id)) !== null && _b !== void 0 ? _b : '')) === null || _c === void 0 ? void 0 : _c.toString().toLowerCase().trim()) > filterValue.toString().toLowerCase().trim();
636
+ };
539
637
  greaterThan.autoRemove = (val) => !val;
540
638
  const greaterThanOrEqualTo = (row, id, filterValue) => equals(row, id, filterValue) || greaterThan(row, id, filterValue);
541
639
  greaterThanOrEqualTo.autoRemove = (val) => !val;
542
- const lessThan = (row, id, filterValue) => !isNaN(+filterValue) && !isNaN(+row.getValue(id))
543
- ? +row.getValue(id) < +filterValue
544
- : row.getValue(id).toString().toLowerCase().trim() <
545
- (filterValue === null || filterValue === void 0 ? void 0 : filterValue.toString().toLowerCase().trim());
640
+ const lessThan = (row, id, filterValue) => {
641
+ var _a, _b, _c;
642
+ return !isNaN(+filterValue) && !isNaN(+row.getValue(id))
643
+ ? +((_a = row.getValue(id)) !== null && _a !== void 0 ? _a : 0) < +filterValue
644
+ : ((_c = ((_b = row.getValue(id)) !== null && _b !== void 0 ? _b : '')) === null || _c === void 0 ? void 0 : _c.toString().toLowerCase().trim()) < filterValue.toString().toLowerCase().trim();
645
+ };
546
646
  lessThan.autoRemove = (val) => !val;
547
647
  const lessThanOrEqualTo = (row, id, filterValue) => equals(row, id, filterValue) || lessThan(row, id, filterValue);
548
648
  lessThanOrEqualTo.autoRemove = (val) => !val;
@@ -562,9 +662,9 @@ const betweenInclusive = (row, id, filterValues) => (['', undefined].includes(fi
562
662
  ['', undefined].includes(filterValues[1]) ||
563
663
  lessThanOrEqualTo(row, id, filterValues[1]));
564
664
  betweenInclusive.autoRemove = (val) => !val;
565
- const empty = (row, id, _filterValue) => !row.getValue(id).toString().trim();
665
+ const empty = (row, id, _filterValue) => { var _a; return !((_a = row.getValue(id)) === null || _a === void 0 ? void 0 : _a.toString().trim()); };
566
666
  empty.autoRemove = (val) => !val;
567
- const notEmpty = (row, id, _filterValue) => !!row.getValue(id).toString().trim();
667
+ const notEmpty = (row, id, _filterValue) => { var _a; return !!((_a = row.getValue(id)) === null || _a === void 0 ? void 0 : _a.toString().trim()); };
568
668
  notEmpty.autoRemove = (val) => !val;
569
669
  const MRT_FilterFns = Object.assign(Object.assign({}, filterFns), { between,
570
670
  betweenInclusive,
@@ -668,7 +768,7 @@ const getMRTTheme = (mrtTheme, muiTheme) => {
668
768
  const baseBackgroundColor = (_a = mrtThemeOverrides === null || mrtThemeOverrides === void 0 ? void 0 : mrtThemeOverrides.baseBackgroundColor) !== null && _a !== void 0 ? _a : (muiTheme.palette.mode === 'dark'
669
769
  ? lighten(muiTheme.palette.background.default, 0.05)
670
770
  : muiTheme.palette.background.default);
671
- return Object.assign({ baseBackgroundColor, draggingBorderColor: muiTheme.palette.primary.main, matchHighlightColor: muiTheme.palette.mode === 'dark'
771
+ return Object.assign({ baseBackgroundColor, cellNavigationOutlineColor: muiTheme.palette.primary.main, draggingBorderColor: muiTheme.palette.primary.main, matchHighlightColor: muiTheme.palette.mode === 'dark'
672
772
  ? darken(muiTheme.palette.warning.dark, 0.25)
673
773
  : lighten(muiTheme.palette.warning.light, 0.5), menuBackgroundColor: lighten(baseBackgroundColor, 0.07), pinnedRowBackgroundColor: alpha(muiTheme.palette.primary.main, 0.1), selectedRowBackgroundColor: alpha(muiTheme.palette.primary.main, 0.2) }, mrtThemeOverrides);
674
774
  };
@@ -734,7 +834,10 @@ const getCommonMRTCellStyles = ({ column, header, table, tableCellProps, theme,
734
834
  ? 2
735
835
  : columnDefType !== 'group' && isColumnPinned
736
836
  ? 1
737
- : 0 }, pinnedStyles), widthStyles), parseFromValuesOrFunc(tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx, theme));
837
+ : 0, '&:focus-visible': {
838
+ outline: `2px solid ${table.options.mrtTheme.cellNavigationOutlineColor}`,
839
+ outlineOffset: '-2px',
840
+ } }, pinnedStyles), widthStyles), parseFromValuesOrFunc(tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx, theme));
738
841
  };
739
842
  const getCommonToolbarStyles = ({ table, }) => ({
740
843
  alignItems: 'flex-start',
@@ -766,7 +869,7 @@ const MRT_ActionMenuItem = (_a) => {
766
869
  minWidth: '120px',
767
870
  my: 0,
768
871
  py: '6px',
769
- } }, rest, { children: [jsxs(Box, { sx: {
872
+ }, tabIndex: 0 }, rest, { children: [jsxs(Box, { sx: {
770
873
  alignItems: 'center',
771
874
  display: 'flex',
772
875
  }, children: [jsx(ListItemIcon, { children: icon }), label] }), onOpenSubMenu && (jsx(IconButton, { onClick: onOpenSubMenu, onMouseEnter: onOpenSubMenu, size: "small", sx: { p: 0 }, children: jsx(ArrowRightIcon, {}) }))] })));
@@ -776,18 +879,30 @@ const MRT_RowActionMenu = (_a) => {
776
879
  var { anchorEl, handleEdit, row, setAnchorEl, staticRowIndex, table } = _a, rest = __rest(_a, ["anchorEl", "handleEdit", "row", "setAnchorEl", "staticRowIndex", "table"]);
777
880
  const { getState, options: { editDisplayMode, enableEditing, icons: { EditIcon }, localization, mrtTheme: { menuBackgroundColor }, renderRowActionMenuItems, }, } = table;
778
881
  const { density } = getState();
779
- return (jsxs(Menu, Object.assign({ MenuListProps: {
882
+ const menuItems = useMemo(() => {
883
+ const items = [];
884
+ const editItem = parseFromValuesOrFunc(enableEditing, row) &&
885
+ ['modal', 'row'].includes(editDisplayMode) && (jsx(MRT_ActionMenuItem, { icon: jsx(EditIcon, {}), label: localization.edit, onClick: handleEdit, table: table }));
886
+ if (editItem)
887
+ items.push(editItem);
888
+ const rowActionMenuItems = renderRowActionMenuItems === null || renderRowActionMenuItems === void 0 ? void 0 : renderRowActionMenuItems({
889
+ closeMenu: () => setAnchorEl(null),
890
+ row,
891
+ staticRowIndex,
892
+ table,
893
+ });
894
+ if (rowActionMenuItems === null || rowActionMenuItems === void 0 ? void 0 : rowActionMenuItems.length)
895
+ items.push(...rowActionMenuItems);
896
+ return items;
897
+ }, [renderRowActionMenuItems, row, staticRowIndex, table]);
898
+ if (!menuItems.length)
899
+ return null;
900
+ return (jsx(Menu, Object.assign({ MenuListProps: {
780
901
  dense: density === 'compact',
781
902
  sx: {
782
903
  backgroundColor: menuBackgroundColor,
783
904
  },
784
- }, anchorEl: anchorEl, disableScrollLock: true, onClick: (event) => event.stopPropagation(), onClose: () => setAnchorEl(null), open: !!anchorEl }, rest, { children: [parseFromValuesOrFunc(enableEditing, row) &&
785
- ['modal', 'row'].includes(editDisplayMode) && (jsx(MRT_ActionMenuItem, { icon: jsx(EditIcon, {}), label: localization.edit, onClick: handleEdit, table: table })), renderRowActionMenuItems === null || renderRowActionMenuItems === void 0 ? void 0 : renderRowActionMenuItems({
786
- closeMenu: () => setAnchorEl(null),
787
- row,
788
- staticRowIndex,
789
- table,
790
- })] })));
905
+ }, anchorEl: anchorEl, disableScrollLock: true, onClick: (event) => event.stopPropagation(), onClose: () => setAnchorEl(null), open: !!anchorEl }, rest, { children: menuItems })));
791
906
  };
792
907
 
793
908
  const commonIconButtonStyles = {
@@ -801,6 +916,7 @@ const commonIconButtonStyles = {
801
916
  width: '2rem',
802
917
  };
803
918
  const MRT_ToggleRowActionMenuButton = (_a) => {
919
+ var _b;
804
920
  var { cell, row, staticRowIndex, table } = _a, rest = __rest(_a, ["cell", "row", "staticRowIndex", "table"]);
805
921
  const { getState, options: { createDisplayMode, editDisplayMode, enableEditing, icons: { EditIcon, MoreHorizIcon }, localization, renderRowActionMenuItems, renderRowActions, }, setEditingRow, } = table;
806
922
  const { creatingRow, editingRow } = getState();
@@ -821,7 +937,11 @@ const MRT_ToggleRowActionMenuButton = (_a) => {
821
937
  };
822
938
  return (jsx(Fragment, { children: renderRowActions && !showEditActionButtons ? (renderRowActions({ cell, row, staticRowIndex, table })) : showEditActionButtons ? (jsx(MRT_EditActionButtons, { row: row, table: table })) : !renderRowActionMenuItems &&
823
939
  parseFromValuesOrFunc(enableEditing, row) &&
824
- ['modal', 'row'].includes(editDisplayMode) ? (jsx(Tooltip, { placement: "right", title: localization.edit, children: jsx(IconButton, Object.assign({ "aria-label": localization.edit, onClick: handleStartEditMode, sx: commonIconButtonStyles }, rest, { children: jsx(EditIcon, {}) })) })) : renderRowActionMenuItems ? (jsxs(Fragment, { children: [jsx(Tooltip, Object.assign({}, getCommonTooltipProps(), { title: localization.rowActions, children: jsx(IconButton, Object.assign({ "aria-label": localization.rowActions, onClick: handleOpenRowActionMenu, size: "small", sx: commonIconButtonStyles }, rest, { children: jsx(MoreHorizIcon, {}) })) })), jsx(MRT_RowActionMenu, { anchorEl: anchorEl, handleEdit: handleStartEditMode, row: row, setAnchorEl: setAnchorEl, staticRowIndex: staticRowIndex, table: table })] })) : null }));
940
+ ['modal', 'row'].includes(editDisplayMode) ? (jsx(Tooltip, { placement: "right", title: localization.edit, children: jsx(IconButton, Object.assign({ "aria-label": localization.edit, onClick: handleStartEditMode, sx: commonIconButtonStyles }, rest, { children: jsx(EditIcon, {}) })) })) : ((_b = renderRowActionMenuItems === null || renderRowActionMenuItems === void 0 ? void 0 : renderRowActionMenuItems({
941
+ row,
942
+ staticRowIndex,
943
+ table,
944
+ })) === null || _b === void 0 ? void 0 : _b.length) ? (jsxs(Fragment, { children: [jsx(Tooltip, Object.assign({}, getCommonTooltipProps(), { title: localization.rowActions, children: jsx(IconButton, Object.assign({ "aria-label": localization.rowActions, onClick: handleOpenRowActionMenu, size: "small", sx: commonIconButtonStyles }, rest, { children: jsx(MoreHorizIcon, {}) })) })), jsx(MRT_RowActionMenu, { anchorEl: anchorEl, handleEdit: handleStartEditMode, row: row, setAnchorEl: setAnchorEl, staticRowIndex: staticRowIndex, table: table })] })) : null }));
825
945
  };
826
946
 
827
947
  const getMRT_RowActionsColumnDef = (tableOptions) => {
@@ -1249,7 +1369,7 @@ const MRT_DefaultDisplayColumn = {
1249
1369
  };
1250
1370
  const useMRT_TableOptions = (_a) => {
1251
1371
  var _b;
1252
- var { aggregationFns, autoResetExpanded = false, columnFilterDisplayMode = 'subheader', columnResizeDirection, columnResizeMode = 'onChange', createDisplayMode = 'modal', defaultColumn, defaultDisplayColumn, editDisplayMode = 'modal', enableBatchRowSelection = true, enableBottomToolbar = true, enableColumnActions = true, enableColumnFilters = true, enableColumnOrdering = false, enableColumnPinning = false, enableColumnResizing = false, enableColumnVirtualization, enableDensityToggle = true, enableExpandAll = true, enableExpanding, enableFacetedValues = false, enableFilterMatchHighlighting = true, enableFilters = true, enableFullScreenToggle = true, enableGlobalFilter = true, enableGlobalFilterRankedResults = true, enableGrouping = false, enableHiding = true, enableMultiRowSelection = true, enableMultiSort = true, enablePagination = true, enableRowPinning = false, enableRowSelection = false, enableRowVirtualization, enableSelectAll = true, enableSorting = true, enableStickyHeader = false, enableTableFooter = true, enableTableHead = true, enableToolbarInternalActions = true, enableTopToolbar = true, filterFns, icons, layoutMode, localization, manualFiltering, manualGrouping, manualPagination, manualSorting, mrtTheme, paginationDisplayMode = 'default', positionActionsColumn = 'first', positionCreatingRow = 'top', positionExpandColumn = 'first', positionGlobalFilter = 'right', positionPagination = 'bottom', positionToolbarAlertBanner = 'top', positionToolbarDropZone = 'top', rowNumberDisplayMode = 'static', rowPinningDisplayMode = 'sticky', selectAllMode = 'page', sortingFns } = _a, rest = __rest(_a, ["aggregationFns", "autoResetExpanded", "columnFilterDisplayMode", "columnResizeDirection", "columnResizeMode", "createDisplayMode", "defaultColumn", "defaultDisplayColumn", "editDisplayMode", "enableBatchRowSelection", "enableBottomToolbar", "enableColumnActions", "enableColumnFilters", "enableColumnOrdering", "enableColumnPinning", "enableColumnResizing", "enableColumnVirtualization", "enableDensityToggle", "enableExpandAll", "enableExpanding", "enableFacetedValues", "enableFilterMatchHighlighting", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableGlobalFilterRankedResults", "enableGrouping", "enableHiding", "enableMultiRowSelection", "enableMultiSort", "enablePagination", "enableRowPinning", "enableRowSelection", "enableRowVirtualization", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarInternalActions", "enableTopToolbar", "filterFns", "icons", "layoutMode", "localization", "manualFiltering", "manualGrouping", "manualPagination", "manualSorting", "mrtTheme", "paginationDisplayMode", "positionActionsColumn", "positionCreatingRow", "positionExpandColumn", "positionGlobalFilter", "positionPagination", "positionToolbarAlertBanner", "positionToolbarDropZone", "rowNumberDisplayMode", "rowPinningDisplayMode", "selectAllMode", "sortingFns"]);
1372
+ var { aggregationFns, autoResetExpanded = false, columnFilterDisplayMode = 'subheader', columnResizeDirection, columnResizeMode = 'onChange', createDisplayMode = 'modal', defaultColumn, defaultDisplayColumn, editDisplayMode = 'modal', enableBatchRowSelection = true, enableBottomToolbar = true, enableColumnActions = true, enableColumnFilters = true, enableColumnOrdering = false, enableColumnPinning = false, enableColumnResizing = false, enableColumnVirtualization, enableDensityToggle = true, enableExpandAll = true, enableExpanding, enableFacetedValues = false, enableFilterMatchHighlighting = true, enableFilters = true, enableFullScreenToggle = true, enableGlobalFilter = true, enableGlobalFilterRankedResults = true, enableGrouping = false, enableHiding = true, enableCellNavigation = true, enableMultiRowSelection = true, enableMultiSort = true, enablePagination = true, enableRowPinning = false, enableRowSelection = false, enableRowVirtualization, enableSelectAll = true, enableSorting = true, enableStickyHeader = false, enableTableFooter = true, enableTableHead = true, enableToolbarInternalActions = true, enableTopToolbar = true, filterFns, icons, layoutMode, localization, manualFiltering, manualGrouping, manualPagination, manualSorting, mrtTheme, paginationDisplayMode = 'default', positionActionsColumn = 'first', positionCreatingRow = 'top', positionExpandColumn = 'first', positionGlobalFilter = 'right', positionPagination = 'bottom', positionToolbarAlertBanner = 'top', positionToolbarDropZone = 'top', rowNumberDisplayMode = 'static', rowPinningDisplayMode = 'sticky', selectAllMode = 'page', sortingFns } = _a, rest = __rest(_a, ["aggregationFns", "autoResetExpanded", "columnFilterDisplayMode", "columnResizeDirection", "columnResizeMode", "createDisplayMode", "defaultColumn", "defaultDisplayColumn", "editDisplayMode", "enableBatchRowSelection", "enableBottomToolbar", "enableColumnActions", "enableColumnFilters", "enableColumnOrdering", "enableColumnPinning", "enableColumnResizing", "enableColumnVirtualization", "enableDensityToggle", "enableExpandAll", "enableExpanding", "enableFacetedValues", "enableFilterMatchHighlighting", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableGlobalFilterRankedResults", "enableGrouping", "enableHiding", "enableCellNavigation", "enableMultiRowSelection", "enableMultiSort", "enablePagination", "enableRowPinning", "enableRowSelection", "enableRowVirtualization", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarInternalActions", "enableTopToolbar", "filterFns", "icons", "layoutMode", "localization", "manualFiltering", "manualGrouping", "manualPagination", "manualSorting", "mrtTheme", "paginationDisplayMode", "positionActionsColumn", "positionCreatingRow", "positionExpandColumn", "positionGlobalFilter", "positionPagination", "positionToolbarAlertBanner", "positionToolbarDropZone", "rowNumberDisplayMode", "rowPinningDisplayMode", "selectAllMode", "sortingFns"]);
1253
1373
  const theme = useTheme();
1254
1374
  icons = useMemo(() => (Object.assign(Object.assign({}, MRT_Default_Icons), icons)), [icons]);
1255
1375
  localization = useMemo(() => (Object.assign(Object.assign({}, MRT_Localization_EN), localization)), [localization]);
@@ -1310,6 +1430,7 @@ const useMRT_TableOptions = (_a) => {
1310
1430
  enableGlobalFilterRankedResults,
1311
1431
  enableGrouping,
1312
1432
  enableHiding,
1433
+ enableCellNavigation,
1313
1434
  enableMultiRowSelection,
1314
1435
  enableMultiSort,
1315
1436
  enablePagination,
@@ -1956,7 +2077,7 @@ const MRT_TableBodyCell = (_a) => {
1956
2077
  var _b, _c, _d, _e, _f;
1957
2078
  var { cell, numRows, rowRef, staticColumnIndex, staticRowIndex, table } = _a, rest = __rest(_a, ["cell", "numRows", "rowRef", "staticColumnIndex", "staticRowIndex", "table"]);
1958
2079
  const theme = useTheme();
1959
- const { getState, options: { columnResizeDirection, columnResizeMode, createDisplayMode, editDisplayMode, enableCellActions, enableClickToCopy, enableColumnOrdering, enableColumnPinning, enableGrouping, layoutMode, mrtTheme: { draggingBorderColor }, muiSkeletonProps, muiTableBodyCellProps, }, setHoveredColumn, } = table;
2080
+ const { getState, options: { columnResizeDirection, columnResizeMode, createDisplayMode, editDisplayMode, enableCellActions, enableClickToCopy, enableColumnOrdering, enableColumnPinning, enableGrouping, enableCellNavigation, layoutMode, mrtTheme: { draggingBorderColor }, muiSkeletonProps, muiTableBodyCellProps, }, setHoveredColumn, } = table;
1960
2081
  const { actionCell, columnSizingInfo, creatingRow, density, draggingColumn, draggingRow, editingCell, editingRow, hoveredColumn, hoveredRow, isLoading, showSkeletons, } = getState();
1961
2082
  const { column, row } = cell;
1962
2083
  const { columnDef } = column;
@@ -2078,7 +2199,19 @@ const MRT_TableBodyCell = (_a) => {
2078
2199
  table.refs.actionCellRef.current = e.currentTarget;
2079
2200
  }
2080
2201
  };
2081
- return (jsx(TableCell, Object.assign({ align: theme.direction === 'rtl' ? 'right' : 'left', "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined }, tableCellProps, { onContextMenu: handleContextMenu, onDoubleClick: handleDoubleClick, onDragEnter: handleDragEnter, onDragOver: handleDragOver, sx: (theme) => (Object.assign(Object.assign({ '&:hover': {
2202
+ const handleKeyDown = (event) => {
2203
+ var _a;
2204
+ if (enableCellNavigation) {
2205
+ cellNavigation({
2206
+ cell,
2207
+ cellValue: cell.getValue(),
2208
+ event,
2209
+ table,
2210
+ });
2211
+ }
2212
+ (_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, event);
2213
+ };
2214
+ return (jsx(TableCell, Object.assign({ align: theme.direction === 'rtl' ? 'right' : 'left', "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined, tabIndex: enableCellNavigation ? 0 : undefined }, tableCellProps, { onKeyDown: handleKeyDown, onContextMenu: handleContextMenu, onDoubleClick: handleDoubleClick, onDragEnter: handleDragEnter, onDragOver: handleDragOver, sx: (theme) => (Object.assign(Object.assign({ '&:hover': {
2082
2215
  outline: (actionCell === null || actionCell === void 0 ? void 0 : actionCell.id) === cell.id ||
2083
2216
  (editDisplayMode === 'cell' && isEditable) ||
2084
2217
  (editDisplayMode === 'table' && (isCreating || isEditing))
@@ -2245,12 +2378,13 @@ const MRT_TableBodyRow = (_a) => {
2245
2378
  staticRowIndex,
2246
2379
  table,
2247
2380
  };
2381
+ const key = `${cell.id}-${staticRowIndex}`;
2248
2382
  return cell ? (memoMode === 'cells' &&
2249
2383
  cell.column.columnDef.columnDefType === 'data' &&
2250
2384
  !draggingColumn &&
2251
2385
  !draggingRow &&
2252
2386
  (editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) !== cell.id &&
2253
- (editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) !== row.id ? (jsx(Memo_MRT_TableBodyCell, Object.assign({}, props), cell.id)) : (jsx(MRT_TableBodyCell, Object.assign({}, props), cell.id))) : null;
2387
+ (editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) !== row.id ? (jsx(Memo_MRT_TableBodyCell, Object.assign({}, props), key)) : (jsx(MRT_TableBodyCell, Object.assign({}, props), key))) : null;
2254
2388
  }), virtualPaddingRight ? (jsx("td", { style: { display: 'flex', width: virtualPaddingRight } })) : null] })), renderDetailPanel && !row.getIsGrouped() && (jsx(MRT_TableDetailPanel, { parentRowRef: rowRef, row: row, rowVirtualizer: rowVirtualizer, staticRowIndex: staticRowIndex, table: table, virtualRow: virtualRow }))] }));
2255
2389
  };
2256
2390
  const Memo_MRT_TableBodyRow = memo(MRT_TableBodyRow, (prev, next) => prev.row === next.row && prev.staticRowIndex === next.staticRowIndex);
@@ -2338,7 +2472,7 @@ const MRT_TableFooterCell = (_a) => {
2338
2472
  var _b, _c, _d;
2339
2473
  var { footer, staticColumnIndex, table } = _a, rest = __rest(_a, ["footer", "staticColumnIndex", "table"]);
2340
2474
  const theme = useTheme();
2341
- const { getState, options: { enableColumnPinning, muiTableFooterCellProps }, } = table;
2475
+ const { getState, options: { enableColumnPinning, muiTableFooterCellProps, enableCellNavigation, }, } = table;
2342
2476
  const { density } = getState();
2343
2477
  const { column } = footer;
2344
2478
  const { columnDef } = column;
@@ -2348,11 +2482,22 @@ const MRT_TableFooterCell = (_a) => {
2348
2482
  column.getIsPinned();
2349
2483
  const args = { column, table };
2350
2484
  const tableCellProps = Object.assign(Object.assign(Object.assign({}, parseFromValuesOrFunc(muiTableFooterCellProps, args)), parseFromValuesOrFunc(columnDef.muiTableFooterCellProps, args)), rest);
2485
+ const handleKeyDown = (event) => {
2486
+ var _a;
2487
+ if (enableCellNavigation) {
2488
+ cellNavigation({
2489
+ event,
2490
+ cellValue: footer.column.columnDef.footer,
2491
+ table,
2492
+ });
2493
+ }
2494
+ (_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, event);
2495
+ };
2351
2496
  return (jsx(TableCell, Object.assign({ align: columnDefType === 'group'
2352
2497
  ? 'center'
2353
2498
  : theme.direction === 'rtl'
2354
2499
  ? 'right'
2355
- : 'left', colSpan: footer.colSpan, "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined, variant: "footer" }, tableCellProps, { sx: (theme) => (Object.assign(Object.assign({ fontWeight: 'bold', p: density === 'compact'
2500
+ : 'left', colSpan: footer.colSpan, "data-index": staticColumnIndex, "data-pinned": !!isColumnPinned || undefined, variant: "footer" }, tableCellProps, { onKeyDown: handleKeyDown, sx: (theme) => (Object.assign(Object.assign({ fontWeight: 'bold', p: density === 'compact'
2356
2501
  ? '0.5rem'
2357
2502
  : density === 'comfortable'
2358
2503
  ? '1rem'
@@ -2399,12 +2544,22 @@ const MRT_TableFooterRow = (_a) => {
2399
2544
 
2400
2545
  const MRT_TableFooter = (_a) => {
2401
2546
  var { columnVirtualizer, table } = _a, rest = __rest(_a, ["columnVirtualizer", "table"]);
2402
- const { getFooterGroups, getState, options: { enableStickyFooter, layoutMode, muiTableFooterProps }, refs: { tableFooterRef }, } = table;
2547
+ const { getState, options: { enableStickyFooter, layoutMode, muiTableFooterProps }, refs: { tableFooterRef }, } = table;
2403
2548
  const { isFullScreen } = getState();
2404
2549
  const tableFooterProps = Object.assign(Object.assign({}, parseFromValuesOrFunc(muiTableFooterProps, {
2405
2550
  table,
2406
2551
  })), rest);
2407
2552
  const stickFooter = (isFullScreen || enableStickyFooter) && enableStickyFooter !== false;
2553
+ const footerGroups = table.getFooterGroups();
2554
+ //if no footer cells at all, skip footer
2555
+ if (!footerGroups.some((footerGroup) => {
2556
+ var _a;
2557
+ return (_a = footerGroup.headers) === null || _a === void 0 ? void 0 : _a.some((header) => (typeof header.column.columnDef.footer === 'string' &&
2558
+ !!header.column.columnDef.footer) ||
2559
+ header.column.columnDef.Footer);
2560
+ })) {
2561
+ return null;
2562
+ }
2408
2563
  return (jsx(TableFooter, Object.assign({}, tableFooterProps, { ref: (ref) => {
2409
2564
  tableFooterRef.current = ref;
2410
2565
  if (tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.ref) {
@@ -2415,7 +2570,7 @@ const MRT_TableFooter = (_a) => {
2415
2570
  ? theme.palette.mode === 'light'
2416
2571
  ? `1px solid ${theme.palette.grey[300]}`
2417
2572
  : `1px solid ${theme.palette.grey[700]}`
2418
- : undefined, position: stickFooter ? 'sticky' : 'relative', zIndex: stickFooter ? 1 : undefined }, parseFromValuesOrFunc(tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx, theme))), children: getFooterGroups().map((footerGroup) => (jsx(MRT_TableFooterRow, { columnVirtualizer: columnVirtualizer, footerGroup: footerGroup, table: table }, footerGroup.id))) })));
2573
+ : undefined, position: stickFooter ? 'sticky' : 'relative', zIndex: stickFooter ? 1 : undefined }, parseFromValuesOrFunc(tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx, theme))), children: footerGroups.map((footerGroup) => (jsx(MRT_TableFooterRow, { columnVirtualizer: columnVirtualizer, footerGroup: footerGroup, table: table }, footerGroup.id))) })));
2419
2574
  };
2420
2575
 
2421
2576
  const mrtFilterOptions = (localization) => [
@@ -2958,7 +3113,11 @@ const MRT_FilterTextField = (_a) => {
2958
3113
  }
2959
3114
  }, margin: 'none', placeholder: filterChipLabel || isSelectFilter || isMultiSelectFilter
2960
3115
  ? undefined
2961
- : filterPlaceholder, variant: 'standard' }, textFieldProps), { sx: (theme) => (Object.assign({ minWidth: isDateFilter
3116
+ : filterPlaceholder, variant: 'standard' }, textFieldProps), { onKeyDown: (e) => {
3117
+ var _a;
3118
+ e.stopPropagation();
3119
+ (_a = textFieldProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(textFieldProps, e);
3120
+ }, sx: (theme) => (Object.assign({ minWidth: isDateFilter
2962
3121
  ? '160px'
2963
3122
  : enableColumnFilterModes && rangeFilterIndex === 0
2964
3123
  ? '110px'
@@ -3268,7 +3427,7 @@ const MRT_TableHeadCell = (_a) => {
3268
3427
  var _b, _c, _d, _f, _g, _h;
3269
3428
  var { columnVirtualizer, header, staticColumnIndex, table } = _a, rest = __rest(_a, ["columnVirtualizer", "header", "staticColumnIndex", "table"]);
3270
3429
  const theme = useTheme();
3271
- const { getState, options: { columnFilterDisplayMode, columnResizeDirection, columnResizeMode, enableColumnActions, enableColumnDragging, enableColumnOrdering, enableColumnPinning, enableGrouping, enableMultiSort, layoutMode, mrtTheme: { draggingBorderColor }, muiTableHeadCellProps, }, refs: { tableHeadCellRefs }, setHoveredColumn, } = table;
3430
+ const { getState, options: { columnFilterDisplayMode, columnResizeDirection, columnResizeMode, enableColumnActions, enableColumnDragging, enableColumnOrdering, enableColumnPinning, enableGrouping, enableCellNavigation, enableMultiSort, layoutMode, mrtTheme: { draggingBorderColor }, muiTableHeadCellProps, }, refs: { tableHeadCellRefs }, setHoveredColumn, } = table;
3272
3431
  const { columnSizingInfo, density, draggingColumn, grouping, hoveredColumn, showColumnFilters, } = getState();
3273
3432
  const { column } = header;
3274
3433
  const { columnDef } = column;
@@ -3337,6 +3496,18 @@ const MRT_TableHeadCell = (_a) => {
3337
3496
  e.preventDefault();
3338
3497
  }
3339
3498
  };
3499
+ const handleKeyDown = (event) => {
3500
+ var _a;
3501
+ if (enableCellNavigation) {
3502
+ cellNavigation({
3503
+ event,
3504
+ cellValue: header.column.columnDef.header,
3505
+ table,
3506
+ header,
3507
+ });
3508
+ }
3509
+ (_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, event);
3510
+ };
3340
3511
  const HeaderElement = (_b = parseFromValuesOrFunc(columnDef.Header, {
3341
3512
  column,
3342
3513
  header,
@@ -3358,7 +3529,7 @@ const MRT_TableHeadCell = (_a) => {
3358
3529
  (_a = columnVirtualizer === null || columnVirtualizer === void 0 ? void 0 : columnVirtualizer.measureElement) === null || _a === void 0 ? void 0 : _a.call(columnVirtualizer, node);
3359
3530
  }
3360
3531
  }
3361
- } }, tableCellProps, { sx: (theme) => (Object.assign(Object.assign({ '& :hover': {
3532
+ }, tabIndex: enableCellNavigation ? 0 : undefined }, tableCellProps, { onKeyDown: handleKeyDown, sx: (theme) => (Object.assign(Object.assign({ '& :hover': {
3362
3533
  '.MuiButtonBase-root': {
3363
3534
  opacity: 1,
3364
3535
  },
@@ -4145,5 +4316,5 @@ const MaterialReactTable = (props) => {
4145
4316
  return jsx(MRT_TablePaper, { table: table });
4146
4317
  };
4147
4318
 
4148
- export { MRT_ActionMenuItem, MRT_AggregationFns, MRT_BottomToolbar, MRT_ColumnActionMenu, MRT_ColumnPinningButtons, MRT_CopyButton, MRT_DefaultColumn, MRT_DefaultDisplayColumn, MRT_EditActionButtons, MRT_EditCellTextField, MRT_EditRowModal, MRT_ExpandAllButton, MRT_ExpandButton, MRT_FilterCheckbox, MRT_FilterFns, MRT_FilterOptionMenu, MRT_FilterRangeFields, MRT_FilterRangeSlider, MRT_FilterTextField, MRT_GlobalFilterTextField, MRT_GrabHandleButton, MRT_LinearProgressBar, MRT_RowActionMenu, MRT_RowPinButton, MRT_SelectCheckbox, MRT_ShowHideColumnsButton, MRT_ShowHideColumnsMenu, MRT_ShowHideColumnsMenuItems, MRT_SortingFns, MRT_Table, MRT_TableBody, MRT_TableBodyCell, MRT_TableBodyCellValue, MRT_TableBodyRow, MRT_TableBodyRowGrabHandle, MRT_TableBodyRowPinButton, MRT_TableContainer, MRT_TableDetailPanel, MRT_TableFooter, MRT_TableFooterCell, MRT_TableFooterRow, MRT_TableHead, MRT_TableHeadCell, MRT_TableHeadCellColumnActionsButton, MRT_TableHeadCellFilterContainer, MRT_TableHeadCellFilterLabel, MRT_TableHeadCellGrabHandle, MRT_TableHeadCellResizeHandle, MRT_TableHeadCellSortLabel, MRT_TableHeadRow, MRT_TableLoadingOverlay, MRT_TablePagination, MRT_TablePaper, MRT_ToggleDensePaddingButton, MRT_ToggleFiltersButton, MRT_ToggleFullScreenButton, MRT_ToggleGlobalFilterButton, MRT_ToggleRowActionMenuButton, MRT_ToolbarAlertBanner, MRT_ToolbarDropZone, MRT_ToolbarInternalButtons, MRT_TopToolbar, MaterialReactTable, Memo_MRT_TableBody, Memo_MRT_TableBodyCell, Memo_MRT_TableBodyRow, createMRTColumnHelper, createRow, defaultDisplayColumnProps, flexRender, getAllLeafColumnDefs, getCanRankRows, getColumnFilterInfo, getColumnId, getDefaultColumnFilterFn, getDefaultColumnOrderIds, getIsRankingRows, getIsRowSelected, getLeadingDisplayColumnIds, getMRT_RowSelectionHandler, getMRT_Rows, getMRT_SelectAllHandler, getTrailingDisplayColumnIds, isCellEditable, mrtFilterOptions, openEditingCell, prepareColumns, rankGlobalFuzzy, reorderColumn, showRowActionsColumn, showRowDragColumn, showRowExpandColumn, showRowNumbersColumn, showRowPinningColumn, showRowSelectionColumn, showRowSpacerColumn, useDropdownOptions, useMRT_ColumnVirtualizer, useMRT_Effects, useMRT_RowVirtualizer, useMRT_Rows, useMRT_TableInstance, useMRT_TableOptions, useMaterialReactTable };
4319
+ export { MRT_ActionMenuItem, MRT_AggregationFns, MRT_BottomToolbar, MRT_ColumnActionMenu, MRT_ColumnPinningButtons, MRT_CopyButton, MRT_DefaultColumn, MRT_DefaultDisplayColumn, MRT_EditActionButtons, MRT_EditCellTextField, MRT_EditRowModal, MRT_ExpandAllButton, MRT_ExpandButton, MRT_FilterCheckbox, MRT_FilterFns, MRT_FilterOptionMenu, MRT_FilterRangeFields, MRT_FilterRangeSlider, MRT_FilterTextField, MRT_GlobalFilterTextField, MRT_GrabHandleButton, MRT_LinearProgressBar, MRT_RowActionMenu, MRT_RowPinButton, MRT_SelectCheckbox, MRT_ShowHideColumnsButton, MRT_ShowHideColumnsMenu, MRT_ShowHideColumnsMenuItems, MRT_SortingFns, MRT_Table, MRT_TableBody, MRT_TableBodyCell, MRT_TableBodyCellValue, MRT_TableBodyRow, MRT_TableBodyRowGrabHandle, MRT_TableBodyRowPinButton, MRT_TableContainer, MRT_TableDetailPanel, MRT_TableFooter, MRT_TableFooterCell, MRT_TableFooterRow, MRT_TableHead, MRT_TableHeadCell, MRT_TableHeadCellColumnActionsButton, MRT_TableHeadCellFilterContainer, MRT_TableHeadCellFilterLabel, MRT_TableHeadCellGrabHandle, MRT_TableHeadCellResizeHandle, MRT_TableHeadCellSortLabel, MRT_TableHeadRow, MRT_TableLoadingOverlay, MRT_TablePagination, MRT_TablePaper, MRT_ToggleDensePaddingButton, MRT_ToggleFiltersButton, MRT_ToggleFullScreenButton, MRT_ToggleGlobalFilterButton, MRT_ToggleRowActionMenuButton, MRT_ToolbarAlertBanner, MRT_ToolbarDropZone, MRT_ToolbarInternalButtons, MRT_TopToolbar, MaterialReactTable, Memo_MRT_TableBody, Memo_MRT_TableBodyCell, Memo_MRT_TableBodyRow, cellNavigation, createMRTColumnHelper, createRow, defaultDisplayColumnProps, flexRender, getAllLeafColumnDefs, getCanRankRows, getColumnFilterInfo, getColumnId, getDefaultColumnFilterFn, getDefaultColumnOrderIds, getIsRankingRows, getIsRowSelected, getLeadingDisplayColumnIds, getMRT_RowSelectionHandler, getMRT_Rows, getMRT_SelectAllHandler, getTrailingDisplayColumnIds, isCellEditable, mrtFilterOptions, openEditingCell, prepareColumns, rankGlobalFuzzy, reorderColumn, showRowActionsColumn, showRowDragColumn, showRowExpandColumn, showRowNumbersColumn, showRowPinningColumn, showRowSelectionColumn, showRowSpacerColumn, useDropdownOptions, useMRT_ColumnVirtualizer, useMRT_Effects, useMRT_RowVirtualizer, useMRT_Rows, useMRT_TableInstance, useMRT_TableOptions, useMaterialReactTable };
4149
4320
  //# sourceMappingURL=index.esm.js.map