@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,288 @@
1
+ 'use no memo';
2
+
3
+ import classes from './MRT_ColumnActionMenu.module.css';
4
+
5
+ import { ActionIcon, Menu, type MenuProps, Tooltip } from '@mantine/core';
6
+
7
+ import {
8
+ type MRT_Header,
9
+ type MRT_RowData,
10
+ type MRT_TableInstance,
11
+ } from '../../types';
12
+ import { parseFromValuesOrFunc } from '../../utils/utils';
13
+
14
+ interface Props<TData extends MRT_RowData> extends MenuProps {
15
+ header: MRT_Header<TData>;
16
+ table: MRT_TableInstance<TData>;
17
+ }
18
+
19
+ export const MRT_ColumnActionMenu = <TData extends MRT_RowData>({
20
+ header,
21
+ table,
22
+ ...rest
23
+ }: Props<TData>) => {
24
+ const {
25
+ getState,
26
+ options: {
27
+ columnFilterDisplayMode,
28
+ enableColumnFilters,
29
+ enableColumnPinning,
30
+ enableColumnResizing,
31
+ enableGrouping,
32
+ enableHiding,
33
+ enableSorting,
34
+ enableSortingRemoval,
35
+ icons: {
36
+ IconArrowAutofitContent,
37
+ IconBoxMultiple,
38
+ IconClearAll,
39
+ IconColumns,
40
+ IconDotsVertical,
41
+ IconEyeOff,
42
+ IconFilter,
43
+ IconFilterOff,
44
+ IconPinned,
45
+ IconPinnedOff,
46
+ IconSortAscending,
47
+ IconSortDescending,
48
+ },
49
+ localization,
50
+ mantineColumnActionsButtonProps,
51
+ renderColumnActionsMenuItems,
52
+ },
53
+ refs: { filterInputRefs },
54
+ setColumnOrder,
55
+ setColumnSizingInfo,
56
+ setShowColumnFilters,
57
+ toggleAllColumnsVisible,
58
+ } = table;
59
+ const { column } = header;
60
+ const { columnDef } = column;
61
+ const { columnSizing, columnVisibility } = getState();
62
+
63
+ const arg = { column, table };
64
+ const actionIconProps = {
65
+ ...parseFromValuesOrFunc(mantineColumnActionsButtonProps, arg),
66
+ ...parseFromValuesOrFunc(columnDef.mantineColumnActionsButtonProps, arg),
67
+ };
68
+
69
+ const handleClearSort = () => {
70
+ column.clearSorting();
71
+ };
72
+
73
+ const handleSortAsc = () => {
74
+ column.toggleSorting(false);
75
+ };
76
+
77
+ const handleSortDesc = () => {
78
+ column.toggleSorting(true);
79
+ };
80
+
81
+ const handleResetColumnSize = () => {
82
+ setColumnSizingInfo((old) => ({ ...old, isResizingColumn: false }));
83
+ column.resetSize();
84
+ };
85
+
86
+ const handleHideColumn = () => {
87
+ column.toggleVisibility(false);
88
+ };
89
+
90
+ const handlePinColumn = (pinDirection: 'left' | 'right' | false) => {
91
+ column.pin(pinDirection);
92
+ };
93
+
94
+ const handleGroupByColumn = () => {
95
+ column.toggleGrouping();
96
+ setColumnOrder((old: any) => ['mrt-row-expand', ...old]);
97
+ };
98
+
99
+ const handleClearFilter = () => {
100
+ column.setFilterValue('');
101
+ };
102
+
103
+ const handleFilterByColumn = () => {
104
+ setShowColumnFilters(true);
105
+ setTimeout(() => filterInputRefs.current[`${column.id}-0`]?.focus(), 100);
106
+ };
107
+
108
+ const handleShowAllColumns = () => {
109
+ toggleAllColumnsVisible(true);
110
+ };
111
+
112
+ const internalColumnMenuItems = (
113
+ <>
114
+ {enableSorting && column.getCanSort() && (
115
+ <>
116
+ {enableSortingRemoval !== false && (
117
+ <Menu.Item
118
+ disabled={!column.getIsSorted()}
119
+ leftSection={<IconClearAll />}
120
+ onClick={handleClearSort}
121
+ >
122
+ {localization.clearSort}
123
+ </Menu.Item>
124
+ )}
125
+ <Menu.Item
126
+ disabled={column.getIsSorted() === 'asc'}
127
+ leftSection={<IconSortAscending />}
128
+ onClick={handleSortAsc}
129
+ >
130
+ {localization.sortByColumnAsc?.replace(
131
+ '{column}',
132
+ String(columnDef.header),
133
+ )}
134
+ </Menu.Item>
135
+ <Menu.Item
136
+ disabled={column.getIsSorted() === 'desc'}
137
+ leftSection={<IconSortDescending />}
138
+ onClick={handleSortDesc}
139
+ >
140
+ {localization.sortByColumnDesc?.replace(
141
+ '{column}',
142
+ String(columnDef.header),
143
+ )}
144
+ </Menu.Item>
145
+ {(enableColumnFilters || enableGrouping || enableHiding) && (
146
+ <Menu.Divider key={3} />
147
+ )}
148
+ </>
149
+ )}
150
+ {enableColumnFilters &&
151
+ columnFilterDisplayMode !== 'popover' &&
152
+ column.getCanFilter() && (
153
+ <>
154
+ <Menu.Item
155
+ disabled={!column.getFilterValue()}
156
+ leftSection={<IconFilterOff />}
157
+ onClick={handleClearFilter}
158
+ >
159
+ {localization.clearFilter}
160
+ </Menu.Item>
161
+ <Menu.Item
162
+ leftSection={<IconFilter />}
163
+ onClick={handleFilterByColumn}
164
+ >
165
+ {localization.filterByColumn?.replace(
166
+ '{column}',
167
+ String(columnDef.header),
168
+ )}
169
+ </Menu.Item>
170
+ {(enableGrouping || enableHiding) && <Menu.Divider key={2} />}
171
+ </>
172
+ )}
173
+ {enableGrouping && column.getCanGroup() && (
174
+ <>
175
+ <Menu.Item
176
+ leftSection={<IconBoxMultiple />}
177
+ onClick={handleGroupByColumn}
178
+ >
179
+ {localization[
180
+ column.getIsGrouped() ? 'ungroupByColumn' : 'groupByColumn'
181
+ ]?.replace('{column}', String(columnDef.header))}
182
+ </Menu.Item>
183
+ {enableColumnPinning && <Menu.Divider />}
184
+ </>
185
+ )}
186
+ {enableColumnPinning && column.getCanPin() && (
187
+ <>
188
+ <Menu.Item
189
+ disabled={column.getIsPinned() === 'left' || !column.getCanPin()}
190
+ leftSection={<IconPinned className={classes.left} />}
191
+ onClick={() => handlePinColumn('left')}
192
+ >
193
+ {localization.pinToLeft}
194
+ </Menu.Item>
195
+ <Menu.Item
196
+ disabled={column.getIsPinned() === 'right' || !column.getCanPin()}
197
+ leftSection={<IconPinned className={classes.right} />}
198
+ onClick={() => handlePinColumn('right')}
199
+ >
200
+ {localization.pinToRight}
201
+ </Menu.Item>
202
+ <Menu.Item
203
+ disabled={!column.getIsPinned()}
204
+ leftSection={<IconPinnedOff />}
205
+ onClick={() => handlePinColumn(false)}
206
+ >
207
+ {localization.unpin}
208
+ </Menu.Item>
209
+ {enableHiding && <Menu.Divider />}
210
+ </>
211
+ )}
212
+ {enableColumnResizing && column.getCanResize() && (
213
+ <Menu.Item
214
+ disabled={!columnSizing[column.id]}
215
+ key={0}
216
+ leftSection={<IconArrowAutofitContent />}
217
+ onClick={handleResetColumnSize}
218
+ >
219
+ {localization.resetColumnSize}
220
+ </Menu.Item>
221
+ )}
222
+ {enableHiding && (
223
+ <>
224
+ <Menu.Item
225
+ disabled={!column.getCanHide()}
226
+ key={0}
227
+ leftSection={<IconEyeOff />}
228
+ onClick={handleHideColumn}
229
+ >
230
+ {localization.hideColumn?.replace(
231
+ '{column}',
232
+ String(columnDef.header),
233
+ )}
234
+ </Menu.Item>
235
+ <Menu.Item
236
+ disabled={
237
+ !Object.values(columnVisibility).filter((visible) => !visible)
238
+ .length
239
+ }
240
+ key={1}
241
+ leftSection={<IconColumns />}
242
+ onClick={handleShowAllColumns}
243
+ >
244
+ {localization.showAllColumns?.replace(
245
+ '{column}',
246
+ String(columnDef.header),
247
+ )}
248
+ </Menu.Item>
249
+ </>
250
+ )}
251
+ </>
252
+ );
253
+
254
+ return (
255
+ <Menu closeOnItemClick position="bottom-start" withinPortal {...rest}>
256
+ <Tooltip
257
+ label={actionIconProps?.title ?? localization.columnActions}
258
+ openDelay={1000}
259
+ withinPortal
260
+ >
261
+ <Menu.Target>
262
+ <ActionIcon
263
+ aria-label={localization.columnActions}
264
+ color="gray"
265
+ size="sm"
266
+ variant="subtle"
267
+ {...actionIconProps}
268
+ >
269
+ <IconDotsVertical size="100%" />
270
+ </ActionIcon>
271
+ </Menu.Target>
272
+ </Tooltip>
273
+ <Menu.Dropdown>
274
+ {columnDef.renderColumnActionsMenuItems?.({
275
+ column,
276
+ internalColumnMenuItems,
277
+ table,
278
+ }) ??
279
+ renderColumnActionsMenuItems?.({
280
+ column,
281
+ internalColumnMenuItems,
282
+ table,
283
+ }) ??
284
+ internalColumnMenuItems}
285
+ </Menu.Dropdown>
286
+ </Menu>
287
+ );
288
+ };
@@ -0,0 +1,6 @@
1
+ .symbol {
2
+ font-size: var(--mantine-font-size-xl);
3
+ text-align: center;
4
+ width: 2ch;
5
+ transform: translateY(-0.1em);
6
+ }
@@ -0,0 +1,279 @@
1
+ 'use no memo';
2
+
3
+ import classes from './MRT_FilterOptionMenu.module.css';
4
+
5
+ import { Fragment, useMemo } from 'react';
6
+
7
+ import { Menu } from '@mantine/core';
8
+
9
+ import {
10
+ type MRT_FilterOption,
11
+ type MRT_Header,
12
+ type MRT_InternalFilterOption,
13
+ type MRT_Localization,
14
+ type MRT_RowData,
15
+ type MRT_TableInstance,
16
+ } from '../../types';
17
+
18
+ export const mrtFilterOptions = (
19
+ localization: MRT_Localization,
20
+ ): MRT_InternalFilterOption[] => [
21
+ {
22
+ divider: false,
23
+ label: localization.filterFuzzy,
24
+ option: 'fuzzy',
25
+ symbol: '≈',
26
+ },
27
+ {
28
+ divider: false,
29
+ label: localization.filterContains,
30
+ option: 'contains',
31
+ symbol: '*',
32
+ },
33
+ {
34
+ divider: false,
35
+ label: localization.filterStartsWith,
36
+ option: 'startsWith',
37
+ symbol: 'a',
38
+ },
39
+ {
40
+ divider: true,
41
+ label: localization.filterEndsWith,
42
+ option: 'endsWith',
43
+ symbol: 'z',
44
+ },
45
+ {
46
+ divider: false,
47
+ label: localization.filterEquals,
48
+ option: 'equals',
49
+ symbol: '=',
50
+ },
51
+ {
52
+ divider: true,
53
+ label: localization.filterNotEquals,
54
+ option: 'notEquals',
55
+ symbol: '≠',
56
+ },
57
+ {
58
+ divider: false,
59
+ label: localization.filterBetween,
60
+ option: 'between',
61
+ symbol: '⇿',
62
+ },
63
+ {
64
+ divider: true,
65
+ label: localization.filterBetweenInclusive,
66
+ option: 'betweenInclusive',
67
+ symbol: '⬌',
68
+ },
69
+ {
70
+ divider: false,
71
+ label: localization.filterGreaterThan,
72
+ option: 'greaterThan',
73
+ symbol: '>',
74
+ },
75
+ {
76
+ divider: false,
77
+ label: localization.filterGreaterThanOrEqualTo,
78
+ option: 'greaterThanOrEqualTo',
79
+ symbol: '≥',
80
+ },
81
+ {
82
+ divider: false,
83
+ label: localization.filterLessThan,
84
+ option: 'lessThan',
85
+ symbol: '<',
86
+ },
87
+ {
88
+ divider: true,
89
+ label: localization.filterLessThanOrEqualTo,
90
+ option: 'lessThanOrEqualTo',
91
+ symbol: '≤',
92
+ },
93
+ {
94
+ divider: false,
95
+ label: localization.filterEmpty,
96
+ option: 'empty',
97
+ symbol: '∅',
98
+ },
99
+ {
100
+ divider: false,
101
+ label: localization.filterNotEmpty,
102
+ option: 'notEmpty',
103
+ symbol: '!∅',
104
+ },
105
+ ];
106
+
107
+ const defaultGlobalFilterModeOptions = ['fuzzy', 'contains', 'startsWith'];
108
+ const rangeModes = ['between', 'betweenInclusive', 'inNumberRange'];
109
+ const emptyModes = ['empty', 'notEmpty'];
110
+ const arrModes = ['arrIncludesSome', 'arrIncludesAll', 'arrIncludes'];
111
+ const rangeVariants = ['range-slider', 'date-range', 'range'];
112
+
113
+ interface Props<TData extends MRT_RowData> {
114
+ header?: MRT_Header<TData>;
115
+ onSelect?: () => void;
116
+ table: MRT_TableInstance<TData>;
117
+ }
118
+
119
+ export const MRT_FilterOptionMenu = <TData extends MRT_RowData>({
120
+ header,
121
+ onSelect,
122
+ table,
123
+ }: Props<TData>) => {
124
+ const {
125
+ getState,
126
+ options: {
127
+ columnFilterModeOptions,
128
+ globalFilterModeOptions,
129
+ localization,
130
+ renderColumnFilterModeMenuItems,
131
+ renderGlobalFilterModeMenuItems,
132
+ },
133
+ setColumnFilterFns,
134
+ setGlobalFilterFn,
135
+ } = table;
136
+ const { globalFilterFn } = getState();
137
+ const { column } = header ?? {};
138
+ const { columnDef } = column ?? {};
139
+ const currentFilterValue = column?.getFilterValue();
140
+
141
+ let allowedColumnFilterOptions =
142
+ columnDef?.columnFilterModeOptions ?? columnFilterModeOptions;
143
+
144
+ if (rangeVariants.includes(columnDef?.filterVariant as string)) {
145
+ allowedColumnFilterOptions = [
146
+ ...rangeModes,
147
+ ...(allowedColumnFilterOptions ?? []),
148
+ ].filter((option) => rangeModes.includes(option));
149
+ }
150
+
151
+ const internalFilterOptions = useMemo(() => {
152
+ const filterOptions = mrtFilterOptions(localization).filter(
153
+ (filterOption) =>
154
+ columnDef
155
+ ? allowedColumnFilterOptions === undefined ||
156
+ allowedColumnFilterOptions?.includes(filterOption.option)
157
+ : (
158
+ globalFilterModeOptions ?? defaultGlobalFilterModeOptions
159
+ ).includes(filterOption.option),
160
+ );
161
+ if (
162
+ filterOptions.length &&
163
+ filterOptions[filterOptions.length - 1].divider
164
+ ) {
165
+ filterOptions[filterOptions.length - 1].divider = false;
166
+ }
167
+ return filterOptions;
168
+ }, [columnDef, globalFilterModeOptions]);
169
+
170
+ const handleSelectFilterMode = (option: MRT_FilterOption) => {
171
+ const prevFilterMode = columnDef?._filterFn ?? '';
172
+ if (!header || !column) {
173
+ // global filter mode
174
+ setGlobalFilterFn(option);
175
+ } else if (option !== prevFilterMode) {
176
+ // column filter mode
177
+ setColumnFilterFns((prev: { [key: string]: any }) => ({
178
+ ...prev,
179
+ [header.id]: option,
180
+ }));
181
+
182
+ // reset filter value and/or perform new filter render
183
+ if (emptyModes.includes(option)) {
184
+ // will now be empty/notEmpty filter mode
185
+ if (
186
+ currentFilterValue !== ' ' &&
187
+ !emptyModes.includes(prevFilterMode)
188
+ ) {
189
+ column.setFilterValue(' ');
190
+ } else if (currentFilterValue) {
191
+ column.setFilterValue(currentFilterValue); // perform new filter render
192
+ }
193
+ } else if (
194
+ columnDef?.filterVariant === 'multi-select' ||
195
+ arrModes.includes(option as string)
196
+ ) {
197
+ // will now be array filter mode
198
+ if (
199
+ currentFilterValue instanceof String ||
200
+ (currentFilterValue as Array<any>)?.length
201
+ ) {
202
+ column.setFilterValue([]);
203
+ } else if (currentFilterValue) {
204
+ column.setFilterValue(currentFilterValue); // perform new filter render
205
+ }
206
+ } else if (
207
+ rangeVariants.includes(columnDef?.filterVariant as string) ||
208
+ rangeModes.includes(option as MRT_FilterOption)
209
+ ) {
210
+ // will now be range filter mode
211
+ if (
212
+ !Array.isArray(currentFilterValue) ||
213
+ (!(currentFilterValue as Array<any>)?.every((v) => v === '') &&
214
+ !rangeModes.includes(prevFilterMode))
215
+ ) {
216
+ column.setFilterValue(['', '']);
217
+ } else {
218
+ column.setFilterValue(currentFilterValue); // perform new filter render
219
+ }
220
+ } else {
221
+ // will now be single value filter mode
222
+ if (Array.isArray(currentFilterValue)) {
223
+ column.setFilterValue('');
224
+ } else if (
225
+ currentFilterValue === ' ' &&
226
+ emptyModes.includes(prevFilterMode)
227
+ ) {
228
+ column.setFilterValue(undefined);
229
+ } else {
230
+ column.setFilterValue(currentFilterValue); // perform new filter render
231
+ }
232
+ }
233
+ }
234
+ onSelect?.();
235
+ };
236
+
237
+ const filterOption =
238
+ !!header && columnDef ? columnDef._filterFn : globalFilterFn;
239
+
240
+ return (
241
+ <Menu.Dropdown>
242
+ {(header && column && columnDef
243
+ ? (columnDef.renderColumnFilterModeMenuItems?.({
244
+ column: column as any,
245
+ internalFilterOptions,
246
+ onSelectFilterMode: handleSelectFilterMode,
247
+ table,
248
+ }) ??
249
+ renderColumnFilterModeMenuItems?.({
250
+ column: column as any,
251
+ internalFilterOptions,
252
+ onSelectFilterMode: handleSelectFilterMode,
253
+ table,
254
+ }))
255
+ : renderGlobalFilterModeMenuItems?.({
256
+ internalFilterOptions,
257
+ onSelectFilterMode: handleSelectFilterMode,
258
+ table,
259
+ })) ??
260
+ internalFilterOptions.map(
261
+ ({ divider, label, option, symbol }, index) => (
262
+ <Fragment key={index}>
263
+ <Menu.Item
264
+ color={option === filterOption ? 'blue' : undefined}
265
+ leftSection={<span className={classes.symbol}>{symbol}</span>}
266
+ onClick={() =>
267
+ handleSelectFilterMode(option as MRT_FilterOption)
268
+ }
269
+ value={option}
270
+ >
271
+ {label}
272
+ </Menu.Item>
273
+ {divider && <Menu.Divider />}
274
+ </Fragment>
275
+ ),
276
+ )}
277
+ </Menu.Dropdown>
278
+ );
279
+ };
@@ -0,0 +1,75 @@
1
+ 'use no memo';
2
+
3
+ import { type MouseEvent } from 'react';
4
+
5
+ import { ActionIcon, type ActionIconProps, Menu, Tooltip } from '@mantine/core';
6
+
7
+ import {
8
+ type MRT_Row,
9
+ type MRT_RowData,
10
+ type MRT_TableInstance,
11
+ } from '../../types';
12
+
13
+ interface Props<TData extends MRT_RowData> extends ActionIconProps {
14
+ handleEdit: (event: MouseEvent) => void;
15
+ row: MRT_Row<TData>;
16
+ table: MRT_TableInstance<TData>;
17
+ }
18
+
19
+ export const MRT_RowActionMenu = <TData extends MRT_RowData>({
20
+ handleEdit,
21
+ row,
22
+ table,
23
+ ...rest
24
+ }: Props<TData>) => {
25
+ const {
26
+ options: {
27
+ editDisplayMode,
28
+ enableEditing,
29
+ icons: { IconDots, IconEdit },
30
+ localization,
31
+ positionActionsColumn,
32
+ renderRowActionMenuItems,
33
+ },
34
+ } = table;
35
+
36
+ return (
37
+ <Menu
38
+ closeOnItemClick
39
+ position={
40
+ positionActionsColumn === 'first'
41
+ ? 'bottom-start'
42
+ : positionActionsColumn === 'last'
43
+ ? 'bottom-end'
44
+ : undefined
45
+ }
46
+ withinPortal
47
+ >
48
+ <Tooltip label={localization.rowActions} openDelay={1000} withinPortal>
49
+ <Menu.Target>
50
+ <ActionIcon
51
+ aria-label={localization.rowActions}
52
+ color="gray"
53
+ onClick={(event) => event.stopPropagation()}
54
+ size="sm"
55
+ variant="subtle"
56
+ {...rest}
57
+ >
58
+ <IconDots />
59
+ </ActionIcon>
60
+ </Menu.Target>
61
+ </Tooltip>
62
+ <Menu.Dropdown onClick={(event) => event.stopPropagation()}>
63
+ {enableEditing && editDisplayMode !== 'table' && (
64
+ <Menu.Item leftSection={<IconEdit />} onClick={handleEdit}>
65
+ {localization.edit}
66
+ </Menu.Item>
67
+ )}
68
+ {renderRowActionMenuItems?.({
69
+ row,
70
+ table,
71
+ })}
72
+ </Menu.Dropdown>
73
+ </Menu>
74
+ );
75
+ };
@@ -0,0 +1,10 @@
1
+ .root {
2
+ max-height: calc(80vh - 100px);
3
+ overflow-y: auto;
4
+ .content {
5
+ padding-top: rem(4px);
6
+ padding-bottom: rem(4px);
7
+ gap: rem(8px);
8
+ justify-content: space-between;
9
+ }
10
+ }