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
@@ -4,7 +4,7 @@ import {
4
4
  type Virtualizer,
5
5
  useVirtualizer,
6
6
  } from '@tanstack/react-virtual';
7
- import Table from '@mui/material/Table';
7
+ import Table, { type TableProps } from '@mui/material/Table';
8
8
  import { MRT_TableBody, Memo_MRT_TableBody } from '../body/MRT_TableBody';
9
9
  import {
10
10
  extraIndexRangeExtractor,
@@ -15,12 +15,13 @@ import { MRT_TableFooter } from '../footer/MRT_TableFooter';
15
15
  import { MRT_TableHead } from '../head/MRT_TableHead';
16
16
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
17
17
 
18
- interface Props<TData extends MRT_RowData> {
18
+ interface Props<TData extends MRT_RowData> extends TableProps {
19
19
  table: MRT_TableInstance<TData>;
20
20
  }
21
21
 
22
22
  export const MRT_Table = <TData extends MRT_RowData>({
23
23
  table,
24
+ ...rest
24
25
  }: Props<TData>) => {
25
26
  const {
26
27
  getFlatHeaders,
@@ -30,7 +31,6 @@ export const MRT_Table = <TData extends MRT_RowData>({
30
31
  columnVirtualizerOptions,
31
32
  columns,
32
33
  enableColumnPinning,
33
- enableColumnResizing,
34
34
  enableColumnVirtualization,
35
35
  enableStickyHeader,
36
36
  enableTableFooter,
@@ -50,7 +50,10 @@ export const MRT_Table = <TData extends MRT_RowData>({
50
50
  isFullScreen,
51
51
  } = getState();
52
52
 
53
- const tableProps = parseFromValuesOrFunc(muiTableProps, { table });
53
+ const tableProps = {
54
+ ...parseFromValuesOrFunc(muiTableProps, { table }),
55
+ ...rest,
56
+ };
54
57
 
55
58
  const columnVirtualizerProps = parseFromValuesOrFunc(
56
59
  columnVirtualizerOptions,
@@ -157,32 +160,23 @@ export const MRT_Table = <TData extends MRT_RowData>({
157
160
  };
158
161
 
159
162
  return (
160
- <>
161
- <Table
162
- stickyHeader={enableStickyHeader || isFullScreen}
163
- {...tableProps}
164
- style={{ ...columnSizeVars, ...tableProps?.style }}
165
- sx={(theme) => ({
166
- borderCollapse: 'separate',
167
- display: layoutMode?.startsWith('grid') ? 'grid' : undefined,
168
- tableLayout:
169
- layoutMode === 'semantic' && enableColumnResizing
170
- ? 'fixed'
171
- : undefined,
172
- ...(parseFromValuesOrFunc(tableProps?.sx, theme) as any),
173
- })}
174
- >
175
- {enableTableHead && <MRT_TableHead {...props} />}
176
- {memoMode === 'table-body' || columnSizingInfo.isResizingColumn ? (
177
- <Memo_MRT_TableBody
178
- columnVirtualizer={columnVirtualizer}
179
- {...props}
180
- />
181
- ) : (
182
- <MRT_TableBody columnVirtualizer={columnVirtualizer} {...props} />
183
- )}
184
- {enableTableFooter && <MRT_TableFooter {...props} />}
185
- </Table>
186
- </>
163
+ <Table
164
+ stickyHeader={enableStickyHeader || isFullScreen}
165
+ {...tableProps}
166
+ style={{ ...columnSizeVars, ...tableProps?.style }}
167
+ sx={(theme) => ({
168
+ borderCollapse: 'separate',
169
+ display: layoutMode?.startsWith('grid') ? 'grid' : undefined,
170
+ ...(parseFromValuesOrFunc(tableProps?.sx, theme) as any),
171
+ })}
172
+ >
173
+ {enableTableHead && <MRT_TableHead {...props} />}
174
+ {memoMode === 'table-body' || columnSizingInfo.isResizingColumn ? (
175
+ <Memo_MRT_TableBody columnVirtualizer={columnVirtualizer} {...props} />
176
+ ) : (
177
+ <MRT_TableBody columnVirtualizer={columnVirtualizer} {...props} />
178
+ )}
179
+ {enableTableFooter && <MRT_TableFooter {...props} />}
180
+ </Table>
187
181
  );
188
182
  };
@@ -1,9 +1,9 @@
1
1
  import { useEffect, useLayoutEffect, useState } from 'react';
2
- import Box from '@mui/material/Box';
3
- import CircularProgress from '@mui/material/CircularProgress';
4
- import TableContainer from '@mui/material/TableContainer';
5
- import { alpha, lighten } from '@mui/material/styles';
2
+ import TableContainer, {
3
+ type TableContainerProps,
4
+ } from '@mui/material/TableContainer';
6
5
  import { MRT_Table } from './MRT_Table';
6
+ import { MRT_TableLoadingOverlay } from './MRT_TableLoadingOverlay';
7
7
  import { parseFromValuesOrFunc } from '../column.utils';
8
8
  import { MRT_EditRowModal } from '../modals';
9
9
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
@@ -11,12 +11,13 @@ import { type MRT_RowData, type MRT_TableInstance } from '../types';
11
11
  const useIsomorphicLayoutEffect =
12
12
  typeof window !== 'undefined' ? useLayoutEffect : useEffect;
13
13
 
14
- interface Props<TData extends MRT_RowData> {
14
+ interface Props<TData extends MRT_RowData> extends TableContainerProps {
15
15
  table: MRT_TableInstance<TData>;
16
16
  }
17
17
 
18
18
  export const MRT_TableContainer = <TData extends MRT_RowData>({
19
19
  table,
20
+ ...rest
20
21
  }: Props<TData>) => {
21
22
  const {
22
23
  getState,
@@ -24,8 +25,6 @@ export const MRT_TableContainer = <TData extends MRT_RowData>({
24
25
  createDisplayMode,
25
26
  editDisplayMode,
26
27
  enableStickyHeader,
27
- localization,
28
- muiCircularProgressProps,
29
28
  muiTableContainerProps,
30
29
  },
31
30
  refs: { bottomToolbarRef, tableContainerRef, topToolbarRef },
@@ -39,18 +38,16 @@ export const MRT_TableContainer = <TData extends MRT_RowData>({
39
38
  } = getState();
40
39
 
41
40
  const loading =
42
- (isLoading || showLoadingOverlay) && showLoadingOverlay !== false;
41
+ showLoadingOverlay !== false && (isLoading || showLoadingOverlay);
43
42
 
44
43
  const [totalToolbarHeight, setTotalToolbarHeight] = useState(0);
45
44
 
46
- const tableContainerProps = parseFromValuesOrFunc(muiTableContainerProps, {
47
- table,
48
- });
49
-
50
- const circularProgressProps = parseFromValuesOrFunc(
51
- muiCircularProgressProps,
52
- { table },
53
- );
45
+ const tableContainerProps = {
46
+ ...parseFromValuesOrFunc(muiTableContainerProps, {
47
+ table,
48
+ }),
49
+ ...rest,
50
+ };
54
51
 
55
52
  useIsomorphicLayoutEffect(() => {
56
53
  const topToolbarHeight =
@@ -72,7 +69,7 @@ export const MRT_TableContainer = <TData extends MRT_RowData>({
72
69
  return (
73
70
  <TableContainer
74
71
  aria-busy={loading}
75
- aria-describedby="mrt-progress"
72
+ aria-describedby={loading ? 'mrt-progress' : undefined}
76
73
  {...tableContainerProps}
77
74
  ref={(node: HTMLDivElement) => {
78
75
  if (node) {
@@ -99,33 +96,7 @@ export const MRT_TableContainer = <TData extends MRT_RowData>({
99
96
  ...(parseFromValuesOrFunc(tableContainerProps?.sx, theme) as any),
100
97
  })}
101
98
  >
102
- {loading ? (
103
- <Box
104
- sx={(theme) => ({
105
- alignItems: 'center',
106
- backgroundColor: alpha(
107
- lighten(theme.palette.background.paper, 0.05),
108
- 0.5,
109
- ),
110
- bottom: 0,
111
- display: 'flex',
112
- justifyContent: 'center',
113
- left: 0,
114
- maxHeight: '100vh',
115
- position: 'absolute',
116
- right: 0,
117
- top: 0,
118
- width: '100%',
119
- zIndex: 2,
120
- })}
121
- >
122
- <CircularProgress
123
- aria-label={localization.noRecordsToDisplay}
124
- id="mrt-progress"
125
- {...circularProgressProps}
126
- />
127
- </Box>
128
- ) : null}
99
+ {loading ? <MRT_TableLoadingOverlay table={table} /> : null}
129
100
  <MRT_Table table={table} />
130
101
  {(createModalOpen || editModalOpen) && (
131
102
  <MRT_EditRowModal open table={table} />
@@ -0,0 +1,53 @@
1
+ import Box from '@mui/material/Box';
2
+ import CircularProgress, {
3
+ type CircularProgressProps,
4
+ } from '@mui/material/CircularProgress';
5
+ import { alpha, lighten } from '@mui/material/styles';
6
+ import { parseFromValuesOrFunc } from '../column.utils';
7
+ import { type MRT_RowData, type MRT_TableInstance } from '../types';
8
+
9
+ interface Props<TData extends MRT_RowData> extends CircularProgressProps {
10
+ table: MRT_TableInstance<TData>;
11
+ }
12
+
13
+ export const MRT_TableLoadingOverlay = <TData extends MRT_RowData>({
14
+ table,
15
+ ...rest
16
+ }: Props<TData>) => {
17
+ const {
18
+ options: { localization, muiCircularProgressProps },
19
+ } = table;
20
+
21
+ const circularProgressProps = {
22
+ ...parseFromValuesOrFunc(muiCircularProgressProps, { table }),
23
+ ...rest,
24
+ };
25
+
26
+ return (
27
+ <Box
28
+ sx={(theme) => ({
29
+ alignItems: 'center',
30
+ backgroundColor: alpha(
31
+ lighten(theme.palette.background.paper, 0.05),
32
+ 0.5,
33
+ ),
34
+ bottom: 0,
35
+ display: 'flex',
36
+ justifyContent: 'center',
37
+ left: 0,
38
+ maxHeight: '100vh',
39
+ position: 'absolute',
40
+ right: 0,
41
+ top: 0,
42
+ width: '100%',
43
+ zIndex: 2,
44
+ })}
45
+ >
46
+ <CircularProgress
47
+ aria-label={localization.noRecordsToDisplay}
48
+ id="mrt-progress"
49
+ {...circularProgressProps}
50
+ />
51
+ </Box>
52
+ );
53
+ };
@@ -1,16 +1,17 @@
1
- import Paper from '@mui/material/Paper';
1
+ import Paper, { type PaperProps } from '@mui/material/Paper';
2
2
  import { MRT_TableContainer } from './MRT_TableContainer';
3
3
  import { parseFromValuesOrFunc } from '../column.utils';
4
4
  import { MRT_BottomToolbar } from '../toolbar/MRT_BottomToolbar';
5
5
  import { MRT_TopToolbar } from '../toolbar/MRT_TopToolbar';
6
6
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
7
7
 
8
- interface Props<TData extends MRT_RowData> {
8
+ interface Props<TData extends MRT_RowData> extends PaperProps {
9
9
  table: MRT_TableInstance<TData>;
10
10
  }
11
11
 
12
12
  export const MRT_TablePaper = <TData extends MRT_RowData>({
13
13
  table,
14
+ ...rest
14
15
  }: Props<TData>) => {
15
16
  const {
16
17
  getState,
@@ -25,7 +26,10 @@ export const MRT_TablePaper = <TData extends MRT_RowData>({
25
26
  } = table;
26
27
  const { isFullScreen } = getState();
27
28
 
28
- const tablePaperProps = parseFromValuesOrFunc(muiTablePaperProps, { table });
29
+ const tablePaperProps = {
30
+ ...parseFromValuesOrFunc(muiTablePaperProps, { table }),
31
+ ...rest,
32
+ };
29
33
 
30
34
  return (
31
35
  <Paper
@@ -1,4 +1,5 @@
1
1
  export * from '../modals/MRT_EditRowModal';
2
2
  export * from './MRT_Table';
3
3
  export * from './MRT_TableContainer';
4
+ export * from './MRT_TableLoadingOverlay';
4
5
  export * from './MRT_TablePaper';
@@ -1,5 +1,4 @@
1
- import Box from '@mui/material/Box';
2
- import Toolbar from '@mui/material/Toolbar';
1
+ import Box, { type BoxProps } from '@mui/material/Box';
3
2
  import { alpha } from '@mui/material/styles';
4
3
  import useMediaQuery from '@mui/material/useMediaQuery';
5
4
  import { MRT_LinearProgressBar } from './MRT_LinearProgressBar';
@@ -10,12 +9,13 @@ import { commonToolbarStyles } from './MRT_TopToolbar';
10
9
  import { parseFromValuesOrFunc } from '../column.utils';
11
10
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
12
11
 
13
- interface Props<TData extends MRT_RowData> {
12
+ interface Props<TData extends MRT_RowData> extends BoxProps {
14
13
  table: MRT_TableInstance<TData>;
15
14
  }
16
15
 
17
16
  export const MRT_BottomToolbar = <TData extends MRT_RowData>({
18
17
  table,
18
+ ...rest
19
19
  }: Props<TData>) => {
20
20
  const {
21
21
  getState,
@@ -33,13 +33,15 @@ export const MRT_BottomToolbar = <TData extends MRT_RowData>({
33
33
 
34
34
  const isMobile = useMediaQuery('(max-width:720px)');
35
35
 
36
- const toolbarProps = parseFromValuesOrFunc(muiBottomToolbarProps, { table });
36
+ const toolbarProps = {
37
+ ...parseFromValuesOrFunc(muiBottomToolbarProps, { table }),
38
+ ...rest,
39
+ };
37
40
 
38
41
  const stackAlertBanner = isMobile || !!renderBottomToolbarCustomActions;
39
42
 
40
43
  return (
41
- <Toolbar
42
- variant="dense"
44
+ <Box
43
45
  {...toolbarProps}
44
46
  ref={(node: HTMLDivElement) => {
45
47
  if (node) {
@@ -103,6 +105,6 @@ export const MRT_BottomToolbar = <TData extends MRT_RowData>({
103
105
  )}
104
106
  </Box>
105
107
  </Box>
106
- </Toolbar>
108
+ </Box>
107
109
  );
108
110
  };
@@ -1,9 +1,11 @@
1
1
  import Collapse from '@mui/material/Collapse';
2
- import LinearProgress from '@mui/material/LinearProgress';
2
+ import LinearProgress, {
3
+ type LinearProgressProps,
4
+ } from '@mui/material/LinearProgress';
3
5
  import { parseFromValuesOrFunc } from '../column.utils';
4
6
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
5
7
 
6
- interface Props<TData extends MRT_RowData> {
8
+ interface Props<TData extends MRT_RowData> extends LinearProgressProps {
7
9
  isTopToolbar: boolean;
8
10
  table: MRT_TableInstance<TData>;
9
11
  }
@@ -11,21 +13,25 @@ interface Props<TData extends MRT_RowData> {
11
13
  export const MRT_LinearProgressBar = <TData extends MRT_RowData>({
12
14
  isTopToolbar,
13
15
  table,
16
+ ...rest
14
17
  }: Props<TData>) => {
15
18
  const {
16
19
  getState,
17
20
  options: { muiLinearProgressProps },
18
21
  } = table;
19
- const { showProgressBars } = getState();
22
+ const { isSaving, showProgressBars } = getState();
20
23
 
21
- const linearProgressProps = parseFromValuesOrFunc(muiLinearProgressProps, {
22
- isTopToolbar,
23
- table,
24
- });
24
+ const linearProgressProps = {
25
+ ...parseFromValuesOrFunc(muiLinearProgressProps, {
26
+ isTopToolbar,
27
+ table,
28
+ }),
29
+ ...rest,
30
+ };
25
31
 
26
32
  return (
27
33
  <Collapse
28
- in={showProgressBars}
34
+ in={showProgressBars !== false && (showProgressBars || isSaving)}
29
35
  mountOnEnter
30
36
  sx={{
31
37
  bottom: isTopToolbar ? 0 : undefined,
@@ -11,7 +11,13 @@ import { type MRT_RowData, type MRT_TableInstance } from '../types';
11
11
 
12
12
  const defaultRowsPerPage = [5, 10, 15, 20, 25, 30, 50, 100];
13
13
 
14
- interface Props<TData extends MRT_RowData> {
14
+ interface Props<TData extends MRT_RowData>
15
+ extends Partial<
16
+ PaginationProps & {
17
+ rowsPerPageOptions?: number[];
18
+ showRowsPerPage?: boolean;
19
+ }
20
+ > {
15
21
  position?: 'bottom' | 'top';
16
22
  table: MRT_TableInstance<TData>;
17
23
  }
@@ -19,6 +25,7 @@ interface Props<TData extends MRT_RowData> {
19
25
  export const MRT_TablePagination = <TData extends MRT_RowData>({
20
26
  position = 'bottom',
21
27
  table,
28
+ ...rest
22
29
  }: Props<TData>) => {
23
30
  const {
24
31
  getPrePaginationRowModel,
@@ -39,9 +46,12 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
39
46
  showGlobalFilter,
40
47
  } = getState();
41
48
 
42
- const paginationProps = parseFromValuesOrFunc(muiPaginationProps, {
43
- table,
44
- });
49
+ const paginationProps = {
50
+ ...parseFromValuesOrFunc(muiPaginationProps, {
51
+ table,
52
+ }),
53
+ ...rest,
54
+ };
45
55
 
46
56
  const totalRowCount = rowCount ?? getPrePaginationRowModel().rows.length;
47
57
  const numberOfPages = Math.ceil(totalRowCount / pageSize);
@@ -54,7 +64,7 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
54
64
  showFirstButton = showFirstLastPageButtons,
55
65
  showLastButton = showFirstLastPageButtons,
56
66
  showRowsPerPage = true,
57
- ...rest
67
+ ..._rest
58
68
  } = paginationProps ?? {};
59
69
 
60
70
  return (
@@ -73,7 +83,7 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
73
83
  ? '3rem'
74
84
  : undefined,
75
85
  position: 'relative',
76
- px: '4px',
86
+ px: '8px',
77
87
  py: '12px',
78
88
  zIndex: 2,
79
89
  }}
@@ -119,13 +129,13 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
119
129
  )}
120
130
  showFirstButton={showFirstButton}
121
131
  showLastButton={showLastButton}
122
- {...(rest as PaginationProps)}
132
+ {..._rest}
123
133
  />
124
134
  ) : paginationDisplayMode === 'default' ? (
125
135
  <>
126
136
  <Typography
127
137
  align="center"
128
- sx={{ mb: 0, minWidth: '10ch', mx: '4px' }}
138
+ sx={{ mb: 0, minWidth: '8ch', mx: '4px' }}
129
139
  variant="body2"
130
140
  >{`${
131
141
  lastRowIndex === 0 ? 0 : (firstRowIndex + 1).toLocaleString()
@@ -1,5 +1,5 @@
1
1
  import { Fragment } from 'react';
2
- import Alert from '@mui/material/Alert';
2
+ import Alert, { type AlertProps } from '@mui/material/Alert';
3
3
  import AlertTitle from '@mui/material/AlertTitle';
4
4
  import Box from '@mui/material/Box';
5
5
  import Chip from '@mui/material/Chip';
@@ -9,7 +9,7 @@ import { parseFromValuesOrFunc } from '../column.utils';
9
9
  import { MRT_SelectCheckbox } from '../inputs';
10
10
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
11
11
 
12
- interface Props<TData extends MRT_RowData> {
12
+ interface Props<TData extends MRT_RowData> extends AlertProps {
13
13
  stackAlertBanner?: boolean;
14
14
  table: MRT_TableInstance<TData>;
15
15
  }
@@ -17,6 +17,7 @@ interface Props<TData extends MRT_RowData> {
17
17
  export const MRT_ToolbarAlertBanner = <TData extends MRT_RowData>({
18
18
  stackAlertBanner,
19
19
  table,
20
+ ...rest
20
21
  }: Props<TData>) => {
21
22
  const {
22
23
  getPrePaginationRowModel,
@@ -36,9 +37,12 @@ export const MRT_ToolbarAlertBanner = <TData extends MRT_RowData>({
36
37
  } = table;
37
38
  const { density, grouping, showAlertBanner } = getState();
38
39
 
39
- const alertProps = parseFromValuesOrFunc(muiToolbarAlertBannerProps, {
40
- table,
41
- });
40
+ const alertProps = {
41
+ ...parseFromValuesOrFunc(muiToolbarAlertBannerProps, {
42
+ table,
43
+ }),
44
+ ...rest,
45
+ };
42
46
 
43
47
  const chipProps = parseFromValuesOrFunc(muiToolbarAlertBannerChipProps, {
44
48
  table,
@@ -1,16 +1,18 @@
1
1
  import { type DragEvent, useEffect } from 'react';
2
- import Box from '@mui/material/Box';
2
+ import Box, { type BoxProps } from '@mui/material/Box';
3
3
  import Fade from '@mui/material/Fade';
4
4
  import Typography from '@mui/material/Typography';
5
5
  import { alpha } from '@mui/material/styles';
6
+ import { parseFromValuesOrFunc } from '../column.utils';
6
7
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
7
8
 
8
- interface Props<TData extends MRT_RowData> {
9
+ interface Props<TData extends MRT_RowData> extends BoxProps {
9
10
  table: MRT_TableInstance<TData>;
10
11
  }
11
12
 
12
13
  export const MRT_ToolbarDropZone = <TData extends MRT_RowData>({
13
14
  table,
15
+ ...rest
14
16
  }: Props<TData>) => {
15
17
  const {
16
18
  getState,
@@ -42,6 +44,7 @@ export const MRT_ToolbarDropZone = <TData extends MRT_RowData>({
42
44
  <Box
43
45
  className="Mui-ToolbarDropZone"
44
46
  onDragEnter={handleDragEnter}
47
+ {...rest}
45
48
  sx={(theme) => ({
46
49
  alignItems: 'center',
47
50
  backdropFilter: 'blur(4px)',
@@ -57,6 +60,7 @@ export const MRT_ToolbarDropZone = <TData extends MRT_RowData>({
57
60
  position: 'absolute',
58
61
  width: '100%',
59
62
  zIndex: 4,
63
+ ...(parseFromValuesOrFunc(rest?.sx, theme) as any),
60
64
  })}
61
65
  >
62
66
  <Typography fontStyle="italic">
@@ -1,17 +1,19 @@
1
- import Box from '@mui/material/Box';
1
+ import Box, { type BoxProps } from '@mui/material/Box';
2
2
  import { MRT_ShowHideColumnsButton } from '../buttons/MRT_ShowHideColumnsButton';
3
3
  import { MRT_ToggleDensePaddingButton } from '../buttons/MRT_ToggleDensePaddingButton';
4
4
  import { MRT_ToggleFiltersButton } from '../buttons/MRT_ToggleFiltersButton';
5
5
  import { MRT_ToggleFullScreenButton } from '../buttons/MRT_ToggleFullScreenButton';
6
6
  import { MRT_ToggleGlobalFilterButton } from '../buttons/MRT_ToggleGlobalFilterButton';
7
+ import { parseFromValuesOrFunc } from '../column.utils';
7
8
  import { type MRT_RowData, type MRT_TableInstance } from '../types';
8
9
 
9
- interface Props<TData extends MRT_RowData> {
10
+ interface Props<TData extends MRT_RowData> extends BoxProps {
10
11
  table: MRT_TableInstance<TData>;
11
12
  }
12
13
 
13
14
  export const MRT_ToolbarInternalButtons = <TData extends MRT_RowData>({
14
15
  table,
16
+ ...rest
15
17
  }: Props<TData>) => {
16
18
  const {
17
19
  options: {
@@ -31,11 +33,13 @@ export const MRT_ToolbarInternalButtons = <TData extends MRT_RowData>({
31
33
 
32
34
  return (
33
35
  <Box
34
- sx={{
36
+ {...rest}
37
+ sx={(theme) => ({
35
38
  alignItems: 'center',
36
39
  display: 'flex',
37
40
  zIndex: 3,
38
- }}
41
+ ...(parseFromValuesOrFunc(rest?.sx, theme) as any),
42
+ })}
39
43
  >
40
44
  {renderToolbarInternalActions?.({
41
45
  table,
@@ -1,5 +1,4 @@
1
1
  import Box from '@mui/material/Box';
2
- import Toolbar from '@mui/material/Toolbar';
3
2
  import { lighten } from '@mui/material/styles';
4
3
  import { type Theme } from '@mui/material/styles';
5
4
  import useMediaQuery from '@mui/material/useMediaQuery';
@@ -15,12 +14,11 @@ import { type MRT_RowData, type MRT_TableInstance } from '../types';
15
14
  export const commonToolbarStyles = ({ theme }: { theme: Theme }) => ({
16
15
  alignItems: 'flex-start',
17
16
  backgroundColor: lighten(theme.palette.background.default, 0.05),
18
- backgroundImage: 'none',
19
17
  display: 'grid',
20
18
  flexWrap: 'wrap-reverse',
21
19
  minHeight: '3.5rem',
22
20
  overflow: 'hidden',
23
- p: '0 !important',
21
+ position: 'relative',
24
22
  transition: 'all 150ms ease-in-out',
25
23
  zIndex: 1,
26
24
  });
@@ -58,8 +56,7 @@ export const MRT_TopToolbar = <TData extends MRT_RowData>({
58
56
  isMobile || !!renderTopToolbarCustomActions || showGlobalFilter;
59
57
 
60
58
  return (
61
- <Toolbar
62
- variant="dense"
59
+ <Box
63
60
  {...toolbarProps}
64
61
  ref={(ref: HTMLDivElement) => {
65
62
  topToolbarRef.current = ref;
@@ -69,9 +66,9 @@ export const MRT_TopToolbar = <TData extends MRT_RowData>({
69
66
  }
70
67
  }}
71
68
  sx={(theme) => ({
72
- position: isFullScreen ? 'sticky' : undefined,
73
- top: isFullScreen ? '0' : undefined,
74
69
  ...commonToolbarStyles({ theme }),
70
+ position: isFullScreen ? 'sticky' : 'relative',
71
+ top: isFullScreen ? '0' : undefined,
75
72
  ...(parseFromValuesOrFunc(toolbarProps?.sx, theme) as any),
76
73
  })}
77
74
  >
@@ -126,6 +123,6 @@ export const MRT_TopToolbar = <TData extends MRT_RowData>({
126
123
  <MRT_TablePagination position="top" table={table} />
127
124
  )}
128
125
  <MRT_LinearProgressBar isTopToolbar table={table} />
129
- </Toolbar>
126
+ </Box>
130
127
  );
131
128
  };
package/src/types.ts CHANGED
@@ -42,6 +42,7 @@ import {
42
42
  } from '@tanstack/react-virtual';
43
43
  import { type AlertProps } from '@mui/material/Alert';
44
44
  import { type AutocompleteProps } from '@mui/material/Autocomplete';
45
+ import { type BoxProps } from '@mui/material/Box';
45
46
  import { type ButtonProps } from '@mui/material/Button';
46
47
  import { type CheckboxProps } from '@mui/material/Checkbox';
47
48
  import { type ChipProps } from '@mui/material/Chip';
@@ -62,7 +63,6 @@ import { type TableFooterProps } from '@mui/material/TableFooter';
62
63
  import { type TableHeadProps } from '@mui/material/TableHead';
63
64
  import { type TableRowProps } from '@mui/material/TableRow';
64
65
  import { type TextFieldProps } from '@mui/material/TextField';
65
- import { type ToolbarProps } from '@mui/material/Toolbar';
66
66
  import { type DatePickerProps } from '@mui/x-date-pickers';
67
67
  import { type MRT_AggregationFns } from './aggregationFns';
68
68
  import { type MRT_FilterFns } from './filterFns';
@@ -771,8 +771,8 @@ export type MRT_TableOptions<TData extends MRT_RowData> = Omit<
771
771
  */
772
772
  memoMode?: 'cells' | 'rows' | 'table-body';
773
773
  muiBottomToolbarProps?:
774
- | ((props: { table: MRT_TableInstance<TData> }) => ToolbarProps)
775
- | ToolbarProps;
774
+ | ((props: { table: MRT_TableInstance<TData> }) => BoxProps)
775
+ | BoxProps;
776
776
  muiCircularProgressProps?:
777
777
  | ((props: { table: MRT_TableInstance<TData> }) => CircularProgressProps)
778
778
  | CircularProgressProps;
@@ -973,8 +973,8 @@ export type MRT_TableOptions<TData extends MRT_RowData> = Omit<
973
973
  | ((props: { table: MRT_TableInstance<TData> }) => AlertProps)
974
974
  | AlertProps;
975
975
  muiTopToolbarProps?:
976
- | ((props: { table: MRT_TableInstance<TData> }) => ToolbarProps)
977
- | ToolbarProps;
976
+ | ((props: { table: MRT_TableInstance<TData> }) => BoxProps)
977
+ | BoxProps;
978
978
  onColumnFilterFnsChange?: OnChangeFn<{ [key: string]: MRT_FilterOption }>;
979
979
  onCreatingRowCancel?: (props: {
980
980
  row: MRT_Row<TData>;