material-react-table 1.4.3 → 1.5.0-beta.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 (41) hide show
  1. package/dist/cjs/index.js +167 -61
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/MaterialReactTable.d.ts +18 -5
  4. package/dist/cjs/types/body/MRT_TableBody.d.ts +5 -0
  5. package/dist/cjs/types/body/MRT_TableBodyCell.d.ts +3 -0
  6. package/dist/cjs/types/body/MRT_TableBodyRow.d.ts +5 -1
  7. package/dist/cjs/types/footer/MRT_TableFooter.d.ts +4 -0
  8. package/dist/cjs/types/footer/MRT_TableFooterRow.d.ts +4 -0
  9. package/dist/cjs/types/head/MRT_TableHead.d.ts +4 -0
  10. package/dist/cjs/types/head/MRT_TableHeadRow.d.ts +4 -0
  11. package/dist/cjs/types/table/MRT_TableRoot.d.ts +12 -5
  12. package/dist/cjs/types/toolbar/MRT_TablePagination.d.ts +1 -1
  13. package/dist/esm/material-react-table.esm.js +163 -57
  14. package/dist/esm/material-react-table.esm.js.map +1 -1
  15. package/dist/esm/types/MaterialReactTable.d.ts +18 -5
  16. package/dist/esm/types/body/MRT_TableBody.d.ts +5 -0
  17. package/dist/esm/types/body/MRT_TableBodyCell.d.ts +3 -0
  18. package/dist/esm/types/body/MRT_TableBodyRow.d.ts +5 -1
  19. package/dist/esm/types/footer/MRT_TableFooter.d.ts +4 -0
  20. package/dist/esm/types/footer/MRT_TableFooterRow.d.ts +4 -0
  21. package/dist/esm/types/head/MRT_TableHead.d.ts +4 -0
  22. package/dist/esm/types/head/MRT_TableHeadRow.d.ts +4 -0
  23. package/dist/esm/types/table/MRT_TableRoot.d.ts +12 -5
  24. package/dist/esm/types/toolbar/MRT_TablePagination.d.ts +1 -1
  25. package/dist/index.d.ts +20 -7
  26. package/locales/ru.esm.js +1 -1
  27. package/locales/ru.js +1 -1
  28. package/package.json +1 -1
  29. package/src/MaterialReactTable.tsx +30 -8
  30. package/src/_locales/ru.ts +1 -1
  31. package/src/body/MRT_TableBody.tsx +42 -13
  32. package/src/body/MRT_TableBodyCell.tsx +17 -1
  33. package/src/body/MRT_TableBodyRow.tsx +24 -3
  34. package/src/footer/MRT_TableFooter.tsx +13 -1
  35. package/src/footer/MRT_TableFooterCell.tsx +10 -2
  36. package/src/footer/MRT_TableFooterRow.tsx +31 -4
  37. package/src/head/MRT_TableHead.tsx +13 -1
  38. package/src/head/MRT_TableHeadCell.tsx +6 -3
  39. package/src/head/MRT_TableHeadRow.tsx +30 -4
  40. package/src/table/MRT_Table.tsx +105 -7
  41. package/src/toolbar/MRT_TablePagination.tsx +2 -2
package/dist/cjs/index.js CHANGED
@@ -66,12 +66,12 @@ var AlertTitle = require('@mui/material/AlertTitle');
66
66
  var Chip = require('@mui/material/Chip');
67
67
  var Fade = require('@mui/material/Fade');
68
68
  var TableContainer = require('@mui/material/TableContainer');
69
+ var reactVirtual = require('@tanstack/react-virtual');
69
70
  var Table = require('@mui/material/Table');
70
71
  var TableHead = require('@mui/material/TableHead');
71
72
  var TableRow = require('@mui/material/TableRow');
72
73
  var TableCell = require('@mui/material/TableCell');
73
74
  var TableSortLabel = require('@mui/material/TableSortLabel');
74
- var reactVirtual = require('@tanstack/react-virtual');
75
75
  var TableBody = require('@mui/material/TableBody');
76
76
  var Skeleton = require('@mui/material/Skeleton');
77
77
  var TableFooter = require('@mui/material/TableFooter');
@@ -1210,7 +1210,7 @@ const MRT_LinearProgressBar = ({ isTopToolbar, table }) => {
1210
1210
  React__default["default"].createElement(LinearProgress__default["default"], Object.assign({ "aria-label": "Loading", "aria-busy": "true", sx: { position: 'relative' } }, linearProgressProps))));
1211
1211
  };
1212
1212
 
1213
- const MRT_TablePagination = ({ table, position, }) => {
1213
+ const MRT_TablePagination = ({ table, position = 'bottom', }) => {
1214
1214
  const { getPrePaginationRowModel, getState, setPageIndex, setPageSize, options: { muiTablePaginationProps, enableToolbarInternalActions, localization, rowCount, }, } = table;
1215
1215
  const { pagination: { pageSize = 10, pageIndex = 0 }, showGlobalFilter, } = getState();
1216
1216
  const totalRowCount = rowCount !== null && rowCount !== void 0 ? rowCount : getPrePaginationRowModel().rows.length;
@@ -1909,7 +1909,7 @@ const MRT_TableHeadCellSortLabel = ({ header, table, tableCellProps, }) => {
1909
1909
  }, IconComponent: ArrowDownwardIcon })));
1910
1910
  };
1911
1911
 
1912
- const MRT_TableHeadCell = ({ header, table }) => {
1912
+ const MRT_TableHeadCell = ({ header, table, }) => {
1913
1913
  var _a, _b, _c, _d;
1914
1914
  const theme = styles.useTheme();
1915
1915
  const { getState, options: { enableColumnActions, enableColumnDragging, enableColumnOrdering, enableGrouping, enableMultiSort, layoutMode, muiTableHeadCellProps, }, refs: { tableHeadCellRefs }, setHoveredColumn, } = table;
@@ -2041,17 +2041,25 @@ const MRT_TableHeadCell = ({ header, table }) => {
2041
2041
  column.getCanFilter() && (React__default["default"].createElement(MRT_TableHeadCellFilterContainer, { header: header, table: table }))));
2042
2042
  };
2043
2043
 
2044
- const MRT_TableHeadRow = ({ headerGroup, table }) => {
2044
+ const MRT_TableHeadRow = ({ headerGroup, table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
2045
2045
  const { options: { layoutMode, muiTableHeadRowProps }, } = table;
2046
2046
  const tableRowProps = muiTableHeadRowProps instanceof Function
2047
2047
  ? muiTableHeadRowProps({ headerGroup, table })
2048
2048
  : muiTableHeadRowProps;
2049
2049
  return (React__default["default"].createElement(TableRow__default["default"], Object.assign({}, tableRowProps, { sx: (theme) => (Object.assign({ backgroundColor: styles.lighten(theme.palette.background.default, 0.04), boxShadow: `4px 0 8px ${styles.alpha(theme.palette.common.black, 0.1)}`, display: layoutMode === 'grid' ? 'flex' : 'table-row', top: 0 }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
2050
2050
  ? tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx(theme)
2051
- : tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx))) }), headerGroup.headers.map((header) => (React__default["default"].createElement(MRT_TableHeadCell, { header: header, key: header.id, table: table })))));
2052
- };
2053
-
2054
- const MRT_TableHead = ({ table }) => {
2051
+ : tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx))) }),
2052
+ virtualPaddingLeft ? (React__default["default"].createElement("th", { style: { display: 'flex', width: virtualPaddingLeft } })) : null,
2053
+ (virtualColumns !== null && virtualColumns !== void 0 ? virtualColumns : headerGroup.headers).map((headerOrVirtualHeader) => {
2054
+ const header = virtualColumns
2055
+ ? headerGroup.headers[headerOrVirtualHeader.index]
2056
+ : headerOrVirtualHeader;
2057
+ return (React__default["default"].createElement(MRT_TableHeadCell, { header: header, key: header.id, table: table }));
2058
+ }),
2059
+ virtualPaddingRight ? (React__default["default"].createElement("th", { style: { display: 'flex', width: virtualPaddingRight } })) : null));
2060
+ };
2061
+
2062
+ const MRT_TableHead = ({ table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
2055
2063
  const { getHeaderGroups, getState, options: { enableStickyHeader, layoutMode, muiTableHeadProps }, } = table;
2056
2064
  const { isFullScreen } = getState();
2057
2065
  const tableHeadProps = muiTableHeadProps instanceof Function
@@ -2060,7 +2068,7 @@ const MRT_TableHead = ({ table }) => {
2060
2068
  const stickyHeader = enableStickyHeader || isFullScreen;
2061
2069
  return (React__default["default"].createElement(TableHead__default["default"], Object.assign({}, tableHeadProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table-row-group', opacity: 0.97, position: stickyHeader ? 'sticky' : 'relative', top: stickyHeader && layoutMode === 'grid' ? 0 : undefined, zIndex: stickyHeader ? 2 : undefined }, ((tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx) instanceof Function
2062
2070
  ? tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx(theme)
2063
- : tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx))) }), getHeaderGroups().map((headerGroup) => (React__default["default"].createElement(MRT_TableHeadRow, { headerGroup: headerGroup, key: headerGroup.id, table: table })))));
2071
+ : tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx))) }), getHeaderGroups().map((headerGroup) => (React__default["default"].createElement(MRT_TableHeadRow, { headerGroup: headerGroup, key: headerGroup.id, table: table, virtualColumns: virtualColumns, virtualPaddingLeft: virtualPaddingLeft, virtualPaddingRight: virtualPaddingRight })))));
2064
2072
  };
2065
2073
 
2066
2074
  const MRT_EditCellTextField = ({ cell, showLabel, table, }) => {
@@ -2199,7 +2207,7 @@ const MRT_TableBodyCellValue = ({ cell, table }) => {
2199
2207
  : (_b = (_a = columnDef === null || columnDef === void 0 ? void 0 : columnDef.Cell) === null || _a === void 0 ? void 0 : _a.call(columnDef, { cell, column, row, table })) !== null && _b !== void 0 ? _b : cell.renderValue()));
2200
2208
  };
2201
2209
 
2202
- const MRT_TableBodyCell = ({ cell, enableHover, numRows, rowIndex, rowRef, table, }) => {
2210
+ const MRT_TableBodyCell = ({ cell, enableHover, measureElement, numRows, rowIndex, rowRef, table, virtualCell, }) => {
2203
2211
  var _a, _b;
2204
2212
  const theme = styles.useTheme();
2205
2213
  const { getState, options: { editingMode, enableClickToCopy, enableColumnOrdering, enableEditing, enableGrouping, enableRowNumbers, layoutMode, muiTableBodyCellProps, muiTableBodyCellSkeletonProps, rowNumberMode, }, refs: { editInputRefs }, setEditingCell, setHoveredColumn, } = table;
@@ -2271,7 +2279,11 @@ const MRT_TableBodyCell = ({ cell, enableHover, numRows, rowIndex, rowRef, table
2271
2279
  setHoveredColumn(columnDef.enableColumnOrdering !== false ? column : null);
2272
2280
  }
2273
2281
  };
2274
- return (React__default["default"].createElement(TableCell__default["default"], Object.assign({}, tableCellProps, { onDragEnter: handleDragEnter, onDoubleClick: handleDoubleClick, sx: (theme) => (Object.assign(Object.assign({ alignItems: layoutMode === 'grid' ? 'center' : undefined, cursor: isEditable && editingMode === 'cell' ? 'pointer' : 'inherit', overflow: 'hidden', p: density === 'compact'
2282
+ return (React__default["default"].createElement(TableCell__default["default"], Object.assign({ "data-index": virtualCell === null || virtualCell === void 0 ? void 0 : virtualCell.index, ref: (node) => {
2283
+ if (node) {
2284
+ measureElement === null || measureElement === void 0 ? void 0 : measureElement(node);
2285
+ }
2286
+ } }, tableCellProps, { onDragEnter: handleDragEnter, onDoubleClick: handleDoubleClick, sx: (theme) => (Object.assign(Object.assign({ alignItems: layoutMode === 'grid' ? 'center' : undefined, cursor: isEditable && editingMode === 'cell' ? 'pointer' : 'inherit', overflow: 'hidden', p: density === 'compact'
2275
2287
  ? columnDefType === 'display'
2276
2288
  ? '0 0.5rem'
2277
2289
  : '0.5rem'
@@ -2297,7 +2309,12 @@ const MRT_TableBodyCell = ({ cell, enableHover, numRows, rowIndex, rowRef, table
2297
2309
  ? `${styles.lighten(theme.palette.background.default, 0.2)} !important`
2298
2310
  : `${styles.darken(theme.palette.background.default, 0.1)} !important`
2299
2311
  : undefined,
2300
- } }, getCommonCellStyles({ column, table, theme, tableCellProps })), draggingBorders)) }),
2312
+ } }, getCommonCellStyles({
2313
+ column,
2314
+ table,
2315
+ theme,
2316
+ tableCellProps,
2317
+ })), draggingBorders)) }),
2301
2318
  React__default["default"].createElement(React__default["default"].Fragment, null, cell.getIsPlaceholder() ? null : isLoading || showSkeletons ? (React__default["default"].createElement(Skeleton__default["default"], Object.assign({ animation: "wave", height: 20, width: skeletonWidth }, skeletonProps))) : enableRowNumbers &&
2302
2319
  rowNumberMode === 'static' &&
2303
2320
  column.id === 'mrt-row-numbers' ? (rowIndex + 1) : column.id === 'mrt-row-drag' ? (React__default["default"].createElement(MRT_TableBodyRowGrabHandle, { cell: cell, rowRef: rowRef, table: table })) : columnDefType === 'display' &&
@@ -2339,7 +2356,7 @@ const MRT_TableDetailPanel = ({ parentRowRef, row, table, virtualRow, }) => {
2339
2356
  : tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx))) }), renderDetailPanel && (React__default["default"].createElement(Collapse__default["default"], { in: row.getIsExpanded(), mountOnEnter: true, unmountOnExit: true }, !isLoading && renderDetailPanel({ row, table }))))));
2340
2357
  };
2341
2358
 
2342
- const MRT_TableBodyRow = ({ measureElement, numRows, row, rowIndex, table, virtualRow, }) => {
2359
+ const MRT_TableBodyRow = ({ columnVirtualizer, measureElement, numRows, row, rowIndex, table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, virtualRow, }) => {
2343
2360
  const theme = styles.useTheme();
2344
2361
  const { getIsSomeColumnsPinned, getState, options: { enableRowOrdering, layoutMode, memoMode, muiTableBodyRowProps, renderDetailPanel, }, setHoveredRow, } = table;
2345
2362
  const { draggingColumn, draggingRow, editingCell, editingRow, hoveredRow } = getState();
@@ -2378,37 +2395,50 @@ const MRT_TableBodyRow = ({ measureElement, numRows, row, rowIndex, table, virtu
2378
2395
  : undefined,
2379
2396
  } }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
2380
2397
  ? tableRowProps.sx(theme)
2381
- : tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx)), draggingBorders)) }), row.getVisibleCells().map((cell) => {
2382
- const props = {
2383
- cell,
2384
- enableHover: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false,
2385
- key: cell.id,
2386
- numRows,
2387
- rowIndex,
2388
- rowRef,
2389
- table,
2390
- };
2391
- return memoMode === 'cells' &&
2392
- cell.column.columnDef.columnDefType === 'data' &&
2393
- !draggingColumn &&
2394
- !draggingRow &&
2395
- (editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) !== cell.id &&
2396
- (editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) !== row.id ? (React__default["default"].createElement(Memo_MRT_TableBodyCell, Object.assign({}, props))) : (React__default["default"].createElement(MRT_TableBodyCell, Object.assign({}, props)));
2397
- })),
2398
+ : tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx)), draggingBorders)) }),
2399
+ virtualPaddingLeft ? (React__default["default"].createElement("td", { style: { display: 'flex', width: virtualPaddingLeft } })) : null,
2400
+ (virtualColumns !== null && virtualColumns !== void 0 ? virtualColumns : row.getVisibleCells()).map((cellOrVirtualCell) => {
2401
+ const cell = columnVirtualizer
2402
+ ? row.getVisibleCells()[cellOrVirtualCell.index]
2403
+ : cellOrVirtualCell;
2404
+ const props = {
2405
+ cell,
2406
+ enableHover: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false,
2407
+ key: cell.id,
2408
+ measureElement: columnVirtualizer === null || columnVirtualizer === void 0 ? void 0 : columnVirtualizer.measureElement,
2409
+ numRows,
2410
+ rowIndex,
2411
+ rowRef,
2412
+ table,
2413
+ virtualCell: columnVirtualizer
2414
+ ? cellOrVirtualCell
2415
+ : undefined,
2416
+ };
2417
+ return memoMode === 'cells' &&
2418
+ cell.column.columnDef.columnDefType === 'data' &&
2419
+ !draggingColumn &&
2420
+ !draggingRow &&
2421
+ (editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) !== cell.id &&
2422
+ (editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) !== row.id ? (React__default["default"].createElement(Memo_MRT_TableBodyCell, Object.assign({}, props))) : (React__default["default"].createElement(MRT_TableBodyCell, Object.assign({}, props)));
2423
+ }),
2424
+ virtualPaddingRight ? (React__default["default"].createElement("td", { style: { display: 'flex', width: virtualPaddingRight } })) : null),
2398
2425
  renderDetailPanel && !row.getIsGrouped() && (React__default["default"].createElement(MRT_TableDetailPanel, { parentRowRef: rowRef, row: row, table: table, virtualRow: virtualRow }))));
2399
2426
  };
2400
2427
  const Memo_MRT_TableBodyRow = React.memo(MRT_TableBodyRow, (prev, next) => prev.row === next.row);
2401
2428
 
2402
- const MRT_TableBody = ({ table }) => {
2429
+ const MRT_TableBody = ({ columnVirtualizer, table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
2403
2430
  var _a, _b, _c;
2404
- const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, layoutMode, localization, manualFiltering, manualSorting, memoMode, muiTableBodyProps, virtualizerInstanceRef, virtualizerProps, }, refs: { tableContainerRef, tablePaperRef }, } = table;
2431
+ const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, layoutMode, localization, manualFiltering, manualSorting, memoMode, muiTableBodyProps, rowVirtualizerInstanceRef, rowVirtualizerProps, virtualizerInstanceRef, virtualizerProps, }, refs: { tableContainerRef, tablePaperRef }, } = table;
2405
2432
  const { columnFilters, density, globalFilter, pagination, sorting } = getState();
2406
2433
  const tableBodyProps = muiTableBodyProps instanceof Function
2407
2434
  ? muiTableBodyProps({ table })
2408
2435
  : muiTableBodyProps;
2409
- const vProps = virtualizerProps instanceof Function
2436
+ const vProps_old = virtualizerProps instanceof Function
2410
2437
  ? virtualizerProps({ table })
2411
2438
  : virtualizerProps;
2439
+ const vProps = rowVirtualizerProps instanceof Function
2440
+ ? rowVirtualizerProps({ table })
2441
+ : rowVirtualizerProps;
2412
2442
  const rows = React.useMemo(() => {
2413
2443
  if (enableGlobalFilterRankedResults &&
2414
2444
  globalFilter &&
@@ -2434,14 +2464,22 @@ const MRT_TableBody = ({ table }) => {
2434
2464
  pagination.pageIndex,
2435
2465
  pagination.pageSize,
2436
2466
  ]);
2437
- const virtualizer = enableRowVirtualization
2438
- ? reactVirtual.useVirtualizer(Object.assign({ count: rows.length, estimateSize: () => density === 'compact' ? 37 : density === 'comfortable' ? 58 : 73, getScrollElement: () => tableContainerRef.current, measureElement: (element) => element === null || element === void 0 ? void 0 : element.getBoundingClientRect().height, overscan: 4 }, vProps))
2467
+ const rowVirtualizer = enableRowVirtualization
2468
+ ? reactVirtual.useVirtualizer(Object.assign(Object.assign({ count: rows.length, estimateSize: () => density === 'compact' ? 37 : density === 'comfortable' ? 58 : 73, getScrollElement: () => tableContainerRef.current, measureElement: (element) => element === null || element === void 0 ? void 0 : element.getBoundingClientRect().height, overscan: 4 }, vProps_old), vProps))
2439
2469
  : undefined;
2440
- if (virtualizerInstanceRef && virtualizer) {
2441
- virtualizerInstanceRef.current = virtualizer;
2470
+ if (rowVirtualizerInstanceRef && rowVirtualizer) {
2471
+ rowVirtualizerInstanceRef.current = rowVirtualizer;
2472
+ }
2473
+ //deprecated
2474
+ if (virtualizerInstanceRef && rowVirtualizer) {
2475
+ virtualizerInstanceRef.current = rowVirtualizer;
2442
2476
  }
2443
- const virtualRows = virtualizer ? virtualizer.getVirtualItems() : undefined;
2444
- return (React__default["default"].createElement(TableBody__default["default"], Object.assign({}, tableBodyProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table-row-group', height: virtualizer ? `${virtualizer.getTotalSize()}px` : 'inherit', minHeight: !rows.length ? '100px' : undefined, position: 'relative' }, ((tableBodyProps === null || tableBodyProps === void 0 ? void 0 : tableBodyProps.sx) instanceof Function
2477
+ const virtualRows = rowVirtualizer
2478
+ ? rowVirtualizer.getVirtualItems()
2479
+ : undefined;
2480
+ return (React__default["default"].createElement(TableBody__default["default"], Object.assign({}, tableBodyProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table-row-group', height: rowVirtualizer
2481
+ ? `${rowVirtualizer.getTotalSize()}px`
2482
+ : 'inherit', minHeight: !rows.length ? '100px' : undefined, position: 'relative' }, ((tableBodyProps === null || tableBodyProps === void 0 ? void 0 : tableBodyProps.sx) instanceof Function
2445
2483
  ? tableBodyProps === null || tableBodyProps === void 0 ? void 0 : tableBodyProps.sx(theme)
2446
2484
  : tableBodyProps === null || tableBodyProps === void 0 ? void 0 : tableBodyProps.sx))) }), (_a = tableBodyProps === null || tableBodyProps === void 0 ? void 0 : tableBodyProps.children) !== null && _a !== void 0 ? _a : (!rows.length ? (React__default["default"].createElement("tr", { style: { display: layoutMode === 'grid' ? 'grid' : 'table-row' } },
2447
2485
  React__default["default"].createElement("td", { colSpan: table.getVisibleLeafColumns().length, style: { display: layoutMode === 'grid' ? 'grid' : 'table-cell' } },
@@ -2455,19 +2493,21 @@ const MRT_TableBody = ({ table }) => {
2455
2493
  } }, globalFilter || columnFilters.length
2456
2494
  ? localization.noResultsFound
2457
2495
  : localization.noRecordsToDisplay)))) : (React__default["default"].createElement(React__default["default"].Fragment, null, (virtualRows !== null && virtualRows !== void 0 ? virtualRows : rows).map((rowOrVirtualRow, rowIndex) => {
2458
- const row = virtualizer
2496
+ const row = rowVirtualizer
2459
2497
  ? rows[rowOrVirtualRow.index]
2460
2498
  : rowOrVirtualRow;
2461
2499
  const props = {
2500
+ columnVirtualizer,
2462
2501
  key: row.id,
2463
- measureElement: virtualizer
2464
- ? virtualizer.measureElement
2465
- : undefined,
2502
+ measureElement: rowVirtualizer === null || rowVirtualizer === void 0 ? void 0 : rowVirtualizer.measureElement,
2466
2503
  numRows: rows.length,
2467
2504
  row,
2468
- rowIndex: virtualizer ? rowOrVirtualRow.index : rowIndex,
2505
+ rowIndex: rowVirtualizer ? rowOrVirtualRow.index : rowIndex,
2469
2506
  table,
2470
- virtualRow: virtualizer
2507
+ virtualColumns,
2508
+ virtualPaddingLeft,
2509
+ virtualPaddingRight,
2510
+ virtualRow: rowVirtualizer
2471
2511
  ? rowOrVirtualRow
2472
2512
  : undefined,
2473
2513
  };
@@ -2476,7 +2516,7 @@ const MRT_TableBody = ({ table }) => {
2476
2516
  };
2477
2517
  const Memo_MRT_TableBody = React.memo(MRT_TableBody, (prev, next) => prev.table.options.data === next.table.options.data);
2478
2518
 
2479
- const MRT_TableFooterCell = ({ footer, table }) => {
2519
+ const MRT_TableFooterCell = ({ footer, table, }) => {
2480
2520
  var _a, _b, _c;
2481
2521
  const { getState, options: { layoutMode, muiTableFooterCellProps }, } = table;
2482
2522
  const { density } = getState();
@@ -2494,7 +2534,12 @@ const MRT_TableFooterCell = ({ footer, table }) => {
2494
2534
  ? '0.5rem'
2495
2535
  : density === 'comfortable'
2496
2536
  ? '1rem'
2497
- : '1.5rem', verticalAlign: 'top', zIndex: column.getIsPinned() && columnDefType !== 'group' ? 2 : 1 }, getCommonCellStyles({ column, table, theme, tableCellProps }))) }),
2537
+ : '1.5rem', verticalAlign: 'top', zIndex: column.getIsPinned() && columnDefType !== 'group' ? 2 : 1 }, getCommonCellStyles({
2538
+ column,
2539
+ table,
2540
+ theme,
2541
+ tableCellProps,
2542
+ }))) }),
2498
2543
  React__default["default"].createElement(React__default["default"].Fragment, null, footer.isPlaceholder
2499
2544
  ? null
2500
2545
  : (_c = (_b = (columnDef.Footer instanceof Function
@@ -2506,7 +2551,7 @@ const MRT_TableFooterCell = ({ footer, table }) => {
2506
2551
  : columnDef.Footer)) !== null && _b !== void 0 ? _b : columnDef.footer) !== null && _c !== void 0 ? _c : null)));
2507
2552
  };
2508
2553
 
2509
- const MRT_TableFooterRow = ({ footerGroup, table }) => {
2554
+ const MRT_TableFooterRow = ({ footerGroup, table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
2510
2555
  var _a;
2511
2556
  const { options: { layoutMode, muiTableFooterRowProps }, } = table;
2512
2557
  // if no content in row, skip row
@@ -2517,12 +2562,20 @@ const MRT_TableFooterRow = ({ footerGroup, table }) => {
2517
2562
  const tableRowProps = muiTableFooterRowProps instanceof Function
2518
2563
  ? muiTableFooterRowProps({ footerGroup, table })
2519
2564
  : muiTableFooterRowProps;
2520
- return (React__default["default"].createElement(TableRow__default["default"], Object.assign({}, tableRowProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'flex' : 'table-row' }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
2565
+ return (React__default["default"].createElement(TableRow__default["default"], Object.assign({}, tableRowProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'flex' : 'table-row', width: '100%' }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
2521
2566
  ? tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx(theme)
2522
- : tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx))) }), footerGroup.headers.map((footer) => (React__default["default"].createElement(MRT_TableFooterCell, { footer: footer, key: footer.id, table: table })))));
2523
- };
2524
-
2525
- const MRT_TableFooter = ({ table }) => {
2567
+ : tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx))) }),
2568
+ virtualPaddingLeft ? (React__default["default"].createElement("th", { style: { display: 'flex', width: virtualPaddingLeft } })) : null,
2569
+ (virtualColumns !== null && virtualColumns !== void 0 ? virtualColumns : footerGroup.headers).map((footerOrVirtualFooter) => {
2570
+ const footer = virtualColumns
2571
+ ? footerGroup.headers[footerOrVirtualFooter.index]
2572
+ : footerOrVirtualFooter;
2573
+ return (React__default["default"].createElement(MRT_TableFooterCell, { footer: footer, key: footer.id, table: table }));
2574
+ }),
2575
+ virtualPaddingRight ? (React__default["default"].createElement("th", { style: { display: 'flex', width: virtualPaddingRight } })) : null));
2576
+ };
2577
+
2578
+ const MRT_TableFooter = ({ table, virtualColumns, virtualPaddingLeft, virtualPaddingRight, }) => {
2526
2579
  const { getFooterGroups, getState, options: { enableStickyFooter, layoutMode, muiTableFooterProps }, } = table;
2527
2580
  const { isFullScreen } = getState();
2528
2581
  const tableFooterProps = muiTableFooterProps instanceof Function
@@ -2535,21 +2588,74 @@ const MRT_TableFooter = ({ table }) => {
2535
2588
  : `1px solid ${theme.palette.grey[700]}`
2536
2589
  : undefined, position: stickFooter ? 'sticky' : undefined }, ((tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx) instanceof Function
2537
2590
  ? tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx(theme)
2538
- : tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx))) }), getFooterGroups().map((footerGroup) => (React__default["default"].createElement(MRT_TableFooterRow, { footerGroup: footerGroup, key: footerGroup.id, table: table })))));
2591
+ : tableFooterProps === null || tableFooterProps === void 0 ? void 0 : tableFooterProps.sx))) }), getFooterGroups().map((footerGroup) => (React__default["default"].createElement(MRT_TableFooterRow, { footerGroup: footerGroup, key: footerGroup.id, table: table, virtualColumns: virtualColumns, virtualPaddingLeft: virtualPaddingLeft, virtualPaddingRight: virtualPaddingRight })))));
2539
2592
  };
2540
2593
 
2541
2594
  const MRT_Table = ({ table }) => {
2542
- const { getState, options: { enableColumnResizing, enableStickyHeader, enableTableFooter, enableTableHead, layoutMode, memoMode, muiTableProps, }, } = table;
2543
- const { isFullScreen } = getState();
2595
+ var _a, _b;
2596
+ const { getState, options: { columnVirtualizerInstanceRef, columnVirtualizerProps, enableColumnResizing, enableColumnVirtualization, enablePinning, enableStickyHeader, enableTableFooter, enableTableHead, layoutMode, memoMode, muiTableProps, }, refs: { tableContainerRef }, } = table;
2597
+ const { isFullScreen, columnPinning, columnVisibility } = getState();
2544
2598
  const tableProps = muiTableProps instanceof Function
2545
2599
  ? muiTableProps({ table })
2546
2600
  : muiTableProps;
2547
- return (React__default["default"].createElement(Table__default["default"], Object.assign({ stickyHeader: enableStickyHeader || isFullScreen }, tableProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table', tableLayout: enableColumnResizing ? 'fixed' : 'auto' }, ((tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx) instanceof Function
2601
+ const vProps = columnVirtualizerProps instanceof Function
2602
+ ? columnVirtualizerProps({ table })
2603
+ : columnVirtualizerProps;
2604
+ //get first 16 column widths and average them
2605
+ const averageColumnWidth = React.useMemo(() => {
2606
+ var _a, _b, _c, _d;
2607
+ const columnsWidths = (_d = (_c = (_b = (_a = table
2608
+ .getRowModel()
2609
+ .rows[0]) === null || _a === void 0 ? void 0 : _a.getCenterVisibleCells()) === null || _b === void 0 ? void 0 : _b.slice(0, 16)) === null || _c === void 0 ? void 0 : _c.map((cell) => cell.column.getSize() * 1.25)) !== null && _d !== void 0 ? _d : [];
2610
+ return columnsWidths.reduce((a, b) => a + b, 0) / columnsWidths.length;
2611
+ }, [table.getRowModel().rows, columnPinning, columnVisibility]);
2612
+ const pinnedColumnIndexes = React.useMemo(() => enableColumnVirtualization && enablePinning
2613
+ ? [
2614
+ ...table.getLeftFlatHeaders().map((h) => h.column.getPinnedIndex()),
2615
+ ...table
2616
+ .getRightFlatHeaders()
2617
+ .map((h) => table.getVisibleFlatColumns().length -
2618
+ h.column.getPinnedIndex() -
2619
+ 1),
2620
+ ]
2621
+ : [], [columnPinning, enableColumnVirtualization, enablePinning]);
2622
+ const columnVirtualizer = enableColumnVirtualization
2623
+ ? reactVirtual.useVirtualizer(Object.assign({ count: table.getRowModel().rows[0].getVisibleCells().length, estimateSize: () => averageColumnWidth, getScrollElement: () => tableContainerRef.current, horizontal: true, measureElement: (element) => element === null || element === void 0 ? void 0 : element.getBoundingClientRect().width, overscan: 3, rangeExtractor: React.useCallback((range) => [
2624
+ ...new Set([
2625
+ ...pinnedColumnIndexes,
2626
+ ...reactVirtual.defaultRangeExtractor(range),
2627
+ ]),
2628
+ ].sort((a, b) => a - b), [pinnedColumnIndexes]) }, vProps))
2629
+ : undefined;
2630
+ if (columnVirtualizerInstanceRef && columnVirtualizer) {
2631
+ columnVirtualizerInstanceRef.current = columnVirtualizer;
2632
+ }
2633
+ const virtualColumns = columnVirtualizer
2634
+ ? columnVirtualizer.getVirtualItems()
2635
+ : undefined;
2636
+ let virtualPaddingLeft;
2637
+ let virtualPaddingRight;
2638
+ if (columnVirtualizer && (virtualColumns === null || virtualColumns === void 0 ? void 0 : virtualColumns.length)) {
2639
+ virtualPaddingLeft = (virtualColumns === null || virtualColumns === void 0 ? void 0 : virtualColumns.length)
2640
+ ? ((_a = virtualColumns[0]) === null || _a === void 0 ? void 0 : _a.start) || 0
2641
+ : 0;
2642
+ virtualPaddingRight = (virtualColumns === null || virtualColumns === void 0 ? void 0 : virtualColumns.length)
2643
+ ? columnVirtualizer.getTotalSize() -
2644
+ (((_b = virtualColumns[virtualColumns.length - 1]) === null || _b === void 0 ? void 0 : _b.end) || 0)
2645
+ : 0;
2646
+ }
2647
+ const props = {
2648
+ table,
2649
+ virtualColumns,
2650
+ virtualPaddingLeft,
2651
+ virtualPaddingRight,
2652
+ };
2653
+ return (React__default["default"].createElement(Table__default["default"], Object.assign({ stickyHeader: enableStickyHeader || isFullScreen }, tableProps, { sx: (theme) => (Object.assign({ display: layoutMode === 'grid' ? 'grid' : 'table', tableLayout: layoutMode !== 'grid' && enableColumnResizing ? 'fixed' : undefined }, ((tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx) instanceof Function
2548
2654
  ? tableProps.sx(theme)
2549
2655
  : tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx))) }),
2550
- enableTableHead && React__default["default"].createElement(MRT_TableHead, { table: table }),
2551
- memoMode === 'table-body' ? (React__default["default"].createElement(Memo_MRT_TableBody, { table: table })) : (React__default["default"].createElement(MRT_TableBody, { table: table })),
2552
- enableTableFooter && React__default["default"].createElement(MRT_TableFooter, { table: table })));
2656
+ enableTableHead && React__default["default"].createElement(MRT_TableHead, Object.assign({}, props)),
2657
+ memoMode === 'table-body' ? (React__default["default"].createElement(Memo_MRT_TableBody, Object.assign({ columnVirtualizer: columnVirtualizer }, props))) : (React__default["default"].createElement(MRT_TableBody, Object.assign({ columnVirtualizer: columnVirtualizer }, props))),
2658
+ enableTableFooter && React__default["default"].createElement(MRT_TableFooter, Object.assign({}, props))));
2553
2659
  };
2554
2660
 
2555
2661
  const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
@@ -2904,7 +3010,7 @@ const MaterialReactTable = (_a) => {
2904
3010
  const _sortingFns = React.useMemo(() => (Object.assign(Object.assign({}, MRT_SortingFns), sortingFns)), []);
2905
3011
  const _defaultColumn = React.useMemo(() => (Object.assign(Object.assign({}, MRT_DefaultColumn), defaultColumn)), []);
2906
3012
  const _defaultDisplayColumn = React.useMemo(() => (Object.assign(Object.assign({}, MRT_DefaultDisplayColumn), defaultDisplayColumn)), []);
2907
- if (rest.enableRowVirtualization) {
3013
+ if (rest.enableRowVirtualization || rest.enableColumnVirtualization) {
2908
3014
  layoutMode = 'grid';
2909
3015
  enableStickyHeader = true;
2910
3016
  }