@careharmony/mantine-react-table-ng 0.0.0-stage → 4.0.0-beta.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 (371) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +217 -3
  3. package/dist/index.cjs +4023 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +1488 -0
  6. package/dist/index.esm.d.mts +1488 -0
  7. package/dist/index.esm.mjs +3909 -0
  8. package/dist/index.esm.mjs.map +1 -0
  9. package/locales/ar/index.cjs +97 -0
  10. package/locales/ar/index.d.cts +3 -0
  11. package/locales/ar/index.esm.d.mts +3 -0
  12. package/locales/ar/index.esm.mjs +95 -0
  13. package/locales/ar/package.json +19 -0
  14. package/locales/az/index.cjs +97 -0
  15. package/locales/az/index.d.cts +3 -0
  16. package/locales/az/index.esm.d.mts +3 -0
  17. package/locales/az/index.esm.mjs +95 -0
  18. package/locales/az/package.json +19 -0
  19. package/locales/bg/index.cjs +97 -0
  20. package/locales/bg/index.d.cts +3 -0
  21. package/locales/bg/index.esm.d.mts +3 -0
  22. package/locales/bg/index.esm.mjs +95 -0
  23. package/locales/bg/package.json +19 -0
  24. package/locales/cs/index.cjs +97 -0
  25. package/locales/cs/index.d.cts +3 -0
  26. package/locales/cs/index.esm.d.mts +3 -0
  27. package/locales/cs/index.esm.mjs +95 -0
  28. package/locales/cs/package.json +19 -0
  29. package/locales/da/index.cjs +97 -0
  30. package/locales/da/index.d.cts +3 -0
  31. package/locales/da/index.esm.d.mts +3 -0
  32. package/locales/da/index.esm.mjs +95 -0
  33. package/locales/da/package.json +19 -0
  34. package/locales/de/index.cjs +97 -0
  35. package/locales/de/index.d.cts +3 -0
  36. package/locales/de/index.esm.d.mts +3 -0
  37. package/locales/de/index.esm.mjs +95 -0
  38. package/locales/de/package.json +19 -0
  39. package/locales/el/index.cjs +97 -0
  40. package/locales/el/index.d.cts +3 -0
  41. package/locales/el/index.esm.d.mts +3 -0
  42. package/locales/el/index.esm.mjs +95 -0
  43. package/locales/el/package.json +19 -0
  44. package/locales/en/index.cjs +97 -0
  45. package/locales/en/index.d.cts +3 -0
  46. package/locales/en/index.esm.d.mts +3 -0
  47. package/locales/en/index.esm.mjs +95 -0
  48. package/locales/en/package.json +19 -0
  49. package/locales/es/index.cjs +97 -0
  50. package/locales/es/index.d.cts +3 -0
  51. package/locales/es/index.esm.d.mts +3 -0
  52. package/locales/es/index.esm.mjs +95 -0
  53. package/locales/es/package.json +19 -0
  54. package/locales/et/index.cjs +97 -0
  55. package/locales/et/index.d.cts +3 -0
  56. package/locales/et/index.esm.d.mts +3 -0
  57. package/locales/et/index.esm.mjs +95 -0
  58. package/locales/et/package.json +19 -0
  59. package/locales/fa/index.cjs +97 -0
  60. package/locales/fa/index.d.cts +3 -0
  61. package/locales/fa/index.esm.d.mts +3 -0
  62. package/locales/fa/index.esm.mjs +95 -0
  63. package/locales/fa/package.json +19 -0
  64. package/locales/fi/index.cjs +97 -0
  65. package/locales/fi/index.d.cts +3 -0
  66. package/locales/fi/index.esm.d.mts +3 -0
  67. package/locales/fi/index.esm.mjs +95 -0
  68. package/locales/fi/package.json +19 -0
  69. package/locales/fr/index.cjs +97 -0
  70. package/locales/fr/index.d.cts +3 -0
  71. package/locales/fr/index.esm.d.mts +3 -0
  72. package/locales/fr/index.esm.mjs +95 -0
  73. package/locales/fr/package.json +19 -0
  74. package/locales/he/index.cjs +97 -0
  75. package/locales/he/index.d.cts +3 -0
  76. package/locales/he/index.esm.d.mts +3 -0
  77. package/locales/he/index.esm.mjs +95 -0
  78. package/locales/he/package.json +19 -0
  79. package/locales/hr/index.cjs +97 -0
  80. package/locales/hr/index.d.cts +3 -0
  81. package/locales/hr/index.esm.d.mts +3 -0
  82. package/locales/hr/index.esm.mjs +95 -0
  83. package/locales/hr/package.json +19 -0
  84. package/locales/hu/index.cjs +97 -0
  85. package/locales/hu/index.d.cts +3 -0
  86. package/locales/hu/index.esm.d.mts +3 -0
  87. package/locales/hu/index.esm.mjs +95 -0
  88. package/locales/hu/package.json +19 -0
  89. package/locales/hy/index.cjs +97 -0
  90. package/locales/hy/index.d.cts +3 -0
  91. package/locales/hy/index.esm.d.mts +3 -0
  92. package/locales/hy/index.esm.mjs +95 -0
  93. package/locales/hy/package.json +19 -0
  94. package/locales/id/index.cjs +97 -0
  95. package/locales/id/index.d.cts +3 -0
  96. package/locales/id/index.esm.d.mts +3 -0
  97. package/locales/id/index.esm.mjs +95 -0
  98. package/locales/id/package.json +19 -0
  99. package/locales/it/index.cjs +97 -0
  100. package/locales/it/index.d.cts +3 -0
  101. package/locales/it/index.esm.d.mts +3 -0
  102. package/locales/it/index.esm.mjs +95 -0
  103. package/locales/it/package.json +19 -0
  104. package/locales/ja/index.cjs +97 -0
  105. package/locales/ja/index.d.cts +3 -0
  106. package/locales/ja/index.esm.d.mts +3 -0
  107. package/locales/ja/index.esm.mjs +95 -0
  108. package/locales/ja/package.json +19 -0
  109. package/locales/ko/index.cjs +97 -0
  110. package/locales/ko/index.d.cts +3 -0
  111. package/locales/ko/index.esm.d.mts +3 -0
  112. package/locales/ko/index.esm.mjs +95 -0
  113. package/locales/ko/package.json +19 -0
  114. package/locales/nl/index.cjs +97 -0
  115. package/locales/nl/index.d.cts +3 -0
  116. package/locales/nl/index.esm.d.mts +3 -0
  117. package/locales/nl/index.esm.mjs +95 -0
  118. package/locales/nl/package.json +19 -0
  119. package/locales/no/index.cjs +97 -0
  120. package/locales/no/index.d.cts +3 -0
  121. package/locales/no/index.esm.d.mts +3 -0
  122. package/locales/no/index.esm.mjs +95 -0
  123. package/locales/no/package.json +19 -0
  124. package/locales/np/index.cjs +97 -0
  125. package/locales/np/index.d.cts +3 -0
  126. package/locales/np/index.esm.d.mts +3 -0
  127. package/locales/np/index.esm.mjs +95 -0
  128. package/locales/np/package.json +19 -0
  129. package/locales/pl/index.cjs +97 -0
  130. package/locales/pl/index.d.cts +3 -0
  131. package/locales/pl/index.esm.d.mts +3 -0
  132. package/locales/pl/index.esm.mjs +95 -0
  133. package/locales/pl/package.json +19 -0
  134. package/locales/pt/index.cjs +97 -0
  135. package/locales/pt/index.d.cts +3 -0
  136. package/locales/pt/index.esm.d.mts +3 -0
  137. package/locales/pt/index.esm.mjs +95 -0
  138. package/locales/pt/package.json +19 -0
  139. package/locales/pt-BR/index.cjs +97 -0
  140. package/locales/pt-BR/index.d.cts +3 -0
  141. package/locales/pt-BR/index.esm.d.mts +3 -0
  142. package/locales/pt-BR/index.esm.mjs +95 -0
  143. package/locales/pt-BR/package.json +19 -0
  144. package/locales/ro/index.cjs +97 -0
  145. package/locales/ro/index.d.cts +3 -0
  146. package/locales/ro/index.esm.d.mts +3 -0
  147. package/locales/ro/index.esm.mjs +95 -0
  148. package/locales/ro/package.json +19 -0
  149. package/locales/ru/index.cjs +97 -0
  150. package/locales/ru/index.d.cts +3 -0
  151. package/locales/ru/index.esm.d.mts +3 -0
  152. package/locales/ru/index.esm.mjs +95 -0
  153. package/locales/ru/package.json +19 -0
  154. package/locales/sk/index.cjs +97 -0
  155. package/locales/sk/index.d.cts +3 -0
  156. package/locales/sk/index.esm.d.mts +3 -0
  157. package/locales/sk/index.esm.mjs +95 -0
  158. package/locales/sk/package.json +19 -0
  159. package/locales/sr-Cyrl-RS/index.cjs +97 -0
  160. package/locales/sr-Cyrl-RS/index.d.cts +3 -0
  161. package/locales/sr-Cyrl-RS/index.esm.d.mts +3 -0
  162. package/locales/sr-Cyrl-RS/index.esm.mjs +95 -0
  163. package/locales/sr-Cyrl-RS/package.json +19 -0
  164. package/locales/sr-Latn-RS/index.cjs +97 -0
  165. package/locales/sr-Latn-RS/index.d.cts +3 -0
  166. package/locales/sr-Latn-RS/index.esm.d.mts +3 -0
  167. package/locales/sr-Latn-RS/index.esm.mjs +95 -0
  168. package/locales/sr-Latn-RS/package.json +19 -0
  169. package/locales/sv/index.cjs +97 -0
  170. package/locales/sv/index.d.cts +3 -0
  171. package/locales/sv/index.esm.d.mts +3 -0
  172. package/locales/sv/index.esm.mjs +95 -0
  173. package/locales/sv/package.json +19 -0
  174. package/locales/th/index.cjs +97 -0
  175. package/locales/th/index.d.cts +3 -0
  176. package/locales/th/index.esm.d.mts +3 -0
  177. package/locales/th/index.esm.mjs +95 -0
  178. package/locales/th/package.json +19 -0
  179. package/locales/tr/index.cjs +97 -0
  180. package/locales/tr/index.d.cts +3 -0
  181. package/locales/tr/index.esm.d.mts +3 -0
  182. package/locales/tr/index.esm.mjs +95 -0
  183. package/locales/tr/package.json +19 -0
  184. package/locales/uk/index.cjs +97 -0
  185. package/locales/uk/index.d.cts +3 -0
  186. package/locales/uk/index.esm.d.mts +3 -0
  187. package/locales/uk/index.esm.mjs +95 -0
  188. package/locales/uk/package.json +19 -0
  189. package/locales/vi/index.cjs +97 -0
  190. package/locales/vi/index.d.cts +3 -0
  191. package/locales/vi/index.esm.d.mts +3 -0
  192. package/locales/vi/index.esm.mjs +95 -0
  193. package/locales/vi/package.json +19 -0
  194. package/locales/zh-Hans/index.cjs +97 -0
  195. package/locales/zh-Hans/index.d.cts +3 -0
  196. package/locales/zh-Hans/index.esm.d.mts +3 -0
  197. package/locales/zh-Hans/index.esm.mjs +95 -0
  198. package/locales/zh-Hans/package.json +19 -0
  199. package/locales/zh-Hant/index.cjs +97 -0
  200. package/locales/zh-Hant/index.d.cts +3 -0
  201. package/locales/zh-Hant/index.esm.d.mts +3 -0
  202. package/locales/zh-Hant/index.esm.mjs +95 -0
  203. package/locales/zh-Hant/package.json +19 -0
  204. package/package.json +184 -4
  205. package/src/components/MantineReactTable.tsx +38 -0
  206. package/src/components/body/MRT_TableBody.module.css +42 -0
  207. package/src/components/body/MRT_TableBody.tsx +214 -0
  208. package/src/components/body/MRT_TableBodyCell.module.css +107 -0
  209. package/src/components/body/MRT_TableBodyCell.tsx +355 -0
  210. package/src/components/body/MRT_TableBodyCellValue.tsx +114 -0
  211. package/src/components/body/MRT_TableBodyEmptyRow.tsx +89 -0
  212. package/src/components/body/MRT_TableBodyRow.module.css +261 -0
  213. package/src/components/body/MRT_TableBodyRow.tsx +278 -0
  214. package/src/components/body/MRT_TableBodyRowGrabHandle.tsx +59 -0
  215. package/src/components/body/MRT_TableBodyRowPinButton.tsx +59 -0
  216. package/src/components/body/MRT_TableDetailPanel.module.css +35 -0
  217. package/src/components/body/MRT_TableDetailPanel.tsx +132 -0
  218. package/src/components/buttons/MRT_ColumnPinningButtons.module.css +11 -0
  219. package/src/components/buttons/MRT_ColumnPinningButtons.tsx +69 -0
  220. package/src/components/buttons/MRT_CopyButton.module.css +27 -0
  221. package/src/components/buttons/MRT_CopyButton.tsx +84 -0
  222. package/src/components/buttons/MRT_EditActionButtons.module.css +4 -0
  223. package/src/components/buttons/MRT_EditActionButtons.tsx +139 -0
  224. package/src/components/buttons/MRT_ExpandAllButton.module.css +26 -0
  225. package/src/components/buttons/MRT_ExpandAllButton.tsx +84 -0
  226. package/src/components/buttons/MRT_ExpandButton.module.css +37 -0
  227. package/src/components/buttons/MRT_ExpandButton.tsx +121 -0
  228. package/src/components/buttons/MRT_GrabHandleButton.module.css +6 -0
  229. package/src/components/buttons/MRT_GrabHandleButton.tsx +65 -0
  230. package/src/components/buttons/MRT_RowPinButton.tsx +84 -0
  231. package/src/components/buttons/MRT_ShowHideColumnsButton.tsx +46 -0
  232. package/src/components/buttons/MRT_ToggleDensePaddingButton.tsx +66 -0
  233. package/src/components/buttons/MRT_ToggleFiltersButton.tsx +45 -0
  234. package/src/components/buttons/MRT_ToggleFullScreenButton.tsx +59 -0
  235. package/src/components/buttons/MRT_ToggleGlobalFilterButton.tsx +52 -0
  236. package/src/components/buttons/MRT_ToggleRowActionMenuButton.tsx +87 -0
  237. package/src/components/footer/MRT_TableFooter.module.css +17 -0
  238. package/src/components/footer/MRT_TableFooter.tsx +70 -0
  239. package/src/components/footer/MRT_TableFooterCell.module.css +59 -0
  240. package/src/components/footer/MRT_TableFooterCell.tsx +126 -0
  241. package/src/components/footer/MRT_TableFooterRow.module.css +10 -0
  242. package/src/components/footer/MRT_TableFooterRow.tsx +111 -0
  243. package/src/components/head/MRT_TableHead.module.css +32 -0
  244. package/src/components/head/MRT_TableHead.tsx +106 -0
  245. package/src/components/head/MRT_TableHeadCell.module.css +172 -0
  246. package/src/components/head/MRT_TableHeadCell.tsx +317 -0
  247. package/src/components/head/MRT_TableHeadCellFilterContainer.module.css +5 -0
  248. package/src/components/head/MRT_TableHeadCellFilterContainer.tsx +123 -0
  249. package/src/components/head/MRT_TableHeadCellFilterLabel.module.css +14 -0
  250. package/src/components/head/MRT_TableHeadCellFilterLabel.tsx +176 -0
  251. package/src/components/head/MRT_TableHeadCellGrabHandle.tsx +82 -0
  252. package/src/components/head/MRT_TableHeadCellResizeHandle.module.css +44 -0
  253. package/src/components/head/MRT_TableHeadCellResizeHandle.tsx +68 -0
  254. package/src/components/head/MRT_TableHeadCellSortLabel.module.css +22 -0
  255. package/src/components/head/MRT_TableHeadCellSortLabel.tsx +90 -0
  256. package/src/components/head/MRT_TableHeadRow.module.css +12 -0
  257. package/src/components/head/MRT_TableHeadRow.tsx +105 -0
  258. package/src/components/inputs/MRT_EditCellTextInput.tsx +214 -0
  259. package/src/components/inputs/MRT_FilterCheckBox.module.css +4 -0
  260. package/src/components/inputs/MRT_FilterCheckbox.tsx +80 -0
  261. package/src/components/inputs/MRT_FilterRangeFields.module.css +5 -0
  262. package/src/components/inputs/MRT_FilterRangeFields.tsx +36 -0
  263. package/src/components/inputs/MRT_FilterRangeSlider.module.css +6 -0
  264. package/src/components/inputs/MRT_FilterRangeSlider.tsx +107 -0
  265. package/src/components/inputs/MRT_FilterTextInput.module.css +27 -0
  266. package/src/components/inputs/MRT_FilterTextInput.tsx +418 -0
  267. package/src/components/inputs/MRT_GlobalFilterTextInput.module.css +11 -0
  268. package/src/components/inputs/MRT_GlobalFilterTextInput.tsx +142 -0
  269. package/src/components/inputs/MRT_SelectCheckbox.tsx +138 -0
  270. package/src/components/menus/MRT_ColumnActionMenu.module.css +7 -0
  271. package/src/components/menus/MRT_ColumnActionMenu.tsx +288 -0
  272. package/src/components/menus/MRT_FilterOptionMenu.module.css +6 -0
  273. package/src/components/menus/MRT_FilterOptionMenu.tsx +279 -0
  274. package/src/components/menus/MRT_RowActionMenu.tsx +75 -0
  275. package/src/components/menus/MRT_ShowHideColumnsMenu.module.css +10 -0
  276. package/src/components/menus/MRT_ShowHideColumnsMenu.tsx +136 -0
  277. package/src/components/menus/MRT_ShowHideColumnsMenuItems.module.css +35 -0
  278. package/src/components/menus/MRT_ShowHideColumnsMenuItems.tsx +171 -0
  279. package/src/components/modals/MRT_EditRowModal.tsx +98 -0
  280. package/src/components/table/MRT_Table.module.css +7 -0
  281. package/src/components/table/MRT_Table.tsx +155 -0
  282. package/src/components/table/MRT_TableContainer.module.css +32 -0
  283. package/src/components/table/MRT_TableContainer.tsx +124 -0
  284. package/src/components/table/MRT_TablePaper.module.css +88 -0
  285. package/src/components/table/MRT_TablePaper.tsx +91 -0
  286. package/src/components/toolbar/MRT_BottomToolbar.module.css +40 -0
  287. package/src/components/toolbar/MRT_BottomToolbar.tsx +99 -0
  288. package/src/components/toolbar/MRT_ProgressBar.module.css +10 -0
  289. package/src/components/toolbar/MRT_ProgressBar.tsx +54 -0
  290. package/src/components/toolbar/MRT_TablePagination.module.css +20 -0
  291. package/src/components/toolbar/MRT_TablePagination.tsx +175 -0
  292. package/src/components/toolbar/MRT_ToolbarAlertBanner.module.css +37 -0
  293. package/src/components/toolbar/MRT_ToolbarAlertBanner.tsx +169 -0
  294. package/src/components/toolbar/MRT_ToolbarDropZone.module.css +23 -0
  295. package/src/components/toolbar/MRT_ToolbarDropZone.tsx +68 -0
  296. package/src/components/toolbar/MRT_ToolbarInternalButtons.module.css +6 -0
  297. package/src/components/toolbar/MRT_ToolbarInternalButtons.tsx +74 -0
  298. package/src/components/toolbar/MRT_TopToolbar.module.css +24 -0
  299. package/src/components/toolbar/MRT_TopToolbar.tsx +127 -0
  300. package/src/components/toolbar/common.styles.module.css +10 -0
  301. package/src/fns/aggregationFns.ts +3 -0
  302. package/src/fns/filterFns.ts +243 -0
  303. package/src/fns/sortingFns.ts +34 -0
  304. package/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx +25 -0
  305. package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +32 -0
  306. package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +94 -0
  307. package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +32 -0
  308. package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +26 -0
  309. package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +36 -0
  310. package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +36 -0
  311. package/src/hooks/useMRT_ColumnVirtualizer.ts +135 -0
  312. package/src/hooks/useMRT_Effects.ts +109 -0
  313. package/src/hooks/useMRT_RowVirtualizer.ts +101 -0
  314. package/src/hooks/useMRT_Rows.ts +47 -0
  315. package/src/hooks/useMRT_TableInstance.ts +320 -0
  316. package/src/hooks/useMRT_TableOptions.ts +300 -0
  317. package/src/hooks/useMRT_TableSnapshot.ts +134 -0
  318. package/src/hooks/useMRT_VirtualizerScrollElement.ts +31 -0
  319. package/src/hooks/useMantineReactTable.ts +23 -0
  320. package/src/icons.ts +108 -0
  321. package/src/index.ts +91 -0
  322. package/src/locales/ar.ts +96 -0
  323. package/src/locales/az.ts +96 -0
  324. package/src/locales/bg.ts +96 -0
  325. package/src/locales/cs.ts +97 -0
  326. package/src/locales/da.ts +96 -0
  327. package/src/locales/de.ts +96 -0
  328. package/src/locales/el.ts +96 -0
  329. package/src/locales/en.ts +96 -0
  330. package/src/locales/es.ts +96 -0
  331. package/src/locales/et.ts +97 -0
  332. package/src/locales/fa.ts +96 -0
  333. package/src/locales/fi.ts +97 -0
  334. package/src/locales/fr.ts +96 -0
  335. package/src/locales/he.ts +96 -0
  336. package/src/locales/hr.ts +96 -0
  337. package/src/locales/hu.ts +96 -0
  338. package/src/locales/hy.ts +96 -0
  339. package/src/locales/id.ts +97 -0
  340. package/src/locales/it.ts +96 -0
  341. package/src/locales/ja.ts +96 -0
  342. package/src/locales/ko.ts +96 -0
  343. package/src/locales/nl.ts +96 -0
  344. package/src/locales/no.ts +97 -0
  345. package/src/locales/np.ts +97 -0
  346. package/src/locales/pl.ts +96 -0
  347. package/src/locales/pt-BR.ts +96 -0
  348. package/src/locales/pt.ts +96 -0
  349. package/src/locales/ro.ts +96 -0
  350. package/src/locales/ru.ts +96 -0
  351. package/src/locales/sk.ts +97 -0
  352. package/src/locales/sr-Cyrl-RS.ts +96 -0
  353. package/src/locales/sr-Latn-RS.ts +96 -0
  354. package/src/locales/sv.ts +96 -0
  355. package/src/locales/th.ts +97 -0
  356. package/src/locales/tr.ts +96 -0
  357. package/src/locales/uk.ts +96 -0
  358. package/src/locales/vi.ts +96 -0
  359. package/src/locales/zh-Hans.ts +95 -0
  360. package/src/locales/zh-Hant.ts +95 -0
  361. package/src/types.ts +1299 -0
  362. package/src/typings.d.ts +1 -0
  363. package/src/utils/column.utils.ts +157 -0
  364. package/src/utils/displayColumn.utils.ts +153 -0
  365. package/src/utils/row.utils.ts +263 -0
  366. package/src/utils/snapshot.utils.ts +97 -0
  367. package/src/utils/style.utils.ts +32 -0
  368. package/src/utils/tanstack.helpers.ts +66 -0
  369. package/src/utils/utils.ts +15 -0
  370. package/src/utils/virtualization.utils.ts +85 -0
  371. package/styles.css +1381 -0
@@ -0,0 +1,105 @@
1
+ 'use no memo';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ import classes from './MRT_TableHeadRow.module.css';
6
+
7
+ import { Box, TableTr, type TableTrProps } from '@mantine/core';
8
+
9
+ import { MRT_TableHeadCell } from './MRT_TableHeadCell';
10
+
11
+ import {
12
+ type MRT_ColumnVirtualizer,
13
+ type MRT_Header,
14
+ type MRT_HeaderGroup,
15
+ type MRT_RowData,
16
+ type MRT_TableInstance,
17
+ type MRT_VirtualItem,
18
+ } from '../../types';
19
+ import { parseFromValuesOrFunc } from '../../utils/utils';
20
+ import { getVirtualGroupHeaders } from '../../utils/virtualization.utils';
21
+
22
+ interface Props<TData extends MRT_RowData> extends TableTrProps {
23
+ columnVirtualizer?: MRT_ColumnVirtualizer;
24
+ headerGroup: MRT_HeaderGroup<TData>;
25
+ table: MRT_TableInstance<TData>;
26
+ }
27
+
28
+ export const MRT_TableHeadRow = <TData extends MRT_RowData>({
29
+ columnVirtualizer,
30
+ headerGroup,
31
+ table,
32
+ ...rest
33
+ }: Props<TData>) => {
34
+ const {
35
+ getState,
36
+ options: { enableStickyHeader, layoutMode, mantineTableHeadRowProps },
37
+ } = table;
38
+ const { isFullScreen } = getState();
39
+
40
+ const { virtualColumns, virtualPaddingLeft, virtualPaddingRight } =
41
+ columnVirtualizer ?? {};
42
+
43
+ const virtualGroupHeaders = getVirtualGroupHeaders({
44
+ headers: headerGroup.headers,
45
+ table,
46
+ virtualColumns,
47
+ });
48
+
49
+ const tableRowProps = {
50
+ ...parseFromValuesOrFunc(mantineTableHeadRowProps, {
51
+ headerGroup,
52
+ table,
53
+ }),
54
+ ...rest,
55
+ };
56
+
57
+ return (
58
+ <TableTr
59
+ {...tableRowProps}
60
+ className={clsx(
61
+ classes.root,
62
+ (enableStickyHeader || isFullScreen) && classes.sticky,
63
+ layoutMode?.startsWith('grid') && classes['layout-mode-grid'],
64
+ tableRowProps?.className,
65
+ )}
66
+ >
67
+ {virtualPaddingLeft ? (
68
+ <Box component="th" display="flex" w={virtualPaddingLeft} />
69
+ ) : null}
70
+ {virtualGroupHeaders?.map(({ header, index, style }) => (
71
+ <MRT_TableHeadCell
72
+ columnVirtualizer={columnVirtualizer}
73
+ header={header}
74
+ key={header.id}
75
+ renderedHeaderIndex={index}
76
+ style={style}
77
+ table={table}
78
+ />
79
+ )) ??
80
+ (virtualColumns ?? headerGroup.headers).map(
81
+ (headerOrVirtualHeader, renderedHeaderIndex) => {
82
+ let header = headerOrVirtualHeader as MRT_Header<TData>;
83
+ if (columnVirtualizer) {
84
+ renderedHeaderIndex = (headerOrVirtualHeader as MRT_VirtualItem)
85
+ .index;
86
+ header = headerGroup.headers[renderedHeaderIndex];
87
+ }
88
+
89
+ return (
90
+ <MRT_TableHeadCell
91
+ columnVirtualizer={columnVirtualizer}
92
+ header={header}
93
+ key={header.id}
94
+ renderedHeaderIndex={renderedHeaderIndex}
95
+ table={table}
96
+ />
97
+ );
98
+ },
99
+ )}
100
+ {virtualPaddingRight ? (
101
+ <Box component="th" display="flex" w={virtualPaddingRight} />
102
+ ) : null}
103
+ </TableTr>
104
+ );
105
+ };
@@ -0,0 +1,214 @@
1
+ 'use no memo';
2
+
3
+ import { type FocusEvent, type KeyboardEvent, useState } from 'react';
4
+
5
+ import {
6
+ MultiSelect,
7
+ type MultiSelectProps,
8
+ Select,
9
+ type SelectProps,
10
+ TextInput,
11
+ type TextInputProps,
12
+ } from '@mantine/core';
13
+
14
+ import {
15
+ type HTMLPropsRef,
16
+ type MRT_Cell,
17
+ type MRT_CellValue,
18
+ type MRT_RowData,
19
+ type MRT_TableInstance,
20
+ } from '../../types';
21
+ import { assignRef, parseFromValuesOrFunc } from '../../utils/utils';
22
+
23
+ interface PropsTextInput<TData extends MRT_RowData, TValue = MRT_CellValue>
24
+ extends TextInputProps {
25
+ cell: MRT_Cell<TData, TValue>;
26
+ table: MRT_TableInstance<TData>;
27
+ }
28
+
29
+ interface PropsSelect<TData extends MRT_RowData, TValue = MRT_CellValue>
30
+ extends SelectProps {
31
+ cell: MRT_Cell<TData, TValue>;
32
+ table: MRT_TableInstance<TData>;
33
+ }
34
+
35
+ interface PropsMultiSelect<TData extends MRT_RowData, TValue = MRT_CellValue>
36
+ extends MultiSelectProps {
37
+ cell: MRT_Cell<TData, TValue>;
38
+ table: MRT_TableInstance<TData>;
39
+ }
40
+
41
+ type MRT_TextInputProps = HTMLPropsRef<HTMLInputElement> & TextInputProps;
42
+ type MRT_SelectProps = HTMLPropsRef<HTMLInputElement> & SelectProps;
43
+ type MRT_MultiSelectProps = HTMLPropsRef<HTMLInputElement> & MultiSelectProps;
44
+
45
+ export const MRT_EditCellTextInput = <TData extends MRT_RowData>({
46
+ cell,
47
+ table,
48
+ ...rest
49
+ }: PropsMultiSelect<TData> | PropsSelect<TData> | PropsTextInput<TData>) => {
50
+ const {
51
+ getState,
52
+ options: {
53
+ createDisplayMode,
54
+ editDisplayMode,
55
+ mantineEditSelectProps,
56
+ mantineEditTextInputProps,
57
+ },
58
+ refs: { editInputRefs },
59
+ setCreatingRow,
60
+ setEditingCell,
61
+ setEditingRow,
62
+ } = table;
63
+ const { column, row } = cell;
64
+ const { columnDef } = column;
65
+ const { creatingRow, editingRow } = getState();
66
+
67
+ const isCreating = creatingRow?.id === row.id;
68
+ const isEditing = editingRow?.id === row.id;
69
+ const isSelectEdit = columnDef.editVariant === 'select';
70
+ const isMultiSelectEdit = columnDef.editVariant === 'multi-select';
71
+
72
+ const [value, setValue] = useState(() => cell.getValue<any>());
73
+
74
+ const arg = { cell, column, row, table };
75
+ const textInputProps = {
76
+ ...parseFromValuesOrFunc(mantineEditTextInputProps, arg),
77
+ ...parseFromValuesOrFunc(columnDef.mantineEditTextInputProps, arg),
78
+ ...rest,
79
+ } as MRT_TextInputProps;
80
+
81
+ const selectProps = {
82
+ ...parseFromValuesOrFunc(mantineEditSelectProps, arg),
83
+ ...parseFromValuesOrFunc(columnDef.mantineEditSelectProps, arg),
84
+ ...rest,
85
+ };
86
+
87
+ const saveInputValueToRowCache = (newValue: null | string) => {
88
+ //@ts-ignore
89
+ row._valuesCache[column.id] = newValue;
90
+ if (isCreating) {
91
+ setCreatingRow(row);
92
+ } else if (isEditing) {
93
+ setEditingRow(row);
94
+ }
95
+ };
96
+
97
+ const handleBlur = (event: FocusEvent<HTMLInputElement>) => {
98
+ textInputProps.onBlur?.(event);
99
+ saveInputValueToRowCache(value);
100
+ setEditingCell(null);
101
+ };
102
+
103
+ const handleEnterKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
104
+ textInputProps.onKeyDown?.(event);
105
+ //Enter also confirms an IME composition (Chinese, Japanese, Korean input)
106
+ if (event.key === 'Enter' && !event.nativeEvent.isComposing) {
107
+ editInputRefs.current[cell.id]?.blur();
108
+ }
109
+ };
110
+
111
+ if (columnDef.Edit) {
112
+ return columnDef.Edit?.({ cell, column, row, table });
113
+ }
114
+
115
+ const commonProps = {
116
+ disabled: parseFromValuesOrFunc(columnDef.enableEditing, row) === false,
117
+ label: ['custom', 'modal'].includes(
118
+ (isCreating ? createDisplayMode : editDisplayMode) as string,
119
+ )
120
+ ? column.columnDef.header
121
+ : undefined,
122
+ name: cell.id,
123
+ onClick: (e: any) => {
124
+ e.stopPropagation();
125
+ textInputProps?.onClick?.(e);
126
+ },
127
+ placeholder: !['custom', 'modal'].includes(
128
+ (isCreating ? createDisplayMode : editDisplayMode) as string,
129
+ )
130
+ ? columnDef.header
131
+ : undefined,
132
+ value,
133
+ variant: editDisplayMode === 'table' ? 'unstyled' : 'default',
134
+ } as const;
135
+
136
+ if (isSelectEdit) {
137
+ return (
138
+ <Select
139
+ {...commonProps}
140
+ searchable
141
+ value={value as any}
142
+ {...(selectProps as MRT_SelectProps)}
143
+ onBlur={handleBlur}
144
+ onChange={(value, option) => {
145
+ (selectProps as MRT_SelectProps).onChange?.(value as any, option);
146
+ setValue(value);
147
+ }}
148
+ onClick={(e) => {
149
+ e.stopPropagation();
150
+ selectProps?.onClick?.(e);
151
+ }}
152
+ ref={(node) => {
153
+ if (node) {
154
+ editInputRefs.current[cell.id] = node;
155
+ assignRef(selectProps.ref, node);
156
+ }
157
+ }}
158
+ />
159
+ );
160
+ }
161
+
162
+ if (isMultiSelectEdit) {
163
+ return (
164
+ <MultiSelect
165
+ {...commonProps}
166
+ searchable
167
+ value={value}
168
+ {...(selectProps as MRT_MultiSelectProps)}
169
+ onBlur={handleBlur}
170
+ onChange={(newValue) => {
171
+ (selectProps as MRT_MultiSelectProps).onChange?.(newValue);
172
+ setValue(newValue);
173
+ // Save if not in focus, otherwise it will be handled by onBlur
174
+ if (document.activeElement === editInputRefs.current[cell.id]) return;
175
+ saveInputValueToRowCache(newValue as any);
176
+ }}
177
+ onClick={(e) => {
178
+ e.stopPropagation();
179
+ selectProps?.onClick?.(e);
180
+ }}
181
+ ref={(node) => {
182
+ if (node) {
183
+ editInputRefs.current[cell.id] = node;
184
+ assignRef(selectProps.ref, node);
185
+ }
186
+ }}
187
+ />
188
+ );
189
+ }
190
+
191
+ return (
192
+ <TextInput
193
+ {...commonProps}
194
+ onKeyDown={handleEnterKeyDown}
195
+ value={value ?? ''}
196
+ {...textInputProps}
197
+ onBlur={handleBlur}
198
+ onChange={(event) => {
199
+ textInputProps.onChange?.(event);
200
+ setValue(event.target.value);
201
+ }}
202
+ onClick={(event) => {
203
+ event.stopPropagation();
204
+ textInputProps?.onClick?.(event);
205
+ }}
206
+ ref={(node) => {
207
+ if (node) {
208
+ editInputRefs.current[cell.id] = node;
209
+ assignRef(textInputProps.ref, node);
210
+ }
211
+ }}
212
+ />
213
+ );
214
+ };
@@ -0,0 +1,4 @@
1
+ .root {
2
+ font-weight: normal;
3
+ margin-top: 8px;
4
+ }
@@ -0,0 +1,80 @@
1
+ 'use no memo';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ import classes from './MRT_FilterCheckBox.module.css';
6
+
7
+ import { Checkbox, type CheckboxProps, Tooltip } from '@mantine/core';
8
+
9
+ import {
10
+ type MRT_CellValue,
11
+ type MRT_Column,
12
+ type MRT_RowData,
13
+ type MRT_TableInstance,
14
+ } from '../../types';
15
+ import { parseFromValuesOrFunc } from '../../utils/utils';
16
+
17
+ interface Props<TData extends MRT_RowData, TValue = MRT_CellValue>
18
+ extends CheckboxProps {
19
+ column: MRT_Column<TData, TValue>;
20
+ table: MRT_TableInstance<TData>;
21
+ }
22
+
23
+ export const MRT_FilterCheckbox = <TData extends MRT_RowData>({
24
+ column,
25
+ table,
26
+ ...rest
27
+ }: Props<TData>) => {
28
+ const {
29
+ getState,
30
+ options: { localization, mantineFilterCheckboxProps },
31
+ } = table;
32
+ const { density } = getState();
33
+ const { columnDef } = column;
34
+
35
+ const arg = { column, table };
36
+ const checkboxProps = {
37
+ ...parseFromValuesOrFunc(mantineFilterCheckboxProps, arg),
38
+ ...parseFromValuesOrFunc(columnDef.mantineFilterCheckboxProps, arg),
39
+ ...rest,
40
+ } as CheckboxProps;
41
+
42
+ const filterLabel = localization.filterByColumn?.replace(
43
+ '{column}',
44
+ columnDef.header,
45
+ );
46
+
47
+ const value = column.getFilterValue();
48
+
49
+ return (
50
+ <Tooltip
51
+ label={checkboxProps?.title ?? filterLabel}
52
+ openDelay={1000}
53
+ withinPortal
54
+ >
55
+ <Checkbox
56
+ checked={value === 'true'}
57
+ className={clsx('mrt-filter-checkbox', classes.root)}
58
+ indeterminate={value === undefined}
59
+ label={checkboxProps.title ?? filterLabel}
60
+ size={density === 'xs' ? 'sm' : 'md'}
61
+ {...checkboxProps}
62
+ onChange={(e) => {
63
+ column.setFilterValue(
64
+ column.getFilterValue() === undefined
65
+ ? 'true'
66
+ : column.getFilterValue() === 'true'
67
+ ? 'false'
68
+ : undefined,
69
+ );
70
+ checkboxProps?.onChange?.(e);
71
+ }}
72
+ onClick={(e) => {
73
+ e.stopPropagation();
74
+ checkboxProps?.onClick?.(e);
75
+ }}
76
+ title={undefined}
77
+ />
78
+ </Tooltip>
79
+ );
80
+ };
@@ -0,0 +1,5 @@
1
+ .root {
2
+ display: grid;
3
+ grid-template-columns: 6fr 6fr;
4
+ gap: 16px;
5
+ }
@@ -0,0 +1,36 @@
1
+ 'use no memo';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ import classes from './MRT_FilterRangeFields.module.css';
6
+
7
+ import { Box, type BoxProps } from '@mantine/core';
8
+
9
+ import { MRT_FilterTextInput } from './MRT_FilterTextInput';
10
+
11
+ import {
12
+ type MRT_Header,
13
+ type MRT_RowData,
14
+ type MRT_TableInstance,
15
+ } from '../../types';
16
+
17
+ interface Props<TData extends MRT_RowData> extends BoxProps {
18
+ header: MRT_Header<TData>;
19
+ table: MRT_TableInstance<TData>;
20
+ }
21
+
22
+ export const MRT_FilterRangeFields = <TData extends MRT_RowData>({
23
+ header,
24
+ table,
25
+ ...rest
26
+ }: Props<TData>) => {
27
+ return (
28
+ <Box
29
+ {...rest}
30
+ className={clsx('mrt-filter-range-fields', classes.root, rest.className)}
31
+ >
32
+ <MRT_FilterTextInput header={header} rangeFilterIndex={0} table={table} />
33
+ <MRT_FilterTextInput header={header} rangeFilterIndex={1} table={table} />
34
+ </Box>
35
+ );
36
+ };
@@ -0,0 +1,6 @@
1
+ .root {
2
+ margin: auto;
3
+ margin-top: 16px;
4
+ margin-bottom: 6px;
5
+ width: calc(100% - 8px);
6
+ }
@@ -0,0 +1,107 @@
1
+ 'use no memo';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ import classes from './MRT_FilterRangeSlider.module.css';
6
+
7
+ import { useEffect, useRef, useState } from 'react';
8
+
9
+ import { RangeSlider, type RangeSliderProps } from '@mantine/core';
10
+
11
+ import {
12
+ type MRT_Header,
13
+ type MRT_RowData,
14
+ type MRT_TableInstance,
15
+ } from '../../types';
16
+ import { parseFromValuesOrFunc } from '../../utils/utils';
17
+
18
+ interface Props<TData extends MRT_RowData> extends RangeSliderProps {
19
+ header: MRT_Header<TData>;
20
+ table: MRT_TableInstance<TData>;
21
+ }
22
+
23
+ export const MRT_FilterRangeSlider = <TData extends MRT_RowData>({
24
+ header,
25
+ table,
26
+ ...rest
27
+ }: Props<TData>) => {
28
+ const {
29
+ options: { mantineFilterRangeSliderProps },
30
+ refs: { filterInputRefs },
31
+ } = table;
32
+ const { column } = header;
33
+ const { columnDef } = column;
34
+
35
+ const arg = { column, table };
36
+ const rangeSliderProps = {
37
+ ...parseFromValuesOrFunc(mantineFilterRangeSliderProps, arg),
38
+ ...parseFromValuesOrFunc(columnDef.mantineFilterRangeSliderProps, arg),
39
+ ...rest,
40
+ } as RangeSliderProps;
41
+
42
+ let [min, max] =
43
+ rangeSliderProps.min !== undefined && rangeSliderProps.max !== undefined
44
+ ? [rangeSliderProps.min, rangeSliderProps.max]
45
+ : (column.getFacetedMinMaxValues() ?? [0, 1]);
46
+
47
+ //fix potential TanStack Table bugs where min or max is an array
48
+ if (Array.isArray(min)) min = min[0];
49
+ if (Array.isArray(max)) max = max[0];
50
+ if (min === null) min = 0;
51
+ if (max === null) max = 1;
52
+
53
+ const [filterValues, setFilterValues] = useState<[number, number]>([
54
+ min,
55
+ max,
56
+ ]);
57
+ const columnFilterValue = column.getFilterValue() as
58
+ | [number, number]
59
+ | undefined;
60
+
61
+ const isMounted = useRef(false);
62
+
63
+ useEffect(() => {
64
+ if (isMounted.current) {
65
+ if (columnFilterValue === undefined) {
66
+ setFilterValues([min, max]);
67
+ } else if (Array.isArray(columnFilterValue)) {
68
+ setFilterValues(columnFilterValue);
69
+ }
70
+ }
71
+ isMounted.current = true;
72
+ }, [columnFilterValue, min, max]);
73
+
74
+ return (
75
+ <RangeSlider
76
+ className={clsx('mrt-filter-range-slider', classes.root)}
77
+ max={max}
78
+ min={min}
79
+ onChange={(values) => {
80
+ setFilterValues(values as [number, number]);
81
+ }}
82
+ onChangeEnd={(values) => {
83
+ if (Array.isArray(values)) {
84
+ if (values[0] <= min && values[1] >= max) {
85
+ //if the user has selected the entire range, remove the filter
86
+ column.setFilterValue(undefined);
87
+ } else {
88
+ column.setFilterValue(values as [number, number]);
89
+ }
90
+ }
91
+ }}
92
+ value={filterValues}
93
+ {...rangeSliderProps}
94
+ ref={(node) => {
95
+ if (node) {
96
+ //@ts-ignore
97
+ filterInputRefs.current[`${column.id}-0`] = node;
98
+ // @ts-ignore
99
+ if (rangeSliderProps?.ref) {
100
+ //@ts-ignore
101
+ rangeSliderProps.ref = node;
102
+ }
103
+ }
104
+ }}
105
+ />
106
+ );
107
+ };
@@ -0,0 +1,27 @@
1
+ .root {
2
+ font-weight: normal;
3
+ border-bottom: 2px solid
4
+ light-dark(var(--mantine-color-gray-3), var(--mantine-color-gray-7));
5
+ min-width: auto;
6
+ &.date-filter {
7
+ min-width: rem(125px);
8
+ }
9
+ &.range-filter {
10
+ min-width: rem(80px);
11
+ }
12
+ &.not-filter-chip {
13
+ min-width: rem(100px);
14
+ }
15
+ width: 100%;
16
+ & :global(.mantine-TextInput-input) {
17
+ overflow: hidden;
18
+ text-overflow: ellipsis;
19
+ }
20
+ & :global(.mantine-DateInput-input) {
21
+ height: 2.1rem;
22
+ }
23
+ }
24
+
25
+ .filter-chip-badge {
26
+ margin: 5px;
27
+ }