material-react-table 1.0.11 → 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 (33) 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 +75 -46
  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 +77 -48
  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_TableHeadCellColumnActionsButton.tsx +9 -7
  28. package/src/head/MRT_TableHeadCellResizeHandle.tsx +3 -1
  29. package/src/inputs/MRT_SelectCheckbox.tsx +51 -46
  30. package/src/table/MRT_Table.tsx +7 -2
  31. package/src/table/MRT_TablePaper.tsx +1 -1
  32. package/src/table/MRT_TableRoot.tsx +1 -1
  33. 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': {
@@ -2182,7 +2184,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
2182
2184
  : undefined,
2183
2185
  }
2184
2186
  : undefined;
2185
- 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'
2186
2188
  ? columnDefType === 'display'
2187
2189
  ? '0 0.5rem'
2188
2190
  : '0.5rem'
@@ -2222,6 +2224,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
2222
2224
  _b.length,
2223
2225
  ")"))));
2224
2226
  };
2227
+ const Memo_MRT_TableBodyCell = React.memo(MRT_TableBodyCell, (prev, next) => next.cell === prev.cell);
2225
2228
 
2226
2229
  const MRT_TableDetailPanel = ({ row, table }) => {
2227
2230
  const { getVisibleLeafColumns, options: { muiTableBodyRowProps, muiTableDetailPanelProps, renderDetailPanel, }, } = table;
@@ -2232,7 +2235,7 @@ const MRT_TableDetailPanel = ({ row, table }) => {
2232
2235
  ? muiTableDetailPanelProps({ row, table })
2233
2236
  : muiTableDetailPanelProps;
2234
2237
  return (React__default["default"].createElement(material.TableRow, Object.assign({}, tableRowProps),
2235
- 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
2236
2239
  ? tableCellProps.sx(theme)
2237
2240
  : tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx))) }), renderDetailPanel && (React__default["default"].createElement(material.Collapse, { in: row.getIsExpanded() }, renderDetailPanel({ row, table }))))));
2238
2241
  };
@@ -2240,8 +2243,8 @@ const MRT_TableDetailPanel = ({ row, table }) => {
2240
2243
  const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2241
2244
  var _a, _b;
2242
2245
  const theme = material.useTheme();
2243
- const { getIsSomeColumnsPinned, getState, options: { enableRowOrdering, muiTableBodyRowProps, renderDetailPanel }, setHoveredRow, } = table;
2244
- const { draggingRow, hoveredRow } = getState();
2246
+ const { getIsSomeColumnsPinned, getState, options: { enableRowOrdering, memoMode, muiTableBodyRowProps, renderDetailPanel, }, setHoveredRow, } = table;
2247
+ const { draggingColumn, draggingRow, editingCell, editingRow, hoveredRow } = getState();
2245
2248
  const tableRowProps = muiTableBodyRowProps instanceof Function
2246
2249
  ? muiTableBodyRowProps({ row, table })
2247
2250
  : muiTableBodyRowProps;
@@ -2267,7 +2270,7 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2267
2270
  if (virtualRow === null || virtualRow === void 0 ? void 0 : virtualRow.measureRef) {
2268
2271
  virtualRow.measureRef = node;
2269
2272
  }
2270
- } }, 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': {
2271
2274
  backgroundColor: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false && getIsSomeColumnsPinned()
2272
2275
  ? theme.palette.mode === 'dark'
2273
2276
  ? `${material.lighten(theme.palette.background.default, 0.12)}`
@@ -2275,13 +2278,29 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2275
2278
  : undefined,
2276
2279
  } }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
2277
2280
  ? tableRowProps.sx(theme)
2278
- : 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
+ })),
2279
2297
  renderDetailPanel && !row.getIsGrouped() && (React__default["default"].createElement(MRT_TableDetailPanel, { row: row, table: table }))));
2280
2298
  };
2299
+ const Memo_MRT_TableBodyRow = React.memo(MRT_TableBodyRow, (prev, next) => prev.row === next.row);
2281
2300
 
2282
2301
  const MRT_TableBody = ({ table }) => {
2283
2302
  var _a;
2284
- 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;
2285
2304
  const { columnFilters, globalFilter, pagination, sorting } = getState();
2286
2305
  const tableBodyProps = muiTableBodyProps instanceof Function
2287
2306
  ? muiTableBodyProps({ table })
@@ -2365,11 +2384,21 @@ const MRT_TableBody = ({ table }) => {
2365
2384
  const row = enableRowVirtualization
2366
2385
  ? rows[rowOrVirtualRow.index]
2367
2386
  : rowOrVirtualRow;
2368
- 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)));
2369
2397
  }),
2370
2398
  enableRowVirtualization && paddingBottom > 0 && (React__default["default"].createElement("tr", null,
2371
2399
  React__default["default"].createElement("td", { style: { height: `${paddingBottom}px` } })))))));
2372
2400
  };
2401
+ const Memo_MRT_TableBody = React.memo(MRT_TableBody, () => true);
2373
2402
 
2374
2403
  const MRT_TableFooterCell = ({ footer, table }) => {
2375
2404
  var _a, _b, _c;
@@ -2432,7 +2461,7 @@ const MRT_TableFooter = ({ table }) => {
2432
2461
  };
2433
2462
 
2434
2463
  const MRT_Table = ({ table }) => {
2435
- const { getState, options: { enableColumnResizing, enableRowVirtualization, enableStickyHeader, enableTableFooter, enableTableHead, muiTableProps, }, } = table;
2464
+ const { getState, options: { enableColumnResizing, enableRowVirtualization, enableStickyHeader, enableTableFooter, enableTableHead, memoMode, muiTableProps, }, } = table;
2436
2465
  const { isFullScreen } = getState();
2437
2466
  const tableProps = muiTableProps instanceof Function
2438
2467
  ? muiTableProps({ table })
@@ -2441,7 +2470,7 @@ const MRT_Table = ({ table }) => {
2441
2470
  ? tableProps.sx(theme)
2442
2471
  : tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx))) }),
2443
2472
  enableTableHead && React__default["default"].createElement(MRT_TableHead, { table: table }),
2444
- 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 })),
2445
2474
  enableTableFooter && React__default["default"].createElement(MRT_TableFooter, { table: table })));
2446
2475
  };
2447
2476
 
@@ -2491,7 +2520,7 @@ const MRT_TablePaper = ({ table }) => {
2491
2520
  //@ts-ignore
2492
2521
  tablePaperProps.ref.current = ref;
2493
2522
  }
2494
- }, 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
2495
2524
  ? tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.sx(theme)
2496
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
2497
2526
  ? {
@@ -2582,7 +2611,7 @@ const MRT_TableRoot = (props) => {
2582
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' }),
2583
2612
  columnOrder.includes('mrt-row-expand') &&
2584
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' }),
2585
- 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' }),
2586
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' }),
2587
2616
  ].filter(Boolean);
2588
2617
  }, [