@kissesses/mantine-react-table-open 9.0.3

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 (362) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +196 -0
  3. package/dist/index.cjs +3769 -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 +3664 -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/tr/index.cjs +97 -0
  175. package/locales/tr/index.d.cts +3 -0
  176. package/locales/tr/index.esm.d.mts +3 -0
  177. package/locales/tr/index.esm.mjs +95 -0
  178. package/locales/tr/package.json +19 -0
  179. package/locales/uk/index.cjs +97 -0
  180. package/locales/uk/index.d.cts +3 -0
  181. package/locales/uk/index.esm.d.mts +3 -0
  182. package/locales/uk/index.esm.mjs +95 -0
  183. package/locales/uk/package.json +19 -0
  184. package/locales/vi/index.cjs +97 -0
  185. package/locales/vi/index.d.cts +3 -0
  186. package/locales/vi/index.esm.d.mts +3 -0
  187. package/locales/vi/index.esm.mjs +95 -0
  188. package/locales/vi/package.json +19 -0
  189. package/locales/zh-Hans/index.cjs +97 -0
  190. package/locales/zh-Hans/index.d.cts +3 -0
  191. package/locales/zh-Hans/index.esm.d.mts +3 -0
  192. package/locales/zh-Hans/index.esm.mjs +95 -0
  193. package/locales/zh-Hans/package.json +19 -0
  194. package/locales/zh-Hant/index.cjs +97 -0
  195. package/locales/zh-Hant/index.d.cts +3 -0
  196. package/locales/zh-Hant/index.esm.d.mts +3 -0
  197. package/locales/zh-Hant/index.esm.mjs +95 -0
  198. package/locales/zh-Hant/package.json +19 -0
  199. package/package.json +154 -0
  200. package/src/components/MantineReactTable.tsx +37 -0
  201. package/src/components/body/MRT_TableBody.module.css +42 -0
  202. package/src/components/body/MRT_TableBody.tsx +215 -0
  203. package/src/components/body/MRT_TableBodyCell.module.css +107 -0
  204. package/src/components/body/MRT_TableBodyCell.tsx +351 -0
  205. package/src/components/body/MRT_TableBodyCellValue.tsx +113 -0
  206. package/src/components/body/MRT_TableBodyEmptyRow.tsx +110 -0
  207. package/src/components/body/MRT_TableBodyRow.module.css +252 -0
  208. package/src/components/body/MRT_TableBodyRow.tsx +263 -0
  209. package/src/components/body/MRT_TableBodyRowGrabHandle.tsx +58 -0
  210. package/src/components/body/MRT_TableBodyRowPinButton.tsx +58 -0
  211. package/src/components/body/MRT_TableDetailPanel.module.css +35 -0
  212. package/src/components/body/MRT_TableDetailPanel.tsx +131 -0
  213. package/src/components/buttons/MRT_ColumnPinningButtons.module.css +11 -0
  214. package/src/components/buttons/MRT_ColumnPinningButtons.tsx +68 -0
  215. package/src/components/buttons/MRT_CopyButton.module.css +27 -0
  216. package/src/components/buttons/MRT_CopyButton.tsx +83 -0
  217. package/src/components/buttons/MRT_EditActionButtons.module.css +4 -0
  218. package/src/components/buttons/MRT_EditActionButtons.tsx +128 -0
  219. package/src/components/buttons/MRT_ExpandAllButton.module.css +26 -0
  220. package/src/components/buttons/MRT_ExpandAllButton.tsx +83 -0
  221. package/src/components/buttons/MRT_ExpandButton.module.css +37 -0
  222. package/src/components/buttons/MRT_ExpandButton.tsx +120 -0
  223. package/src/components/buttons/MRT_GrabHandleButton.module.css +6 -0
  224. package/src/components/buttons/MRT_GrabHandleButton.tsx +64 -0
  225. package/src/components/buttons/MRT_RowPinButton.tsx +83 -0
  226. package/src/components/buttons/MRT_ShowHideColumnsButton.tsx +45 -0
  227. package/src/components/buttons/MRT_ToggleDensePaddingButton.tsx +65 -0
  228. package/src/components/buttons/MRT_ToggleFiltersButton.tsx +44 -0
  229. package/src/components/buttons/MRT_ToggleFullScreenButton.tsx +58 -0
  230. package/src/components/buttons/MRT_ToggleGlobalFilterButton.tsx +51 -0
  231. package/src/components/buttons/MRT_ToggleRowActionMenuButton.tsx +86 -0
  232. package/src/components/footer/MRT_TableFooter.module.css +17 -0
  233. package/src/components/footer/MRT_TableFooter.tsx +72 -0
  234. package/src/components/footer/MRT_TableFooterCell.module.css +50 -0
  235. package/src/components/footer/MRT_TableFooterCell.tsx +122 -0
  236. package/src/components/footer/MRT_TableFooterRow.module.css +10 -0
  237. package/src/components/footer/MRT_TableFooterRow.tsx +94 -0
  238. package/src/components/head/MRT_TableHead.module.css +32 -0
  239. package/src/components/head/MRT_TableHead.tsx +108 -0
  240. package/src/components/head/MRT_TableHeadCell.module.css +163 -0
  241. package/src/components/head/MRT_TableHeadCell.tsx +322 -0
  242. package/src/components/head/MRT_TableHeadCellFilterContainer.module.css +5 -0
  243. package/src/components/head/MRT_TableHeadCellFilterContainer.tsx +147 -0
  244. package/src/components/head/MRT_TableHeadCellFilterLabel.module.css +14 -0
  245. package/src/components/head/MRT_TableHeadCellFilterLabel.tsx +171 -0
  246. package/src/components/head/MRT_TableHeadCellGrabHandle.tsx +81 -0
  247. package/src/components/head/MRT_TableHeadCellResizeHandle.module.css +44 -0
  248. package/src/components/head/MRT_TableHeadCellResizeHandle.tsx +67 -0
  249. package/src/components/head/MRT_TableHeadCellSortLabel.module.css +22 -0
  250. package/src/components/head/MRT_TableHeadCellSortLabel.tsx +89 -0
  251. package/src/components/head/MRT_TableHeadRow.module.css +12 -0
  252. package/src/components/head/MRT_TableHeadRow.tsx +87 -0
  253. package/src/components/inputs/MRT_EditCellTextInput.tsx +218 -0
  254. package/src/components/inputs/MRT_FilterCheckBox.module.css +4 -0
  255. package/src/components/inputs/MRT_FilterCheckbox.tsx +79 -0
  256. package/src/components/inputs/MRT_FilterRangeFields.module.css +5 -0
  257. package/src/components/inputs/MRT_FilterRangeFields.tsx +35 -0
  258. package/src/components/inputs/MRT_FilterRangeSlider.module.css +6 -0
  259. package/src/components/inputs/MRT_FilterRangeSlider.tsx +106 -0
  260. package/src/components/inputs/MRT_FilterTextInput.module.css +27 -0
  261. package/src/components/inputs/MRT_FilterTextInput.tsx +417 -0
  262. package/src/components/inputs/MRT_GlobalFilterTextInput.module.css +11 -0
  263. package/src/components/inputs/MRT_GlobalFilterTextInput.tsx +141 -0
  264. package/src/components/inputs/MRT_SelectCheckbox.tsx +137 -0
  265. package/src/components/menus/MRT_ColumnActionMenu.module.css +7 -0
  266. package/src/components/menus/MRT_ColumnActionMenu.tsx +287 -0
  267. package/src/components/menus/MRT_FilterOptionMenu.module.css +6 -0
  268. package/src/components/menus/MRT_FilterOptionMenu.tsx +274 -0
  269. package/src/components/menus/MRT_RowActionMenu.tsx +74 -0
  270. package/src/components/menus/MRT_ShowHideColumnsMenu.module.css +10 -0
  271. package/src/components/menus/MRT_ShowHideColumnsMenu.tsx +135 -0
  272. package/src/components/menus/MRT_ShowHideColumnsMenuItems.module.css +35 -0
  273. package/src/components/menus/MRT_ShowHideColumnsMenuItems.tsx +170 -0
  274. package/src/components/modals/MRT_EditRowModal.tsx +97 -0
  275. package/src/components/table/MRT_Table.module.css +7 -0
  276. package/src/components/table/MRT_Table.tsx +110 -0
  277. package/src/components/table/MRT_TableContainer.module.css +20 -0
  278. package/src/components/table/MRT_TableContainer.tsx +109 -0
  279. package/src/components/table/MRT_TablePaper.module.css +88 -0
  280. package/src/components/table/MRT_TablePaper.tsx +92 -0
  281. package/src/components/toolbar/MRT_BottomToolbar.module.css +40 -0
  282. package/src/components/toolbar/MRT_BottomToolbar.tsx +100 -0
  283. package/src/components/toolbar/MRT_ProgressBar.module.css +10 -0
  284. package/src/components/toolbar/MRT_ProgressBar.tsx +53 -0
  285. package/src/components/toolbar/MRT_TablePagination.module.css +20 -0
  286. package/src/components/toolbar/MRT_TablePagination.tsx +166 -0
  287. package/src/components/toolbar/MRT_ToolbarAlertBanner.module.css +37 -0
  288. package/src/components/toolbar/MRT_ToolbarAlertBanner.tsx +168 -0
  289. package/src/components/toolbar/MRT_ToolbarDropZone.module.css +23 -0
  290. package/src/components/toolbar/MRT_ToolbarDropZone.tsx +67 -0
  291. package/src/components/toolbar/MRT_ToolbarInternalButtons.module.css +6 -0
  292. package/src/components/toolbar/MRT_ToolbarInternalButtons.tsx +73 -0
  293. package/src/components/toolbar/MRT_TopToolbar.module.css +24 -0
  294. package/src/components/toolbar/MRT_TopToolbar.tsx +128 -0
  295. package/src/components/toolbar/common.styles.module.css +10 -0
  296. package/src/fns/aggregationFns.ts +3 -0
  297. package/src/fns/filterFns.ts +272 -0
  298. package/src/fns/sortingFns.ts +34 -0
  299. package/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx +23 -0
  300. package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +30 -0
  301. package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +92 -0
  302. package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +30 -0
  303. package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +24 -0
  304. package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +34 -0
  305. package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +34 -0
  306. package/src/hooks/useMRT_ColumnVirtualizer.ts +129 -0
  307. package/src/hooks/useMRT_Effects.ts +105 -0
  308. package/src/hooks/useMRT_RowVirtualizer.ts +95 -0
  309. package/src/hooks/useMRT_Rows.ts +46 -0
  310. package/src/hooks/useMRT_TableInstance.ts +314 -0
  311. package/src/hooks/useMRT_TableOptions.ts +264 -0
  312. package/src/hooks/useMantineReactTable.ts +14 -0
  313. package/src/icons.ts +73 -0
  314. package/src/index.ts +90 -0
  315. package/src/locales/ar.ts +96 -0
  316. package/src/locales/az.ts +96 -0
  317. package/src/locales/bg.ts +96 -0
  318. package/src/locales/cs.ts +97 -0
  319. package/src/locales/da.ts +96 -0
  320. package/src/locales/de.ts +96 -0
  321. package/src/locales/el.ts +96 -0
  322. package/src/locales/en.ts +96 -0
  323. package/src/locales/es.ts +96 -0
  324. package/src/locales/et.ts +97 -0
  325. package/src/locales/fa.ts +96 -0
  326. package/src/locales/fi.ts +97 -0
  327. package/src/locales/fr.ts +96 -0
  328. package/src/locales/he.ts +96 -0
  329. package/src/locales/hr.ts +96 -0
  330. package/src/locales/hu.ts +96 -0
  331. package/src/locales/hy.ts +96 -0
  332. package/src/locales/id.ts +97 -0
  333. package/src/locales/it.ts +96 -0
  334. package/src/locales/ja.ts +96 -0
  335. package/src/locales/ko.ts +96 -0
  336. package/src/locales/nl.ts +96 -0
  337. package/src/locales/no.ts +97 -0
  338. package/src/locales/np.ts +97 -0
  339. package/src/locales/pl.ts +96 -0
  340. package/src/locales/pt-BR.ts +96 -0
  341. package/src/locales/pt.ts +96 -0
  342. package/src/locales/ro.ts +96 -0
  343. package/src/locales/ru.ts +96 -0
  344. package/src/locales/sk.ts +97 -0
  345. package/src/locales/sr-Cyrl-RS.ts +96 -0
  346. package/src/locales/sr-Latn-RS.ts +96 -0
  347. package/src/locales/sv.ts +96 -0
  348. package/src/locales/tr.ts +96 -0
  349. package/src/locales/uk.ts +96 -0
  350. package/src/locales/vi.ts +96 -0
  351. package/src/locales/zh-Hans.ts +95 -0
  352. package/src/locales/zh-Hant.ts +95 -0
  353. package/src/types.ts +1276 -0
  354. package/src/typings.d.ts +1 -0
  355. package/src/utils/column.utils.ts +124 -0
  356. package/src/utils/displayColumn.utils.ts +153 -0
  357. package/src/utils/row.utils.ts +263 -0
  358. package/src/utils/style.utils.ts +32 -0
  359. package/src/utils/tanstack.helpers.ts +66 -0
  360. package/src/utils/utils.ts +4 -0
  361. package/src/utils/virtualization.utils.ts +19 -0
  362. package/styles.css +1320 -0
@@ -0,0 +1,252 @@
1
+ .root {
2
+ --hover-thickness: 3px;
3
+ --drag-thickness: 1px;
4
+
5
+ box-sizing: border-box;
6
+ transition: all 150ms ease-in-out;
7
+ width: 100%;
8
+
9
+ /* default background-color */
10
+ &:not([data-striped], [data-striped='false']) {
11
+ background-color: var(--mrt-base-background-color);
12
+ }
13
+ /* striped background-colors (take detail panels and virtualization into account) */
14
+ &:not([data-selected], [data-row-pinned]) {
15
+ &[data-striped='odd'] {
16
+ background-color: var(--mrt-striped-row-background-color);
17
+ }
18
+ &[data-striped='even'] {
19
+ background-color: var(--mrt-striped-row-background-color);
20
+ }
21
+ }
22
+
23
+ /* column pinning styles */
24
+ &:not([data-selected], [data-row-pinned]) {
25
+ td {
26
+ &[data-column-pinned] {
27
+ &::before {
28
+ background-color: var(--mrt-pinned-column-background-color);
29
+ }
30
+ }
31
+ }
32
+ &[data-striped='odd'] {
33
+ td {
34
+ &[data-column-pinned] {
35
+ &::before {
36
+ background-color: var(--mrt-striped-row-background-color);
37
+ }
38
+ }
39
+ }
40
+ }
41
+ &[data-striped='even'] {
42
+ td {
43
+ &[data-column-pinned] {
44
+ &::before {
45
+ background-color: var(--mrt-striped-row-background-color);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ td {
53
+ &[data-column-pinned] {
54
+ background-color: var(--mrt-pinned-column-background-color);
55
+ opacity: 0.97;
56
+ position: sticky;
57
+ z-index: 1;
58
+
59
+ &::before {
60
+ content: '';
61
+ height: 100%;
62
+ left: 0;
63
+ position: absolute;
64
+ top: 0;
65
+ width: 100%;
66
+ z-index: -1;
67
+ }
68
+
69
+ &[data-column-pinned='left'] {
70
+ left: calc(var(--mrt-table-cell-left, 0) * 1px);
71
+ &[data-last-left-pinned] {
72
+ &::before {
73
+ box-shadow: -6px 0 6px -6px alpha(
74
+ light-dark(
75
+ var(--mantine-color-gray-outline),
76
+ var(--mantine-color-dark-outline)
77
+ ),
78
+ 0.5
79
+ ) inset;
80
+ }
81
+ }
82
+ }
83
+
84
+ &[data-column-pinned='right'] {
85
+ right: calc(var(--mrt-table-cell-right, 0) * 1px);
86
+ &[data-first-right-pinned] {
87
+ &::before {
88
+ box-shadow: 6px 0 6px -6px alpha(
89
+ light-dark(
90
+ var(--mantine-color-gray-outline),
91
+ var(--mantine-color-dark-outline)
92
+ ),
93
+ 0.5
94
+ ) inset;
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ /* end column pinning styles */
101
+ /* row pinning styles */
102
+ &[data-row-pinned] {
103
+ background-color: var(--mrt-pinned-row-background-color, --mantine-color-body);
104
+ bottom: calc(var(--mrt-pinned-row-bottom) * 1px);
105
+ opacity: 0.97;
106
+ top: calc(var(--mrt-pinned-row-top) * 1px);
107
+
108
+ td {
109
+ &::before {
110
+ background-color: var(--mrt-pinned-row-background-color);
111
+ content: '';
112
+ height: 100%;
113
+ left: 0;
114
+ position: absolute;
115
+ top: 0;
116
+ width: 100%;
117
+ z-index: -1;
118
+ }
119
+ &[data-column-pinned] {
120
+ background-color: var(--mrt-pinned-column-background-color);
121
+
122
+ &::before {
123
+ background-color: var(--mrt-pinned-row-background-color);
124
+ content: '';
125
+ height: 100%;
126
+ left: 0;
127
+ position: absolute;
128
+ top: 0;
129
+ width: 100%;
130
+ z-index: -1;
131
+ }
132
+ }
133
+ }
134
+ }
135
+
136
+ &[data-row-pinned='sticky'] {
137
+ z-index: 2;
138
+ position: sticky;
139
+ }
140
+ /* end row pinning styles */
141
+
142
+ /* selection styles */
143
+ &[data-selected] {
144
+ background-color: var(--mrt-selected-row-background-color, --mantine-color-body);
145
+
146
+ td {
147
+ &[data-column-pinned] {
148
+ background-color: var(--mrt-pinned-column-background-color);
149
+
150
+ &::before {
151
+ background-color: var(--mrt-selected-row-background-color);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ /* end selection styles */
157
+
158
+ &[data-hover] {
159
+ &:hover {
160
+ td {
161
+ background-color: var(--mrt-row-hover-background-color);
162
+ &[data-column-pinned] {
163
+ background-color: var(--mrt-base-background-color);
164
+ &::before {
165
+ background-color: var(--mrt-row-hover-background-color);
166
+ }
167
+ }
168
+ }
169
+ &:not([data-selected], [data-row-pinned]) {
170
+ &[data-striped='odd'] {
171
+ td {
172
+ background-color: var(--mrt-striped-row-hover-background-color);
173
+ &[data-column-pinned] {
174
+ background-color: var(--mrt-base-background-color);
175
+ &::before {
176
+ background-color: var(--mrt-striped-row-hover-background-color);
177
+ }
178
+ }
179
+ }
180
+ }
181
+ &[data-striped='even'] {
182
+ td {
183
+ background-color: var(--mrt-striped-row-hover-background-color);
184
+ &[data-column-pinned] {
185
+ background-color: var(--mrt-base-background-color);
186
+ &::before {
187
+ background-color: var(--mrt-striped-row-hover-background-color);
188
+ }
189
+ }
190
+ }
191
+ }
192
+ }
193
+ &[data-selected] {
194
+ td {
195
+ background-color: var(--mrt-selected-row-hover-background-color);
196
+
197
+ &[data-column-pinned] {
198
+ background-color: var(--mrt-base-background-color);
199
+
200
+ &::before {
201
+ background-color: var(--mrt-selected-row-hover-background-color);
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ }
208
+
209
+ &[data-dragging-row] {
210
+ opacity: 0.5;
211
+ border-bottom: var(--drag-thickness) dashed var(--drag-color);
212
+ border-top: var(--drag-thickness) dashed var(--drag-color);
213
+ td {
214
+ &:first-child {
215
+ border-left: var(--drag-thickness) dashed var(--drag-color);
216
+ }
217
+ &:last-child {
218
+ border-right: var(--drag-thickness) dashed var(--drag-color);
219
+ }
220
+ }
221
+ }
222
+
223
+ &[data-hovered-row-target] {
224
+ td {
225
+ opacity: 0.5;
226
+ border-top: var(--hover-thickness) dashed
227
+ var(--mrt-dragging-hovered-border-color);
228
+ border-bottom: var(--hover-thickness) dashed
229
+ var(--mrt-dragging-hovered-border-color);
230
+ &:first-child {
231
+ border-left: var(--hover-thickness) dashed
232
+ var(--mrt-dragging-hovered-border-color);
233
+ }
234
+ &:last-child {
235
+ border-right: var(--hover-thickness) dashed
236
+ var(--mrt-dragging-hovered-border-color);
237
+ }
238
+ }
239
+ }
240
+ }
241
+
242
+ .root-grid {
243
+ display: flex;
244
+ }
245
+
246
+ .root-virtualized {
247
+ position: absolute !important;
248
+ top: 0;
249
+ transition: none !important;
250
+ transform: translateY(calc(var(--mrt-virtual-row-start) * 1px));
251
+ will-change: transform;
252
+ }
@@ -0,0 +1,263 @@
1
+ import clsx from 'clsx';
2
+
3
+ import classes from './MRT_TableBodyRow.module.css';
4
+
5
+ import { type DragEvent, memo, useMemo, useRef } from 'react';
6
+
7
+ import {
8
+ Box,
9
+ type TableProps,
10
+ TableTr,
11
+ type TableTrProps,
12
+ } from '@mantine/core';
13
+
14
+ import { Memo_MRT_TableBodyCell, MRT_TableBodyCell } from './MRT_TableBodyCell';
15
+ import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
16
+
17
+ import {
18
+ type MRT_Cell,
19
+ type MRT_ColumnVirtualizer,
20
+ type MRT_DensityState,
21
+ type MRT_Row,
22
+ type MRT_RowData,
23
+ type MRT_RowVirtualizer,
24
+ type MRT_TableInstance,
25
+ type MRT_VirtualItem,
26
+ } from '../../types';
27
+ import { getIsRowSelected } from '../../utils/row.utils';
28
+ import { parseFromValuesOrFunc } from '../../utils/utils';
29
+
30
+ interface Props<TData extends MRT_RowData> extends TableTrProps {
31
+ columnVirtualizer?: MRT_ColumnVirtualizer;
32
+ numRows?: number;
33
+ pinnedRowIds?: string[];
34
+ renderedRowIndex?: number;
35
+ row: MRT_Row<TData>;
36
+ rowVirtualizer?: MRT_RowVirtualizer;
37
+ table: MRT_TableInstance<TData>;
38
+ tableProps: Partial<TableProps>;
39
+ virtualRow?: MRT_VirtualItem;
40
+ }
41
+
42
+ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
43
+ children,
44
+ columnVirtualizer,
45
+ numRows,
46
+ pinnedRowIds,
47
+ renderedRowIndex = 0,
48
+ row,
49
+ rowVirtualizer,
50
+ table,
51
+ tableProps,
52
+ virtualRow,
53
+ ...rest
54
+ }: Props<TData>) => {
55
+ 'use no memo';
56
+ const {
57
+ getState,
58
+ options: {
59
+ enableRowOrdering,
60
+ enableRowPinning,
61
+ enableStickyFooter,
62
+ enableStickyHeader,
63
+ layoutMode,
64
+ mantineTableBodyRowProps,
65
+ memoMode,
66
+ renderDetailPanel,
67
+ rowPinningDisplayMode,
68
+ },
69
+ refs: { tableFooterRef, tableHeadRef },
70
+ setHoveredRow,
71
+ } = table;
72
+ const {
73
+ density,
74
+ draggingColumn,
75
+ draggingRow,
76
+ editingCell,
77
+ editingRow,
78
+ hoveredRow,
79
+ isFullScreen,
80
+ rowPinning,
81
+ } = getState();
82
+
83
+ const visibleCells = row.getVisibleCells();
84
+
85
+ const { virtualColumns, virtualPaddingLeft, virtualPaddingRight } =
86
+ columnVirtualizer ?? {};
87
+
88
+ const isRowSelected = getIsRowSelected({ row, table });
89
+ const isRowPinned = enableRowPinning && row.getIsPinned();
90
+ const isRowStickyPinned =
91
+ isRowPinned && rowPinningDisplayMode?.includes('sticky') && 'sticky';
92
+ const isDraggingRow = draggingRow?.id === row.id;
93
+ const isHoveredRow = hoveredRow?.id === row.id;
94
+
95
+ const tableRowProps = {
96
+ ...parseFromValuesOrFunc(mantineTableBodyRowProps, {
97
+ renderedRowIndex,
98
+ row,
99
+ table,
100
+ }),
101
+ ...rest,
102
+ };
103
+
104
+ const [bottomPinnedIndex, topPinnedIndex] = useMemo(() => {
105
+ if (
106
+ !enableRowPinning ||
107
+ !isRowStickyPinned ||
108
+ !pinnedRowIds ||
109
+ !row.getIsPinned()
110
+ )
111
+ return [];
112
+ return [
113
+ [...pinnedRowIds].reverse().indexOf(row.id),
114
+ pinnedRowIds.indexOf(row.id),
115
+ ];
116
+ }, [pinnedRowIds, rowPinning]);
117
+
118
+ const tableHeadHeight =
119
+ ((enableStickyHeader || isFullScreen) &&
120
+ tableHeadRef.current?.clientHeight) ||
121
+ 0;
122
+ const tableFooterHeight =
123
+ (enableStickyFooter && tableFooterRef.current?.clientHeight) || 0;
124
+
125
+ const defaultRowHeightByDensity: Record<MRT_DensityState, number> = {
126
+ lg: 61,
127
+ md: 53,
128
+ sm: 45,
129
+ xl: 69,
130
+ xs: 37,
131
+ };
132
+
133
+ const rowHeight =
134
+ // @ts-ignore
135
+ parseInt(tableRowProps?.style?.height, 10) ||
136
+ (defaultRowHeightByDensity[density] ?? defaultRowHeightByDensity['md']);
137
+
138
+ const handleDragEnter = (_e: DragEvent) => {
139
+ if (enableRowOrdering && draggingRow) {
140
+ setHoveredRow(row);
141
+ }
142
+ };
143
+
144
+ const rowRef = useRef<HTMLTableRowElement | null>(null);
145
+
146
+ let striped = tableProps.striped as boolean | string;
147
+
148
+ if (striped) {
149
+ if (striped === true) {
150
+ striped = 'odd';
151
+ }
152
+ if (striped === 'odd' && renderedRowIndex % 2 !== 0) {
153
+ striped = false;
154
+ }
155
+ if (striped === 'even' && renderedRowIndex % 2 === 0) {
156
+ striped = false;
157
+ }
158
+ }
159
+
160
+ return (
161
+ <>
162
+ <TableTr
163
+ data-dragging-row={isDraggingRow || undefined}
164
+ data-hovered-row-target={isHoveredRow || undefined}
165
+ data-index={renderDetailPanel ? renderedRowIndex * 2 : renderedRowIndex}
166
+ data-row-pinned={isRowStickyPinned || isRowPinned || undefined}
167
+ data-selected={isRowSelected || undefined}
168
+ data-striped={striped}
169
+ onDragEnter={handleDragEnter}
170
+ ref={(node: HTMLTableRowElement) => {
171
+ if (node) {
172
+ rowRef.current = node;
173
+ rowVirtualizer?.measureElement(node);
174
+ }
175
+ }}
176
+ {...tableRowProps}
177
+ __vars={{
178
+ ...tableRowProps?.__vars,
179
+ '--mrt-pinned-row-bottom':
180
+ !virtualRow && bottomPinnedIndex !== undefined && isRowPinned
181
+ ? `${
182
+ bottomPinnedIndex * rowHeight +
183
+ (enableStickyFooter ? tableFooterHeight - 1 : 0)
184
+ }`
185
+ : undefined,
186
+ '--mrt-pinned-row-top': virtualRow
187
+ ? undefined
188
+ : topPinnedIndex !== undefined && isRowPinned
189
+ ? `${
190
+ topPinnedIndex * rowHeight +
191
+ (enableStickyHeader || isFullScreen ? tableHeadHeight - 1 : 0)
192
+ }`
193
+ : undefined,
194
+ '--mrt-virtual-row-start': virtualRow
195
+ ? `${virtualRow.start}`
196
+ : undefined,
197
+ }}
198
+ className={clsx(
199
+ classes.root,
200
+ layoutMode?.startsWith('grid') && classes['root-grid'],
201
+ virtualRow && classes['root-virtualized'],
202
+ tableRowProps?.className,
203
+ )}
204
+ >
205
+ {virtualPaddingLeft ? (
206
+ <Box component="td" display="flex" w={virtualPaddingLeft} />
207
+ ) : null}
208
+ {children
209
+ ? children
210
+ : (virtualColumns ?? row.getVisibleCells()).map(
211
+ (cellOrVirtualCell, renderedColumnIndex) => {
212
+ let cell = cellOrVirtualCell as MRT_Cell<TData>;
213
+ if (columnVirtualizer) {
214
+ renderedColumnIndex = (cellOrVirtualCell as MRT_VirtualItem)
215
+ .index;
216
+ cell = visibleCells[renderedColumnIndex];
217
+ }
218
+ const cellProps = {
219
+ cell,
220
+ numRows,
221
+ renderedColumnIndex,
222
+ renderedRowIndex,
223
+ rowRef,
224
+ table,
225
+ virtualCell: columnVirtualizer
226
+ ? (cellOrVirtualCell as MRT_VirtualItem)
227
+ : undefined,
228
+ };
229
+ return memoMode === 'cells' &&
230
+ cell.column.columnDef.columnDefType === 'data' &&
231
+ !draggingColumn &&
232
+ !draggingRow &&
233
+ editingCell?.id !== cell.id &&
234
+ editingRow?.id !== row.id ? (
235
+ <Memo_MRT_TableBodyCell key={cell.id} {...cellProps} />
236
+ ) : (
237
+ <MRT_TableBodyCell key={cell.id} {...cellProps} />
238
+ );
239
+ },
240
+ )}
241
+ {virtualPaddingRight ? (
242
+ <Box component="td" display="flex" w={virtualPaddingRight} />
243
+ ) : null}
244
+ </TableTr>
245
+ {renderDetailPanel && !row.getIsGrouped() && (
246
+ <MRT_TableDetailPanel
247
+ parentRowRef={rowRef}
248
+ renderedRowIndex={renderedRowIndex}
249
+ row={row}
250
+ rowVirtualizer={rowVirtualizer}
251
+ striped={striped}
252
+ table={table}
253
+ virtualRow={virtualRow}
254
+ />
255
+ )}
256
+ </>
257
+ );
258
+ };
259
+
260
+ export const Memo_MRT_TableBodyRow = memo(
261
+ MRT_TableBodyRow,
262
+ (prev, next) => prev.row === next.row,
263
+ ) as typeof MRT_TableBodyRow;
@@ -0,0 +1,58 @@
1
+ import { type DragEvent, type RefObject } from 'react';
2
+
3
+ import { type ActionIconProps } 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_GrabHandleButton } from '../buttons/MRT_GrabHandleButton';
12
+
13
+ interface Props<TData extends MRT_RowData> extends ActionIconProps {
14
+ row: MRT_Row<TData>;
15
+ rowRef: RefObject<HTMLTableRowElement | null>;
16
+ table: MRT_TableInstance<TData>;
17
+ }
18
+
19
+ export const MRT_TableBodyRowGrabHandle = <TData extends MRT_RowData>({
20
+ row,
21
+ rowRef,
22
+ table,
23
+ ...rest
24
+ }: Props<TData>) => {
25
+ 'use no memo';
26
+ const {
27
+ options: { mantineRowDragHandleProps },
28
+ } = table;
29
+
30
+ const actionIconProps = {
31
+ ...parseFromValuesOrFunc(mantineRowDragHandleProps, {
32
+ row,
33
+ table,
34
+ }),
35
+ ...rest,
36
+ };
37
+
38
+ const handleDragStart = (event: DragEvent<HTMLButtonElement>) => {
39
+ actionIconProps?.onDragStart?.(event);
40
+ event.dataTransfer.setDragImage(rowRef.current as HTMLElement, 0, 0);
41
+ table.setDraggingRow(row as any);
42
+ };
43
+
44
+ const handleDragEnd = (event: DragEvent<HTMLButtonElement>) => {
45
+ actionIconProps?.onDragEnd?.(event);
46
+ table.setDraggingRow(null);
47
+ table.setHoveredRow(null);
48
+ };
49
+
50
+ return (
51
+ <MRT_GrabHandleButton
52
+ actionIconProps={actionIconProps}
53
+ onDragEnd={handleDragEnd}
54
+ onDragStart={handleDragStart}
55
+ table={table}
56
+ />
57
+ );
58
+ };
@@ -0,0 +1,58 @@
1
+ import { type ActionIconProps, Box } from '@mantine/core';
2
+
3
+ import {
4
+ type MRT_Row,
5
+ type MRT_RowData,
6
+ type MRT_TableInstance,
7
+ } from '../../types';
8
+ import { parseFromValuesOrFunc } from '../../utils/utils';
9
+ import { MRT_RowPinButton } from '../buttons/MRT_RowPinButton';
10
+
11
+ interface Props<TData extends MRT_RowData> extends ActionIconProps {
12
+ row: MRT_Row<TData>;
13
+ table: MRT_TableInstance<TData>;
14
+ }
15
+
16
+ export const MRT_TableBodyRowPinButton = <TData extends MRT_RowData>({
17
+ row,
18
+ table,
19
+ ...rest
20
+ }: Props<TData>) => {
21
+ 'use no memo';
22
+ const {
23
+ getState,
24
+ options: { enableRowPinning, rowPinningDisplayMode },
25
+ } = table;
26
+ const { density } = getState();
27
+
28
+ const canPin = parseFromValuesOrFunc(enableRowPinning, row as any);
29
+
30
+ if (!canPin) return null;
31
+
32
+ const rowPinButtonProps = {
33
+ row,
34
+ table,
35
+ ...rest,
36
+ };
37
+
38
+ if (rowPinningDisplayMode === 'top-and-bottom' && !row.getIsPinned()) {
39
+ return (
40
+ <Box
41
+ style={{
42
+ display: 'flex',
43
+ flexDirection: density === 'xs' ? 'row' : 'column',
44
+ }}
45
+ >
46
+ <MRT_RowPinButton pinningPosition="top" {...rowPinButtonProps} />
47
+ <MRT_RowPinButton pinningPosition="bottom" {...rowPinButtonProps} />
48
+ </Box>
49
+ );
50
+ }
51
+
52
+ return (
53
+ <MRT_RowPinButton
54
+ pinningPosition={rowPinningDisplayMode === 'bottom' ? 'bottom' : 'top'}
55
+ {...rowPinButtonProps}
56
+ />
57
+ );
58
+ };
@@ -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
+ }