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
@@ -45,6 +45,7 @@ export declare const MRT_TableRoot: <TData extends Record<string, any> = {}>(pro
45
45
  icons?: Partial<import("..").MRT_Icons> | undefined;
46
46
  initialState?: Partial<MRT_TableState<TData>> | undefined;
47
47
  localization?: Partial<MRT_Localization> | undefined;
48
+ memoMode?: "cell" | "row" | "table-body" | undefined;
48
49
  muiBottomToolbarProps?: import("@mui/material").ToolbarProps<"div", {}> | (({ table }: {
49
50
  table: MRT_TableInstance<TData>;
50
51
  }) => import("@mui/material").ToolbarProps<"div", {}>) | undefined;
@@ -65,10 +66,10 @@ export declare const MRT_TableRoot: <TData extends Record<string, any> = {}>(pro
65
66
  muiSelectAllCheckboxProps?: import("@mui/material").CheckboxProps | (({ table }: {
66
67
  table: MRT_TableInstance<TData>;
67
68
  }) => import("@mui/material").CheckboxProps) | undefined;
68
- muiSelectCheckboxProps?: import("@mui/material").CheckboxProps | (({ table, row, }: {
69
+ muiSelectCheckboxProps?: import("@mui/material").CheckboxProps | import("@mui/material").RadioProps | (({ table, row, }: {
69
70
  table: MRT_TableInstance<TData>;
70
71
  row: MRT_Row<TData>;
71
- }) => import("@mui/material").CheckboxProps) | undefined;
72
+ }) => import("@mui/material").CheckboxProps | import("@mui/material").RadioProps) | undefined;
72
73
  muiTableBodyCellCopyButtonProps?: import("@mui/material").ButtonProps<"button", {}> | (({ cell, column, row, table, }: {
73
74
  cell: MRT_Cell<TData>;
74
75
  column: MRT_Column<TData>;
@@ -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 {};
@@ -1,8 +1,8 @@
1
- import React, { useMemo, useRef, useState, useCallback, useEffect, Fragment, useLayoutEffect } from 'react';
1
+ import React, { useMemo, useRef, useState, useCallback, useEffect, Fragment, memo, useLayoutEffect } from 'react';
2
2
  import { aggregationFns, filterFns, sortingFns, useReactTable, getCoreRowModel, getExpandedRowModel, getFacetedRowModel, getFilteredRowModel, getGroupedRowModel, getPaginationRowModel, getSortedRowModel } from '@tanstack/react-table';
3
3
  import { ArrowRight, Cancel, CheckBox, ClearAll, Close, DensityLarge, DensityMedium, DensitySmall, DragHandle, DynamicFeed, Edit, ExpandLess, ExpandMore, FilterAlt, FilterAltOff, FilterList, FilterListOff, FullscreenExit, Fullscreen, KeyboardDoubleArrowDown, MoreHoriz, MoreVert, PushPin, RestartAlt, Save, Search, SearchOff, Sort, ViewColumn, VisibilityOff } from '@mui/icons-material';
4
4
  import { rankItem, rankings, compareItems } from '@tanstack/match-sorter-utils';
5
- import { Tooltip, IconButton, Menu, MenuItem, Box, alpha, lighten, FormControlLabel, Switch, Typography, Button, Divider, ListItemIcon, Checkbox, debounce, Collapse, TextField, InputAdornment, LinearProgress, TablePagination, Chip, Alert, AlertTitle, Fade, useMediaQuery, Toolbar, Grow, TableSortLabel, useTheme, TableCell, TableRow, TableHead, darken, Skeleton, TableBody, TableFooter, Table, TableContainer, Paper, Dialog, DialogTitle, DialogContent, Stack, DialogActions } from '@mui/material';
5
+ import { Tooltip, IconButton, Menu, MenuItem, Box, alpha, lighten, FormControlLabel, Switch, Typography, Button, Divider, ListItemIcon, Radio, Checkbox, debounce, Collapse, TextField, InputAdornment, LinearProgress, TablePagination, Chip, Alert, AlertTitle, Fade, useMediaQuery, Toolbar, Grow, TableSortLabel, useTheme, TableCell, TableRow, TableHead, darken, Skeleton, TableBody, TableFooter, Table, TableContainer, Paper, Dialog, DialogTitle, DialogContent, Stack, DialogActions } from '@mui/material';
6
6
  import { useVirtual } from 'react-virtual';
7
7
 
8
8
  /******************************************************************************
@@ -273,7 +273,7 @@ const MRT_ExpandAllButton = ({ table }) => {
273
273
  : getIsSomeRowsExpanded()
274
274
  ? -90
275
275
  : 0}deg)`,
276
- transition: 'transform 0.1s',
276
+ transition: 'transform 150ms',
277
277
  } })))));
278
278
  };
279
279
 
@@ -301,7 +301,7 @@ const MRT_ExpandButton = ({ row, table }) => {
301
301
  : row.getIsExpanded()
302
302
  ? -180
303
303
  : 0}deg)`,
304
- transition: 'transform 0.1s',
304
+ transition: 'transform 150ms',
305
305
  } })))));
306
306
  };
307
307
 
@@ -489,7 +489,7 @@ const MRT_GrabHandleButton = ({ iconButtonProps, onDragEnd, onDragStart, table,
489
489
  var _a;
490
490
  e.stopPropagation();
491
491
  (_a = iconButtonProps === null || iconButtonProps === void 0 ? void 0 : iconButtonProps.onClick) === null || _a === void 0 ? void 0 : _a.call(iconButtonProps, e);
492
- }, 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': {
492
+ }, onDragStart: onDragStart, onDragEnd: onDragEnd, sx: (theme) => (Object.assign({ cursor: 'grab', m: 0, opacity: 0.5, p: '2px', transition: 'all 150ms ease-in-out', '&:hover': {
493
493
  backgroundColor: 'transparent',
494
494
  opacity: 1,
495
495
  }, '&:active': {
@@ -633,7 +633,7 @@ const getCommonCellStyles = ({ column, header, table, tableCellProps, theme, })
633
633
  ? 'sticky'
634
634
  : undefined, right: column.getIsPinned() === 'right'
635
635
  ? `${getTotalRight(table, column)}px`
636
- : undefined, transition: `all ${column.getIsResizing() ? 0 : '0.1s'} ease-in-out` }, ((tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx) instanceof Function
636
+ : undefined, transition: `all ${column.getIsResizing() ? 0 : '150ms'} ease-in-out` }, ((tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx) instanceof Function
637
637
  ? tableCellProps.sx(theme)
638
638
  : 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() }));
639
639
  };
@@ -1007,7 +1007,7 @@ const commonIconButtonStyles = {
1007
1007
  height: '2rem',
1008
1008
  ml: '10px',
1009
1009
  opacity: 0.5,
1010
- transition: 'opacity 0.1s',
1010
+ transition: 'opacity 150ms',
1011
1011
  width: '2rem',
1012
1012
  '&:hover': {
1013
1013
  opacity: 1,
@@ -1038,7 +1038,7 @@ const MRT_ToggleRowActionMenuButton = ({ cell, row, table, }) => {
1038
1038
 
1039
1039
  const MRT_SelectCheckbox = ({ row, selectAll, table }) => {
1040
1040
  var _a;
1041
- const { getState, options: { localization, muiSelectCheckboxProps, muiSelectAllCheckboxProps, selectAllMode, }, } = table;
1041
+ const { getState, options: { localization, enableMultiRowSelection, muiSelectCheckboxProps, muiSelectAllCheckboxProps, selectAllMode, }, } = table;
1042
1042
  const { density } = getState();
1043
1043
  const checkboxProps = !row
1044
1044
  ? muiSelectAllCheckboxProps instanceof Function
@@ -1047,33 +1047,33 @@ const MRT_SelectCheckbox = ({ row, selectAll, table }) => {
1047
1047
  : muiSelectCheckboxProps instanceof Function
1048
1048
  ? muiSelectCheckboxProps({ row, table })
1049
1049
  : muiSelectCheckboxProps;
1050
+ const commonProps = Object.assign(Object.assign({ checked: selectAll
1051
+ ? selectAllMode === 'page'
1052
+ ? table.getIsAllPageRowsSelected()
1053
+ : table.getIsAllRowsSelected()
1054
+ : row === null || row === void 0 ? void 0 : row.getIsSelected(), inputProps: {
1055
+ 'aria-label': selectAll
1056
+ ? localization.toggleSelectAll
1057
+ : localization.toggleSelectRow,
1058
+ }, onChange: row
1059
+ ? row.getToggleSelectedHandler()
1060
+ : selectAllMode === 'all'
1061
+ ? table.getToggleAllRowsSelectedHandler()
1062
+ : table.getToggleAllPageRowsSelectedHandler(), size: (density === 'compact' ? 'small' : 'medium') }, checkboxProps), { onClick: (e) => {
1063
+ var _a;
1064
+ e.stopPropagation();
1065
+ (_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.onClick) === null || _a === void 0 ? void 0 : _a.call(checkboxProps, e);
1066
+ }, 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
1067
+ ? checkboxProps.sx(theme)
1068
+ : checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.sx))), title: undefined });
1050
1069
  return (React.createElement(Tooltip, { arrow: true, enterDelay: 1000, enterNextDelay: 1000, title: (_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.title) !== null && _a !== void 0 ? _a : (selectAll
1051
1070
  ? localization.toggleSelectAll
1052
- : localization.toggleSelectRow) },
1053
- React.createElement(Checkbox, Object.assign({ checked: selectAll
1054
- ? selectAllMode === 'page'
1071
+ : localization.toggleSelectRow) }, enableMultiRowSelection === false ? (React.createElement(Radio, Object.assign({}, commonProps))) : (React.createElement(Checkbox, Object.assign({ indeterminate: selectAll
1072
+ ? table.getIsSomeRowsSelected() &&
1073
+ !(selectAllMode === 'page'
1055
1074
  ? table.getIsAllPageRowsSelected()
1056
- : table.getIsAllRowsSelected()
1057
- : row === null || row === void 0 ? void 0 : row.getIsSelected(), indeterminate: selectAll
1058
- ? table.getIsSomeRowsSelected() &&
1059
- !(selectAllMode === 'page'
1060
- ? table.getIsAllPageRowsSelected()
1061
- : table.getIsAllRowsSelected())
1062
- : row === null || row === void 0 ? void 0 : row.getIsSomeSelected(), 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 }))));
1075
+ : table.getIsAllRowsSelected())
1076
+ : row === null || row === void 0 ? void 0 : row.getIsSomeSelected() }, commonProps)))));
1077
1077
  };
1078
1078
 
1079
1079
  const MRT_GlobalFilterTextField = ({ table, }) => {
@@ -1336,7 +1336,7 @@ const commonToolbarStyles = ({ theme }) => ({
1336
1336
  minHeight: '3.5rem',
1337
1337
  overflow: 'hidden',
1338
1338
  p: '0 !important',
1339
- transition: 'all 0.1s ease-in-out',
1339
+ transition: 'all 150ms ease-in-out',
1340
1340
  zIndex: 1,
1341
1341
  });
1342
1342
  const MRT_TopToolbar = ({ table }) => {
@@ -1446,13 +1446,13 @@ const MRT_TableHeadCellColumnActionsButton = ({ header, table, }) => {
1446
1446
  const iconButtonProps = Object.assign(Object.assign({}, mTableHeadCellColumnActionsButtonProps), mcTableHeadCellColumnActionsButtonProps);
1447
1447
  return (React.createElement(React.Fragment, null,
1448
1448
  React.createElement(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 },
1449
- React.createElement(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': {
1449
+ React.createElement(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': {
1450
1450
  opacity: 1,
1451
1451
  } }, ((iconButtonProps === null || iconButtonProps === void 0 ? void 0 : iconButtonProps.sx) instanceof Function
1452
1452
  ? iconButtonProps.sx(theme)
1453
1453
  : iconButtonProps === null || iconButtonProps === void 0 ? void 0 : iconButtonProps.sx))), title: undefined }),
1454
1454
  React.createElement(MoreVertIcon, null))),
1455
- React.createElement(MRT_ColumnActionMenu, { anchorEl: anchorEl, header: header, setAnchorEl: setAnchorEl, table: table })));
1455
+ anchorEl && (React.createElement(MRT_ColumnActionMenu, { anchorEl: anchorEl, header: header, setAnchorEl: setAnchorEl, table: table }))));
1456
1456
  };
1457
1457
 
1458
1458
  const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
@@ -1790,7 +1790,9 @@ const MRT_TableHeadCellResizeHandle = ({ header, table }) => {
1790
1790
  position: 'absolute',
1791
1791
  right: '1px',
1792
1792
  touchAction: 'none',
1793
- transition: column.getIsResizing() ? undefined : 'all 0.1s ease-in-out',
1793
+ transition: column.getIsResizing()
1794
+ ? undefined
1795
+ : 'all 150ms ease-in-out',
1794
1796
  userSelect: 'none',
1795
1797
  zIndex: 4,
1796
1798
  '&:active': {
@@ -2174,7 +2176,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
2174
2176
  : undefined,
2175
2177
  }
2176
2178
  : undefined;
2177
- return (React.createElement(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'
2179
+ return (React.createElement(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'
2178
2180
  ? columnDefType === 'display'
2179
2181
  ? '0 0.5rem'
2180
2182
  : '0.5rem'
@@ -2214,6 +2216,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
2214
2216
  _b.length,
2215
2217
  ")"))));
2216
2218
  };
2219
+ const Memo_MRT_TableBodyCell = memo(MRT_TableBodyCell, (prev, next) => next.cell === prev.cell);
2217
2220
 
2218
2221
  const MRT_TableDetailPanel = ({ row, table }) => {
2219
2222
  const { getVisibleLeafColumns, options: { muiTableBodyRowProps, muiTableDetailPanelProps, renderDetailPanel, }, } = table;
@@ -2224,7 +2227,7 @@ const MRT_TableDetailPanel = ({ row, table }) => {
2224
2227
  ? muiTableDetailPanelProps({ row, table })
2225
2228
  : muiTableDetailPanelProps;
2226
2229
  return (React.createElement(TableRow, Object.assign({}, tableRowProps),
2227
- React.createElement(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
2230
+ React.createElement(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
2228
2231
  ? tableCellProps.sx(theme)
2229
2232
  : tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx))) }), renderDetailPanel && (React.createElement(Collapse, { in: row.getIsExpanded() }, renderDetailPanel({ row, table }))))));
2230
2233
  };
@@ -2232,8 +2235,8 @@ const MRT_TableDetailPanel = ({ row, table }) => {
2232
2235
  const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2233
2236
  var _a, _b;
2234
2237
  const theme = useTheme();
2235
- const { getIsSomeColumnsPinned, getState, options: { enableRowOrdering, muiTableBodyRowProps, renderDetailPanel }, setHoveredRow, } = table;
2236
- const { draggingRow, hoveredRow } = getState();
2238
+ const { getIsSomeColumnsPinned, getState, options: { enableRowOrdering, memoMode, muiTableBodyRowProps, renderDetailPanel, }, setHoveredRow, } = table;
2239
+ const { draggingColumn, draggingRow, editingCell, editingRow, hoveredRow } = getState();
2237
2240
  const tableRowProps = muiTableBodyRowProps instanceof Function
2238
2241
  ? muiTableBodyRowProps({ row, table })
2239
2242
  : muiTableBodyRowProps;
@@ -2259,7 +2262,7 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2259
2262
  if (virtualRow === null || virtualRow === void 0 ? void 0 : virtualRow.measureRef) {
2260
2263
  virtualRow.measureRef = node;
2261
2264
  }
2262
- } }, tableRowProps, { sx: (theme) => (Object.assign(Object.assign({ backgroundColor: 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': {
2265
+ } }, tableRowProps, { sx: (theme) => (Object.assign(Object.assign({ backgroundColor: 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': {
2263
2266
  backgroundColor: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false && getIsSomeColumnsPinned()
2264
2267
  ? theme.palette.mode === 'dark'
2265
2268
  ? `${lighten(theme.palette.background.default, 0.12)}`
@@ -2267,13 +2270,29 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2267
2270
  : undefined,
2268
2271
  } }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
2269
2272
  ? tableRowProps.sx(theme)
2270
- : 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.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 })))),
2273
+ : 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) => {
2274
+ const props = {
2275
+ cell,
2276
+ enableHover: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false,
2277
+ key: cell.id,
2278
+ rowIndex,
2279
+ rowRef,
2280
+ table,
2281
+ };
2282
+ return memoMode === 'cell' &&
2283
+ cell.column.columnDef.columnDefType === 'data' &&
2284
+ !draggingColumn &&
2285
+ !draggingRow &&
2286
+ (editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) !== cell.id &&
2287
+ (editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) !== row.id ? (React.createElement(Memo_MRT_TableBodyCell, Object.assign({}, props))) : (React.createElement(MRT_TableBodyCell, Object.assign({}, props)));
2288
+ })),
2271
2289
  renderDetailPanel && !row.getIsGrouped() && (React.createElement(MRT_TableDetailPanel, { row: row, table: table }))));
2272
2290
  };
2291
+ const Memo_MRT_TableBodyRow = memo(MRT_TableBodyRow, (prev, next) => prev.row === next.row);
2273
2292
 
2274
2293
  const MRT_TableBody = ({ table }) => {
2275
2294
  var _a;
2276
- const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, localization, manualFiltering, manualSorting, muiTableBodyProps, virtualizerInstanceRef, virtualizerProps, }, refs: { tableContainerRef, tablePaperRef }, } = table;
2295
+ const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, localization, manualFiltering, manualSorting, memoMode, muiTableBodyProps, virtualizerInstanceRef, virtualizerProps, }, refs: { tableContainerRef, tablePaperRef }, } = table;
2277
2296
  const { columnFilters, globalFilter, pagination, sorting } = getState();
2278
2297
  const tableBodyProps = muiTableBodyProps instanceof Function
2279
2298
  ? muiTableBodyProps({ table })
@@ -2357,11 +2376,21 @@ const MRT_TableBody = ({ table }) => {
2357
2376
  const row = enableRowVirtualization
2358
2377
  ? rows[rowOrVirtualRow.index]
2359
2378
  : rowOrVirtualRow;
2360
- return (React.createElement(MRT_TableBodyRow, { key: row.id, row: row, rowIndex: enableRowVirtualization ? rowOrVirtualRow.index : rowIndex, table: table, virtualRow: enableRowVirtualization ? rowOrVirtualRow : null }));
2379
+ const props = {
2380
+ key: row.id,
2381
+ row,
2382
+ rowIndex: enableRowVirtualization
2383
+ ? rowOrVirtualRow.index
2384
+ : rowIndex,
2385
+ table,
2386
+ virtualRow: enableRowVirtualization ? rowOrVirtualRow : null,
2387
+ };
2388
+ return memoMode === 'row' ? (React.createElement(Memo_MRT_TableBodyRow, Object.assign({}, props))) : (React.createElement(MRT_TableBodyRow, Object.assign({}, props)));
2361
2389
  }),
2362
2390
  enableRowVirtualization && paddingBottom > 0 && (React.createElement("tr", null,
2363
2391
  React.createElement("td", { style: { height: `${paddingBottom}px` } })))))));
2364
2392
  };
2393
+ const Memo_MRT_TableBody = memo(MRT_TableBody, () => true);
2365
2394
 
2366
2395
  const MRT_TableFooterCell = ({ footer, table }) => {
2367
2396
  var _a, _b, _c;
@@ -2424,7 +2453,7 @@ const MRT_TableFooter = ({ table }) => {
2424
2453
  };
2425
2454
 
2426
2455
  const MRT_Table = ({ table }) => {
2427
- const { getState, options: { enableColumnResizing, enableRowVirtualization, enableStickyHeader, enableTableFooter, enableTableHead, muiTableProps, }, } = table;
2456
+ const { getState, options: { enableColumnResizing, enableRowVirtualization, enableStickyHeader, enableTableFooter, enableTableHead, memoMode, muiTableProps, }, } = table;
2428
2457
  const { isFullScreen } = getState();
2429
2458
  const tableProps = muiTableProps instanceof Function
2430
2459
  ? muiTableProps({ table })
@@ -2433,7 +2462,7 @@ const MRT_Table = ({ table }) => {
2433
2462
  ? tableProps.sx(theme)
2434
2463
  : tableProps === null || tableProps === void 0 ? void 0 : tableProps.sx))) }),
2435
2464
  enableTableHead && React.createElement(MRT_TableHead, { table: table }),
2436
- React.createElement(MRT_TableBody, { table: table }),
2465
+ memoMode === 'table-body' ? (React.createElement(Memo_MRT_TableBody, { table: table })) : (React.createElement(MRT_TableBody, { table: table })),
2437
2466
  enableTableFooter && React.createElement(MRT_TableFooter, { table: table })));
2438
2467
  };
2439
2468
 
@@ -2483,7 +2512,7 @@ const MRT_TablePaper = ({ table }) => {
2483
2512
  //@ts-ignore
2484
2513
  tablePaperProps.ref.current = ref;
2485
2514
  }
2486
- }, sx: (theme) => (Object.assign({ transition: 'all 0.1s ease-in-out' }, ((tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.sx) instanceof Function
2515
+ }, sx: (theme) => (Object.assign({ transition: 'all 150ms ease-in-out' }, ((tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.sx) instanceof Function
2487
2516
  ? tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.sx(theme)
2488
2517
  : tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.sx))), style: Object.assign(Object.assign({}, tablePaperProps === null || tablePaperProps === void 0 ? void 0 : tablePaperProps.style), (isFullScreen
2489
2518
  ? {
@@ -2574,7 +2603,7 @@ const MRT_TableRoot = (props) => {
2574
2603
  columnOrder.includes('mrt-row-actions') && Object.assign(Object.assign(Object.assign({ Cell: ({ cell, row }) => (React.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' }),
2575
2604
  columnOrder.includes('mrt-row-expand') &&
2576
2605
  showExpandColumn(props, grouping) && Object.assign(Object.assign(Object.assign({ Cell: ({ row }) => (React.createElement(MRT_ExpandButton, { row: row, table: table })), Header: () => props.enableExpandAll ? (React.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' }),
2577
- columnOrder.includes('mrt-row-select') && Object.assign(Object.assign(Object.assign({ Cell: ({ row }) => (React.createElement(MRT_SelectCheckbox, { row: row, table: table })), Header: () => props.enableSelectAll ? (React.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' }),
2606
+ columnOrder.includes('mrt-row-select') && Object.assign(Object.assign(Object.assign({ Cell: ({ row }) => (React.createElement(MRT_SelectCheckbox, { row: row, table: table })), Header: () => props.enableSelectAll && props.enableMultiRowSelection ? (React.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' }),
2578
2607
  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' }),
2579
2608
  ].filter(Boolean);
2580
2609
  }, [