@cutting/material-react-table 5.0.0-beta.2 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +1 -4
  2. package/dist/index.d.ts +189 -524
  3. package/dist/index.js +329 -345
  4. package/dist/index.js.map +1 -1
  5. package/locales/ar/index.mjs +1 -2
  6. package/locales/az/index.mjs +1 -2
  7. package/locales/bg/index.mjs +1 -2
  8. package/locales/cs/index.mjs +1 -2
  9. package/locales/da/index.mjs +1 -2
  10. package/locales/de/index.mjs +1 -2
  11. package/locales/el/index.mjs +1 -2
  12. package/locales/en/index.mjs +1 -2
  13. package/locales/es/index.mjs +1 -2
  14. package/locales/et/index.mjs +1 -2
  15. package/locales/fa/index.mjs +1 -2
  16. package/locales/fi/index.mjs +1 -2
  17. package/locales/fr/index.mjs +1 -2
  18. package/locales/he/index.mjs +1 -2
  19. package/locales/hr/index.mjs +1 -2
  20. package/locales/hu/index.mjs +1 -2
  21. package/locales/hy/index.mjs +1 -2
  22. package/locales/id/index.mjs +1 -2
  23. package/locales/it/index.mjs +1 -2
  24. package/locales/ja/index.mjs +1 -2
  25. package/locales/ko/index.mjs +1 -2
  26. package/locales/nl/index.mjs +1 -2
  27. package/locales/no/index.mjs +1 -2
  28. package/locales/np/index.mjs +1 -2
  29. package/locales/pl/index.mjs +1 -2
  30. package/locales/pt/index.mjs +1 -2
  31. package/locales/pt-BR/index.mjs +1 -2
  32. package/locales/ro/index.mjs +1 -2
  33. package/locales/ru/index.mjs +1 -2
  34. package/locales/sk/index.mjs +1 -2
  35. package/locales/sr-Cyrl-RS/index.mjs +1 -2
  36. package/locales/sr-Latn-RS/index.mjs +1 -2
  37. package/locales/sv/index.mjs +1 -2
  38. package/locales/tr/index.mjs +1 -2
  39. package/locales/uk/index.mjs +1 -2
  40. package/locales/vi/index.mjs +1 -2
  41. package/locales/zh-Hans/index.mjs +1 -2
  42. package/locales/zh-Hant/index.mjs +1 -2
  43. package/package.json +32 -40
  44. package/src/MaterialReactTable.smoke.test.tsx +3 -9
  45. package/src/components/MaterialReactTable.tsx +13 -21
  46. package/src/components/body/MRT_TableBody.tsx +67 -82
  47. package/src/components/body/MRT_TableBodyCell.tsx +38 -80
  48. package/src/components/body/MRT_TableBodyCellValue.tsx +5 -14
  49. package/src/components/body/MRT_TableBodyRow.tsx +55 -102
  50. package/src/components/body/MRT_TableBodyRowGrabHandle.test.tsx +2 -6
  51. package/src/components/body/MRT_TableBodyRowGrabHandle.tsx +4 -9
  52. package/src/components/body/MRT_TableBodyRowPinButton.tsx +8 -14
  53. package/src/components/body/MRT_TableDetailPanel.test.tsx +3 -9
  54. package/src/components/body/MRT_TableDetailPanel.tsx +8 -14
  55. package/src/components/buttons/MRT_ColumnPinningButtons.test.tsx +6 -16
  56. package/src/components/buttons/MRT_ColumnPinningButtons.tsx +6 -12
  57. package/src/components/buttons/MRT_CopyButton.tsx +7 -15
  58. package/src/components/buttons/MRT_EditActionButtons.test.tsx +2 -6
  59. package/src/components/buttons/MRT_EditActionButtons.tsx +15 -37
  60. package/src/components/buttons/MRT_ExpandAllButton.tsx +8 -16
  61. package/src/components/buttons/MRT_ExpandButton.tsx +9 -21
  62. package/src/components/buttons/MRT_GrabHandleButton.tsx +6 -10
  63. package/src/components/buttons/MRT_RowPinButton.tsx +8 -23
  64. package/src/components/buttons/MRT_ShowHideColumnsButton.tsx +5 -18
  65. package/src/components/buttons/MRT_ToggleDensePaddingButton.test.tsx +4 -12
  66. package/src/components/buttons/MRT_ToggleDensePaddingButton.tsx +4 -11
  67. package/src/components/buttons/MRT_ToggleFiltersButton.test.tsx +4 -13
  68. package/src/components/buttons/MRT_ToggleFiltersButton.tsx +3 -5
  69. package/src/components/buttons/MRT_ToggleFullScreenButton.test.tsx +3 -11
  70. package/src/components/buttons/MRT_ToggleFullScreenButton.tsx +4 -9
  71. package/src/components/buttons/MRT_ToggleGlobalFilterButton.tsx +3 -5
  72. package/src/components/buttons/MRT_ToggleRowActionMenuButton.tsx +7 -15
  73. package/src/components/footer/MRT_TableFooter.tsx +9 -16
  74. package/src/components/footer/MRT_TableFooterCell.tsx +9 -32
  75. package/src/components/footer/MRT_TableFooterRow.tsx +18 -32
  76. package/src/components/head/MRT_TableHead.tsx +8 -18
  77. package/src/components/head/MRT_TableHeadCell.tsx +46 -100
  78. package/src/components/head/MRT_TableHeadCellColumnActionsButton.tsx +10 -30
  79. package/src/components/head/MRT_TableHeadCellFilterContainer.tsx +4 -15
  80. package/src/components/head/MRT_TableHeadCellFilterLabel.tsx +20 -54
  81. package/src/components/head/MRT_TableHeadCellGrabHandle.test.tsx +5 -19
  82. package/src/components/head/MRT_TableHeadCellGrabHandle.tsx +9 -38
  83. package/src/components/head/MRT_TableHeadCellResizeHandle.test.tsx +3 -13
  84. package/src/components/head/MRT_TableHeadCellResizeHandle.tsx +10 -24
  85. package/src/components/head/MRT_TableHeadCellSortLabel.tsx +10 -26
  86. package/src/components/head/MRT_TableHeadRow.tsx +24 -36
  87. package/src/components/inputs/MRT_EditCellTextField.test.tsx +2 -9
  88. package/src/components/inputs/MRT_EditCellTextField.tsx +9 -28
  89. package/src/components/inputs/MRT_FilterCheckbox.tsx +9 -23
  90. package/src/components/inputs/MRT_FilterRangeFields.tsx +6 -15
  91. package/src/components/inputs/MRT_FilterRangeSlider.tsx +24 -32
  92. package/src/components/inputs/MRT_FilterTextField.test.tsx +72 -14
  93. package/src/components/inputs/MRT_FilterTextField.tsx +77 -138
  94. package/src/components/inputs/MRT_GlobalFilterTextField.tsx +10 -32
  95. package/src/components/inputs/MRT_SelectCheckbox.test.tsx +4 -11
  96. package/src/components/inputs/MRT_SelectCheckbox.tsx +17 -36
  97. package/src/components/menus/MRT_ActionMenuItem.tsx +6 -15
  98. package/src/components/menus/MRT_CellActionMenu.tsx +6 -9
  99. package/src/components/menus/MRT_ColumnActionMenu.tsx +22 -57
  100. package/src/components/menus/MRT_FilterOptionMenu.tsx +38 -65
  101. package/src/components/menus/MRT_RowActionMenu.tsx +33 -22
  102. package/src/components/menus/MRT_ShowHideColumnsMenu.tsx +29 -65
  103. package/src/components/menus/MRT_ShowHideColumnsMenuItems.test.tsx +43 -0
  104. package/src/components/menus/MRT_ShowHideColumnsMenuItems.tsx +14 -50
  105. package/src/components/modals/MRT_EditRowModal.test.tsx +5 -21
  106. package/src/components/modals/MRT_EditRowModal.tsx +8 -26
  107. package/src/components/table/MRT_Table.tsx +12 -20
  108. package/src/components/table/MRT_TableContainer.test.tsx +147 -0
  109. package/src/components/table/MRT_TableContainer.tsx +33 -37
  110. package/src/components/table/MRT_TableLoadingOverlay.tsx +3 -5
  111. package/src/components/table/MRT_TablePaper.tsx +7 -14
  112. package/src/components/toolbar/MRT_BottomToolbar.tsx +11 -23
  113. package/src/components/toolbar/MRT_LinearProgressBar.tsx +4 -11
  114. package/src/components/toolbar/MRT_TablePagination.tsx +33 -40
  115. package/src/components/toolbar/MRT_ToolbarAlertBanner.tsx +21 -50
  116. package/src/components/toolbar/MRT_ToolbarDropZone.test.tsx +26 -10
  117. package/src/components/toolbar/MRT_ToolbarDropZone.tsx +23 -21
  118. package/src/components/toolbar/MRT_ToolbarInternalButtons.tsx +11 -21
  119. package/src/components/toolbar/MRT_TopToolbar.tsx +12 -28
  120. package/src/fns/aggregationFns.test.tsx +1 -3
  121. package/src/fns/filterFns.test.tsx +9 -37
  122. package/src/fns/filterFns.ts +73 -96
  123. package/src/fns/sortingFns.test.tsx +39 -0
  124. package/src/fns/sortingFns.ts +15 -15
  125. package/src/fns/tableFeatures.test.tsx +6 -29
  126. package/src/fns/tableFeatures.ts +5 -4
  127. package/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx +2 -11
  128. package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +2 -10
  129. package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +8 -17
  130. package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +3 -8
  131. package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +2 -8
  132. package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +3 -13
  133. package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +1 -5
  134. package/src/hooks/useMRT_ColumnVirtualizer.ts +28 -49
  135. package/src/hooks/useMRT_Effects.test.tsx +114 -0
  136. package/src/hooks/useMRT_Effects.ts +26 -27
  137. package/src/hooks/useMRT_RowVirtualizer.ts +18 -33
  138. package/src/hooks/useMRT_Rows.ts +3 -42
  139. package/src/hooks/useMRT_TableInstance.ts +63 -129
  140. package/src/hooks/useMRT_TableOptions.ts +15 -29
  141. package/src/hooks/useMaterialReactTable.ts +2 -7
  142. package/src/icons.ts +38 -1
  143. package/src/index.ts +0 -4
  144. package/src/locales/ar.ts +1 -2
  145. package/src/locales/az.ts +1 -2
  146. package/src/locales/bg.ts +1 -2
  147. package/src/locales/cs.ts +2 -4
  148. package/src/locales/da.ts +1 -2
  149. package/src/locales/de.ts +1 -2
  150. package/src/locales/el.ts +1 -2
  151. package/src/locales/en.ts +1 -2
  152. package/src/locales/es.ts +1 -2
  153. package/src/locales/et.ts +2 -4
  154. package/src/locales/fa.ts +1 -2
  155. package/src/locales/fi.ts +2 -4
  156. package/src/locales/fr.ts +1 -2
  157. package/src/locales/he.ts +1 -2
  158. package/src/locales/hr.ts +1 -2
  159. package/src/locales/hu.ts +1 -2
  160. package/src/locales/hy.ts +1 -2
  161. package/src/locales/id.ts +2 -4
  162. package/src/locales/it.ts +1 -2
  163. package/src/locales/ja.ts +1 -2
  164. package/src/locales/ko.ts +1 -2
  165. package/src/locales/nl.ts +1 -2
  166. package/src/locales/no.ts +2 -4
  167. package/src/locales/np.ts +2 -4
  168. package/src/locales/pl.ts +1 -2
  169. package/src/locales/pt-BR.ts +1 -2
  170. package/src/locales/pt.ts +1 -2
  171. package/src/locales/ro.ts +1 -2
  172. package/src/locales/ru.ts +1 -2
  173. package/src/locales/sk.ts +2 -4
  174. package/src/locales/sr-Cyrl-RS.ts +1 -2
  175. package/src/locales/sr-Latn-RS.ts +1 -2
  176. package/src/locales/sv.ts +1 -2
  177. package/src/locales/tr.ts +1 -2
  178. package/src/locales/uk.ts +1 -2
  179. package/src/locales/vi.ts +1 -2
  180. package/src/types.ts +156 -349
  181. package/src/utils/cell.utils.ts +30 -68
  182. package/src/utils/column.utils.ts +61 -49
  183. package/src/utils/displayColumn.utils.ts +16 -38
  184. package/src/utils/highlight.utils.ts +7 -11
  185. package/src/utils/row.utils.ts +40 -65
  186. package/src/utils/slotProps.utils.ts +1 -4
  187. package/src/utils/style.utils.ts +18 -46
  188. package/src/utils/tanstack.helpers.ts +10 -17
  189. package/src/utils/utils.ts +6 -10
  190. package/src/utils/virtualization.utils.ts +5 -9
@@ -1,11 +1,7 @@
1
- import { type ChangeEvent, type MouseEvent } from 'react';
1
+ import { type ChangeEvent, type KeyboardEvent, type MouseEvent } from 'react';
2
2
 
3
3
  import { rankGlobalFuzzy } from '../fns/sortingFns';
4
- import {
5
- type MRT_Row,
6
- type MRT_RowData,
7
- type MRT_TableInstance,
8
- } from '../types';
4
+ import { type MRT_Row, type MRT_RowData, type MRT_TableInstance } from '../types';
9
5
  import { parseFromValuesOrFunc } from './utils';
10
6
 
11
7
  export const getMRT_Rows = <TData extends MRT_RowData>(
@@ -40,9 +36,7 @@ export const getMRT_Rows = <TData extends MRT_RowData>(
40
36
  : getCenterRows();
41
37
  } else {
42
38
  // fuzzy ranking adjustments
43
- rows = getPrePaginatedRowModel().rows.sort((a, b) =>
44
- rankGlobalFuzzy(a, b),
45
- );
39
+ rows = getPrePaginatedRowModel().rows.sort((a, b) => rankGlobalFuzzy(a, b));
46
40
  if (enablePagination && !manualPagination && !all) {
47
41
  const start = pagination.pageIndex * pagination.pageSize;
48
42
  rows = rows.slice(start, start + pagination.pageSize);
@@ -54,47 +48,26 @@ export const getMRT_Rows = <TData extends MRT_RowData>(
54
48
  }
55
49
  // row pinning adjustments
56
50
  if (enableRowPinning && rowPinningDisplayMode?.includes('sticky')) {
57
- const centerPinnedRowIds = rows
58
- .filter((row) => row.getIsPinned())
59
- .map((r) => r.id);
51
+ const centerPinnedRowIds = rows.filter((row) => row.getIsPinned()).map((r) => r.id);
60
52
 
61
- rows = [
62
- ...getTopRows().filter((row) => !centerPinnedRowIds.includes(row.id)),
63
- ...rows,
64
- ];
53
+ rows = [...getTopRows().filter((row) => !centerPinnedRowIds.includes(row.id)), ...rows];
65
54
  }
66
55
  // blank inserted creating row adjustments
67
- if (
68
- positionCreatingRow !== undefined &&
69
- creatingRow &&
70
- createDisplayMode === 'row'
71
- ) {
56
+ if (positionCreatingRow !== undefined && creatingRow && createDisplayMode === 'row') {
72
57
  const creatingRowIndex = !isNaN(+positionCreatingRow)
73
58
  ? +positionCreatingRow
74
59
  : positionCreatingRow === 'top'
75
60
  ? 0
76
61
  : rows.length;
77
- rows = [
78
- ...rows.slice(0, creatingRowIndex),
79
- creatingRow,
80
- ...rows.slice(creatingRowIndex),
81
- ];
62
+ rows = [...rows.slice(0, creatingRowIndex), creatingRow, ...rows.slice(creatingRowIndex)];
82
63
  }
83
64
 
84
65
  return rows;
85
66
  };
86
67
 
87
- export const getCanRankRows = <TData extends MRT_RowData>(
88
- table: MRT_TableInstance<TData>,
89
- ) => {
68
+ export const getCanRankRows = <TData extends MRT_RowData>(table: MRT_TableInstance<TData>): boolean | undefined => {
90
69
  const {
91
- options: {
92
- enableGlobalFilterRankedResults,
93
- manualExpanding,
94
- manualFiltering,
95
- manualGrouping,
96
- manualSorting,
97
- },
70
+ options: { enableGlobalFilterRankedResults, manualExpanding, manualFiltering, manualGrouping, manualSorting },
98
71
  } = table;
99
72
  const { expanded, globalFilterFn } = table.state;
100
73
 
@@ -110,16 +83,10 @@ export const getCanRankRows = <TData extends MRT_RowData>(
110
83
  );
111
84
  };
112
85
 
113
- export const getIsRankingRows = <TData extends MRT_RowData>(
114
- table: MRT_TableInstance<TData>,
115
- ) => {
86
+ export const getIsRankingRows = <TData extends MRT_RowData>(table: MRT_TableInstance<TData>): boolean => {
116
87
  const { globalFilter, sorting } = table.state;
117
88
 
118
- return (
119
- getCanRankRows(table) &&
120
- globalFilter &&
121
- !Object.values(sorting).some(Boolean)
122
- );
89
+ return Boolean(getCanRankRows(table) && globalFilter && !Object.values(sorting).some(Boolean));
123
90
  };
124
91
 
125
92
  export const getIsRowSelected = <TData extends MRT_RowData>({
@@ -128,16 +95,14 @@ export const getIsRowSelected = <TData extends MRT_RowData>({
128
95
  }: {
129
96
  row: MRT_Row<TData>;
130
97
  table: MRT_TableInstance<TData>;
131
- }) => {
98
+ }): boolean | undefined => {
132
99
  const {
133
100
  options: { enableRowSelection },
134
101
  } = table;
135
102
 
136
103
  return (
137
104
  row.getIsSelected() ||
138
- (parseFromValuesOrFunc(enableRowSelection, row) &&
139
- row.getCanSelectSubRows() &&
140
- row.getIsAllSubRowsSelected())
105
+ (parseFromValuesOrFunc(enableRowSelection, row) && row.getCanSelectSubRows() && row.getIsAllSubRowsSelected())
141
106
  );
142
107
  };
143
108
 
@@ -150,11 +115,14 @@ export const getMRT_RowSelectionHandler =
150
115
  row: MRT_Row<TData>;
151
116
  staticRowIndex?: number;
152
117
  table: MRT_TableInstance<TData>;
153
- }) =>
118
+ }): ((
119
+ event: ChangeEvent<HTMLInputElement> | KeyboardEvent<HTMLTableCellElement> | MouseEvent<HTMLTableRowElement>,
120
+ value?: boolean,
121
+ ) => void) =>
154
122
  (
155
- event: ChangeEvent<HTMLInputElement> | MouseEvent<HTMLTableRowElement>,
123
+ event: ChangeEvent<HTMLInputElement> | KeyboardEvent<HTMLTableCellElement> | MouseEvent<HTMLTableRowElement>,
156
124
  value?: boolean,
157
- ) => {
125
+ ): void => {
158
126
  const {
159
127
  options: {
160
128
  enableBatchRowSelection,
@@ -182,14 +150,13 @@ export const getMRT_RowSelectionHandler =
182
150
  if (
183
151
  enableBatchRowSelection &&
184
152
  enableMultiRowSelection &&
185
- (event as any).nativeEvent.shiftKey &&
153
+ 'shiftKey' in event.nativeEvent &&
154
+ event.nativeEvent.shiftKey &&
186
155
  lastSelectedRowId.current !== null
187
156
  ) {
188
157
  const rows = getMRT_Rows(table, true);
189
158
 
190
- const lastIndex = rows.findIndex(
191
- (r) => r.id === lastSelectedRowId.current,
192
- );
159
+ const lastIndex = rows.findIndex((r) => r.id === lastSelectedRowId.current);
193
160
 
194
161
  if (lastIndex !== -1) {
195
162
  const isLastIndexChecked = getIsRowSelected({
@@ -198,10 +165,7 @@ export const getMRT_RowSelectionHandler =
198
165
  });
199
166
 
200
167
  const currentIndex = staticRowIndex + paginationOffset;
201
- const [start, end] =
202
- lastIndex < currentIndex
203
- ? [lastIndex, currentIndex]
204
- : [currentIndex, lastIndex];
168
+ const [start, end] = lastIndex < currentIndex ? [lastIndex, currentIndex] : [currentIndex, lastIndex];
205
169
 
206
170
  // toggle selection of all rows between last selected and this one
207
171
  // but only if the last selected row is not the same as the current one
@@ -237,20 +201,31 @@ export const getMRT_RowSelectionHandler =
237
201
  };
238
202
 
239
203
  export const getMRT_SelectAllHandler =
240
- <TData extends MRT_RowData>({ table }: { table: MRT_TableInstance<TData> }) =>
204
+ <TData extends MRT_RowData>({
205
+ table,
206
+ }: {
207
+ table: MRT_TableInstance<TData>;
208
+ }): ((
209
+ event: ChangeEvent<HTMLInputElement> | KeyboardEvent<HTMLTableCellElement> | MouseEvent<HTMLButtonElement>,
210
+ value?: boolean,
211
+ forceAll?: boolean,
212
+ ) => void) =>
241
213
  (
242
- event: ChangeEvent<HTMLInputElement> | MouseEvent<HTMLButtonElement>,
214
+ event: ChangeEvent<HTMLInputElement> | KeyboardEvent<HTMLTableCellElement> | MouseEvent<HTMLButtonElement>,
243
215
  value?: boolean,
244
216
  forceAll?: boolean,
245
- ) => {
217
+ ): void => {
246
218
  const {
247
219
  options: { enableRowPinning, rowPinningDisplayMode, selectAllMode },
248
220
  refs: { lastSelectedRowId },
249
221
  } = table;
250
222
 
251
- selectAllMode === 'all' || forceAll
252
- ? table.toggleAllRowsSelected(value ?? (event as any).target.checked)
253
- : table.toggleAllPageRowsSelected(value ?? (event as any).target.checked);
223
+ const checked = value ?? (event.target as HTMLInputElement).checked;
224
+ if (selectAllMode === 'all' || forceAll) {
225
+ table.toggleAllRowsSelected(checked);
226
+ } else {
227
+ table.toggleAllPageRowsSelected(checked);
228
+ }
254
229
  if (enableRowPinning && rowPinningDisplayMode?.includes('select')) {
255
230
  table.setRowPinning({ bottom: [], top: [] });
256
231
  }
@@ -13,13 +13,10 @@ export type TextFieldSlotProps = {
13
13
  select?: Partial<SelectProps>;
14
14
  };
15
15
 
16
- export const getTextFieldSlotProps = (
17
- slotProps: TextFieldProps['slotProps'],
18
- ): TextFieldSlotProps => ({
16
+ export const getTextFieldSlotProps = (slotProps: TextFieldProps['slotProps']): TextFieldSlotProps => ({
19
17
  formHelperText: slotProps?.formHelperText as Partial<FormHelperTextProps>,
20
18
  htmlInput: slotProps?.htmlInput as InputBaseComponentProps,
21
19
  input: slotProps?.input as Partial<InputProps>,
22
20
  inputLabel: slotProps?.inputLabel as Partial<InputLabelProps>,
23
21
  select: slotProps?.select as Partial<SelectProps>,
24
22
  });
25
-
@@ -1,4 +1,4 @@
1
- import { alpha, darken, lighten, type Theme } from '@mui/material/styles';
1
+ import { alpha, type CSSObject, darken, lighten, type Theme } from '@mui/material/styles';
2
2
  import { type TableCellProps } from '@mui/material/TableCell';
3
3
  import { type TooltipProps } from '@mui/material/Tooltip';
4
4
  import { type CSSProperties } from 'react';
@@ -13,7 +13,7 @@ import {
13
13
  } from '../types';
14
14
  import { parseFromValuesOrFunc } from './utils';
15
15
 
16
- export const parseCSSVarId = (id: string) => id.replace(/[^a-zA-Z0-9]/g, '_');
16
+ export const parseCSSVarId = (id: string): string => id.replace(/[^a-zA-Z0-9]/g, '_');
17
17
 
18
18
  export const getMRTTheme = <TData extends MRT_RowData>(
19
19
  mrtTheme: MRT_TableOptions<TData>['mrtTheme'],
@@ -58,17 +58,14 @@ export const getCommonPinnedCellStyles = <TData extends MRT_RowData>({
58
58
  column?: MRT_Column<TData>;
59
59
  table: MRT_TableInstance<TData>;
60
60
  theme: Theme;
61
- }) => {
61
+ }): CSSObject => {
62
62
  const { baseBackgroundColor } = table.options.mrtTheme;
63
63
  const isPinned = column?.getIsPinned();
64
64
 
65
65
  return {
66
66
  '&[data-pinned="true"]': {
67
67
  '&:before': {
68
- backgroundColor: alpha(
69
- darken(baseBackgroundColor, theme.palette.mode === 'dark' ? 0.05 : 0.01),
70
- 0.97
71
- ),
68
+ backgroundColor: alpha(darken(baseBackgroundColor, theme.palette.mode === 'dark' ? 0.05 : 0.01), 0.97),
72
69
  boxShadow: column
73
70
  ? isPinned === 'start' && column.getIsLastColumn(isPinned)
74
71
  ? `-4px 0 4px -4px ${alpha(theme.palette.grey[700], 0.5)} inset`
@@ -94,7 +91,7 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
94
91
  table: MRT_TableInstance<TData>;
95
92
  tableCellProps: TableCellProps;
96
93
  theme: Theme;
97
- }) => {
94
+ }): CSSObject => {
98
95
  const {
99
96
  options: { enableColumnVirtualization, layoutMode },
100
97
  } = table;
@@ -102,25 +99,20 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
102
99
  const { columnDef } = column;
103
100
  const { columnDefType } = columnDef;
104
101
 
105
- const isColumnPinned =
106
- columnDef.columnDefType !== 'group' && column.getIsPinned();
102
+ const isColumnPinned = columnDef.columnDefType !== 'group' && column.getIsPinned();
107
103
 
108
104
  const widthStyles: CSSProperties = {
109
105
  minWidth: `max(calc(var(--${header ? 'header' : 'col'}-${parseCSSVarId(
110
106
  header?.id ?? column.id,
111
107
  )}-size) * 1px), ${columnDef.minSize ?? 30}px)`,
112
- width: `calc(var(--${header ? 'header' : 'col'}-${parseCSSVarId(
113
- header?.id ?? column.id,
114
- )}-size) * 1px)`,
108
+ width: `calc(var(--${header ? 'header' : 'col'}-${parseCSSVarId(header?.id ?? column.id)}-size) * 1px)`,
115
109
  };
116
110
 
117
111
  if (layoutMode === 'grid') {
118
112
  widthStyles.flex = `${
119
113
  [0, false].includes(columnDef.grow!)
120
114
  ? 0
121
- : `var(--${header ? 'header' : 'col'}-${parseCSSVarId(
122
- header?.id ?? column.id,
123
- )}-size)`
115
+ : `var(--${header ? 'header' : 'col'}-${parseCSSVarId(header?.id ?? column.id)}-size)`
124
116
  } 0 auto`;
125
117
  } else if (layoutMode === 'grid-no-grow') {
126
118
  widthStyles.flex = `${+(columnDef.grow || 0)} 0 auto`;
@@ -129,16 +121,10 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
129
121
  const pinnedStyles = isColumnPinned
130
122
  ? {
131
123
  ...getCommonPinnedCellStyles({ column, table, theme }),
132
- left:
133
- isColumnPinned === 'start'
134
- ? `${column.getStart('start')}px`
135
- : undefined,
124
+ left: isColumnPinned === 'start' ? `${column.getStart('start')}px` : undefined,
136
125
  opacity: 0.97,
137
126
  position: 'sticky',
138
- right:
139
- isColumnPinned === 'end'
140
- ? `${column.getAfter('end')}px`
141
- : undefined,
127
+ right: isColumnPinned === 'end' ? `${column.getAfter('end')}px` : undefined,
142
128
  }
143
129
  : {};
144
130
 
@@ -151,20 +137,10 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
151
137
  backgroundImage: 'inherit',
152
138
  display: layoutMode?.startsWith('grid') ? 'flex' : undefined,
153
139
  justifyContent:
154
- columnDefType === 'group'
155
- ? 'center'
156
- : layoutMode?.startsWith('grid')
157
- ? tableCellProps.align
158
- : undefined,
159
- opacity:
160
- table.state.draggingColumn?.id === column.id ||
161
- table.state.hoveredColumn?.id === column.id
162
- ? 0.5
163
- : 1,
140
+ columnDefType === 'group' ? 'center' : layoutMode?.startsWith('grid') ? tableCellProps.align : undefined,
141
+ opacity: table.state.draggingColumn?.id === column.id || table.state.hoveredColumn?.id === column.id ? 0.5 : 1,
164
142
  position: 'relative',
165
- transition: enableColumnVirtualization
166
- ? 'none'
167
- : `padding 150ms ease-in-out`,
143
+ transition: enableColumnVirtualization ? 'none' : `padding 150ms ease-in-out`,
168
144
  zIndex:
169
145
  column.getIsResizing() || draggingColumn?.id === column.id
170
146
  ? 2
@@ -173,7 +149,7 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
173
149
  : 0,
174
150
  ...pinnedStyles,
175
151
  ...widthStyles,
176
- ...(parseFromValuesOrFunc(tableCellProps?.sx, theme) as any),
152
+ ...(parseFromValuesOrFunc(tableCellProps?.sx, theme) as CSSObject),
177
153
  };
178
154
  };
179
155
 
@@ -182,7 +158,7 @@ export const getCommonToolbarStyles = <TData extends MRT_RowData>({
182
158
  }: {
183
159
  table: MRT_TableInstance<TData>;
184
160
  theme: Theme;
185
- }) => ({
161
+ }): CSSObject => ({
186
162
  alignItems: 'flex-start',
187
163
  backgroundColor: table.options.mrtTheme.baseBackgroundColor,
188
164
  display: 'grid',
@@ -194,14 +170,10 @@ export const getCommonToolbarStyles = <TData extends MRT_RowData>({
194
170
  zIndex: 1,
195
171
  });
196
172
 
197
- export const flipIconStyles = (theme: Theme) =>
198
- theme.direction === 'rtl'
199
- ? { style: { transform: 'scaleX(-1)' } }
200
- : undefined;
173
+ export const flipIconStyles = (theme: Theme): { style: CSSProperties } | undefined =>
174
+ theme.direction === 'rtl' ? { style: { transform: 'scaleX(-1)' } } : undefined;
201
175
 
202
- export const getCommonTooltipProps = (
203
- placement?: TooltipProps['placement'],
204
- ): Partial<TooltipProps> => ({
176
+ export const getCommonTooltipProps = (placement?: TooltipProps['placement']): Partial<TooltipProps> => ({
205
177
  disableInteractive: true,
206
178
  enterDelay: 1000,
207
179
  enterNextDelay: 1000,
@@ -1,9 +1,5 @@
1
- import {
2
- constructRow as _constructRow,
3
- flexRender as _flexRender,
4
- type Renderable,
5
- } from '@tanstack/react-table';
6
- import { type JSX, type ReactNode } from 'react';
1
+ import { constructRow as _constructRow, flexRender as _flexRender, type Renderable } from '@tanstack/react-table';
2
+ import { type ReactNode } from 'react';
7
3
 
8
4
  import {
9
5
  type MRT_ColumnHelper,
@@ -15,21 +11,17 @@ import {
15
11
  } from '../types';
16
12
  import { getAllLeafColumnDefs, getColumnId } from './column.utils';
17
13
 
18
- export const flexRender = _flexRender as (
19
- Comp: Renderable<any>,
20
- props: any,
21
- ) => JSX.Element | ReactNode;
14
+ export const flexRender = <TProps extends object>(Comp: Renderable<TProps>, props: TProps): ReactNode =>
15
+ _flexRender(Comp, props);
22
16
 
23
- export function createMRTColumnHelper<
24
- TData extends MRT_RowData,
25
- >(): MRT_ColumnHelper<TData> {
17
+ export function createMRTColumnHelper<TData extends MRT_RowData>(): MRT_ColumnHelper<TData> {
26
18
  return {
27
19
  accessor: (accessor, column) => {
28
20
  return typeof accessor === 'function'
29
- ? ({
21
+ ? {
30
22
  ...column,
31
23
  accessorFn: accessor,
32
- } as any)
24
+ }
33
25
  : {
34
26
  ...column,
35
27
  accessorKey: accessor,
@@ -49,7 +41,8 @@ export const createRow = <TData extends MRT_RowData>(
49
41
  parentId?: string,
50
42
  ): MRT_Row<TData> =>
51
43
  _constructRow(
52
- table as any,
44
+ // @ts-expect-error: MRT_TableInstance omits `options.features`, which the runtime table instance has
45
+ table,
53
46
  'mrt-row-create',
54
47
  originalRow ??
55
48
  Object.assign(
@@ -60,6 +53,6 @@ export const createRow = <TData extends MRT_RowData>(
60
53
  ),
61
54
  rowIndex,
62
55
  depth,
63
- subRows as any,
56
+ subRows,
64
57
  parentId,
65
58
  ) as MRT_Row<TData>;
@@ -1,22 +1,18 @@
1
1
  import { type DropdownOption } from '../types';
2
2
 
3
- export const parseFromValuesOrFunc = <T, U>(
4
- fn: ((arg: U) => T) | T | undefined,
5
- arg: U,
6
- ): T | undefined => (fn instanceof Function ? fn(arg) : fn);
3
+ export const parseFromValuesOrFunc = <T, U>(fn: ((arg: U) => T) | T | undefined, arg: U): T | undefined =>
4
+ fn instanceof Function ? fn(arg) : fn;
7
5
 
8
- export const getValueAndLabel = (
9
- option?: DropdownOption | null,
10
- ): { label: string; value: string } => {
6
+ export const getValueAndLabel = (option?: DropdownOption | null): { label: string; value: number | string } => {
11
7
  let label: string = '';
12
- let value: string = '';
8
+ let value: number | string = '';
13
9
  if (option) {
14
10
  if (typeof option !== 'object') {
15
11
  label = option;
16
12
  value = option;
17
13
  } else {
18
- label = option.label ?? option.value;
19
- value = option.value ?? label;
14
+ label = option.label ?? String(option.value);
15
+ value = option.value;
20
16
  }
21
17
  }
22
18
  return { label, value };
@@ -5,16 +5,12 @@ import { defaultRangeExtractor, type Range } from '@tanstack/react-virtual';
5
5
  * then, the `dragEnd` event on `MRT_TableBodyRowGrabHandle` or `MRT_TableHeadCellGrabHandle` will not fire.
6
6
  * We should keep the `draggingRow` or `draggingColumn` in `getVirtualItems()` to avoid this thing.
7
7
  */
8
- export const extraIndexRangeExtractor = (
9
- range: Range,
10
- draggingIndex?: number,
11
- ) => {
8
+ export const extraIndexRangeExtractor = (range: Range, draggingIndex?: number): number[] => {
12
9
  const newIndexes = defaultRangeExtractor(range);
13
- if (draggingIndex === undefined) return newIndexes;
14
- if (
15
- draggingIndex >= 0 &&
16
- draggingIndex < Math.max(range.startIndex - range.overscan, 0)
17
- ) {
10
+ if (draggingIndex === undefined) {
11
+ return newIndexes;
12
+ }
13
+ if (draggingIndex >= 0 && draggingIndex < Math.max(range.startIndex - range.overscan, 0)) {
18
14
  newIndexes.unshift(draggingIndex);
19
15
  }
20
16
  if (draggingIndex >= 0 && draggingIndex > range.endIndex + range.overscan) {