@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,278 @@
1
+ 'use no memo';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ import classes from './MRT_TableBodyRow.module.css';
6
+
7
+ import { type DragEvent, memo, useMemo, useRef } from 'react';
8
+
9
+ import {
10
+ Box,
11
+ type TableProps,
12
+ TableTr,
13
+ type TableTrProps,
14
+ } from '@mantine/core';
15
+
16
+ import { Memo_MRT_TableBodyCell, MRT_TableBodyCell } from './MRT_TableBodyCell';
17
+ import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
18
+
19
+ import { getMRT_TableStateVersion } from '../../hooks/useMRT_TableSnapshot';
20
+ import {
21
+ type MRT_Cell,
22
+ type MRT_ColumnVirtualizer,
23
+ type MRT_DensityState,
24
+ type MRT_Row,
25
+ type MRT_RowData,
26
+ type MRT_RowVirtualizer,
27
+ type MRT_TableInstance,
28
+ type MRT_VirtualItem,
29
+ } from '../../types';
30
+ import { getIsRowSelected } from '../../utils/row.utils';
31
+ import { getMRT_RowView } from '../../utils/snapshot.utils';
32
+ import { parseFromValuesOrFunc } from '../../utils/utils';
33
+
34
+ interface Props<TData extends MRT_RowData> extends TableTrProps {
35
+ columnVirtualizer?: MRT_ColumnVirtualizer;
36
+ numRows?: number;
37
+ pinnedRowIds?: string[];
38
+ renderedRowIndex?: number;
39
+ row: MRT_Row<TData>;
40
+ rowVirtualizer?: MRT_RowVirtualizer;
41
+ table: MRT_TableInstance<TData>;
42
+ tableProps: Partial<TableProps>;
43
+ virtualRow?: MRT_VirtualItem;
44
+ }
45
+
46
+ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
47
+ children,
48
+ columnVirtualizer,
49
+ numRows,
50
+ pinnedRowIds,
51
+ renderedRowIndex = 0,
52
+ row: rowProp,
53
+ rowVirtualizer,
54
+ table,
55
+ tableProps,
56
+ virtualRow,
57
+ ...rest
58
+ }: Props<TData>) => {
59
+ //a view has a new identity per table reference, which compiled render callbacks need
60
+ const row = getMRT_RowView(table, rowProp);
61
+ const {
62
+ getState,
63
+ options: {
64
+ enableRowOrdering,
65
+ enableRowPinning,
66
+ enableStickyFooter,
67
+ enableStickyHeader,
68
+ layoutMode,
69
+ mantineTableBodyRowProps,
70
+ memoMode,
71
+ renderDetailPanel,
72
+ rowPinningDisplayMode,
73
+ },
74
+ refs: { tableFooterRef, tableHeadRef },
75
+ setHoveredRow,
76
+ } = table;
77
+ const {
78
+ density,
79
+ draggingColumn,
80
+ draggingRow,
81
+ editingCell,
82
+ editingRow,
83
+ hoveredRow,
84
+ isFullScreen,
85
+ rowPinning,
86
+ } = getState();
87
+
88
+ const visibleCells = row.getVisibleCells();
89
+
90
+ const { virtualColumns, virtualPaddingLeft, virtualPaddingRight } =
91
+ columnVirtualizer ?? {};
92
+
93
+ //the placeholder row for an empty table has no data to show in a detail panel
94
+ const isEmptyRow = row.id === 'mrt-row-empty';
95
+ const isRowSelected = getIsRowSelected({ row, table });
96
+ const isRowPinned = enableRowPinning && row.getIsPinned();
97
+ const isRowStickyPinned =
98
+ isRowPinned && rowPinningDisplayMode?.includes('sticky') && 'sticky';
99
+ const isDraggingRow = draggingRow?.id === row.id;
100
+ const isHoveredRow = hoveredRow?.id === row.id;
101
+
102
+ const tableRowProps = {
103
+ ...parseFromValuesOrFunc(mantineTableBodyRowProps, {
104
+ renderedRowIndex,
105
+ row,
106
+ table,
107
+ }),
108
+ ...rest,
109
+ };
110
+
111
+ const [bottomPinnedIndex, topPinnedIndex] = useMemo(() => {
112
+ if (
113
+ !enableRowPinning ||
114
+ !isRowStickyPinned ||
115
+ !pinnedRowIds ||
116
+ !row.getIsPinned()
117
+ )
118
+ return [];
119
+ return [
120
+ [...pinnedRowIds].reverse().indexOf(row.id),
121
+ pinnedRowIds.indexOf(row.id),
122
+ ];
123
+ }, [pinnedRowIds, rowPinning]);
124
+
125
+ const tableHeadHeight =
126
+ ((enableStickyHeader || isFullScreen) &&
127
+ tableHeadRef.current?.clientHeight) ||
128
+ 0;
129
+ const tableFooterHeight =
130
+ (enableStickyFooter && tableFooterRef.current?.clientHeight) || 0;
131
+
132
+ const defaultRowHeightByDensity: Record<MRT_DensityState, number> = {
133
+ lg: 61,
134
+ md: 53,
135
+ sm: 45,
136
+ xl: 69,
137
+ xs: 37,
138
+ };
139
+
140
+ const rowHeight =
141
+ // @ts-ignore
142
+ parseInt(tableRowProps?.style?.height, 10) ||
143
+ (defaultRowHeightByDensity[density] ?? defaultRowHeightByDensity['md']);
144
+
145
+ const handleDragEnter = (_e: DragEvent) => {
146
+ if (enableRowOrdering && draggingRow) {
147
+ setHoveredRow(row);
148
+ }
149
+ };
150
+
151
+ const rowRef = useRef<HTMLTableRowElement | null>(null);
152
+
153
+ let striped = tableProps.striped as boolean | string;
154
+
155
+ if (striped) {
156
+ if (striped === true) {
157
+ striped = 'odd';
158
+ }
159
+ if (striped === 'odd' && renderedRowIndex % 2 !== 0) {
160
+ striped = false;
161
+ }
162
+ if (striped === 'even' && renderedRowIndex % 2 === 0) {
163
+ striped = false;
164
+ }
165
+ }
166
+
167
+ return (
168
+ <>
169
+ <TableTr
170
+ data-dragging-row={isDraggingRow || undefined}
171
+ data-hovered-row-target={isHoveredRow || undefined}
172
+ data-index={renderDetailPanel ? renderedRowIndex * 2 : renderedRowIndex}
173
+ data-row-pinned={isRowStickyPinned || isRowPinned || undefined}
174
+ data-selected={isRowSelected || undefined}
175
+ data-striped={striped}
176
+ onDragEnter={handleDragEnter}
177
+ ref={(node: HTMLTableRowElement) => {
178
+ if (node) {
179
+ rowRef.current = node;
180
+ //also registers the row with the virtualizer's ResizeObserver
181
+ rowVirtualizer?.measureElement(node);
182
+ }
183
+ }}
184
+ {...tableRowProps}
185
+ __vars={{
186
+ ...tableRowProps?.__vars,
187
+ '--mrt-pinned-row-bottom':
188
+ !virtualRow && bottomPinnedIndex !== undefined && isRowPinned
189
+ ? `${
190
+ bottomPinnedIndex * rowHeight +
191
+ (enableStickyFooter ? tableFooterHeight - 1 : 0)
192
+ }`
193
+ : undefined,
194
+ '--mrt-pinned-row-top': virtualRow
195
+ ? undefined
196
+ : topPinnedIndex !== undefined && isRowPinned
197
+ ? `${
198
+ topPinnedIndex * rowHeight +
199
+ (enableStickyHeader || isFullScreen ? tableHeadHeight - 1 : 0)
200
+ }`
201
+ : undefined,
202
+ '--mrt-virtual-row-start': virtualRow
203
+ ? `${virtualRow.start}px`
204
+ : undefined,
205
+ }}
206
+ className={clsx(
207
+ classes.root,
208
+ layoutMode?.startsWith('grid') && classes['root-grid'],
209
+ virtualRow && classes['root-virtualized'],
210
+ tableRowProps?.className,
211
+ )}
212
+ >
213
+ {virtualPaddingLeft ? (
214
+ <Box component="td" display="flex" w={virtualPaddingLeft} />
215
+ ) : null}
216
+ {children
217
+ ? children
218
+ : (virtualColumns ?? row.getVisibleCells()).map(
219
+ (cellOrVirtualCell, renderedColumnIndex) => {
220
+ let cell = cellOrVirtualCell as MRT_Cell<TData>;
221
+ if (columnVirtualizer) {
222
+ renderedColumnIndex = (cellOrVirtualCell as MRT_VirtualItem)
223
+ .index;
224
+ cell = visibleCells[renderedColumnIndex];
225
+ }
226
+ const cellProps = {
227
+ cell,
228
+ numRows,
229
+ renderedColumnIndex,
230
+ renderedRowIndex,
231
+ rowRef,
232
+ table,
233
+ virtualCell: columnVirtualizer
234
+ ? (cellOrVirtualCell as MRT_VirtualItem)
235
+ : undefined,
236
+ };
237
+ return memoMode === 'cells' &&
238
+ cell.column.columnDef.columnDefType === 'data' &&
239
+ !draggingColumn &&
240
+ !draggingRow &&
241
+ editingCell?.id !== cell.id &&
242
+ editingRow?.id !== row.id ? (
243
+ <Memo_MRT_TableBodyCell key={cell.id} {...cellProps} />
244
+ ) : (
245
+ <MRT_TableBodyCell key={cell.id} {...cellProps} />
246
+ );
247
+ },
248
+ )}
249
+ {virtualPaddingRight ? (
250
+ <Box component="td" display="flex" w={virtualPaddingRight} />
251
+ ) : null}
252
+ </TableTr>
253
+ {renderDetailPanel && !row.getIsGrouped() && !isEmptyRow && (
254
+ <MRT_TableDetailPanel
255
+ parentRowRef={rowRef}
256
+ renderedRowIndex={renderedRowIndex}
257
+ row={row}
258
+ rowVirtualizer={rowVirtualizer}
259
+ striped={striped}
260
+ table={table}
261
+ virtualRow={virtualRow}
262
+ />
263
+ )}
264
+ </>
265
+ );
266
+ };
267
+
268
+ //the state version changes whenever table state changes, so a memoized row
269
+ //still follows row selection, density, editing and so on. The `table`
270
+ //reference is not compared: an inline option gives a new one on every render.
271
+ export const Memo_MRT_TableBodyRow = memo(
272
+ MRT_TableBodyRow,
273
+ (prev, next) =>
274
+ prev.row === next.row &&
275
+ getMRT_TableStateVersion(prev.table) ===
276
+ getMRT_TableStateVersion(next.table) &&
277
+ prev.virtualRow?.start === next.virtualRow?.start,
278
+ ) as typeof MRT_TableBodyRow;
@@ -0,0 +1,59 @@
1
+ 'use no memo';
2
+
3
+ import { type DragEvent, type RefObject } from 'react';
4
+
5
+ import { type ActionIconProps } from '@mantine/core';
6
+
7
+ import {
8
+ type MRT_Row,
9
+ type MRT_RowData,
10
+ type MRT_TableInstance,
11
+ } from '../../types';
12
+ import { parseFromValuesOrFunc } from '../../utils/utils';
13
+ import { MRT_GrabHandleButton } from '../buttons/MRT_GrabHandleButton';
14
+
15
+ interface Props<TData extends MRT_RowData> extends ActionIconProps {
16
+ row: MRT_Row<TData>;
17
+ rowRef: RefObject<HTMLTableRowElement | null>;
18
+ table: MRT_TableInstance<TData>;
19
+ }
20
+
21
+ export const MRT_TableBodyRowGrabHandle = <TData extends MRT_RowData>({
22
+ row,
23
+ rowRef,
24
+ table,
25
+ ...rest
26
+ }: Props<TData>) => {
27
+ const {
28
+ options: { mantineRowDragHandleProps },
29
+ } = table;
30
+
31
+ const actionIconProps = {
32
+ ...parseFromValuesOrFunc(mantineRowDragHandleProps, {
33
+ row,
34
+ table,
35
+ }),
36
+ ...rest,
37
+ };
38
+
39
+ const handleDragStart = (event: DragEvent<HTMLButtonElement>) => {
40
+ actionIconProps?.onDragStart?.(event);
41
+ event.dataTransfer.setDragImage(rowRef.current as HTMLElement, 0, 0);
42
+ table.setDraggingRow(row as any);
43
+ };
44
+
45
+ const handleDragEnd = (event: DragEvent<HTMLButtonElement>) => {
46
+ actionIconProps?.onDragEnd?.(event);
47
+ table.setDraggingRow(null);
48
+ table.setHoveredRow(null);
49
+ };
50
+
51
+ return (
52
+ <MRT_GrabHandleButton
53
+ actionIconProps={actionIconProps}
54
+ onDragEnd={handleDragEnd}
55
+ onDragStart={handleDragStart}
56
+ table={table}
57
+ />
58
+ );
59
+ };
@@ -0,0 +1,59 @@
1
+ 'use no memo';
2
+
3
+ import { type ActionIconProps, Box } from '@mantine/core';
4
+
5
+ import {
6
+ type MRT_Row,
7
+ type MRT_RowData,
8
+ type MRT_TableInstance,
9
+ } from '../../types';
10
+ import { parseFromValuesOrFunc } from '../../utils/utils';
11
+ import { MRT_RowPinButton } from '../buttons/MRT_RowPinButton';
12
+
13
+ interface Props<TData extends MRT_RowData> extends ActionIconProps {
14
+ row: MRT_Row<TData>;
15
+ table: MRT_TableInstance<TData>;
16
+ }
17
+
18
+ export const MRT_TableBodyRowPinButton = <TData extends MRT_RowData>({
19
+ row,
20
+ table,
21
+ ...rest
22
+ }: Props<TData>) => {
23
+ const {
24
+ getState,
25
+ options: { enableRowPinning, rowPinningDisplayMode },
26
+ } = table;
27
+ const { density } = getState();
28
+
29
+ const canPin = parseFromValuesOrFunc(enableRowPinning, row as any);
30
+
31
+ if (!canPin) return null;
32
+
33
+ const rowPinButtonProps = {
34
+ row,
35
+ table,
36
+ ...rest,
37
+ };
38
+
39
+ if (rowPinningDisplayMode === 'top-and-bottom' && !row.getIsPinned()) {
40
+ return (
41
+ <Box
42
+ style={{
43
+ display: 'flex',
44
+ flexDirection: density === 'xs' ? 'row' : 'column',
45
+ }}
46
+ >
47
+ <MRT_RowPinButton pinningPosition="top" {...rowPinButtonProps} />
48
+ <MRT_RowPinButton pinningPosition="bottom" {...rowPinButtonProps} />
49
+ </Box>
50
+ );
51
+ }
52
+
53
+ return (
54
+ <MRT_RowPinButton
55
+ pinningPosition={rowPinningDisplayMode === 'bottom' ? 'bottom' : 'top'}
56
+ {...rowPinButtonProps}
57
+ />
58
+ );
59
+ };
@@ -0,0 +1,35 @@
1
+ .root {
2
+ display: table-row;
3
+ width: 100%;
4
+ background-color: var(--mrt-base-background-color);
5
+ }
6
+
7
+ .root-grid {
8
+ display: flex;
9
+ }
10
+
11
+ .root-virtual-row {
12
+ position: absolute;
13
+ top: var(--mrt-parent-row-height);
14
+ transform: translateY(var(--mrt-virtual-row-start));
15
+ transition: none;
16
+ z-index: 1;
17
+ }
18
+
19
+ .inner {
20
+ display: table-cell;
21
+ transition: all 150ms ease-in-out;
22
+ width: var(--mrt-inner-width);
23
+ }
24
+
25
+ .inner-grid {
26
+ display: flex;
27
+ }
28
+
29
+ .inner-expanded {
30
+ border-bottom: 1px solid var(--_table-border-color);
31
+ }
32
+
33
+ .inner-virtual {
34
+ transition: none;
35
+ }
@@ -0,0 +1,132 @@
1
+ 'use no memo';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ import classes from './MRT_TableDetailPanel.module.css';
6
+
7
+ import { type RefObject } from 'react';
8
+
9
+ import { Collapse, TableTd, type TableTdProps, TableTr } from '@mantine/core';
10
+
11
+ import {
12
+ type MRT_Row,
13
+ type MRT_RowData,
14
+ type MRT_RowVirtualizer,
15
+ type MRT_TableInstance,
16
+ type MRT_VirtualItem,
17
+ } from '../../types';
18
+ import { parseFromValuesOrFunc } from '../../utils/utils';
19
+ import { MRT_EditCellTextInput } from '../inputs/MRT_EditCellTextInput';
20
+
21
+ interface Props<TData extends MRT_RowData> extends TableTdProps {
22
+ parentRowRef: RefObject<HTMLTableRowElement | null>;
23
+ renderedRowIndex?: number;
24
+ row: MRT_Row<TData>;
25
+ rowVirtualizer?: MRT_RowVirtualizer;
26
+ striped?: false | string;
27
+ table: MRT_TableInstance<TData>;
28
+ virtualRow?: MRT_VirtualItem;
29
+ }
30
+
31
+ export const MRT_TableDetailPanel = <TData extends MRT_RowData>({
32
+ parentRowRef,
33
+ renderedRowIndex = 0,
34
+ row,
35
+ rowVirtualizer,
36
+ striped,
37
+ table,
38
+ virtualRow,
39
+ ...rest
40
+ }: Props<TData>) => {
41
+ const {
42
+ getState,
43
+ getVisibleLeafColumns,
44
+ options: {
45
+ layoutMode,
46
+ mantineDetailPanelProps,
47
+ mantineTableBodyRowProps,
48
+ renderDetailPanel,
49
+ },
50
+ } = table;
51
+ const { isLoading } = getState();
52
+
53
+ const tableRowProps = parseFromValuesOrFunc(mantineTableBodyRowProps, {
54
+ isDetailPanel: true,
55
+ row,
56
+ table,
57
+ });
58
+
59
+ const tableCellProps = {
60
+ ...parseFromValuesOrFunc(mantineDetailPanelProps, {
61
+ row,
62
+ table,
63
+ }),
64
+ ...rest,
65
+ };
66
+
67
+ const internalEditComponents = row
68
+ .getAllCells()
69
+ .filter((cell) => cell.column.columnDef.columnDefType === 'data')
70
+ .map((cell) => (
71
+ <MRT_EditCellTextInput cell={cell} key={cell.id} table={table} />
72
+ ));
73
+
74
+ const DetailPanel =
75
+ !isLoading &&
76
+ row.getIsExpanded() &&
77
+ renderDetailPanel?.({ internalEditComponents, row, table });
78
+
79
+ return (
80
+ <TableTr
81
+ data-index={
82
+ renderDetailPanel ? renderedRowIndex * 2 + 1 : renderedRowIndex
83
+ }
84
+ data-striped={striped}
85
+ ref={(node: HTMLTableRowElement) => {
86
+ if (node) {
87
+ rowVirtualizer?.measureElement?.(node);
88
+ }
89
+ }}
90
+ {...tableRowProps}
91
+ __vars={{
92
+ '--mrt-parent-row-height': virtualRow
93
+ ? `${parentRowRef.current?.getBoundingClientRect()?.height}px`
94
+ : undefined,
95
+ '--mrt-virtual-row-start': virtualRow
96
+ ? `${virtualRow.start}px`
97
+ : undefined,
98
+ ...tableRowProps?.__vars,
99
+ }}
100
+ className={clsx(
101
+ 'mantine-Table-tr-detail-panel',
102
+ classes.root,
103
+ layoutMode?.startsWith('grid') && classes['root-grid'],
104
+ virtualRow && classes['root-virtual-row'],
105
+ tableRowProps?.className,
106
+ )}
107
+ >
108
+ <TableTd
109
+ colSpan={getVisibleLeafColumns().length}
110
+ component="td"
111
+ {...tableCellProps}
112
+ __vars={{
113
+ '--mrt-inner-width': `${table.getTotalSize()}px`,
114
+ }}
115
+ className={clsx(
116
+ 'mantine-Table-td-detail-panel',
117
+ classes.inner,
118
+ layoutMode?.startsWith('grid') && classes['inner-grid'],
119
+ row.getIsExpanded() && classes['inner-expanded'],
120
+ virtualRow && classes['inner-virtual'],
121
+ )}
122
+ p={row.getIsExpanded() && DetailPanel ? 'md' : 0}
123
+ >
124
+ {rowVirtualizer ? (
125
+ row.getIsExpanded() && DetailPanel
126
+ ) : (
127
+ <Collapse expanded={row.getIsExpanded()}>{DetailPanel}</Collapse>
128
+ )}
129
+ </TableTd>
130
+ </TableTr>
131
+ );
132
+ };
@@ -0,0 +1,11 @@
1
+ .root {
2
+ min-width: 70px;
3
+ align-content: center;
4
+ justify-content: center;
5
+ .left {
6
+ transform: rotate(90deg);
7
+ }
8
+ .right {
9
+ transform: rotate(-90deg);
10
+ }
11
+ }
@@ -0,0 +1,69 @@
1
+ 'use no memo';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ import classes from './MRT_ColumnPinningButtons.module.css';
6
+
7
+ import { ActionIcon, Flex, Tooltip } from '@mantine/core';
8
+
9
+ import {
10
+ type MRT_Column,
11
+ type MRT_RowData,
12
+ type MRT_TableInstance,
13
+ } from '../../types';
14
+
15
+ interface Props<TData extends MRT_RowData> {
16
+ column: MRT_Column<TData>;
17
+ table: MRT_TableInstance<TData>;
18
+ }
19
+
20
+ export const MRT_ColumnPinningButtons = <TData extends MRT_RowData>({
21
+ column,
22
+ table,
23
+ }: Props<TData>) => {
24
+ const {
25
+ options: {
26
+ icons: { IconPinned, IconPinnedOff },
27
+ localization,
28
+ },
29
+ } = table;
30
+ return (
31
+ <Flex className={clsx('mrt-column-pinning-buttons', classes.root)}>
32
+ {column.getIsPinned() ? (
33
+ <Tooltip label={localization.unpin} withinPortal>
34
+ <ActionIcon
35
+ color="gray"
36
+ onClick={() => column.pin(false)}
37
+ size="md"
38
+ variant="subtle"
39
+ >
40
+ <IconPinnedOff />
41
+ </ActionIcon>
42
+ </Tooltip>
43
+ ) : (
44
+ <>
45
+ <Tooltip label={localization.pinToLeft} withinPortal>
46
+ <ActionIcon
47
+ color="gray"
48
+ onClick={() => column.pin('left')}
49
+ size="md"
50
+ variant="subtle"
51
+ >
52
+ <IconPinned className={classes.left} />
53
+ </ActionIcon>
54
+ </Tooltip>
55
+ <Tooltip label={localization.pinToRight} withinPortal>
56
+ <ActionIcon
57
+ color="gray"
58
+ onClick={() => column.pin('right')}
59
+ size="md"
60
+ variant="subtle"
61
+ >
62
+ <IconPinned className={classes.right} />
63
+ </ActionIcon>
64
+ </Tooltip>
65
+ </>
66
+ )}
67
+ </Flex>
68
+ );
69
+ };
@@ -0,0 +1,27 @@
1
+ .root {
2
+ background-color: transparent;
3
+ border: none;
4
+ border-radius: 4px;
5
+ color: inherit;
6
+ cursor: copy;
7
+ font-family: inherit;
8
+ font-size: inherit;
9
+ font-weight: inherit;
10
+ justify-content: inherit;
11
+ letter-spacing: inherit;
12
+ margin: -4px;
13
+ min-width: unset;
14
+ padding: 4px;
15
+ text-align: inherit;
16
+ text-transform: inherit;
17
+ &:active {
18
+ transform: translateY(1px);
19
+ }
20
+ &:hover {
21
+ background-color: color-mix(
22
+ in srgb,
23
+ var(--mantine-primary-color-filled-hover) 10%,
24
+ transparent
25
+ );
26
+ }
27
+ }