@lminii/material-react-table 4.0.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 (349) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +234 -0
  3. package/dist/index.d.mts +2408 -0
  4. package/dist/index.d.ts +2408 -0
  5. package/dist/index.js +4825 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +4631 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/locales/ar/index.d.mts +3 -0
  10. package/locales/ar/index.d.ts +3 -0
  11. package/locales/ar/index.js +100 -0
  12. package/locales/ar/index.mjs +96 -0
  13. package/locales/ar/package.json +6 -0
  14. package/locales/az/index.d.mts +3 -0
  15. package/locales/az/index.d.ts +3 -0
  16. package/locales/az/index.js +100 -0
  17. package/locales/az/index.mjs +96 -0
  18. package/locales/az/package.json +6 -0
  19. package/locales/bg/index.d.mts +3 -0
  20. package/locales/bg/index.d.ts +3 -0
  21. package/locales/bg/index.js +100 -0
  22. package/locales/bg/index.mjs +96 -0
  23. package/locales/bg/package.json +6 -0
  24. package/locales/cs/index.d.mts +3 -0
  25. package/locales/cs/index.d.ts +3 -0
  26. package/locales/cs/index.js +100 -0
  27. package/locales/cs/index.mjs +96 -0
  28. package/locales/cs/package.json +6 -0
  29. package/locales/da/index.d.mts +3 -0
  30. package/locales/da/index.d.ts +3 -0
  31. package/locales/da/index.js +100 -0
  32. package/locales/da/index.mjs +96 -0
  33. package/locales/da/package.json +6 -0
  34. package/locales/de/index.d.mts +3 -0
  35. package/locales/de/index.d.ts +3 -0
  36. package/locales/de/index.js +100 -0
  37. package/locales/de/index.mjs +96 -0
  38. package/locales/de/package.json +6 -0
  39. package/locales/el/index.d.mts +3 -0
  40. package/locales/el/index.d.ts +3 -0
  41. package/locales/el/index.js +100 -0
  42. package/locales/el/index.mjs +96 -0
  43. package/locales/el/package.json +6 -0
  44. package/locales/en/index.d.mts +3 -0
  45. package/locales/en/index.d.ts +3 -0
  46. package/locales/en/index.js +100 -0
  47. package/locales/en/index.mjs +96 -0
  48. package/locales/en/package.json +6 -0
  49. package/locales/es/index.d.mts +3 -0
  50. package/locales/es/index.d.ts +3 -0
  51. package/locales/es/index.js +100 -0
  52. package/locales/es/index.mjs +96 -0
  53. package/locales/es/package.json +6 -0
  54. package/locales/et/index.d.mts +3 -0
  55. package/locales/et/index.d.ts +3 -0
  56. package/locales/et/index.js +100 -0
  57. package/locales/et/index.mjs +96 -0
  58. package/locales/et/package.json +6 -0
  59. package/locales/fa/index.d.mts +3 -0
  60. package/locales/fa/index.d.ts +3 -0
  61. package/locales/fa/index.js +100 -0
  62. package/locales/fa/index.mjs +96 -0
  63. package/locales/fa/package.json +6 -0
  64. package/locales/fi/index.d.mts +3 -0
  65. package/locales/fi/index.d.ts +3 -0
  66. package/locales/fi/index.js +100 -0
  67. package/locales/fi/index.mjs +96 -0
  68. package/locales/fi/package.json +6 -0
  69. package/locales/fr/index.d.mts +3 -0
  70. package/locales/fr/index.d.ts +3 -0
  71. package/locales/fr/index.js +100 -0
  72. package/locales/fr/index.mjs +96 -0
  73. package/locales/fr/package.json +6 -0
  74. package/locales/he/index.d.mts +3 -0
  75. package/locales/he/index.d.ts +3 -0
  76. package/locales/he/index.js +100 -0
  77. package/locales/he/index.mjs +96 -0
  78. package/locales/he/package.json +6 -0
  79. package/locales/hr/index.d.mts +3 -0
  80. package/locales/hr/index.d.ts +3 -0
  81. package/locales/hr/index.js +100 -0
  82. package/locales/hr/index.mjs +96 -0
  83. package/locales/hr/package.json +6 -0
  84. package/locales/hu/index.d.mts +3 -0
  85. package/locales/hu/index.d.ts +3 -0
  86. package/locales/hu/index.js +100 -0
  87. package/locales/hu/index.mjs +96 -0
  88. package/locales/hu/package.json +6 -0
  89. package/locales/hy/index.d.mts +3 -0
  90. package/locales/hy/index.d.ts +3 -0
  91. package/locales/hy/index.js +100 -0
  92. package/locales/hy/index.mjs +96 -0
  93. package/locales/hy/package.json +6 -0
  94. package/locales/id/index.d.mts +3 -0
  95. package/locales/id/index.d.ts +3 -0
  96. package/locales/id/index.js +100 -0
  97. package/locales/id/index.mjs +96 -0
  98. package/locales/id/package.json +6 -0
  99. package/locales/it/index.d.mts +3 -0
  100. package/locales/it/index.d.ts +3 -0
  101. package/locales/it/index.js +100 -0
  102. package/locales/it/index.mjs +96 -0
  103. package/locales/it/package.json +6 -0
  104. package/locales/ja/index.d.mts +3 -0
  105. package/locales/ja/index.d.ts +3 -0
  106. package/locales/ja/index.js +100 -0
  107. package/locales/ja/index.mjs +96 -0
  108. package/locales/ja/package.json +6 -0
  109. package/locales/ko/index.d.mts +3 -0
  110. package/locales/ko/index.d.ts +3 -0
  111. package/locales/ko/index.js +100 -0
  112. package/locales/ko/index.mjs +96 -0
  113. package/locales/ko/package.json +6 -0
  114. package/locales/nl/index.d.mts +3 -0
  115. package/locales/nl/index.d.ts +3 -0
  116. package/locales/nl/index.js +100 -0
  117. package/locales/nl/index.mjs +96 -0
  118. package/locales/nl/package.json +6 -0
  119. package/locales/no/index.d.mts +3 -0
  120. package/locales/no/index.d.ts +3 -0
  121. package/locales/no/index.js +100 -0
  122. package/locales/no/index.mjs +96 -0
  123. package/locales/no/package.json +6 -0
  124. package/locales/np/index.d.mts +3 -0
  125. package/locales/np/index.d.ts +3 -0
  126. package/locales/np/index.js +100 -0
  127. package/locales/np/index.mjs +96 -0
  128. package/locales/np/package.json +6 -0
  129. package/locales/pl/index.d.mts +3 -0
  130. package/locales/pl/index.d.ts +3 -0
  131. package/locales/pl/index.js +100 -0
  132. package/locales/pl/index.mjs +96 -0
  133. package/locales/pl/package.json +6 -0
  134. package/locales/pt/index.d.mts +3 -0
  135. package/locales/pt/index.d.ts +3 -0
  136. package/locales/pt/index.js +100 -0
  137. package/locales/pt/index.mjs +96 -0
  138. package/locales/pt/package.json +6 -0
  139. package/locales/pt-BR/index.d.mts +3 -0
  140. package/locales/pt-BR/index.d.ts +3 -0
  141. package/locales/pt-BR/index.js +100 -0
  142. package/locales/pt-BR/index.mjs +96 -0
  143. package/locales/pt-BR/package.json +6 -0
  144. package/locales/ro/index.d.mts +3 -0
  145. package/locales/ro/index.d.ts +3 -0
  146. package/locales/ro/index.js +100 -0
  147. package/locales/ro/index.mjs +96 -0
  148. package/locales/ro/package.json +6 -0
  149. package/locales/ru/index.d.mts +3 -0
  150. package/locales/ru/index.d.ts +3 -0
  151. package/locales/ru/index.js +100 -0
  152. package/locales/ru/index.mjs +96 -0
  153. package/locales/ru/package.json +6 -0
  154. package/locales/sk/index.d.mts +3 -0
  155. package/locales/sk/index.d.ts +3 -0
  156. package/locales/sk/index.js +100 -0
  157. package/locales/sk/index.mjs +96 -0
  158. package/locales/sk/package.json +6 -0
  159. package/locales/sr-Cyrl-RS/index.d.mts +3 -0
  160. package/locales/sr-Cyrl-RS/index.d.ts +3 -0
  161. package/locales/sr-Cyrl-RS/index.js +100 -0
  162. package/locales/sr-Cyrl-RS/index.mjs +96 -0
  163. package/locales/sr-Cyrl-RS/package.json +6 -0
  164. package/locales/sr-Latn-RS/index.d.mts +3 -0
  165. package/locales/sr-Latn-RS/index.d.ts +3 -0
  166. package/locales/sr-Latn-RS/index.js +100 -0
  167. package/locales/sr-Latn-RS/index.mjs +96 -0
  168. package/locales/sr-Latn-RS/package.json +6 -0
  169. package/locales/sv/index.d.mts +3 -0
  170. package/locales/sv/index.d.ts +3 -0
  171. package/locales/sv/index.js +100 -0
  172. package/locales/sv/index.mjs +96 -0
  173. package/locales/sv/package.json +6 -0
  174. package/locales/tr/index.d.mts +3 -0
  175. package/locales/tr/index.d.ts +3 -0
  176. package/locales/tr/index.js +100 -0
  177. package/locales/tr/index.mjs +96 -0
  178. package/locales/tr/package.json +6 -0
  179. package/locales/uk/index.d.mts +3 -0
  180. package/locales/uk/index.d.ts +3 -0
  181. package/locales/uk/index.js +100 -0
  182. package/locales/uk/index.mjs +96 -0
  183. package/locales/uk/package.json +6 -0
  184. package/locales/vi/index.d.mts +3 -0
  185. package/locales/vi/index.d.ts +3 -0
  186. package/locales/vi/index.js +100 -0
  187. package/locales/vi/index.mjs +96 -0
  188. package/locales/vi/package.json +6 -0
  189. package/locales/zh-Hans/index.d.mts +3 -0
  190. package/locales/zh-Hans/index.d.ts +3 -0
  191. package/locales/zh-Hans/index.js +100 -0
  192. package/locales/zh-Hans/index.mjs +96 -0
  193. package/locales/zh-Hans/package.json +6 -0
  194. package/locales/zh-Hant/index.d.mts +3 -0
  195. package/locales/zh-Hant/index.d.ts +3 -0
  196. package/locales/zh-Hant/index.js +100 -0
  197. package/locales/zh-Hant/index.mjs +96 -0
  198. package/locales/zh-Hant/package.json +6 -0
  199. package/package.json +147 -0
  200. package/skills/README.md +81 -0
  201. package/skills/composable-components/SKILL.md +189 -0
  202. package/skills/customization/SKILL.md +190 -0
  203. package/skills/drag-and-drop-ordering/SKILL.md +227 -0
  204. package/skills/editing/SKILL.md +243 -0
  205. package/skills/filtering/SKILL.md +213 -0
  206. package/skills/getting-started/SKILL.md +213 -0
  207. package/skills/localization/SKILL.md +182 -0
  208. package/skills/migrate-v3-to-v4/SKILL.md +161 -0
  209. package/skills/state-and-server-data/SKILL.md +200 -0
  210. package/skills/virtualization/SKILL.md +203 -0
  211. package/src/components/MaterialReactTable.tsx +36 -0
  212. package/src/components/body/MRT_TableBody.tsx +221 -0
  213. package/src/components/body/MRT_TableBodyCell.tsx +351 -0
  214. package/src/components/body/MRT_TableBodyCellValue.tsx +130 -0
  215. package/src/components/body/MRT_TableBodyRow.tsx +288 -0
  216. package/src/components/body/MRT_TableBodyRowGrabHandle.tsx +61 -0
  217. package/src/components/body/MRT_TableBodyRowPinButton.tsx +58 -0
  218. package/src/components/body/MRT_TableDetailPanel.tsx +110 -0
  219. package/src/components/buttons/MRT_ColumnPinningButtons.tsx +72 -0
  220. package/src/components/buttons/MRT_CopyButton.tsx +87 -0
  221. package/src/components/buttons/MRT_EditActionButtons.tsx +134 -0
  222. package/src/components/buttons/MRT_ExpandAllButton.tsx +78 -0
  223. package/src/components/buttons/MRT_ExpandButton.tsx +102 -0
  224. package/src/components/buttons/MRT_GrabHandleButton.tsx +65 -0
  225. package/src/components/buttons/MRT_RowPinButton.tsx +84 -0
  226. package/src/components/buttons/MRT_ShowHideColumnsButton.tsx +50 -0
  227. package/src/components/buttons/MRT_ToggleDensePaddingButton.tsx +52 -0
  228. package/src/components/buttons/MRT_ToggleFiltersButton.tsx +40 -0
  229. package/src/components/buttons/MRT_ToggleFullScreenButton.tsx +51 -0
  230. package/src/components/buttons/MRT_ToggleGlobalFilterButton.tsx +46 -0
  231. package/src/components/buttons/MRT_ToggleRowActionMenuButton.tsx +126 -0
  232. package/src/components/footer/MRT_TableFooter.tsx +88 -0
  233. package/src/components/footer/MRT_TableFooterCell.tsx +107 -0
  234. package/src/components/footer/MRT_TableFooterRow.tsx +95 -0
  235. package/src/components/head/MRT_TableHead.tsx +91 -0
  236. package/src/components/head/MRT_TableHeadCell.tsx +351 -0
  237. package/src/components/head/MRT_TableHeadCellColumnActionsButton.tsx +96 -0
  238. package/src/components/head/MRT_TableHeadCellFilterContainer.tsx +52 -0
  239. package/src/components/head/MRT_TableHeadCellFilterLabel.tsx +178 -0
  240. package/src/components/head/MRT_TableHeadCellGrabHandle.tsx +91 -0
  241. package/src/components/head/MRT_TableHeadCellResizeHandle.tsx +96 -0
  242. package/src/components/head/MRT_TableHeadCellSortLabel.tsx +101 -0
  243. package/src/components/head/MRT_TableHeadRow.tsx +90 -0
  244. package/src/components/inputs/MRT_EditCellTextField.tsx +202 -0
  245. package/src/components/inputs/MRT_FilterCheckbox.tsx +90 -0
  246. package/src/components/inputs/MRT_FilterRangeFields.tsx +41 -0
  247. package/src/components/inputs/MRT_FilterRangeSlider.tsx +143 -0
  248. package/src/components/inputs/MRT_FilterTextField.tsx +592 -0
  249. package/src/components/inputs/MRT_GlobalFilterTextField.tsx +167 -0
  250. package/src/components/inputs/MRT_SelectCheckbox.tsx +135 -0
  251. package/src/components/menus/MRT_ActionMenuItem.tsx +62 -0
  252. package/src/components/menus/MRT_CellActionMenu.tsx +107 -0
  253. package/src/components/menus/MRT_ColumnActionMenu.tsx +352 -0
  254. package/src/components/menus/MRT_FilterOptionMenu.tsx +292 -0
  255. package/src/components/menus/MRT_RowActionMenu.tsx +88 -0
  256. package/src/components/menus/MRT_ShowHideColumnsMenu.tsx +181 -0
  257. package/src/components/menus/MRT_ShowHideColumnsMenuItems.tsx +203 -0
  258. package/src/components/modals/MRT_EditRowModal.tsx +114 -0
  259. package/src/components/table/MRT_Table.tsx +84 -0
  260. package/src/components/table/MRT_TableContainer.tsx +111 -0
  261. package/src/components/table/MRT_TableLoadingOverlay.tsx +58 -0
  262. package/src/components/table/MRT_TablePaper.tsx +89 -0
  263. package/src/components/toolbar/MRT_BottomToolbar.tsx +111 -0
  264. package/src/components/toolbar/MRT_LinearProgressBar.tsx +53 -0
  265. package/src/components/toolbar/MRT_TablePagination.tsx +241 -0
  266. package/src/components/toolbar/MRT_ToolbarAlertBanner.tsx +184 -0
  267. package/src/components/toolbar/MRT_ToolbarDropZone.tsx +83 -0
  268. package/src/components/toolbar/MRT_ToolbarInternalButtons.tsx +72 -0
  269. package/src/components/toolbar/MRT_TopToolbar.tsx +130 -0
  270. package/src/features/mrtCellActionsFeature.ts +67 -0
  271. package/src/features/mrtColumnDraggingFeature.ts +83 -0
  272. package/src/features/mrtDensityFeature.ts +64 -0
  273. package/src/features/mrtEditingFeature.ts +102 -0
  274. package/src/features/mrtFeatures.ts +103 -0
  275. package/src/features/mrtFilterModesFeature.ts +99 -0
  276. package/src/features/mrtFnsFeature.ts +46 -0
  277. package/src/features/mrtFullScreenFeature.ts +63 -0
  278. package/src/features/mrtLoadingFeature.ts +35 -0
  279. package/src/features/mrtRefsFeature.ts +60 -0
  280. package/src/features/mrtRowDraggingFeature.ts +81 -0
  281. package/src/features/mrtStateCompatFeature.ts +43 -0
  282. package/src/features/mrtToolbarsFeature.ts +76 -0
  283. package/src/fns/aggregationFns.ts +3 -0
  284. package/src/fns/filterFns.ts +196 -0
  285. package/src/fns/sortingFns.ts +31 -0
  286. package/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx +28 -0
  287. package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +29 -0
  288. package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +97 -0
  289. package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +30 -0
  290. package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +24 -0
  291. package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +34 -0
  292. package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +33 -0
  293. package/src/hooks/useMRT_ColumnVirtualizer.ts +124 -0
  294. package/src/hooks/useMRT_Effects.ts +108 -0
  295. package/src/hooks/useMRT_RowVirtualizer.ts +88 -0
  296. package/src/hooks/useMRT_Rows.ts +44 -0
  297. package/src/hooks/useMRT_TableInstance.ts +181 -0
  298. package/src/hooks/useMRT_TableOptions.ts +241 -0
  299. package/src/hooks/useMaterialReactTable.ts +12 -0
  300. package/src/icons.ts +73 -0
  301. package/src/index.ts +91 -0
  302. package/src/locales/ar.ts +97 -0
  303. package/src/locales/az.ts +97 -0
  304. package/src/locales/bg.ts +97 -0
  305. package/src/locales/cs.ts +98 -0
  306. package/src/locales/da.ts +97 -0
  307. package/src/locales/de.ts +97 -0
  308. package/src/locales/el.ts +97 -0
  309. package/src/locales/en.ts +97 -0
  310. package/src/locales/es.ts +97 -0
  311. package/src/locales/et.ts +98 -0
  312. package/src/locales/fa.ts +97 -0
  313. package/src/locales/fi.ts +98 -0
  314. package/src/locales/fr.ts +97 -0
  315. package/src/locales/he.ts +97 -0
  316. package/src/locales/hr.ts +97 -0
  317. package/src/locales/hu.ts +97 -0
  318. package/src/locales/hy.ts +97 -0
  319. package/src/locales/id.ts +98 -0
  320. package/src/locales/it.ts +97 -0
  321. package/src/locales/ja.ts +97 -0
  322. package/src/locales/ko.ts +97 -0
  323. package/src/locales/mk.ts +96 -0
  324. package/src/locales/nl.ts +97 -0
  325. package/src/locales/no.ts +99 -0
  326. package/src/locales/np.ts +98 -0
  327. package/src/locales/pl.ts +97 -0
  328. package/src/locales/pt-BR.ts +97 -0
  329. package/src/locales/pt.ts +97 -0
  330. package/src/locales/ro.ts +97 -0
  331. package/src/locales/ru.ts +97 -0
  332. package/src/locales/sk.ts +98 -0
  333. package/src/locales/sr-Cyrl-RS.ts +97 -0
  334. package/src/locales/sr-Latn-RS.ts +97 -0
  335. package/src/locales/sv.ts +97 -0
  336. package/src/locales/tr.ts +97 -0
  337. package/src/locales/uk.ts +97 -0
  338. package/src/locales/vi.ts +97 -0
  339. package/src/locales/zh-Hans.ts +96 -0
  340. package/src/locales/zh-Hant.ts +96 -0
  341. package/src/types.ts +1314 -0
  342. package/src/utils/cell.utils.ts +234 -0
  343. package/src/utils/column.utils.ts +204 -0
  344. package/src/utils/displayColumn.utils.ts +152 -0
  345. package/src/utils/row.utils.ts +258 -0
  346. package/src/utils/style.utils.ts +211 -0
  347. package/src/utils/tanstack.helpers.ts +64 -0
  348. package/src/utils/utils.ts +34 -0
  349. package/src/utils/virtualization.utils.ts +24 -0
@@ -0,0 +1,184 @@
1
+ import { Fragment, useMemo } from 'react';
2
+ import Alert, { type AlertProps } from '@mui/material/Alert';
3
+ import AlertTitle from '@mui/material/AlertTitle';
4
+ import Box from '@mui/material/Box';
5
+ import Button from '@mui/material/Button';
6
+ import Chip from '@mui/material/Chip';
7
+ import Collapse from '@mui/material/Collapse';
8
+ import Stack from '@mui/material/Stack';
9
+ import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
10
+ import { type MRT_RowData, type MRT_TableInstance } from '../../types';
11
+ import { getMRT_SelectAllHandler } from '../../utils/row.utils';
12
+ import { parseFromValuesOrFunc } from '../../utils/utils';
13
+
14
+ export interface MRT_ToolbarAlertBannerProps<TData extends MRT_RowData>
15
+ extends AlertProps {
16
+ stackAlertBanner?: boolean;
17
+ table: MRT_TableInstance<TData>;
18
+ }
19
+
20
+ export const MRT_ToolbarAlertBanner = <TData extends MRT_RowData>({
21
+ stackAlertBanner,
22
+ table,
23
+ ...rest
24
+ }: MRT_ToolbarAlertBannerProps<TData>) => {
25
+ const {
26
+ getCoreRowModel,
27
+ getFilteredSelectedRowModel,
28
+ options: {
29
+ enableRowSelection,
30
+ enableSelectAll,
31
+ localization,
32
+ manualPagination,
33
+ muiToolbarAlertBannerChipProps,
34
+ muiToolbarAlertBannerProps,
35
+ positionToolbarAlertBanner,
36
+ renderToolbarAlertBannerContent,
37
+ rowCount,
38
+ },
39
+ refs: { tablePaperRef },
40
+ state,
41
+ } = table;
42
+ const { density, grouping, rowSelection, showAlertBanner } = state;
43
+
44
+ const alertProps = {
45
+ ...parseFromValuesOrFunc(muiToolbarAlertBannerProps, {
46
+ table,
47
+ }),
48
+ ...rest,
49
+ };
50
+
51
+ const chipProps = parseFromValuesOrFunc(muiToolbarAlertBannerChipProps, {
52
+ table,
53
+ });
54
+
55
+ const totalRowCount = rowCount ?? getCoreRowModel().rows.length;
56
+ const filteredRowCount = getFilteredSelectedRowModel().rows.length;
57
+
58
+ const selectedRowCount = useMemo(
59
+ () =>
60
+ manualPagination
61
+ ? Object.values(rowSelection).filter(Boolean).length
62
+ : filteredRowCount,
63
+ [rowSelection, totalRowCount, manualPagination, filteredRowCount],
64
+ );
65
+ const selectedAlert =
66
+ selectedRowCount > 0 ? (
67
+ <Stack
68
+ direction="row"
69
+ sx={{
70
+ alignItems: 'center',
71
+ gap: '16px',
72
+ }}
73
+ >
74
+ {localization.selectedCountOfRowCountRowsSelected
75
+ ?.replace(
76
+ '{selectedCount}',
77
+ selectedRowCount.toLocaleString(localization.language),
78
+ )
79
+ ?.replace(
80
+ '{rowCount}',
81
+ totalRowCount.toLocaleString(localization.language),
82
+ )}
83
+ <Button
84
+ onClick={(event) =>
85
+ getMRT_SelectAllHandler({ table })(event, false, true)
86
+ }
87
+ size="small"
88
+ sx={{ p: '2px' }}
89
+ >
90
+ {localization.clearSelection}
91
+ </Button>
92
+ </Stack>
93
+ ) : null;
94
+
95
+ const groupedAlert =
96
+ grouping.length > 0 ? (
97
+ <span>
98
+ {localization.groupedBy}{' '}
99
+ {grouping.map((columnId, index) => (
100
+ <Fragment key={`${index}-${columnId}`}>
101
+ {index > 0 ? localization.thenBy : ''}
102
+ <Chip
103
+ label={table.getColumn(columnId).columnDef.header}
104
+ onDelete={() => table.getColumn(columnId).toggleGrouping()}
105
+ {...chipProps}
106
+ />
107
+ </Fragment>
108
+ ))}
109
+ </span>
110
+ ) : null;
111
+
112
+ return (
113
+ <Collapse
114
+ in={showAlertBanner || !!selectedAlert || !!groupedAlert}
115
+ timeout={stackAlertBanner ? 200 : 0}
116
+ >
117
+ <Alert
118
+ color="info"
119
+ icon={false}
120
+ {...alertProps}
121
+ sx={(theme) => ({
122
+ '& .MuiAlert-message': {
123
+ maxWidth: `calc(${
124
+ tablePaperRef.current?.clientWidth ?? 360
125
+ }px - 1rem)`,
126
+ width: '100%',
127
+ },
128
+ borderRadius: 0,
129
+ fontSize: '1rem',
130
+ left: 0,
131
+ mb: stackAlertBanner
132
+ ? 0
133
+ : positionToolbarAlertBanner === 'bottom'
134
+ ? '-1rem'
135
+ : undefined,
136
+ p: 0,
137
+ position: 'relative',
138
+ right: 0,
139
+ top: 0,
140
+ width: '100%',
141
+ zIndex: 2,
142
+ ...(parseFromValuesOrFunc(alertProps?.sx, theme) as any),
143
+ })}
144
+ >
145
+ {renderToolbarAlertBannerContent?.({
146
+ groupedAlert,
147
+ selectedAlert,
148
+ table,
149
+ }) ?? (
150
+ <>
151
+ {alertProps?.title && <AlertTitle>{alertProps.title}</AlertTitle>}
152
+ <Stack
153
+ sx={{
154
+ p:
155
+ positionToolbarAlertBanner !== 'head-overlay'
156
+ ? '0.5rem 1rem'
157
+ : density === 'spacious'
158
+ ? '0.75rem 1.25rem'
159
+ : density === 'comfortable'
160
+ ? '0.5rem 0.75rem'
161
+ : '0.25rem 0.5rem',
162
+ }}
163
+ >
164
+ {alertProps?.children}
165
+ {alertProps?.children && (selectedAlert || groupedAlert) && (
166
+ <br />
167
+ )}
168
+ <Box sx={{ display: 'flex' }}>
169
+ {enableRowSelection &&
170
+ enableSelectAll &&
171
+ positionToolbarAlertBanner === 'head-overlay' && (
172
+ <MRT_SelectCheckbox table={table} />
173
+ )}{' '}
174
+ {selectedAlert}
175
+ </Box>
176
+ {selectedAlert && groupedAlert && <br />}
177
+ {groupedAlert}
178
+ </Stack>
179
+ </>
180
+ )}
181
+ </Alert>
182
+ </Collapse>
183
+ );
184
+ };
@@ -0,0 +1,83 @@
1
+ import { type DragEvent, useEffect } from 'react';
2
+ import Box, { type BoxProps } from '@mui/material/Box';
3
+ import Fade from '@mui/material/Fade';
4
+ import { alpha } from '@mui/material/styles';
5
+ import Typography from '@mui/material/Typography';
6
+ import { type MRT_RowData, type MRT_TableInstance } from '../../types';
7
+ import { parseFromValuesOrFunc } from '../../utils/utils';
8
+
9
+ export interface MRT_ToolbarDropZoneProps<TData extends MRT_RowData>
10
+ extends BoxProps {
11
+ table: MRT_TableInstance<TData>;
12
+ }
13
+
14
+ export const MRT_ToolbarDropZone = <TData extends MRT_RowData>({
15
+ table,
16
+ ...rest
17
+ }: MRT_ToolbarDropZoneProps<TData>) => {
18
+ const {
19
+ options: { enableGrouping, localization },
20
+ setHoveredColumn,
21
+ setShowToolbarDropZone,
22
+ state,
23
+ } = table;
24
+
25
+ const { draggingColumn, grouping, hoveredColumn, showToolbarDropZone } =
26
+ state;
27
+
28
+ const handleDragEnter = (_event: DragEvent<HTMLDivElement>) => {
29
+ setHoveredColumn({ id: 'drop-zone' });
30
+ };
31
+
32
+ const handleDragOver = (e: DragEvent) => {
33
+ e.preventDefault();
34
+ };
35
+
36
+ useEffect(() => {
37
+ setShowToolbarDropZone(
38
+ !!enableGrouping &&
39
+ !!draggingColumn &&
40
+ draggingColumn.columnDef.enableGrouping !== false &&
41
+ !grouping.includes(draggingColumn.id),
42
+ );
43
+ }, [enableGrouping, draggingColumn, grouping]);
44
+
45
+ return (
46
+ <Fade in={showToolbarDropZone}>
47
+ <Box
48
+ className="Mui-ToolbarDropZone"
49
+ onDragEnter={handleDragEnter}
50
+ onDragOver={handleDragOver}
51
+ {...rest}
52
+ sx={(theme) => ({
53
+ alignItems: 'center',
54
+ backdropFilter: 'blur(4px)',
55
+ backgroundColor: alpha(
56
+ theme.palette.info.main,
57
+ hoveredColumn?.id === 'drop-zone' ? 0.2 : 0.1,
58
+ ),
59
+ border: `dashed ${theme.palette.info.main} 2px`,
60
+ boxSizing: 'border-box',
61
+ display: 'flex',
62
+ height: '100%',
63
+ justifyContent: 'center',
64
+ position: 'absolute',
65
+ width: '100%',
66
+ zIndex: 4,
67
+ ...(parseFromValuesOrFunc(rest?.sx, theme) as any),
68
+ })}
69
+ >
70
+ <Typography
71
+ sx={{
72
+ fontStyle: 'italic',
73
+ }}
74
+ >
75
+ {localization.dropToGroupBy.replace(
76
+ '{column}',
77
+ draggingColumn?.columnDef?.header ?? '',
78
+ )}
79
+ </Typography>
80
+ </Box>
81
+ </Fade>
82
+ );
83
+ };
@@ -0,0 +1,72 @@
1
+ import Box, { type BoxProps } from '@mui/material/Box';
2
+ import { MRT_ShowHideColumnsButton } from '../buttons/MRT_ShowHideColumnsButton';
3
+ import { MRT_ToggleDensePaddingButton } from '../buttons/MRT_ToggleDensePaddingButton';
4
+ import { MRT_ToggleFiltersButton } from '../buttons/MRT_ToggleFiltersButton';
5
+ import { MRT_ToggleFullScreenButton } from '../buttons/MRT_ToggleFullScreenButton';
6
+ import { MRT_ToggleGlobalFilterButton } from '../buttons/MRT_ToggleGlobalFilterButton';
7
+ import { type MRT_RowData, type MRT_TableInstance } from '../../types';
8
+ import { parseFromValuesOrFunc } from '../../utils/utils';
9
+
10
+ export interface MRT_ToolbarInternalButtonsProps<TData extends MRT_RowData>
11
+ extends BoxProps {
12
+ table: MRT_TableInstance<TData>;
13
+ }
14
+
15
+ export const MRT_ToolbarInternalButtons = <TData extends MRT_RowData>({
16
+ table,
17
+ ...rest
18
+ }: MRT_ToolbarInternalButtonsProps<TData>) => {
19
+ const {
20
+ options: {
21
+ columnFilterDisplayMode,
22
+ enableColumnFilters,
23
+ enableColumnOrdering,
24
+ enableColumnPinning,
25
+ enableDensityToggle,
26
+ enableFilters,
27
+ enableFullScreenToggle,
28
+ enableGlobalFilter,
29
+ enableHiding,
30
+ initialState,
31
+ renderToolbarInternalActions,
32
+ },
33
+ } = table;
34
+
35
+ return (
36
+ <Box
37
+ {...rest}
38
+ sx={(theme) => ({
39
+ alignItems: 'center',
40
+ display: 'flex',
41
+ zIndex: 3,
42
+ ...(parseFromValuesOrFunc(rest?.sx, theme) as any),
43
+ })}
44
+ >
45
+ {renderToolbarInternalActions?.({
46
+ table,
47
+ }) ?? (
48
+ <>
49
+ {enableFilters &&
50
+ enableGlobalFilter &&
51
+ !initialState?.showGlobalFilter && (
52
+ <MRT_ToggleGlobalFilterButton table={table} />
53
+ )}
54
+ {enableFilters &&
55
+ enableColumnFilters &&
56
+ columnFilterDisplayMode !== 'popover' && (
57
+ <MRT_ToggleFiltersButton table={table} />
58
+ )}
59
+ {(enableHiding || enableColumnOrdering || enableColumnPinning) && (
60
+ <MRT_ShowHideColumnsButton table={table} />
61
+ )}
62
+ {enableDensityToggle && (
63
+ <MRT_ToggleDensePaddingButton table={table} />
64
+ )}
65
+ {enableFullScreenToggle && (
66
+ <MRT_ToggleFullScreenButton table={table} />
67
+ )}
68
+ </>
69
+ )}
70
+ </Box>
71
+ );
72
+ };
@@ -0,0 +1,130 @@
1
+ import Box from '@mui/material/Box';
2
+ import useMediaQuery from '@mui/material/useMediaQuery';
3
+ import { MRT_GlobalFilterTextField } from '../inputs/MRT_GlobalFilterTextField';
4
+ import { MRT_LinearProgressBar } from './MRT_LinearProgressBar';
5
+ import { MRT_TablePagination } from './MRT_TablePagination';
6
+ import { MRT_ToolbarAlertBanner } from './MRT_ToolbarAlertBanner';
7
+ import { MRT_ToolbarDropZone } from './MRT_ToolbarDropZone';
8
+ import { MRT_ToolbarInternalButtons } from './MRT_ToolbarInternalButtons';
9
+ import { type MRT_RowData, type MRT_TableInstance } from '../../types';
10
+ import { getCommonToolbarStyles } from '../../utils/style.utils';
11
+ import { parseFromValuesOrFunc } from '../../utils/utils';
12
+
13
+ export interface MRT_TopToolbarProps<TData extends MRT_RowData> {
14
+ table: MRT_TableInstance<TData>;
15
+ }
16
+
17
+ export const MRT_TopToolbar = <TData extends MRT_RowData>({
18
+ table,
19
+ }: MRT_TopToolbarProps<TData>) => {
20
+ const {
21
+ options: {
22
+ enableGlobalFilter,
23
+ enablePagination,
24
+ enableToolbarInternalActions,
25
+ muiTopToolbarProps,
26
+ positionGlobalFilter,
27
+ positionPagination,
28
+ positionToolbarAlertBanner,
29
+ positionToolbarDropZone,
30
+ renderTopToolbarCustomActions,
31
+ },
32
+ refs: { topToolbarRef },
33
+ state,
34
+ } = table;
35
+
36
+ const { isFullScreen, showGlobalFilter } = state;
37
+
38
+ const isMobile = useMediaQuery('(max-width:720px)');
39
+ const isTablet = useMediaQuery('(max-width:1024px)');
40
+
41
+ const toolbarProps = parseFromValuesOrFunc(muiTopToolbarProps, { table });
42
+
43
+ const stackAlertBanner =
44
+ isMobile ||
45
+ !!renderTopToolbarCustomActions ||
46
+ (showGlobalFilter && isTablet);
47
+
48
+ const globalFilterProps = {
49
+ sx: !isTablet
50
+ ? {
51
+ zIndex: 2,
52
+ }
53
+ : undefined,
54
+ table,
55
+ };
56
+
57
+ return (
58
+ <Box
59
+ {...toolbarProps}
60
+ ref={(ref: HTMLDivElement) => {
61
+ topToolbarRef.current = ref;
62
+ if (toolbarProps?.ref) {
63
+ // @ts-expect-error
64
+ toolbarProps.ref.current = ref;
65
+ }
66
+ }}
67
+ sx={(theme) => ({
68
+ ...getCommonToolbarStyles({ table, theme }),
69
+ position: isFullScreen ? 'sticky' : 'relative',
70
+ top: isFullScreen ? '0' : undefined,
71
+ ...(parseFromValuesOrFunc(toolbarProps?.sx, theme) as any),
72
+ })}
73
+ >
74
+ {positionToolbarAlertBanner === 'top' && (
75
+ <MRT_ToolbarAlertBanner
76
+ stackAlertBanner={stackAlertBanner}
77
+ table={table}
78
+ />
79
+ )}
80
+ {['both', 'top'].includes(positionToolbarDropZone ?? '') && (
81
+ <MRT_ToolbarDropZone table={table} />
82
+ )}
83
+ <Box
84
+ sx={{
85
+ alignItems: 'flex-start',
86
+ boxSizing: 'border-box',
87
+ display: 'flex',
88
+ gap: '0.5rem',
89
+ justifyContent: 'space-between',
90
+ p: '0.5rem',
91
+ position: stackAlertBanner ? 'relative' : 'absolute',
92
+ right: 0,
93
+ top: 0,
94
+ width: '100%',
95
+ }}
96
+ >
97
+ {enableGlobalFilter && positionGlobalFilter === 'left' && (
98
+ <MRT_GlobalFilterTextField {...globalFilterProps} />
99
+ )}
100
+ {renderTopToolbarCustomActions?.({ table }) ?? <span />}
101
+ {enableToolbarInternalActions ? (
102
+ <Box
103
+ sx={{
104
+ alignItems: 'center',
105
+ display: 'flex',
106
+ flexWrap: 'wrap-reverse',
107
+ gap: '0.5rem',
108
+ justifyContent: 'flex-end',
109
+ }}
110
+ >
111
+ {enableGlobalFilter && positionGlobalFilter === 'right' && (
112
+ <MRT_GlobalFilterTextField {...globalFilterProps} />
113
+ )}
114
+ <MRT_ToolbarInternalButtons table={table} />
115
+ </Box>
116
+ ) : (
117
+ enableGlobalFilter &&
118
+ positionGlobalFilter === 'right' && (
119
+ <MRT_GlobalFilterTextField {...globalFilterProps} />
120
+ )
121
+ )}
122
+ </Box>
123
+ {enablePagination &&
124
+ ['both', 'top'].includes(positionPagination ?? '') && (
125
+ <MRT_TablePagination position="top" table={table} />
126
+ )}
127
+ <MRT_LinearProgressBar isTopToolbar table={table} />
128
+ </Box>
129
+ );
130
+ };
@@ -0,0 +1,67 @@
1
+ import {
2
+ assignTableAPIs,
3
+ functionalUpdate,
4
+ makeStateUpdater,
5
+ type OnChangeFn,
6
+ type RowData,
7
+ type TableFeature,
8
+ type TableFeatures,
9
+ type Updater,
10
+ } from '@tanstack/react-table';
11
+ import { type MRT_Cell } from '../types';
12
+
13
+ export interface MRT_Table_CellActions<TData extends RowData> {
14
+ setActionCell: (updater: Updater<MRT_Cell<TData> | null>) => void;
15
+ }
16
+
17
+ export interface MRT_TableOptions_CellActions<TData extends RowData> {
18
+ onActionCellChange?: OnChangeFn<MRT_Cell<TData> | null>;
19
+ }
20
+
21
+ export interface MRT_TableState_CellActions {
22
+ actionCell: MRT_Cell<any> | null;
23
+ }
24
+
25
+ declare module '@tanstack/react-table' {
26
+ interface Plugins {
27
+ mrtCellActionsFeature: TableFeature;
28
+ }
29
+ interface Table_FeatureMap<
30
+ TFeatures extends TableFeatures,
31
+ TData extends RowData,
32
+ > {
33
+ mrtCellActionsFeature: MRT_Table_CellActions<TData>;
34
+ }
35
+ interface TableOptions_FeatureMap<
36
+ TFeatures extends TableFeatures,
37
+ TData extends RowData,
38
+ > {
39
+ mrtCellActionsFeature: MRT_TableOptions_CellActions<TData>;
40
+ }
41
+ interface TableState_FeatureMap {
42
+ mrtCellActionsFeature: MRT_TableState_CellActions;
43
+ }
44
+ }
45
+
46
+ export const mrtCellActionsFeature: TableFeature = {
47
+ constructTableAPIs: (table) => {
48
+ assignTableAPIs('mrtCellActionsFeature', table, {
49
+ table_setActionCell: {
50
+ fn: (updater: Updater<MRT_Cell<any> | null>) =>
51
+ (
52
+ table.options as MRT_TableOptions_CellActions<any>
53
+ ).onActionCellChange?.((old) => functionalUpdate(updater, old)),
54
+ },
55
+ });
56
+ },
57
+ getDefaultTableOptions: (table) => ({
58
+ onActionCellChange: makeStateUpdater(
59
+ 'actionCell',
60
+ table,
61
+ ) as OnChangeFn<any>,
62
+ }),
63
+ getInitialState: (initialState) => ({
64
+ actionCell: null,
65
+ ...initialState,
66
+ }),
67
+ };
@@ -0,0 +1,83 @@
1
+ import {
2
+ assignTableAPIs,
3
+ functionalUpdate,
4
+ makeStateUpdater,
5
+ type OnChangeFn,
6
+ type RowData,
7
+ type TableFeature,
8
+ type TableFeatures,
9
+ type Updater,
10
+ } from '@tanstack/react-table';
11
+ import { type MRT_Column } from '../types';
12
+
13
+ export interface MRT_Table_ColumnDragging<TData extends RowData> {
14
+ setDraggingColumn: (updater: Updater<MRT_Column<TData> | null>) => void;
15
+ setHoveredColumn: (
16
+ updater: Updater<null | Partial<MRT_Column<TData>>>,
17
+ ) => void;
18
+ }
19
+
20
+ export interface MRT_TableOptions_ColumnDragging<TData extends RowData> {
21
+ onDraggingColumnChange?: OnChangeFn<MRT_Column<TData> | null>;
22
+ onHoveredColumnChange?: OnChangeFn<null | Partial<MRT_Column<TData>>>;
23
+ }
24
+
25
+ export interface MRT_TableState_ColumnDragging {
26
+ draggingColumn: MRT_Column<any> | null;
27
+ hoveredColumn: null | Partial<MRT_Column<any>>;
28
+ }
29
+
30
+ declare module '@tanstack/react-table' {
31
+ interface Plugins {
32
+ mrtColumnDraggingFeature: TableFeature;
33
+ }
34
+ interface Table_FeatureMap<
35
+ TFeatures extends TableFeatures,
36
+ TData extends RowData,
37
+ > {
38
+ mrtColumnDraggingFeature: MRT_Table_ColumnDragging<TData>;
39
+ }
40
+ interface TableOptions_FeatureMap<
41
+ TFeatures extends TableFeatures,
42
+ TData extends RowData,
43
+ > {
44
+ mrtColumnDraggingFeature: MRT_TableOptions_ColumnDragging<TData>;
45
+ }
46
+ interface TableState_FeatureMap {
47
+ mrtColumnDraggingFeature: MRT_TableState_ColumnDragging;
48
+ }
49
+ }
50
+
51
+ export const mrtColumnDraggingFeature: TableFeature = {
52
+ constructTableAPIs: (table) => {
53
+ assignTableAPIs('mrtColumnDraggingFeature', table, {
54
+ table_setDraggingColumn: {
55
+ fn: (updater: Updater<MRT_Column<any> | null>) =>
56
+ (
57
+ table.options as MRT_TableOptions_ColumnDragging<any>
58
+ ).onDraggingColumnChange?.((old) => functionalUpdate(updater, old)),
59
+ },
60
+ table_setHoveredColumn: {
61
+ fn: (updater: Updater<null | Partial<MRT_Column<any>>>) =>
62
+ (
63
+ table.options as MRT_TableOptions_ColumnDragging<any>
64
+ ).onHoveredColumnChange?.((old) => functionalUpdate(updater, old)),
65
+ },
66
+ });
67
+ },
68
+ getDefaultTableOptions: (table) => ({
69
+ onDraggingColumnChange: makeStateUpdater(
70
+ 'draggingColumn',
71
+ table,
72
+ ) as OnChangeFn<any>,
73
+ onHoveredColumnChange: makeStateUpdater(
74
+ 'hoveredColumn',
75
+ table,
76
+ ) as OnChangeFn<any>,
77
+ }),
78
+ getInitialState: (initialState) => ({
79
+ draggingColumn: null,
80
+ hoveredColumn: null,
81
+ ...initialState,
82
+ }),
83
+ };
@@ -0,0 +1,64 @@
1
+ import {
2
+ assignTableAPIs,
3
+ functionalUpdate,
4
+ makeStateUpdater,
5
+ type OnChangeFn,
6
+ type RowData,
7
+ type TableFeature,
8
+ type TableFeatures,
9
+ type Updater,
10
+ } from '@tanstack/react-table';
11
+ import { type MRT_DensityState } from '../types';
12
+
13
+ export interface MRT_Table_Density {
14
+ setDensity: (updater: Updater<MRT_DensityState>) => void;
15
+ }
16
+
17
+ export interface MRT_TableOptions_Density {
18
+ onDensityChange?: OnChangeFn<MRT_DensityState>;
19
+ }
20
+
21
+ export interface MRT_TableState_Density {
22
+ density: MRT_DensityState;
23
+ }
24
+
25
+ declare module '@tanstack/react-table' {
26
+ interface Plugins {
27
+ mrtDensityFeature: TableFeature;
28
+ }
29
+ interface Table_FeatureMap<
30
+ TFeatures extends TableFeatures,
31
+ TData extends RowData,
32
+ > {
33
+ mrtDensityFeature: MRT_Table_Density;
34
+ }
35
+ interface TableOptions_FeatureMap<
36
+ TFeatures extends TableFeatures,
37
+ TData extends RowData,
38
+ > {
39
+ mrtDensityFeature: MRT_TableOptions_Density;
40
+ }
41
+ interface TableState_FeatureMap {
42
+ mrtDensityFeature: MRT_TableState_Density;
43
+ }
44
+ }
45
+
46
+ export const mrtDensityFeature: TableFeature = {
47
+ constructTableAPIs: (table) => {
48
+ assignTableAPIs('mrtDensityFeature', table, {
49
+ table_setDensity: {
50
+ fn: (updater: Updater<MRT_DensityState>) =>
51
+ (table.options as MRT_TableOptions_Density).onDensityChange?.((old) =>
52
+ functionalUpdate(updater, old),
53
+ ),
54
+ },
55
+ });
56
+ },
57
+ getDefaultTableOptions: (table) => ({
58
+ onDensityChange: makeStateUpdater('density', table),
59
+ }),
60
+ getInitialState: (initialState) => ({
61
+ density: 'comfortable',
62
+ ...initialState,
63
+ }),
64
+ };