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

Sign up to get free protection for your applications and to get access to all the features.
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>