material-react-table 1.0.10 → 1.1.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 (34) hide show
  1. package/dist/cjs/MaterialReactTable.d.ts +10 -3
  2. package/dist/cjs/body/MRT_TableBody.d.ts +2 -1
  3. package/dist/cjs/body/MRT_TableBodyCell.d.ts +2 -1
  4. package/dist/cjs/body/MRT_TableBodyRow.d.ts +2 -1
  5. package/dist/cjs/index.js +79 -48
  6. package/dist/cjs/index.js.map +1 -1
  7. package/dist/cjs/table/MRT_TableRoot.d.ts +3 -2
  8. package/dist/esm/MaterialReactTable.d.ts +10 -3
  9. package/dist/esm/body/MRT_TableBody.d.ts +2 -1
  10. package/dist/esm/body/MRT_TableBodyCell.d.ts +2 -1
  11. package/dist/esm/body/MRT_TableBodyRow.d.ts +2 -1
  12. package/dist/esm/material-react-table.esm.js +81 -50
  13. package/dist/esm/material-react-table.esm.js.map +1 -1
  14. package/dist/esm/table/MRT_TableRoot.d.ts +3 -2
  15. package/dist/index.d.ts +10 -3
  16. package/package.json +1 -1
  17. package/src/MaterialReactTable.tsx +11 -3
  18. package/src/body/MRT_TableBody.tsx +18 -12
  19. package/src/body/MRT_TableBodyCell.tsx +7 -1
  20. package/src/body/MRT_TableBodyRow.tsx +36 -15
  21. package/src/body/MRT_TableDetailPanel.tsx +1 -1
  22. package/src/buttons/MRT_ExpandAllButton.tsx +1 -1
  23. package/src/buttons/MRT_ExpandButton.tsx +1 -1
  24. package/src/buttons/MRT_GrabHandleButton.tsx +1 -1
  25. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +1 -1
  26. package/src/column.utils.ts +1 -1
  27. package/src/head/MRT_TableHead.tsx +8 -3
  28. package/src/head/MRT_TableHeadCellColumnActionsButton.tsx +9 -7
  29. package/src/head/MRT_TableHeadCellResizeHandle.tsx +3 -1
  30. package/src/inputs/MRT_SelectCheckbox.tsx +51 -46
  31. package/src/table/MRT_Table.tsx +7 -2
  32. package/src/table/MRT_TablePaper.tsx +1 -1
  33. package/src/table/MRT_TableRoot.tsx +1 -1
  34. package/src/toolbar/MRT_TopToolbar.tsx +1 -1
@@ -1,5 +1,5 @@
1
1
  import { Dispatch, MutableRefObject, ReactNode, SetStateAction } from 'react';
2
- import type { AlertProps, ButtonProps, CheckboxProps, ChipProps, IconButtonProps, LinearProgressProps, PaperProps, SkeletonProps, TableBodyProps, TableCellProps, TableContainerProps, TableFooterProps, TableHeadProps, TablePaginationProps, TableProps, TableRowProps, TextFieldProps, ToolbarProps } from '@mui/material';
2
+ import type { AlertProps, ButtonProps, CheckboxProps, ChipProps, IconButtonProps, LinearProgressProps, PaperProps, RadioProps, SkeletonProps, TableBodyProps, TableCellProps, TableContainerProps, TableFooterProps, TableHeadProps, TablePaginationProps, TableProps, TableRowProps, TextFieldProps, ToolbarProps } from '@mui/material';
3
3
  import type { Cell, Column, ColumnDef, DeepKeys, FilterFn, Header, HeaderGroup, OnChangeFn, Row, SortingFn, Table, TableOptions, TableState } from '@tanstack/react-table';
4
4
  import type { Options as VirtualizerOptions, VirtualItem } from 'react-virtual';
5
5
  import { MRT_Icons } from './icons';
@@ -448,6 +448,13 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
448
448
  * @link https://www.material-react-table.com/docs/guides/localization
449
449
  */
450
450
  localization?: Partial<MRT_Localization>;
451
+ /**
452
+ * Memoize cells, rows, or the entire table body to potentially improve render performance.
453
+ *
454
+ * @warning This will break some dynamic rendering features. See the memoization guide for more info:
455
+ * @link https://www.material-react-table.com/docs/guides/memoize-components
456
+ */
457
+ memoMode?: 'cell' | 'row' | 'table-body';
451
458
  muiBottomToolbarProps?: ToolbarProps | (({ table }: {
452
459
  table: MRT_TableInstance<TData>;
453
460
  }) => ToolbarProps);
@@ -468,10 +475,10 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
468
475
  muiSelectAllCheckboxProps?: CheckboxProps | (({ table }: {
469
476
  table: MRT_TableInstance<TData>;
470
477
  }) => CheckboxProps);
471
- muiSelectCheckboxProps?: CheckboxProps | (({ table, row, }: {
478
+ muiSelectCheckboxProps?: (CheckboxProps | RadioProps) | (({ table, row, }: {
472
479
  table: MRT_TableInstance<TData>;
473
480
  row: MRT_Row<TData>;
474
- }) => CheckboxProps);
481
+ }) => CheckboxProps | RadioProps);
475
482
  muiTableBodyCellCopyButtonProps?: ButtonProps | (({ cell, column, row, table, }: {
476
483
  cell: MRT_Cell<TData>;
477
484
  column: MRT_Column<TData>;
@@ -1,7 +1,8 @@
1
- import { FC } from 'react';
1
+ import React, { FC } from 'react';
2
2
  import type { MRT_TableInstance } from '..';
3
3
  interface Props {
4
4
  table: MRT_TableInstance;
5
5
  }
6
6
  export declare const MRT_TableBody: FC<Props>;
7
+ export declare const Memo_MRT_TableBody: React.NamedExoticComponent<Props>;
7
8
  export {};
@@ -1,4 +1,4 @@
1
- import { FC, RefObject } from 'react';
1
+ import React, { FC, RefObject } from 'react';
2
2
  import type { MRT_Cell, MRT_TableInstance } from '..';
3
3
  interface Props {
4
4
  cell: MRT_Cell;
@@ -8,4 +8,5 @@ interface Props {
8
8
  table: MRT_TableInstance;
9
9
  }
10
10
  export declare const MRT_TableBodyCell: FC<Props>;
11
+ export declare const Memo_MRT_TableBodyCell: React.NamedExoticComponent<Props>;
11
12
  export {};
@@ -1,4 +1,4 @@
1
- import { FC } from 'react';
1
+ import React, { FC } from 'react';
2
2
  import type { MRT_Row, MRT_TableInstance } from '..';
3
3
  interface Props {
4
4
  row: MRT_Row;
@@ -7,4 +7,5 @@ interface Props {
7
7
  virtualRow?: any;
8
8
  }
9
9
  export declare const MRT_TableBodyRow: FC<Props>;
10
+ export declare const Memo_MRT_TableBodyRow: React.NamedExoticComponent<Props>;
10
11
  export {};
package/dist/cjs/index.js CHANGED
@@ -281,7 +281,7 @@ const MRT_ExpandAllButton = ({ table }) => {
281
281
  : getIsSomeRowsExpanded()
282
282
  ? -90
283
283
  : 0}deg)`,
284
- transition: 'transform 0.1s',
284
+ transition: 'transform 150ms',
285
285
  } })))));
286
286
  };
287
287
 
@@ -309,7 +309,7 @@ const MRT_ExpandButton = ({ row, table }) => {
309
309
  : row.getIsExpanded()
310
310
  ? -180
311
311
  : 0}deg)`,
312
- transition: 'transform 0.1s',
312
+ transition: 'transform 150ms',
313
313
  } })))));
314
314
  };
315
315
 
@@ -497,7 +497,7 @@ const MRT_GrabHandleButton = ({ iconButtonProps, onDragEnd, onDragStart, table,
497
497
  var _a;
498
498
  e.stopPropagation();
499
499
  (_a = iconButtonProps === null || iconButtonProps === void 0 ? void 0 : iconButtonProps.onClick) === null || _a === void 0 ? void 0 : _a.call(iconButtonProps, e);
500
- }, onDragStart: onDragStart, onDragEnd: onDragEnd, sx: (theme) => (Object.assign({ cursor: 'grab', m: 0, opacity: 0.5, p: '2px', transition: 'all 0.1s ease-in-out', '&:hover': {
500
+ }, onDragStart: onDragStart, onDragEnd: onDragEnd, sx: (theme) => (Object.assign({ cursor: 'grab', m: 0, opacity: 0.5, p: '2px', transition: 'all 150ms ease-in-out', '&:hover': {
501
501
  backgroundColor: 'transparent',
502
502
  opacity: 1,
503
503
  }, '&:active': {
@@ -641,7 +641,7 @@ const getCommonCellStyles = ({ column, header, table, tableCellProps, theme, })
641
641
  ? 'sticky'
642
642
  : undefined, right: column.getIsPinned() === 'right'
643
643
  ? `${getTotalRight(table, column)}px`
644
- : undefined, transition: `all ${column.getIsResizing() ? 0 : '0.1s'} ease-in-out` }, ((tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx) instanceof Function
644
+ : undefined, transition: `all ${column.getIsResizing() ? 0 : '150ms'} ease-in-out` }, ((tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx) instanceof Function
645
645
  ? tableCellProps.sx(theme)
646
646
  : tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx)), { maxWidth: `min(${column.getSize()}px, fit-content)`, minWidth: `max(${column.getSize()}px, ${(_c = column.columnDef.minSize) !== null && _c !== void 0 ? _c : 30}px)`, width: (_d = header === null || header === void 0 ? void 0 : header.getSize()) !== null && _d !== void 0 ? _d : column.getSize() }));
647
647
  };
@@ -1015,7 +1015,7 @@ const commonIconButtonStyles = {
1015
1015
  height: '2rem',
1016
1016
  ml: '10px',
1017
1017
  opacity: 0.5,
1018
- transition: 'opacity 0.1s',
1018
+ transition: 'opacity 150ms',
1019
1019
  width: '2rem',
1020
1020
  '&:hover': {
1021
1021
  opacity: 1,
@@ -1046,7 +1046,7 @@ const MRT_ToggleRowActionMenuButton = ({ cell, row, table, }) => {
1046
1046
 
1047
1047
  const MRT_SelectCheckbox = ({ row, selectAll, table }) => {
1048
1048
  var _a;
1049
- const { getState, options: { localization, muiSelectCheckboxProps, muiSelectAllCheckboxProps, selectAllMode, }, } = table;
1049
+ const { getState, options: { localization, enableMultiRowSelection, muiSelectCheckboxProps, muiSelectAllCheckboxProps, selectAllMode, }, } = table;
1050
1050
  const { density } = getState();
1051
1051
  const checkboxProps = !row
1052
1052
  ? muiSelectAllCheckboxProps instanceof Function
@@ -1055,33 +1055,33 @@ const MRT_SelectCheckbox = ({ row, selectAll, table }) => {
1055
1055
  : muiSelectCheckboxProps instanceof Function
1056
1056
  ? muiSelectCheckboxProps({ row, table })
1057
1057
  : muiSelectCheckboxProps;
1058
+ const commonProps = Object.assign(Object.assign({ checked: selectAll
1059
+ ? selectAllMode === 'page'
1060
+ ? table.getIsAllPageRowsSelected()
1061
+ : table.getIsAllRowsSelected()
1062
+ : row === null || row === void 0 ? void 0 : row.getIsSelected(), inputProps: {
1063
+ 'aria-label': selectAll
1064
+ ? localization.toggleSelectAll
1065
+ : localization.toggleSelectRow,
1066
+ }, onChange: row
1067
+ ? row.getToggleSelectedHandler()
1068
+ : selectAllMode === 'all'
1069
+ ? table.getToggleAllRowsSelectedHandler()
1070
+ : table.getToggleAllPageRowsSelectedHandler(), size: (density === 'compact' ? 'small' : 'medium') }, checkboxProps), { onClick: (e) => {
1071
+ var _a;
1072
+ e.stopPropagation();
1073
+ (_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.onClick) === null || _a === void 0 ? void 0 : _a.call(checkboxProps, e);
1074
+ }, sx: (theme) => (Object.assign({ height: density === 'compact' ? '1.75rem' : '2.5rem', width: density === 'compact' ? '1.75rem' : '2.5rem', m: density !== 'compact' ? '-0.4rem' : undefined }, ((checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.sx) instanceof Function
1075
+ ? checkboxProps.sx(theme)
1076
+ : checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.sx))), title: undefined });
1058
1077
  return (React__default["default"].createElement(material.Tooltip, { arrow: true, enterDelay: 1000, enterNextDelay: 1000, title: (_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.title) !== null && _a !== void 0 ? _a : (selectAll
1059
1078
  ? localization.toggleSelectAll
1060
- : localization.toggleSelectRow) },
1061
- React__default["default"].createElement(material.Checkbox, Object.assign({ checked: selectAll
1062
- ? selectAllMode === 'page'
1079
+ : localization.toggleSelectRow) }, enableMultiRowSelection === false ? (React__default["default"].createElement(material.Radio, Object.assign({}, commonProps))) : (React__default["default"].createElement(material.Checkbox, Object.assign({ indeterminate: selectAll
1080
+ ? table.getIsSomeRowsSelected() &&
1081
+ !(selectAllMode === 'page'
1063
1082
  ? table.getIsAllPageRowsSelected()
1064
- : table.getIsAllRowsSelected()
1065
- : row === null || row === void 0 ? void 0 : row.getIsSelected(), indeterminate: selectAll
1066
- ? table.getIsSomeRowsSelected() &&
1067
- !(selectAllMode === 'page'
1068
- ? table.getIsAllPageRowsSelected()
1069
- : table.getIsAllRowsSelected())
1070
- : row === null || row === void 0 ? void 0 : row.getIsSomeSelected(), inputProps: {
1071
- 'aria-label': selectAll
1072
- ? localization.toggleSelectAll
1073
- : localization.toggleSelectRow,
1074
- }, onChange: row
1075
- ? row.getToggleSelectedHandler()
1076
- : selectAllMode === 'all'
1077
- ? table.getToggleAllRowsSelectedHandler()
1078
- : table.getToggleAllPageRowsSelectedHandler(), size: density === 'compact' ? 'small' : 'medium' }, checkboxProps, { onClick: (e) => {
1079
- var _a;
1080
- e.stopPropagation();
1081
- (_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.onClick) === null || _a === void 0 ? void 0 : _a.call(checkboxProps, e);
1082
- }, sx: (theme) => (Object.assign({ height: density === 'compact' ? '1.75rem' : '2.5rem', width: density === 'compact' ? '1.75rem' : '2.5rem', m: density !== 'compact' ? '-0.4rem' : undefined }, ((checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.sx) instanceof Function
1083
- ? checkboxProps.sx(theme)
1084
- : checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.sx))), title: undefined }))));
1083
+ : table.getIsAllRowsSelected())
1084
+ : row === null || row === void 0 ? void 0 : row.getIsSomeSelected() }, commonProps)))));
1085
1085
  };
1086
1086
 
1087
1087
  const MRT_GlobalFilterTextField = ({ table, }) => {
@@ -1344,7 +1344,7 @@ const commonToolbarStyles = ({ theme }) => ({
1344
1344
  minHeight: '3.5rem',
1345
1345
  overflow: 'hidden',
1346
1346
  p: '0 !important',
1347
- transition: 'all 0.1s ease-in-out',
1347
+ transition: 'all 150ms ease-in-out',
1348
1348
  zIndex: 1,
1349
1349
  });
1350
1350
  const MRT_TopToolbar = ({ table }) => {
@@ -1454,13 +1454,13 @@ const MRT_TableHeadCellColumnActionsButton = ({ header, table, }) => {
1454
1454
  const iconButtonProps = Object.assign(Object.assign({}, mTableHeadCellColumnActionsButtonProps), mcTableHeadCellColumnActionsButtonProps);
1455
1455
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
1456
1456
  React__default["default"].createElement(material.Tooltip, { arrow: true, enterDelay: 1000, enterNextDelay: 1000, placement: "top", title: (_a = iconButtonProps === null || iconButtonProps === void 0 ? void 0 : iconButtonProps.title) !== null && _a !== void 0 ? _a : localization.columnActions },
1457
- React__default["default"].createElement(material.IconButton, Object.assign({ "aria-label": localization.columnActions, onClick: handleClick, size: "small" }, iconButtonProps, { sx: (theme) => (Object.assign({ height: '2rem', mt: '-0.2rem', opacity: 0.5, transition: 'opacity 0.1s', width: '2rem', '&:hover': {
1457
+ React__default["default"].createElement(material.IconButton, Object.assign({ "aria-label": localization.columnActions, onClick: handleClick, size: "small" }, iconButtonProps, { sx: (theme) => (Object.assign({ height: '2rem', mt: '-0.2rem', opacity: 0.5, transition: 'opacity 150ms', width: '2rem', '&:hover': {
1458
1458
  opacity: 1,
1459
1459
  } }, ((iconButtonProps === null || iconButtonProps === void 0 ? void 0 : iconButtonProps.sx) instanceof Function
1460
1460
  ? iconButtonProps.sx(theme)
1461
1461
  : iconButtonProps === null || iconButtonProps === void 0 ? void 0 : iconButtonProps.sx))), title: undefined }),
1462
1462
  React__default["default"].createElement(MoreVertIcon, null))),
1463
- React__default["default"].createElement(MRT_ColumnActionMenu, { anchorEl: anchorEl, header: header, setAnchorEl: setAnchorEl, table: table })));
1463
+ anchorEl && (React__default["default"].createElement(MRT_ColumnActionMenu, { anchorEl: anchorEl, header: header, setAnchorEl: setAnchorEl, table: table }))));
1464
1464
  };
1465
1465
 
1466
1466
  const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
@@ -1798,7 +1798,9 @@ const MRT_TableHeadCellResizeHandle = ({ header, table }) => {
1798
1798
  position: 'absolute',
1799
1799
  right: '1px',
1800
1800
  touchAction: 'none',
1801
- transition: column.getIsResizing() ? undefined : 'all 0.1s ease-in-out',
1801
+ transition: column.getIsResizing()
1802
+ ? undefined
1803
+ : 'all 150ms ease-in-out',
1802
1804
  userSelect: 'none',
1803
1805
  zIndex: 4,
1804
1806
  '&:active': {
@@ -1959,11 +1961,13 @@ const MRT_TableHeadRow = ({ headerGroup, table }) => {
1959
1961
  };
1960
1962
 
1961
1963
  const MRT_TableHead = ({ table }) => {
1962
- const { getHeaderGroups, options: { enableStickyHeader, muiTableHeadProps }, } = table;
1964
+ const { getHeaderGroups, getState, options: { enableStickyHeader, muiTableHeadProps, enableRowVirtualization }, } = table;
1965
+ const { isFullScreen } = getState();
1963
1966
  const tableHeadProps = muiTableHeadProps instanceof Function
1964
1967
  ? muiTableHeadProps({ table })
1965
1968
  : muiTableHeadProps;
1966
- return (React__default["default"].createElement(material.TableHead, Object.assign({}, tableHeadProps, { sx: (theme) => (Object.assign({ opacity: 0.97, position: enableStickyHeader ? 'sticky' : undefined, zIndex: enableStickyHeader ? 2 : undefined }, ((tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx) instanceof Function
1969
+ const stickyHeader = enableStickyHeader || enableRowVirtualization || isFullScreen;
1970
+ return (React__default["default"].createElement(material.TableHead, Object.assign({}, tableHeadProps, { sx: (theme) => (Object.assign({ opacity: 0.97, position: stickyHeader ? 'sticky' : undefined, zIndex: stickyHeader ? 2 : undefined }, ((tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx) instanceof Function
1967
1971
  ? tableHeadProps === null || tableHeadProps === void 0 ? void 0 : tableHeadProps.sx(theme)
1968
1972
  : 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 })))));
1969
1973
  };
@@ -2180,7 +2184,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
2180
2184
  : undefined,
2181
2185
  }
2182
2186
  : undefined;
2183
- return (React__default["default"].createElement(material.TableCell, Object.assign({}, tableCellProps, { onDragEnter: handleDragEnter, onDoubleClick: handleDoubleClick, sx: (theme) => (Object.assign(Object.assign({ cursor: isEditable && editingMode === 'cell' ? 'pointer' : 'text', overflow: 'hidden', p: density === 'compact'
2187
+ return (React__default["default"].createElement(material.TableCell, Object.assign({}, tableCellProps, { onDragEnter: handleDragEnter, onDoubleClick: handleDoubleClick, sx: (theme) => (Object.assign(Object.assign({ cursor: isEditable && editingMode === 'cell' ? 'pointer' : 'inherit', overflow: 'hidden', p: density === 'compact'
2184
2188
  ? columnDefType === 'display'
2185
2189
  ? '0 0.5rem'
2186
2190
  : '0.5rem'
@@ -2220,6 +2224,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
2220
2224
  _b.length,
2221
2225
  ")"))));
2222
2226
  };
2227
+ const Memo_MRT_TableBodyCell = React.memo(MRT_TableBodyCell, (prev, next) => next.cell === prev.cell);
2223
2228
 
2224
2229
  const MRT_TableDetailPanel = ({ row, table }) => {
2225
2230
  const { getVisibleLeafColumns, options: { muiTableBodyRowProps, muiTableDetailPanelProps, renderDetailPanel, }, } = table;
@@ -2230,7 +2235,7 @@ const MRT_TableDetailPanel = ({ row, table }) => {
2230
2235
  ? muiTableDetailPanelProps({ row, table })
2231
2236
  : muiTableDetailPanelProps;
2232
2237
  return (React__default["default"].createElement(material.TableRow, Object.assign({}, tableRowProps),
2233
- React__default["default"].createElement(material.TableCell, Object.assign({ colSpan: getVisibleLeafColumns().length }, tableCellProps, { sx: (theme) => (Object.assign({ borderBottom: !row.getIsExpanded() ? 'none' : undefined, pb: row.getIsExpanded() ? '1rem' : 0, pt: row.getIsExpanded() ? '1rem' : 0, transition: 'all 0.1s ease-in-out', width: `${table.getTotalSize()}px` }, ((tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx) instanceof Function
2238
+ React__default["default"].createElement(material.TableCell, Object.assign({ colSpan: getVisibleLeafColumns().length }, tableCellProps, { sx: (theme) => (Object.assign({ borderBottom: !row.getIsExpanded() ? 'none' : undefined, pb: row.getIsExpanded() ? '1rem' : 0, pt: row.getIsExpanded() ? '1rem' : 0, transition: 'all 150ms ease-in-out', width: `${table.getTotalSize()}px` }, ((tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx) instanceof Function
2234
2239
  ? tableCellProps.sx(theme)
2235
2240
  : tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx))) }), renderDetailPanel && (React__default["default"].createElement(material.Collapse, { in: row.getIsExpanded() }, renderDetailPanel({ row, table }))))));
2236
2241
  };
@@ -2238,8 +2243,8 @@ const MRT_TableDetailPanel = ({ row, table }) => {
2238
2243
  const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2239
2244
  var _a, _b;
2240
2245
  const theme = material.useTheme();
2241
- const { getIsSomeColumnsPinned, getState, options: { enableRowOrdering, muiTableBodyRowProps, renderDetailPanel }, setHoveredRow, } = table;
2242
- const { draggingRow, hoveredRow } = getState();
2246
+ const { getIsSomeColumnsPinned, getState, options: { enableRowOrdering, memoMode, muiTableBodyRowProps, renderDetailPanel, }, setHoveredRow, } = table;
2247
+ const { draggingColumn, draggingRow, editingCell, editingRow, hoveredRow } = getState();
2243
2248
  const tableRowProps = muiTableBodyRowProps instanceof Function
2244
2249
  ? muiTableBodyRowProps({ row, table })
2245
2250
  : muiTableBodyRowProps;
@@ -2265,7 +2270,7 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2265
2270
  if (virtualRow === null || virtualRow === void 0 ? void 0 : virtualRow.measureRef) {
2266
2271
  virtualRow.measureRef = node;
2267
2272
  }
2268
- } }, tableRowProps, { sx: (theme) => (Object.assign(Object.assign({ backgroundColor: material.lighten(theme.palette.background.default, 0.06), opacity: (draggingRow === null || draggingRow === void 0 ? void 0 : draggingRow.id) === row.id || (hoveredRow === null || hoveredRow === void 0 ? void 0 : hoveredRow.id) === row.id ? 0.5 : 1, transition: 'all 0.1s ease-in-out', '&:hover td': {
2273
+ } }, tableRowProps, { sx: (theme) => (Object.assign(Object.assign({ backgroundColor: material.lighten(theme.palette.background.default, 0.06), opacity: (draggingRow === null || draggingRow === void 0 ? void 0 : draggingRow.id) === row.id || (hoveredRow === null || hoveredRow === void 0 ? void 0 : hoveredRow.id) === row.id ? 0.5 : 1, transition: 'all 150ms ease-in-out', '&:hover td': {
2269
2274
  backgroundColor: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false && getIsSomeColumnsPinned()
2270
2275
  ? theme.palette.mode === 'dark'
2271
2276
  ? `${material.lighten(theme.palette.background.default, 0.12)}`
@@ -2273,13 +2278,29 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2273
2278
  : undefined,
2274
2279
  } }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
2275
2280
  ? tableRowProps.sx(theme)
2276
- : tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx)), draggingBorders)) }), (_b = (_a = row === null || row === void 0 ? void 0 : row.getVisibleCells()) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (cell) => (React__default["default"].createElement(MRT_TableBodyCell, { cell: cell, enableHover: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false, key: cell.id, rowIndex: rowIndex, rowRef: rowRef, table: table })))),
2281
+ : tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx)), draggingBorders)) }), (_b = (_a = row === null || row === void 0 ? void 0 : row.getVisibleCells()) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (cell) => {
2282
+ const props = {
2283
+ cell,
2284
+ enableHover: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false,
2285
+ key: cell.id,
2286
+ rowIndex,
2287
+ rowRef,
2288
+ table,
2289
+ };
2290
+ return memoMode === 'cell' &&
2291
+ cell.column.columnDef.columnDefType === 'data' &&
2292
+ !draggingColumn &&
2293
+ !draggingRow &&
2294
+ (editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) !== cell.id &&
2295
+ (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)));
2296
+ })),
2277
2297
  renderDetailPanel && !row.getIsGrouped() && (React__default["default"].createElement(MRT_TableDetailPanel, { row: row, table: table }))));
2278
2298
  };
2299
+ const Memo_MRT_TableBodyRow = React.memo(MRT_TableBodyRow, (prev, next) => prev.row === next.row);
2279
2300
 
2280
2301
  const MRT_TableBody = ({ table }) => {
2281
2302
  var _a;
2282
- const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, localization, manualFiltering, manualSorting, muiTableBodyProps, virtualizerInstanceRef, virtualizerProps, }, refs: { tableContainerRef, tablePaperRef }, } = table;
2303
+ const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, localization, manualFiltering, manualSorting, memoMode, muiTableBodyProps, virtualizerInstanceRef, virtualizerProps, }, refs: { tableContainerRef, tablePaperRef }, } = table;
2283
2304
  const { columnFilters, globalFilter, pagination, sorting } = getState();
2284
2305
  const tableBodyProps = muiTableBodyProps instanceof Function
2285
2306
  ? muiTableBodyProps({ table })
@@ -2363,11 +2384,21 @@ const MRT_TableBody = ({ table }) => {
2363
2384
  const row = enableRowVirtualization
2364
2385
  ? rows[rowOrVirtualRow.index]
2365
2386
  : rowOrVirtualRow;
2366
- return (React__default["default"].createElement(MRT_TableBodyRow, { key: row.id, row: row, rowIndex: enableRowVirtualization ? rowOrVirtualRow.index : rowIndex, table: table, virtualRow: enableRowVirtualization ? rowOrVirtualRow : null }));
2387
+ const props = {
2388
+ key: row.id,
2389
+ row,
2390
+ rowIndex: enableRowVirtualization
2391
+ ? rowOrVirtualRow.index
2392
+ : rowIndex,
2393
+ table,
2394
+ virtualRow: enableRowVirtualization ? rowOrVirtualRow : null,
2395
+ };
2396
+ return memoMode === 'row' ? (React__default["default"].createElement(Memo_MRT_TableBodyRow, Object.assign({}, props))) : (React__default["default"].createElement(MRT_TableBodyRow, Object.assign({}, props)));
2367
2397
  }),
2368
2398
  enableRowVirtualization && paddingBottom > 0 && (React__default["default"].createElement("tr", null,
2369
2399
  React__default["default"].createElement("td", { style: { height: `${paddingBottom}px` } })))))));
2370
2400
  };
2401
+ const Memo_MRT_TableBody = React.memo(MRT_TableBody, () => true);
2371
2402
 
2372
2403
  const MRT_TableFooterCell = ({ footer, table }) => {
2373
2404
  var _a, _b, _c;
@@ -2430,7 +2461,7 @@ const MRT_TableFooter = ({ table }) => {
2430
2461
  };
2431
2462
 
2432
2463
  const MRT_Table = ({ table }) => {
2433
- const { getState, options: { enableColumnResizing, enableRowVirtualization, enableStickyHeader, enableTableFooter, enableTableHead, muiTableProps, }, } = table;
2464
+ const { getState, options: { enableColumnResizing, enableRowVirtualization, enableStickyHeader, enableTableFooter, enableTableHead, memoMode, muiTableProps, }, } = table;
2434
2465
  const { isFullScreen } = getState();
2435
2466
  const tableProps = muiTableProps instanceof Function
2436
2467
  ? muiTableProps({ table })
@@ -2439,7 +2470,7 @@ const MRT_Table = ({ table }) => {
2439
2470
  ? tableProps.sx(theme)
2440
2471
  : tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx))) }),
2441
2472
  enableTableHead && React__default["default"].createElement(MRT_TableHead, { table: table }),
2442
- React__default["default"].createElement(MRT_TableBody, { table: table }),
2473
+ memoMode === 'table-body' ? (React__default["default"].createElement(Memo_MRT_TableBody, { table: table })) : (React__default["default"].createElement(MRT_TableBody, { table: table })),
2443
2474
  enableTableFooter && React__default["default"].createElement(MRT_TableFooter, { table: table })));
2444
2475
  };
2445
2476
 
@@ -2489,7 +2520,7 @@ const MRT_TablePaper = ({ table }) => {
2489
2520
  //@ts-ignore
2490
2521
  tablePaperProps.ref.current = ref;
2491
2522
  }
2492
- }, sx: (theme) => (Object.assign({ transition: 'all 0.1s ease-in-out' }, ((tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.sx) instanceof Function
2523
+ }, sx: (theme) => (Object.assign({ transition: 'all 150ms ease-in-out' }, ((tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.sx) instanceof Function
2493
2524
  ? tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.sx(theme)
2494
2525
  : tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.sx))), style: Object.assign(Object.assign({}, tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.style), (isFullScreen
2495
2526
  ? {
@@ -2580,7 +2611,7 @@ const MRT_TableRoot = (props) => {
2580
2611
  columnOrder.includes('mrt-row-actions') && Object.assign(Object.assign(Object.assign({ Cell: ({ cell, row }) => (React__default["default"].createElement(MRT_ToggleRowActionMenuButton, { cell: cell, row: row, table: table })), header: props.localization.actions, size: 70 }, props.defaultDisplayColumn), (_b = props.displayColumnDefOptions) === null || _b === void 0 ? void 0 : _b['mrt-row-actions']), { id: 'mrt-row-actions' }),
2581
2612
  columnOrder.includes('mrt-row-expand') &&
2582
2613
  showExpandColumn(props, grouping) && Object.assign(Object.assign(Object.assign({ Cell: ({ row }) => (React__default["default"].createElement(MRT_ExpandButton, { row: row, table: table })), Header: () => props.enableExpandAll ? (React__default["default"].createElement(MRT_ExpandAllButton, { table: table })) : null, header: props.localization.expand, size: 60 }, props.defaultDisplayColumn), (_c = props.displayColumnDefOptions) === null || _c === void 0 ? void 0 : _c['mrt-row-expand']), { id: 'mrt-row-expand' }),
2583
- columnOrder.includes('mrt-row-select') && Object.assign(Object.assign(Object.assign({ Cell: ({ row }) => (React__default["default"].createElement(MRT_SelectCheckbox, { row: row, table: table })), Header: () => props.enableSelectAll ? (React__default["default"].createElement(MRT_SelectCheckbox, { selectAll: true, table: table })) : null, header: props.localization.select, size: 60 }, props.defaultDisplayColumn), (_d = props.displayColumnDefOptions) === null || _d === void 0 ? void 0 : _d['mrt-row-select']), { id: 'mrt-row-select' }),
2614
+ columnOrder.includes('mrt-row-select') && Object.assign(Object.assign(Object.assign({ Cell: ({ row }) => (React__default["default"].createElement(MRT_SelectCheckbox, { row: row, table: table })), Header: () => props.enableSelectAll && props.enableMultiRowSelection ? (React__default["default"].createElement(MRT_SelectCheckbox, { selectAll: true, table: table })) : null, header: props.localization.select, size: 60 }, props.defaultDisplayColumn), (_d = props.displayColumnDefOptions) === null || _d === void 0 ? void 0 : _d['mrt-row-select']), { id: 'mrt-row-select' }),
2584
2615
  columnOrder.includes('mrt-row-numbers') && Object.assign(Object.assign(Object.assign({ Cell: ({ row }) => row.index + 1, Header: () => props.localization.rowNumber, header: props.localization.rowNumbers, size: 60 }, props.defaultDisplayColumn), (_e = props.displayColumnDefOptions) === null || _e === void 0 ? void 0 : _e['mrt-row-numbers']), { id: 'mrt-row-numbers' }),
2585
2616
  ].filter(Boolean);
2586
2617
  }, [