material-react-table 2.0.0-beta.2 → 2.0.0-beta.4

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 (162) hide show
  1. package/dist/cjs/index.js +417 -410
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/body/MRT_TableBody.d.ts +4 -3
  4. package/dist/cjs/types/body/MRT_TableBodyCell.d.ts +5 -5
  5. package/dist/cjs/types/body/MRT_TableBodyRowGrabHandle.d.ts +3 -2
  6. package/dist/cjs/types/body/MRT_TableBodyRowPinButton.d.ts +3 -2
  7. package/dist/cjs/types/body/MRT_TableDetailPanel.d.ts +3 -2
  8. package/dist/cjs/types/buttons/MRT_ColumnPinningButtons.d.ts +3 -2
  9. package/dist/cjs/types/buttons/MRT_CopyButton.d.ts +3 -4
  10. package/dist/cjs/types/buttons/MRT_EditActionButtons.d.ts +3 -2
  11. package/dist/cjs/types/buttons/MRT_ExpandAllButton.d.ts +3 -2
  12. package/dist/cjs/types/buttons/MRT_ExpandButton.d.ts +2 -1
  13. package/dist/cjs/types/buttons/MRT_GrabHandleButton.d.ts +2 -2
  14. package/dist/cjs/types/buttons/MRT_RowPinButton.d.ts +3 -2
  15. package/dist/cjs/types/buttons/MRT_ToggleRowActionMenuButton.d.ts +3 -2
  16. package/dist/cjs/types/footer/MRT_TableFooter.d.ts +3 -2
  17. package/dist/cjs/types/footer/MRT_TableFooterCell.d.ts +3 -2
  18. package/dist/cjs/types/footer/MRT_TableFooterRow.d.ts +3 -2
  19. package/dist/cjs/types/head/MRT_TableHead.d.ts +3 -2
  20. package/dist/cjs/types/head/MRT_TableHeadCell.d.ts +3 -2
  21. package/dist/cjs/types/head/MRT_TableHeadCellColumnActionsButton.d.ts +3 -2
  22. package/dist/cjs/types/head/MRT_TableHeadCellFilterContainer.d.ts +3 -2
  23. package/dist/cjs/types/head/MRT_TableHeadCellFilterLabel.d.ts +3 -2
  24. package/dist/cjs/types/head/MRT_TableHeadCellGrabHandle.d.ts +3 -2
  25. package/dist/cjs/types/head/MRT_TableHeadCellResizeHandle.d.ts +3 -2
  26. package/dist/cjs/types/head/MRT_TableHeadCellSortLabel.d.ts +3 -2
  27. package/dist/cjs/types/head/MRT_TableHeadRow.d.ts +3 -2
  28. package/dist/cjs/types/inputs/MRT_EditCellTextField.d.ts +3 -2
  29. package/dist/cjs/types/inputs/MRT_FilterCheckbox.d.ts +3 -2
  30. package/dist/cjs/types/inputs/MRT_FilterRangeFields.d.ts +3 -2
  31. package/dist/cjs/types/inputs/MRT_FilterRangeSlider.d.ts +3 -2
  32. package/dist/cjs/types/inputs/MRT_FilterTextField.d.ts +3 -2
  33. package/dist/cjs/types/inputs/MRT_GlobalFilterTextField.d.ts +3 -2
  34. package/dist/cjs/types/inputs/MRT_SelectCheckbox.d.ts +3 -2
  35. package/dist/cjs/types/menus/MRT_ColumnActionMenu.d.ts +3 -2
  36. package/dist/cjs/types/menus/MRT_FilterOptionMenu.d.ts +3 -2
  37. package/dist/cjs/types/menus/MRT_RowActionMenu.d.ts +3 -2
  38. package/dist/cjs/types/menus/MRT_ShowHideColumnsMenu.d.ts +3 -2
  39. package/dist/cjs/types/menus/MRT_ShowHideColumnsMenuItems.d.ts +3 -2
  40. package/dist/cjs/types/modals/MRT_EditRowModal.d.ts +3 -2
  41. package/dist/cjs/types/table/MRT_Table.d.ts +3 -2
  42. package/dist/cjs/types/table/MRT_TableContainer.d.ts +3 -2
  43. package/dist/cjs/types/table/MRT_TableLoadingOverlay.d.ts +7 -0
  44. package/dist/cjs/types/table/MRT_TablePaper.d.ts +3 -2
  45. package/dist/cjs/types/table/index.d.ts +1 -0
  46. package/dist/cjs/types/toolbar/MRT_BottomToolbar.d.ts +3 -2
  47. package/dist/cjs/types/toolbar/MRT_LinearProgressBar.d.ts +3 -2
  48. package/dist/cjs/types/toolbar/MRT_TablePagination.d.ts +6 -2
  49. package/dist/cjs/types/toolbar/MRT_ToolbarAlertBanner.d.ts +3 -2
  50. package/dist/cjs/types/toolbar/MRT_ToolbarDropZone.d.ts +3 -2
  51. package/dist/cjs/types/toolbar/MRT_ToolbarInternalButtons.d.ts +3 -2
  52. package/dist/cjs/types/toolbar/MRT_TopToolbar.d.ts +1 -2
  53. package/dist/cjs/types/types.d.ts +3 -3
  54. package/dist/esm/material-react-table.esm.js +415 -408
  55. package/dist/esm/material-react-table.esm.js.map +1 -1
  56. package/dist/esm/types/body/MRT_TableBody.d.ts +4 -3
  57. package/dist/esm/types/body/MRT_TableBodyCell.d.ts +5 -5
  58. package/dist/esm/types/body/MRT_TableBodyRowGrabHandle.d.ts +3 -2
  59. package/dist/esm/types/body/MRT_TableBodyRowPinButton.d.ts +3 -2
  60. package/dist/esm/types/body/MRT_TableDetailPanel.d.ts +3 -2
  61. package/dist/esm/types/buttons/MRT_ColumnPinningButtons.d.ts +3 -2
  62. package/dist/esm/types/buttons/MRT_CopyButton.d.ts +3 -4
  63. package/dist/esm/types/buttons/MRT_EditActionButtons.d.ts +3 -2
  64. package/dist/esm/types/buttons/MRT_ExpandAllButton.d.ts +3 -2
  65. package/dist/esm/types/buttons/MRT_ExpandButton.d.ts +2 -1
  66. package/dist/esm/types/buttons/MRT_GrabHandleButton.d.ts +2 -2
  67. package/dist/esm/types/buttons/MRT_RowPinButton.d.ts +3 -2
  68. package/dist/esm/types/buttons/MRT_ToggleRowActionMenuButton.d.ts +3 -2
  69. package/dist/esm/types/footer/MRT_TableFooter.d.ts +3 -2
  70. package/dist/esm/types/footer/MRT_TableFooterCell.d.ts +3 -2
  71. package/dist/esm/types/footer/MRT_TableFooterRow.d.ts +3 -2
  72. package/dist/esm/types/head/MRT_TableHead.d.ts +3 -2
  73. package/dist/esm/types/head/MRT_TableHeadCell.d.ts +3 -2
  74. package/dist/esm/types/head/MRT_TableHeadCellColumnActionsButton.d.ts +3 -2
  75. package/dist/esm/types/head/MRT_TableHeadCellFilterContainer.d.ts +3 -2
  76. package/dist/esm/types/head/MRT_TableHeadCellFilterLabel.d.ts +3 -2
  77. package/dist/esm/types/head/MRT_TableHeadCellGrabHandle.d.ts +3 -2
  78. package/dist/esm/types/head/MRT_TableHeadCellResizeHandle.d.ts +3 -2
  79. package/dist/esm/types/head/MRT_TableHeadCellSortLabel.d.ts +3 -2
  80. package/dist/esm/types/head/MRT_TableHeadRow.d.ts +3 -2
  81. package/dist/esm/types/inputs/MRT_EditCellTextField.d.ts +3 -2
  82. package/dist/esm/types/inputs/MRT_FilterCheckbox.d.ts +3 -2
  83. package/dist/esm/types/inputs/MRT_FilterRangeFields.d.ts +3 -2
  84. package/dist/esm/types/inputs/MRT_FilterRangeSlider.d.ts +3 -2
  85. package/dist/esm/types/inputs/MRT_FilterTextField.d.ts +3 -2
  86. package/dist/esm/types/inputs/MRT_GlobalFilterTextField.d.ts +3 -2
  87. package/dist/esm/types/inputs/MRT_SelectCheckbox.d.ts +3 -2
  88. package/dist/esm/types/menus/MRT_ColumnActionMenu.d.ts +3 -2
  89. package/dist/esm/types/menus/MRT_FilterOptionMenu.d.ts +3 -2
  90. package/dist/esm/types/menus/MRT_RowActionMenu.d.ts +3 -2
  91. package/dist/esm/types/menus/MRT_ShowHideColumnsMenu.d.ts +3 -2
  92. package/dist/esm/types/menus/MRT_ShowHideColumnsMenuItems.d.ts +3 -2
  93. package/dist/esm/types/modals/MRT_EditRowModal.d.ts +3 -2
  94. package/dist/esm/types/table/MRT_Table.d.ts +3 -2
  95. package/dist/esm/types/table/MRT_TableContainer.d.ts +3 -2
  96. package/dist/esm/types/table/MRT_TableLoadingOverlay.d.ts +7 -0
  97. package/dist/esm/types/table/MRT_TablePaper.d.ts +3 -2
  98. package/dist/esm/types/table/index.d.ts +1 -0
  99. package/dist/esm/types/toolbar/MRT_BottomToolbar.d.ts +3 -2
  100. package/dist/esm/types/toolbar/MRT_LinearProgressBar.d.ts +3 -2
  101. package/dist/esm/types/toolbar/MRT_TablePagination.d.ts +6 -2
  102. package/dist/esm/types/toolbar/MRT_ToolbarAlertBanner.d.ts +3 -2
  103. package/dist/esm/types/toolbar/MRT_ToolbarDropZone.d.ts +3 -2
  104. package/dist/esm/types/toolbar/MRT_ToolbarInternalButtons.d.ts +3 -2
  105. package/dist/esm/types/toolbar/MRT_TopToolbar.d.ts +1 -2
  106. package/dist/esm/types/types.d.ts +3 -3
  107. package/dist/index.d.ts +130 -119
  108. package/package.json +1 -1
  109. package/src/body/MRT_TableBody.tsx +8 -4
  110. package/src/body/MRT_TableBodyCell.tsx +60 -61
  111. package/src/body/MRT_TableBodyRow.tsx +3 -3
  112. package/src/body/MRT_TableBodyRowGrabHandle.tsx +10 -5
  113. package/src/body/MRT_TableBodyRowPinButton.tsx +12 -5
  114. package/src/body/MRT_TableDetailPanel.tsx +11 -7
  115. package/src/buttons/MRT_ColumnPinningButtons.tsx +12 -3
  116. package/src/buttons/MRT_CopyButton.tsx +6 -8
  117. package/src/buttons/MRT_EditActionButtons.tsx +9 -3
  118. package/src/buttons/MRT_ExpandAllButton.tsx +9 -5
  119. package/src/buttons/MRT_ExpandButton.tsx +2 -2
  120. package/src/buttons/MRT_GrabHandleButton.tsx +8 -5
  121. package/src/buttons/MRT_RowPinButton.tsx +8 -4
  122. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +7 -3
  123. package/src/column.utils.ts +1 -1
  124. package/src/footer/MRT_TableFooter.tsx +9 -5
  125. package/src/footer/MRT_TableFooterCell.tsx +12 -12
  126. package/src/footer/MRT_TableFooterRow.tsx +10 -6
  127. package/src/head/MRT_TableHead.tsx +8 -4
  128. package/src/head/MRT_TableHeadCell.tsx +93 -84
  129. package/src/head/MRT_TableHeadCellColumnActionsButton.tsx +5 -3
  130. package/src/head/MRT_TableHeadCellFilterContainer.tsx +4 -2
  131. package/src/head/MRT_TableHeadCellFilterLabel.tsx +8 -4
  132. package/src/head/MRT_TableHeadCellGrabHandle.tsx +4 -1
  133. package/src/head/MRT_TableHeadCellResizeHandle.tsx +7 -4
  134. package/src/head/MRT_TableHeadCellSortLabel.tsx +28 -12
  135. package/src/head/MRT_TableHeadRow.tsx +10 -6
  136. package/src/hooks/useMRT_DisplayColumns.tsx +2 -1
  137. package/src/inputs/MRT_EditCellTextField.tsx +16 -2
  138. package/src/inputs/MRT_FilterCheckbox.tsx +4 -2
  139. package/src/inputs/MRT_FilterRangeFields.tsx +13 -3
  140. package/src/inputs/MRT_FilterRangeSlider.tsx +4 -2
  141. package/src/inputs/MRT_FilterTextField.tsx +3 -1
  142. package/src/inputs/MRT_GlobalFilterTextField.tsx +9 -5
  143. package/src/inputs/MRT_SelectCheckbox.tsx +8 -4
  144. package/src/menus/MRT_ColumnActionMenu.tsx +4 -2
  145. package/src/menus/MRT_FilterOptionMenu.tsx +4 -2
  146. package/src/menus/MRT_RowActionMenu.tsx +4 -2
  147. package/src/menus/MRT_ShowHideColumnsMenu.tsx +4 -2
  148. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +6 -3
  149. package/src/modals/MRT_EditRowModal.tsx +5 -3
  150. package/src/table/MRT_Table.tsx +25 -31
  151. package/src/table/MRT_TableContainer.tsx +15 -44
  152. package/src/table/MRT_TableLoadingOverlay.tsx +53 -0
  153. package/src/table/MRT_TablePaper.tsx +7 -3
  154. package/src/table/index.ts +1 -0
  155. package/src/toolbar/MRT_BottomToolbar.tsx +9 -7
  156. package/src/toolbar/MRT_LinearProgressBar.tsx +14 -8
  157. package/src/toolbar/MRT_TablePagination.tsx +18 -8
  158. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +9 -5
  159. package/src/toolbar/MRT_ToolbarDropZone.tsx +6 -2
  160. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +8 -4
  161. package/src/toolbar/MRT_TopToolbar.tsx +5 -8
  162. package/src/types.ts +5 -5
@@ -7,9 +7,8 @@ import {
7
7
  useMemo,
8
8
  useState,
9
9
  } from 'react';
10
- import { type VirtualItem } from '@tanstack/react-virtual';
11
10
  import Skeleton from '@mui/material/Skeleton';
12
- import TableCell from '@mui/material/TableCell';
11
+ import TableCell, { type TableCellProps } from '@mui/material/TableCell';
13
12
  import { useTheme } from '@mui/material/styles';
14
13
  import { MRT_TableBodyCellValue } from './MRT_TableBodyCellValue';
15
14
  import { MRT_TableBodyRowGrabHandle } from './MRT_TableBodyRowGrabHandle';
@@ -27,14 +26,14 @@ import {
27
26
  type MRT_TableInstance,
28
27
  } from '../types';
29
28
 
30
- interface Props<TData extends MRT_RowData> {
29
+ interface Props<TData extends MRT_RowData> extends TableCellProps {
31
30
  cell: MRT_Cell<TData>;
32
31
  measureElement?: (element: HTMLTableCellElement) => void;
33
32
  numRows?: number;
34
33
  rowIndex: number;
35
34
  rowRef: RefObject<HTMLTableRowElement>;
36
35
  table: MRT_TableInstance<TData>;
37
- virtualCell?: VirtualItem;
36
+ virtualIndex?: number;
38
37
  }
39
38
 
40
39
  export const MRT_TableBodyCell = <TData extends MRT_RowData>({
@@ -44,7 +43,8 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
44
43
  rowIndex,
45
44
  rowRef,
46
45
  table,
47
- virtualCell,
46
+ virtualIndex,
47
+ ...rest
48
48
  }: Props<TData>) => {
49
49
  const theme = useTheme();
50
50
  const {
@@ -83,19 +83,11 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
83
83
  const { columnDef } = column;
84
84
  const { columnDefType } = columnDef;
85
85
 
86
+ const args = { cell, column, row, table };
86
87
  const tableCellProps = {
87
- ...parseFromValuesOrFunc(muiTableBodyCellProps, {
88
- cell,
89
- column,
90
- row,
91
- table,
92
- }),
93
- ...parseFromValuesOrFunc(columnDef.muiTableBodyCellProps, {
94
- cell,
95
- column,
96
- row,
97
- table,
98
- }),
88
+ ...parseFromValuesOrFunc(muiTableBodyCellProps, args),
89
+ ...parseFromValuesOrFunc(columnDef.muiTableBodyCellProps, args),
90
+ ...rest,
99
91
  };
100
92
 
101
93
  const skeletonProps = parseFromValuesOrFunc(muiSkeletonProps, {
@@ -213,7 +205,7 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
213
205
 
214
206
  return (
215
207
  <TableCell
216
- data-index={virtualCell?.index}
208
+ data-index={virtualIndex}
217
209
  ref={(node: HTMLTableCellElement) => {
218
210
  if (node) {
219
211
  measureElement?.(node);
@@ -224,9 +216,10 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
224
216
  onDragEnter={handleDragEnter}
225
217
  sx={(theme) => ({
226
218
  '&:hover': {
227
- outline: ['cell', 'table'].includes(editDisplayMode ?? '')
228
- ? `1px solid ${theme.palette.text.secondary}`
229
- : undefined,
219
+ outline:
220
+ ['cell', 'table'].includes(editDisplayMode ?? '') && isEditable
221
+ ? `1px solid ${theme.palette.text.secondary}`
222
+ : undefined,
230
223
  outlineOffset: '-1px',
231
224
  textOverflow: 'clip',
232
225
  },
@@ -274,47 +267,53 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
274
267
  ...draggingBorders,
275
268
  })}
276
269
  >
277
- <>
278
- {cell.getIsPlaceholder() ? (
279
- columnDef.PlaceholderCell?.({ cell, column, row, table }) ?? null
280
- ) : isLoading || showSkeletons ? (
281
- <Skeleton
282
- animation="wave"
283
- height={20}
284
- width={skeletonWidth}
285
- {...skeletonProps}
286
- />
287
- ) : enableRowNumbers &&
288
- rowNumberMode === 'static' &&
289
- column.id === 'mrt-row-numbers' ? (
290
- rowIndex + 1
291
- ) : column.id === 'mrt-row-drag' ? (
292
- <MRT_TableBodyRowGrabHandle row={row} rowRef={rowRef} table={table} />
293
- ) : columnDefType === 'display' &&
294
- (column.id === 'mrt-row-select' ||
295
- column.id === 'mrt-row-expand' ||
296
- !row.getIsGrouped()) ? (
297
- columnDef.Cell?.({
298
- cell,
299
- column,
300
- renderedCellValue: cell.renderValue() as any,
301
- row,
302
- table,
303
- })
304
- ) : isCreating || isEditing ? (
305
- <MRT_EditCellTextField cell={cell} table={table} />
306
- ) : (enableClickToCopy || columnDef.enableClickToCopy) &&
307
- columnDef.enableClickToCopy !== false ? (
308
- <MRT_CopyButton cell={cell} table={table}>
270
+ {tableCellProps.children ?? (
271
+ <>
272
+ {cell.getIsPlaceholder() ? (
273
+ columnDef.PlaceholderCell?.({ cell, column, row, table }) ?? null
274
+ ) : showSkeletons !== false && (isLoading || showSkeletons) ? (
275
+ <Skeleton
276
+ animation="wave"
277
+ height={20}
278
+ width={skeletonWidth}
279
+ {...skeletonProps}
280
+ />
281
+ ) : enableRowNumbers &&
282
+ rowNumberMode === 'static' &&
283
+ column.id === 'mrt-row-numbers' ? (
284
+ rowIndex + 1
285
+ ) : column.id === 'mrt-row-drag' ? (
286
+ <MRT_TableBodyRowGrabHandle
287
+ row={row}
288
+ rowRef={rowRef}
289
+ table={table}
290
+ />
291
+ ) : columnDefType === 'display' &&
292
+ (column.id === 'mrt-row-select' ||
293
+ column.id === 'mrt-row-expand' ||
294
+ !row.getIsGrouped()) ? (
295
+ columnDef.Cell?.({
296
+ cell,
297
+ column,
298
+ renderedCellValue: cell.renderValue() as any,
299
+ row,
300
+ table,
301
+ })
302
+ ) : isCreating || isEditing ? (
303
+ <MRT_EditCellTextField cell={cell} table={table} />
304
+ ) : (enableClickToCopy || columnDef.enableClickToCopy) &&
305
+ columnDef.enableClickToCopy !== false ? (
306
+ <MRT_CopyButton cell={cell} table={table}>
307
+ <MRT_TableBodyCellValue cell={cell} table={table} />
308
+ </MRT_CopyButton>
309
+ ) : (
309
310
  <MRT_TableBodyCellValue cell={cell} table={table} />
310
- </MRT_CopyButton>
311
- ) : (
312
- <MRT_TableBodyCellValue cell={cell} table={table} />
313
- )}
314
- {cell.getIsGrouped() && !columnDef.GroupedCell && (
315
- <> ({row.subRows?.length})</>
316
- )}
317
- </>
311
+ )}
312
+ {cell.getIsGrouped() && !columnDef.GroupedCell && (
313
+ <> ({row.subRows?.length})</>
314
+ )}
315
+ </>
316
+ )}
318
317
  </TableCell>
319
318
  );
320
319
  };
@@ -162,7 +162,7 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
162
162
  boxSizing: 'border-box',
163
163
  display: layoutMode?.startsWith('grid') ? 'flex' : undefined,
164
164
  opacity: isPinned
165
- ? 0.98
165
+ ? 0.97
166
166
  : draggingRow?.id === row.id || hoveredRow?.id === row.id
167
167
  ? 0.5
168
168
  : 1,
@@ -209,8 +209,8 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
209
209
  rowIndex,
210
210
  rowRef,
211
211
  table,
212
- virtualCell: columnVirtualizer
213
- ? (cellOrVirtualCell as VirtualItem)
212
+ virtualIndex: columnVirtualizer
213
+ ? (cellOrVirtualCell as VirtualItem).index
214
214
  : undefined,
215
215
  };
216
216
  return cell ? (
@@ -1,4 +1,5 @@
1
1
  import { type DragEvent, type RefObject } from 'react';
2
+ import { type IconButtonProps } from '@mui/material/IconButton';
2
3
  import { MRT_GrabHandleButton } from '../buttons/MRT_GrabHandleButton';
3
4
  import { parseFromValuesOrFunc } from '../column.utils';
4
5
  import {
@@ -7,7 +8,7 @@ import {
7
8
  type MRT_TableInstance,
8
9
  } from '../types';
9
10
 
10
- interface Props<TData extends MRT_RowData> {
11
+ interface Props<TData extends MRT_RowData> extends IconButtonProps {
11
12
  row: MRT_Row<TData>;
12
13
  rowRef: RefObject<HTMLTableRowElement>;
13
14
  table: MRT_TableInstance<TData>;
@@ -17,15 +18,19 @@ export const MRT_TableBodyRowGrabHandle = <TData extends MRT_RowData>({
17
18
  row,
18
19
  rowRef,
19
20
  table,
21
+ ...rest
20
22
  }: Props<TData>) => {
21
23
  const {
22
24
  options: { muiRowDragHandleProps },
23
25
  } = table;
24
26
 
25
- const iconButtonProps = parseFromValuesOrFunc(muiRowDragHandleProps, {
26
- row,
27
- table,
28
- });
27
+ const iconButtonProps = {
28
+ ...parseFromValuesOrFunc(muiRowDragHandleProps, {
29
+ row,
30
+ table,
31
+ }),
32
+ ...rest,
33
+ };
29
34
 
30
35
  const handleDragStart = (event: DragEvent<HTMLButtonElement>) => {
31
36
  iconButtonProps?.onDragStart?.(event);
@@ -1,4 +1,5 @@
1
1
  import Box from '@mui/material/Box';
2
+ import { type IconButtonProps } from '@mui/material/IconButton';
2
3
  import { MRT_RowPinButton } from '../buttons/MRT_RowPinButton';
3
4
  import { parseFromValuesOrFunc } from '../column.utils';
4
5
  import {
@@ -7,7 +8,7 @@ import {
7
8
  type MRT_TableInstance,
8
9
  } from '../types';
9
10
 
10
- interface Props<TData extends MRT_RowData> {
11
+ interface Props<TData extends MRT_RowData> extends IconButtonProps {
11
12
  row: MRT_Row<TData>;
12
13
  table: MRT_TableInstance<TData>;
13
14
  }
@@ -15,6 +16,7 @@ interface Props<TData extends MRT_RowData> {
15
16
  export const MRT_TableBodyRowPinButton = <TData extends MRT_RowData>({
16
17
  row,
17
18
  table,
19
+ ...rest
18
20
  }: Props<TData>) => {
19
21
  const {
20
22
  getState,
@@ -26,6 +28,12 @@ export const MRT_TableBodyRowPinButton = <TData extends MRT_RowData>({
26
28
 
27
29
  if (!canPin) return null;
28
30
 
31
+ const rowPinButtonProps = {
32
+ row,
33
+ table,
34
+ ...rest,
35
+ };
36
+
29
37
  if (rowPinningDisplayMode === 'top-and-bottom' && !row.getIsPinned()) {
30
38
  return (
31
39
  <Box
@@ -34,8 +42,8 @@ export const MRT_TableBodyRowPinButton = <TData extends MRT_RowData>({
34
42
  flexDirection: density === 'compact' ? 'row' : 'column',
35
43
  }}
36
44
  >
37
- <MRT_RowPinButton pinningPosition="top" row={row} table={table} />
38
- <MRT_RowPinButton pinningPosition="bottom" row={row} table={table} />
45
+ <MRT_RowPinButton pinningPosition="top" {...rowPinButtonProps} />
46
+ <MRT_RowPinButton pinningPosition="bottom" {...rowPinButtonProps} />
39
47
  </Box>
40
48
  );
41
49
  }
@@ -43,8 +51,7 @@ export const MRT_TableBodyRowPinButton = <TData extends MRT_RowData>({
43
51
  return (
44
52
  <MRT_RowPinButton
45
53
  pinningPosition={rowPinningDisplayMode === 'bottom' ? 'bottom' : 'top'}
46
- row={row}
47
- table={table}
54
+ {...rowPinButtonProps}
48
55
  />
49
56
  );
50
57
  };
@@ -1,7 +1,7 @@
1
1
  import { type RefObject } from 'react';
2
2
  import { type VirtualItem } from '@tanstack/react-virtual';
3
3
  import Collapse from '@mui/material/Collapse';
4
- import TableCell from '@mui/material/TableCell';
4
+ import TableCell, { type TableCellProps } from '@mui/material/TableCell';
5
5
  import TableRow from '@mui/material/TableRow';
6
6
  import { lighten } from '@mui/material/styles';
7
7
  import { parseFromValuesOrFunc } from '../column.utils';
@@ -11,7 +11,7 @@ import {
11
11
  type MRT_TableInstance,
12
12
  } from '../types';
13
13
 
14
- interface Props<TData extends MRT_RowData> {
14
+ interface Props<TData extends MRT_RowData> extends TableCellProps {
15
15
  parentRowRef: RefObject<HTMLTableRowElement>;
16
16
  row: MRT_Row<TData>;
17
17
  rowIndex: number;
@@ -25,6 +25,7 @@ export const MRT_TableDetailPanel = <TData extends MRT_RowData>({
25
25
  rowIndex,
26
26
  table,
27
27
  virtualRow,
28
+ ...rest
28
29
  }: Props<TData>) => {
29
30
  const {
30
31
  getState,
@@ -45,10 +46,13 @@ export const MRT_TableDetailPanel = <TData extends MRT_RowData>({
45
46
  table,
46
47
  });
47
48
 
48
- const tableCellProps = parseFromValuesOrFunc(muiDetailPanelProps, {
49
- row,
50
- table,
51
- });
49
+ const tableCellProps = {
50
+ ...parseFromValuesOrFunc(muiDetailPanelProps, {
51
+ row,
52
+ table,
53
+ }),
54
+ ...rest,
55
+ };
52
56
 
53
57
  return (
54
58
  <TableRow
@@ -77,7 +81,7 @@ export const MRT_TableDetailPanel = <TData extends MRT_RowData>({
77
81
  ? lighten(theme.palette.background.default, 0.05)
78
82
  : undefined,
79
83
  borderBottom: !row.getIsExpanded() ? 'none' : undefined,
80
- display: layoutMode?.startsWith('grid') ? 'flex' : 'table-cell',
84
+ display: layoutMode?.startsWith('grid') ? 'flex' : undefined,
81
85
  py: row.getIsExpanded() ? '1rem' : 0,
82
86
  transition: 'all 150ms ease-in-out',
83
87
  width: `${table.getTotalSize()}px`,
@@ -1,13 +1,14 @@
1
- import Box from '@mui/material/Box';
1
+ import Box, { type BoxProps } from '@mui/material/Box';
2
2
  import IconButton from '@mui/material/IconButton';
3
3
  import Tooltip from '@mui/material/Tooltip';
4
+ import { parseFromValuesOrFunc } from '../column.utils';
4
5
  import {
5
6
  type MRT_Column,
6
7
  type MRT_RowData,
7
8
  type MRT_TableInstance,
8
9
  } from '../types';
9
10
 
10
- interface Props<TData extends MRT_RowData> {
11
+ interface Props<TData extends MRT_RowData> extends BoxProps {
11
12
  column: MRT_Column<TData>;
12
13
  table: MRT_TableInstance<TData>;
13
14
  }
@@ -15,6 +16,7 @@ interface Props<TData extends MRT_RowData> {
15
16
  export const MRT_ColumnPinningButtons = <TData extends MRT_RowData>({
16
17
  column,
17
18
  table,
19
+ ...rest
18
20
  }: Props<TData>) => {
19
21
  const {
20
22
  options: {
@@ -28,7 +30,14 @@ export const MRT_ColumnPinningButtons = <TData extends MRT_RowData>({
28
30
  };
29
31
 
30
32
  return (
31
- <Box sx={{ minWidth: '70px', textAlign: 'center' }}>
33
+ <Box
34
+ {...rest}
35
+ sx={(theme) => ({
36
+ minWidth: '70px',
37
+ textAlign: 'center',
38
+ ...(parseFromValuesOrFunc(rest?.sx, theme) as any),
39
+ })}
40
+ >
32
41
  {column.getIsPinned() ? (
33
42
  <Tooltip arrow title={localization.unpin}>
34
43
  <IconButton onClick={() => handlePinColumn(false)} size="small">
@@ -1,5 +1,5 @@
1
- import { type MouseEvent, type ReactNode, useState } from 'react';
2
- import Button from '@mui/material/Button';
1
+ import { type MouseEvent, useState } from 'react';
2
+ import Button, { type ButtonProps } from '@mui/material/Button';
3
3
  import Tooltip from '@mui/material/Tooltip';
4
4
  import { parseFromValuesOrFunc } from '../column.utils';
5
5
  import {
@@ -8,16 +8,15 @@ import {
8
8
  type MRT_TableInstance,
9
9
  } from '../types';
10
10
 
11
- interface Props<TData extends MRT_RowData> {
11
+ interface Props<TData extends MRT_RowData> extends ButtonProps {
12
12
  cell: MRT_Cell<TData>;
13
- children: ReactNode;
14
13
  table: MRT_TableInstance<TData>;
15
14
  }
16
15
 
17
16
  export const MRT_CopyButton = <TData extends MRT_RowData>({
18
17
  cell,
19
- children,
20
18
  table,
19
+ ...rest
21
20
  }: Props<TData>) => {
22
21
  const {
23
22
  options: { localization, muiCopyButtonProps },
@@ -47,6 +46,7 @@ export const MRT_CopyButton = <TData extends MRT_RowData>({
47
46
  row,
48
47
  table,
49
48
  }),
49
+ ...rest,
50
50
  };
51
51
 
52
52
  return (
@@ -81,9 +81,7 @@ export const MRT_CopyButton = <TData extends MRT_RowData>({
81
81
  ...(parseFromValuesOrFunc(buttonProps?.sx, theme) as any),
82
82
  })}
83
83
  title={undefined}
84
- >
85
- {children}
86
- </Button>
84
+ />
87
85
  </Tooltip>
88
86
  );
89
87
  };
@@ -1,15 +1,16 @@
1
- import Box from '@mui/material/Box';
1
+ import Box, { type BoxProps } from '@mui/material/Box';
2
2
  import Button from '@mui/material/Button';
3
3
  import CircularProgress from '@mui/material/CircularProgress';
4
4
  import IconButton from '@mui/material/IconButton';
5
5
  import Tooltip from '@mui/material/Tooltip';
6
+ import { parseFromValuesOrFunc } from '../column.utils';
6
7
  import {
7
8
  type MRT_Row,
8
9
  type MRT_RowData,
9
10
  type MRT_TableInstance,
10
11
  } from '../types';
11
12
 
12
- interface Props<TData extends MRT_RowData> {
13
+ interface Props<TData extends MRT_RowData> extends BoxProps {
13
14
  row: MRT_Row<TData>;
14
15
  table: MRT_TableInstance<TData>;
15
16
  variant?: 'icon' | 'text';
@@ -19,6 +20,7 @@ export const MRT_EditActionButtons = <TData extends MRT_RowData>({
19
20
  row,
20
21
  table,
21
22
  variant = 'icon',
23
+ ...rest
22
24
  }: Props<TData>) => {
23
25
  const {
24
26
  getState,
@@ -83,7 +85,11 @@ export const MRT_EditActionButtons = <TData extends MRT_RowData>({
83
85
  return (
84
86
  <Box
85
87
  onClick={(e) => e.stopPropagation()}
86
- sx={{ display: 'flex', gap: '0.75rem' }}
88
+ sx={(theme) => ({
89
+ display: 'flex',
90
+ gap: '0.75rem',
91
+ ...(parseFromValuesOrFunc(rest?.sx, theme) as any),
92
+ })}
87
93
  >
88
94
  {variant === 'icon' ? (
89
95
  <>
@@ -1,14 +1,15 @@
1
- import IconButton from '@mui/material/IconButton';
1
+ import IconButton, { type IconButtonProps } from '@mui/material/IconButton';
2
2
  import Tooltip from '@mui/material/Tooltip';
3
3
  import { parseFromValuesOrFunc } from '../column.utils';
4
4
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
5
5
 
6
- interface Props<TData extends MRT_RowData> {
6
+ interface Props<TData extends MRT_RowData> extends IconButtonProps {
7
7
  table: MRT_TableInstance<TData>;
8
8
  }
9
9
 
10
10
  export const MRT_ExpandAllButton = <TData extends MRT_RowData>({
11
11
  table,
12
+ ...rest
12
13
  }: Props<TData>) => {
13
14
  const {
14
15
  getCanSomeRowsExpand,
@@ -25,9 +26,12 @@ export const MRT_ExpandAllButton = <TData extends MRT_RowData>({
25
26
  } = table;
26
27
  const { density, isLoading } = getState();
27
28
 
28
- const iconButtonProps = parseFromValuesOrFunc(muiExpandAllButtonProps, {
29
- table,
30
- });
29
+ const iconButtonProps = {
30
+ ...parseFromValuesOrFunc(muiExpandAllButtonProps, {
31
+ table,
32
+ }),
33
+ ...rest,
34
+ };
31
35
 
32
36
  const isAllRowsExpanded = getIsAllRowsExpanded();
33
37
 
@@ -1,5 +1,5 @@
1
1
  import { type MouseEvent } from 'react';
2
- import IconButton from '@mui/material/IconButton';
2
+ import IconButton, { type IconButtonProps } from '@mui/material/IconButton';
3
3
  import Tooltip from '@mui/material/Tooltip';
4
4
  import { parseFromValuesOrFunc } from '../column.utils';
5
5
  import {
@@ -8,7 +8,7 @@ import {
8
8
  type MRT_TableInstance,
9
9
  } from '../types';
10
10
 
11
- interface Props<TData extends MRT_RowData> {
11
+ interface Props<TData extends MRT_RowData> extends IconButtonProps {
12
12
  row: MRT_Row<TData>;
13
13
  table: MRT_TableInstance<TData>;
14
14
  }
@@ -4,7 +4,7 @@ import Tooltip from '@mui/material/Tooltip';
4
4
  import { parseFromValuesOrFunc } from '../column.utils';
5
5
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
6
6
 
7
- interface Props<TData extends MRT_RowData> {
7
+ interface Props<TData extends MRT_RowData> extends IconButtonProps {
8
8
  iconButtonProps?: IconButtonProps;
9
9
  location?: 'column' | 'row';
10
10
  onDragEnd: DragEventHandler<HTMLButtonElement>;
@@ -18,6 +18,7 @@ export const MRT_GrabHandleButton = <TData extends MRT_RowData>({
18
18
  onDragEnd,
19
19
  onDragStart,
20
20
  table,
21
+ ...rest
21
22
  }: Props<TData>) => {
22
23
  const {
23
24
  options: {
@@ -26,22 +27,24 @@ export const MRT_GrabHandleButton = <TData extends MRT_RowData>({
26
27
  },
27
28
  } = table;
28
29
 
30
+ const _iconButtonProps = { ...iconButtonProps, ...rest };
31
+
29
32
  return (
30
33
  <Tooltip
31
34
  arrow
32
35
  enterDelay={1000}
33
36
  enterNextDelay={1000}
34
37
  placement="top"
35
- title={iconButtonProps?.title ?? localization.move}
38
+ title={_iconButtonProps?.title ?? localization.move}
36
39
  >
37
40
  <IconButton
38
41
  disableRipple
39
42
  draggable="true"
40
43
  size="small"
41
- {...iconButtonProps}
44
+ {..._iconButtonProps}
42
45
  onClick={(e) => {
43
46
  e.stopPropagation();
44
- iconButtonProps?.onClick?.(e);
47
+ _iconButtonProps?.onClick?.(e);
45
48
  }}
46
49
  onDragEnd={onDragEnd}
47
50
  onDragStart={onDragStart}
@@ -58,7 +61,7 @@ export const MRT_GrabHandleButton = <TData extends MRT_RowData>({
58
61
  opacity: location === 'row' ? 1 : 0.3,
59
62
  p: '2px',
60
63
  transition: 'all 150ms ease-in-out',
61
- ...(parseFromValuesOrFunc(iconButtonProps?.sx, theme) as any),
64
+ ...(parseFromValuesOrFunc(_iconButtonProps?.sx, theme) as any),
62
65
  })}
63
66
  title={undefined}
64
67
  >
@@ -1,14 +1,15 @@
1
1
  import { type MouseEvent, useState } from 'react';
2
2
  import { type RowPinningPosition } from '@tanstack/react-table';
3
- import IconButton from '@mui/material/IconButton';
3
+ import IconButton, { type IconButtonProps } from '@mui/material/IconButton';
4
4
  import Tooltip from '@mui/material/Tooltip';
5
+ import { parseFromValuesOrFunc } from '../column.utils';
5
6
  import {
6
7
  type MRT_Row,
7
8
  type MRT_RowData,
8
9
  type MRT_TableInstance,
9
10
  } from '../types';
10
11
 
11
- interface Props<TData extends MRT_RowData> {
12
+ interface Props<TData extends MRT_RowData> extends IconButtonProps {
12
13
  pinningPosition: RowPinningPosition;
13
14
  row: MRT_Row<TData>;
14
15
  table: MRT_TableInstance<TData>;
@@ -18,6 +19,7 @@ export const MRT_RowPinButton = <TData extends MRT_RowData>({
18
19
  pinningPosition,
19
20
  row,
20
21
  table,
22
+ ...rest
21
23
  }: Props<TData>) => {
22
24
  const {
23
25
  options: {
@@ -51,10 +53,12 @@ export const MRT_RowPinButton = <TData extends MRT_RowData>({
51
53
  onMouseEnter={() => setTooltipOpened(true)}
52
54
  onMouseLeave={() => setTooltipOpened(false)}
53
55
  size="small"
54
- sx={{
56
+ {...rest}
57
+ sx={(theme) => ({
55
58
  height: '24px',
56
59
  width: '24px',
57
- }}
60
+ ...(parseFromValuesOrFunc(rest?.sx, theme) as any),
61
+ })}
58
62
  >
59
63
  {isPinned ? (
60
64
  <CloseIcon />
@@ -1,5 +1,5 @@
1
1
  import { type MouseEvent, useState } from 'react';
2
- import IconButton from '@mui/material/IconButton';
2
+ import IconButton, { type IconButtonProps } from '@mui/material/IconButton';
3
3
  import Tooltip from '@mui/material/Tooltip';
4
4
  import { MRT_EditActionButtons } from './MRT_EditActionButtons';
5
5
  import { parseFromValuesOrFunc } from '../column.utils';
@@ -22,7 +22,7 @@ const commonIconButtonStyles = {
22
22
  width: '2rem',
23
23
  };
24
24
 
25
- interface Props<TData extends MRT_RowData> {
25
+ interface Props<TData extends MRT_RowData> extends IconButtonProps {
26
26
  cell: MRT_Cell<TData>;
27
27
  row: MRT_Row<TData>;
28
28
  table: MRT_TableInstance<TData>;
@@ -32,6 +32,7 @@ export const MRT_ToggleRowActionMenuButton = <TData extends MRT_RowData>({
32
32
  cell,
33
33
  row,
34
34
  table,
35
+ ...rest
35
36
  }: Props<TData>) => {
36
37
  const {
37
38
  getState,
@@ -77,12 +78,14 @@ export const MRT_ToggleRowActionMenuButton = <TData extends MRT_RowData>({
77
78
  ) : showEditActionButtons ? (
78
79
  <MRT_EditActionButtons row={row} table={table} />
79
80
  ) : !renderRowActionMenuItems &&
80
- parseFromValuesOrFunc(enableEditing, row) ? (
81
+ parseFromValuesOrFunc(enableEditing, row) &&
82
+ ['modal', 'row'].includes(editDisplayMode!) ? (
81
83
  <Tooltip arrow placement="right" title={localization.edit}>
82
84
  <IconButton
83
85
  aria-label={localization.edit}
84
86
  onClick={handleStartEditMode}
85
87
  sx={commonIconButtonStyles}
88
+ {...rest}
86
89
  >
87
90
  <EditIcon />
88
91
  </IconButton>
@@ -100,6 +103,7 @@ export const MRT_ToggleRowActionMenuButton = <TData extends MRT_RowData>({
100
103
  onClick={handleOpenRowActionMenu}
101
104
  size="small"
102
105
  sx={commonIconButtonStyles}
106
+ {...rest}
103
107
  >
104
108
  <MoreHorizIcon />
105
109
  </IconButton>