@coveord/plasma-mantine 53.1.4 → 54.0.1

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 (394) hide show
  1. package/.eslintrc.js +1 -5
  2. package/.turbo/turbo-build.log +3 -3
  3. package/.turbo/turbo-test.log +42 -37
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/cjs/components/button/Button.d.ts +1 -2
  6. package/dist/cjs/components/button/Button.d.ts.map +1 -1
  7. package/dist/cjs/components/button/Button.js.map +1 -1
  8. package/dist/cjs/components/code-editor/CodeEditor.d.ts.map +1 -1
  9. package/dist/cjs/components/code-editor/CodeEditor.js +2 -4
  10. package/dist/cjs/components/code-editor/CodeEditor.js.map +1 -1
  11. package/dist/cjs/components/collection/Collection.d.ts.map +1 -1
  12. package/dist/cjs/components/collection/CollectionContext.d.ts +1 -1
  13. package/dist/cjs/components/collection/CollectionContext.d.ts.map +1 -1
  14. package/dist/cjs/components/collection/enhanceWithCollectionProps.d.ts +1 -6
  15. package/dist/cjs/components/collection/enhanceWithCollectionProps.d.ts.map +1 -1
  16. package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.d.ts.map +1 -1
  17. package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.d.ts.map +1 -1
  18. package/dist/cjs/components/header/Header.context.d.ts +1 -1
  19. package/dist/cjs/components/header/Header.context.d.ts.map +1 -1
  20. package/dist/cjs/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +10 -15
  21. package/dist/cjs/components/inline-confirm/InlineConfirm.d.ts +10 -2
  22. package/dist/cjs/components/inline-confirm/InlineConfirm.d.ts.map +1 -1
  23. package/dist/cjs/components/inline-confirm/InlineConfirm.js +2 -1
  24. package/dist/cjs/components/inline-confirm/InlineConfirm.js.map +1 -1
  25. package/dist/cjs/components/inline-confirm/InlineConfirmContext.d.ts +1 -1
  26. package/dist/cjs/components/inline-confirm/InlineConfirmContext.d.ts.map +1 -1
  27. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.d.ts +2 -5
  28. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.d.ts.map +1 -1
  29. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js +5 -5
  30. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
  31. package/dist/cjs/components/inline-confirm/InlineConfirmTarget.d.ts +2 -2
  32. package/dist/cjs/components/inline-confirm/InlineConfirmTarget.d.ts.map +1 -1
  33. package/dist/cjs/components/inline-confirm/InlineConfirmTarget.js +3 -3
  34. package/dist/cjs/components/inline-confirm/InlineConfirmTarget.js.map +1 -1
  35. package/dist/cjs/components/menu/Menu.d.ts +1 -1
  36. package/dist/cjs/components/table/Table.d.ts +68 -55
  37. package/dist/cjs/components/table/Table.d.ts.map +1 -1
  38. package/dist/cjs/components/table/Table.js +129 -174
  39. package/dist/cjs/components/table/Table.js.map +1 -1
  40. package/dist/cjs/components/table/Table.module.css +8 -1
  41. package/dist/cjs/components/table/Table.types.d.ts +52 -147
  42. package/dist/cjs/components/table/Table.types.d.ts.map +1 -1
  43. package/dist/cjs/components/table/TableContext.d.ts +15 -10
  44. package/dist/cjs/components/table/TableContext.d.ts.map +1 -1
  45. package/dist/cjs/components/table/TableContext.js +5 -20
  46. package/dist/cjs/components/table/TableContext.js.map +1 -1
  47. package/dist/cjs/components/table/index.d.ts +3 -3
  48. package/dist/cjs/components/table/index.d.ts.map +1 -1
  49. package/dist/cjs/components/table/index.js +5 -1
  50. package/dist/cjs/components/table/index.js.map +1 -1
  51. package/dist/cjs/components/table/layouts/TableLayoutControl.js +6 -6
  52. package/dist/cjs/components/table/layouts/TableLayoutControl.js.map +1 -1
  53. package/dist/cjs/components/table/layouts/TableLayouts.d.ts +1 -22
  54. package/dist/cjs/components/table/layouts/TableLayouts.d.ts.map +1 -1
  55. package/dist/cjs/components/table/layouts/TableLayouts.js.map +1 -1
  56. package/dist/cjs/components/table/layouts/row-layout/RowLayout.d.ts +1 -2
  57. package/dist/cjs/components/table/layouts/row-layout/RowLayout.d.ts.map +1 -1
  58. package/dist/cjs/components/table/layouts/row-layout/RowLayout.js.map +1 -1
  59. package/dist/cjs/components/table/layouts/row-layout/RowLayoutBody.d.ts +2 -3
  60. package/dist/cjs/components/table/layouts/row-layout/RowLayoutBody.d.ts.map +1 -1
  61. package/dist/cjs/components/table/layouts/row-layout/RowLayoutBody.js +17 -18
  62. package/dist/cjs/components/table/layouts/row-layout/RowLayoutBody.js.map +1 -1
  63. package/dist/cjs/components/table/layouts/row-layout/RowLayoutContext.d.ts +1 -1
  64. package/dist/cjs/components/table/layouts/row-layout/RowLayoutContext.d.ts.map +1 -1
  65. package/dist/cjs/components/table/layouts/row-layout/RowLayoutHeader.d.ts +2 -3
  66. package/dist/cjs/components/table/layouts/row-layout/RowLayoutHeader.d.ts.map +1 -1
  67. package/dist/cjs/components/table/layouts/row-layout/RowLayoutHeader.js +9 -8
  68. package/dist/cjs/components/table/layouts/row-layout/RowLayoutHeader.js.map +1 -1
  69. package/dist/cjs/components/table/layouts/row-layout/RowLayoutIcon.d.ts +1 -5
  70. package/dist/cjs/components/table/layouts/row-layout/RowLayoutIcon.d.ts.map +1 -1
  71. package/dist/cjs/components/table/layouts/row-layout/RowLayoutIcon.js +3 -9
  72. package/dist/cjs/components/table/layouts/row-layout/RowLayoutIcon.js.map +1 -1
  73. package/dist/cjs/components/table/table-actions/TableActionContext.d.ts +9 -0
  74. package/dist/cjs/components/table/table-actions/TableActionContext.d.ts.map +1 -0
  75. package/dist/cjs/components/table/table-actions/TableActionContext.js +24 -0
  76. package/dist/cjs/components/table/table-actions/TableActionContext.js.map +1 -0
  77. package/dist/cjs/components/table/table-actions/TableActionItem.d.ts +44 -0
  78. package/dist/cjs/components/table/table-actions/TableActionItem.d.ts.map +1 -0
  79. package/dist/cjs/components/table/table-actions/TableActionItem.js +59 -0
  80. package/dist/cjs/components/table/table-actions/TableActionItem.js.map +1 -0
  81. package/dist/cjs/components/table/table-actions/TableActionsList.d.ts +37 -0
  82. package/dist/cjs/components/table/table-actions/TableActionsList.d.ts.map +1 -0
  83. package/dist/cjs/components/table/table-actions/TableActionsList.js +217 -0
  84. package/dist/cjs/components/table/table-actions/TableActionsList.js.map +1 -0
  85. package/dist/cjs/components/table/table-actions/TableHeaderActions.d.ts +11 -0
  86. package/dist/cjs/components/table/table-actions/TableHeaderActions.d.ts.map +1 -0
  87. package/dist/cjs/components/table/table-actions/TableHeaderActions.js +59 -0
  88. package/dist/cjs/components/table/table-actions/TableHeaderActions.js.map +1 -0
  89. package/dist/cjs/components/table/table-actions/index.d.ts +3 -0
  90. package/dist/cjs/components/table/table-actions/index.d.ts.map +1 -0
  91. package/dist/cjs/components/table/table-actions/index.js +9 -0
  92. package/dist/cjs/components/table/table-actions/index.js.map +1 -0
  93. package/dist/cjs/components/table/table-column/TableActionsColumn.d.ts +6 -0
  94. package/dist/cjs/components/table/table-column/TableActionsColumn.d.ts.map +1 -0
  95. package/dist/cjs/components/table/table-column/TableActionsColumn.js +53 -0
  96. package/dist/cjs/components/table/table-column/TableActionsColumn.js.map +1 -0
  97. package/dist/cjs/components/table/table-column/TableCollapsibleColumn.d.ts.map +1 -1
  98. package/dist/cjs/components/table/table-column/TableCollapsibleColumn.js +6 -2
  99. package/dist/cjs/components/table/table-column/TableCollapsibleColumn.js.map +1 -1
  100. package/dist/cjs/components/table/table-column/TableSelectableColumn.d.ts.map +1 -1
  101. package/dist/cjs/components/table/table-column/TableSelectableColumn.js +4 -0
  102. package/dist/cjs/components/table/table-column/TableSelectableColumn.js.map +1 -1
  103. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.d.ts +7 -12
  104. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.d.ts.map +1 -1
  105. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.js +24 -20
  106. package/dist/cjs/components/table/table-columns-selector/TableColumnsSelector.js.map +1 -1
  107. package/dist/cjs/components/table/table-date-range-picker/TableDateRangePicker.d.ts +1 -2
  108. package/dist/cjs/components/table/table-date-range-picker/TableDateRangePicker.d.ts.map +1 -1
  109. package/dist/cjs/components/table/table-date-range-picker/TableDateRangePicker.js +7 -7
  110. package/dist/cjs/components/table/table-date-range-picker/TableDateRangePicker.js.map +1 -1
  111. package/dist/cjs/components/table/table-filter/TableFilter.d.ts +1 -2
  112. package/dist/cjs/components/table/table-filter/TableFilter.d.ts.map +1 -1
  113. package/dist/cjs/components/table/table-filter/TableFilter.js +11 -16
  114. package/dist/cjs/components/table/table-filter/TableFilter.js.map +1 -1
  115. package/dist/cjs/components/table/table-header/TableHeader.d.ts +7 -2
  116. package/dist/cjs/components/table/table-header/TableHeader.d.ts.map +1 -1
  117. package/dist/cjs/components/table/table-header/TableHeader.js +15 -12
  118. package/dist/cjs/components/table/table-header/TableHeader.js.map +1 -1
  119. package/dist/cjs/components/table/table-header/Th.d.ts +1 -2
  120. package/dist/cjs/components/table/table-header/Th.d.ts.map +1 -1
  121. package/dist/cjs/components/table/table-header/Th.js +7 -3
  122. package/dist/cjs/components/table/table-header/Th.js.map +1 -1
  123. package/dist/cjs/components/table/table-last-updated/TableLastUpdated.d.ts +1 -3
  124. package/dist/cjs/components/table/table-last-updated/TableLastUpdated.d.ts.map +1 -1
  125. package/dist/cjs/components/table/table-last-updated/TableLastUpdated.js +6 -9
  126. package/dist/cjs/components/table/table-last-updated/TableLastUpdated.js.map +1 -1
  127. package/dist/cjs/components/table/table-no-data/TableNoData.d.ts +6 -0
  128. package/dist/cjs/components/table/table-no-data/TableNoData.d.ts.map +1 -0
  129. package/dist/cjs/components/table/{table-consumer/TableConsumer.js → table-no-data/TableNoData.js} +4 -4
  130. package/dist/cjs/components/table/table-no-data/TableNoData.js.map +1 -0
  131. package/dist/cjs/components/table/table-pagination/TablePagination.d.ts.map +1 -1
  132. package/dist/cjs/components/table/table-pagination/TablePagination.js +9 -11
  133. package/dist/cjs/components/table/table-pagination/TablePagination.js.map +1 -1
  134. package/dist/cjs/components/table/table-pagination/TablePagination.types.d.ts +0 -4
  135. package/dist/cjs/components/table/table-pagination/TablePagination.types.d.ts.map +1 -1
  136. package/dist/cjs/components/table/table-per-page/TablePerPage.d.ts.map +1 -1
  137. package/dist/cjs/components/table/table-per-page/TablePerPage.js +16 -16
  138. package/dist/cjs/components/table/table-per-page/TablePerPage.js.map +1 -1
  139. package/dist/cjs/components/table/table-predicate/TablePredicate.d.ts +1 -2
  140. package/dist/cjs/components/table/table-predicate/TablePredicate.d.ts.map +1 -1
  141. package/dist/cjs/components/table/table-predicate/TablePredicate.js +12 -14
  142. package/dist/cjs/components/table/table-predicate/TablePredicate.js.map +1 -1
  143. package/dist/cjs/components/table/use-table.d.ts +182 -0
  144. package/dist/cjs/components/table/use-table.d.ts.map +1 -0
  145. package/dist/cjs/components/table/use-table.js +145 -0
  146. package/dist/cjs/components/table/use-table.js.map +1 -0
  147. package/dist/cjs/hooks/useControlledList.d.ts.map +1 -1
  148. package/dist/cjs/index.d.ts +11 -1
  149. package/dist/cjs/index.d.ts.map +1 -1
  150. package/dist/cjs/index.js.map +1 -1
  151. package/dist/cjs/theme/Theme.d.ts.map +1 -1
  152. package/dist/cjs/theme/Theme.js +0 -7
  153. package/dist/cjs/theme/Theme.js.map +1 -1
  154. package/dist/cjs/utils/createFactoryComponent.d.ts.map +1 -1
  155. package/dist/cjs/utils/overrideComponent.d.ts.map +1 -1
  156. package/dist/esm/components/button/Button.d.ts +1 -2
  157. package/dist/esm/components/button/Button.d.ts.map +1 -1
  158. package/dist/esm/components/button/Button.js.map +1 -1
  159. package/dist/esm/components/code-editor/CodeEditor.d.ts.map +1 -1
  160. package/dist/esm/components/code-editor/CodeEditor.js +2 -4
  161. package/dist/esm/components/code-editor/CodeEditor.js.map +1 -1
  162. package/dist/esm/components/collection/Collection.d.ts.map +1 -1
  163. package/dist/esm/components/collection/CollectionContext.d.ts +1 -1
  164. package/dist/esm/components/collection/CollectionContext.d.ts.map +1 -1
  165. package/dist/esm/components/collection/enhanceWithCollectionProps.d.ts +1 -6
  166. package/dist/esm/components/collection/enhanceWithCollectionProps.d.ts.map +1 -1
  167. package/dist/esm/components/date-range-picker/DateRangePickerPopoverCalendar.d.ts.map +1 -1
  168. package/dist/esm/components/date-range-picker/DateRangePickerPresetSelect.d.ts.map +1 -1
  169. package/dist/esm/components/header/Header.context.d.ts +1 -1
  170. package/dist/esm/components/header/Header.context.d.ts.map +1 -1
  171. package/dist/esm/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +10 -15
  172. package/dist/esm/components/inline-confirm/InlineConfirm.d.ts +10 -2
  173. package/dist/esm/components/inline-confirm/InlineConfirm.d.ts.map +1 -1
  174. package/dist/esm/components/inline-confirm/InlineConfirm.js +1 -1
  175. package/dist/esm/components/inline-confirm/InlineConfirm.js.map +1 -1
  176. package/dist/esm/components/inline-confirm/InlineConfirmContext.d.ts +1 -1
  177. package/dist/esm/components/inline-confirm/InlineConfirmContext.d.ts.map +1 -1
  178. package/dist/esm/components/inline-confirm/InlineConfirmPrompt.d.ts +2 -5
  179. package/dist/esm/components/inline-confirm/InlineConfirmPrompt.d.ts.map +1 -1
  180. package/dist/esm/components/inline-confirm/InlineConfirmPrompt.js +4 -4
  181. package/dist/esm/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
  182. package/dist/esm/components/inline-confirm/InlineConfirmTarget.d.ts +2 -2
  183. package/dist/esm/components/inline-confirm/InlineConfirmTarget.d.ts.map +1 -1
  184. package/dist/esm/components/inline-confirm/InlineConfirmTarget.js +2 -2
  185. package/dist/esm/components/inline-confirm/InlineConfirmTarget.js.map +1 -1
  186. package/dist/esm/components/menu/Menu.d.ts +1 -1
  187. package/dist/esm/components/table/Table.d.ts +68 -55
  188. package/dist/esm/components/table/Table.d.ts.map +1 -1
  189. package/dist/esm/components/table/Table.js +122 -157
  190. package/dist/esm/components/table/Table.js.map +1 -1
  191. package/dist/esm/components/table/Table.module.css +8 -1
  192. package/dist/esm/components/table/Table.types.d.ts +52 -147
  193. package/dist/esm/components/table/Table.types.d.ts.map +1 -1
  194. package/dist/esm/components/table/Table.types.js.map +1 -1
  195. package/dist/esm/components/table/TableContext.d.ts +15 -10
  196. package/dist/esm/components/table/TableContext.d.ts.map +1 -1
  197. package/dist/esm/components/table/TableContext.js +1 -10
  198. package/dist/esm/components/table/TableContext.js.map +1 -1
  199. package/dist/esm/components/table/index.d.ts +3 -3
  200. package/dist/esm/components/table/index.d.ts.map +1 -1
  201. package/dist/esm/components/table/index.js +2 -1
  202. package/dist/esm/components/table/index.js.map +1 -1
  203. package/dist/esm/components/table/layouts/TableLayoutControl.js +4 -4
  204. package/dist/esm/components/table/layouts/TableLayoutControl.js.map +1 -1
  205. package/dist/esm/components/table/layouts/TableLayouts.d.ts +1 -22
  206. package/dist/esm/components/table/layouts/TableLayouts.d.ts.map +1 -1
  207. package/dist/esm/components/table/layouts/TableLayouts.js.map +1 -1
  208. package/dist/esm/components/table/layouts/row-layout/RowLayout.d.ts +1 -2
  209. package/dist/esm/components/table/layouts/row-layout/RowLayout.d.ts.map +1 -1
  210. package/dist/esm/components/table/layouts/row-layout/RowLayout.js.map +1 -1
  211. package/dist/esm/components/table/layouts/row-layout/RowLayoutBody.d.ts +2 -3
  212. package/dist/esm/components/table/layouts/row-layout/RowLayoutBody.d.ts.map +1 -1
  213. package/dist/esm/components/table/layouts/row-layout/RowLayoutBody.js +13 -11
  214. package/dist/esm/components/table/layouts/row-layout/RowLayoutBody.js.map +1 -1
  215. package/dist/esm/components/table/layouts/row-layout/RowLayoutContext.d.ts +1 -1
  216. package/dist/esm/components/table/layouts/row-layout/RowLayoutContext.d.ts.map +1 -1
  217. package/dist/esm/components/table/layouts/row-layout/RowLayoutHeader.d.ts +2 -3
  218. package/dist/esm/components/table/layouts/row-layout/RowLayoutHeader.d.ts.map +1 -1
  219. package/dist/esm/components/table/layouts/row-layout/RowLayoutHeader.js +5 -5
  220. package/dist/esm/components/table/layouts/row-layout/RowLayoutHeader.js.map +1 -1
  221. package/dist/esm/components/table/layouts/row-layout/RowLayoutIcon.d.ts +1 -5
  222. package/dist/esm/components/table/layouts/row-layout/RowLayoutIcon.d.ts.map +1 -1
  223. package/dist/esm/components/table/layouts/row-layout/RowLayoutIcon.js +2 -8
  224. package/dist/esm/components/table/layouts/row-layout/RowLayoutIcon.js.map +1 -1
  225. package/dist/esm/components/table/table-actions/TableActionContext.d.ts +9 -0
  226. package/dist/esm/components/table/table-actions/TableActionContext.d.ts.map +1 -0
  227. package/dist/esm/components/table/table-actions/TableActionContext.js +4 -0
  228. package/dist/esm/components/table/table-actions/TableActionContext.js.map +1 -0
  229. package/dist/esm/components/table/table-actions/TableActionItem.d.ts +44 -0
  230. package/dist/esm/components/table/table-actions/TableActionItem.d.ts.map +1 -0
  231. package/dist/esm/components/table/table-actions/TableActionItem.js +40 -0
  232. package/dist/esm/components/table/table-actions/TableActionItem.js.map +1 -0
  233. package/dist/esm/components/table/table-actions/TableActionsList.d.ts +37 -0
  234. package/dist/esm/components/table/table-actions/TableActionsList.d.ts.map +1 -0
  235. package/dist/esm/components/table/table-actions/TableActionsList.js +187 -0
  236. package/dist/esm/components/table/table-actions/TableActionsList.js.map +1 -0
  237. package/dist/esm/components/table/table-actions/TableHeaderActions.d.ts +11 -0
  238. package/dist/esm/components/table/table-actions/TableHeaderActions.d.ts.map +1 -0
  239. package/dist/esm/components/table/table-actions/TableHeaderActions.js +43 -0
  240. package/dist/esm/components/table/table-actions/TableHeaderActions.js.map +1 -0
  241. package/dist/esm/components/table/table-actions/index.d.ts +3 -0
  242. package/dist/esm/components/table/table-actions/index.d.ts.map +1 -0
  243. package/dist/esm/components/table/table-actions/index.js +4 -0
  244. package/dist/esm/components/table/table-actions/index.js.map +1 -0
  245. package/dist/esm/components/table/table-column/TableActionsColumn.d.ts +6 -0
  246. package/dist/esm/components/table/table-column/TableActionsColumn.d.ts.map +1 -0
  247. package/dist/esm/components/table/table-column/TableActionsColumn.js +40 -0
  248. package/dist/esm/components/table/table-column/TableActionsColumn.js.map +1 -0
  249. package/dist/esm/components/table/table-column/TableCollapsibleColumn.d.ts.map +1 -1
  250. package/dist/esm/components/table/table-column/TableCollapsibleColumn.js +7 -3
  251. package/dist/esm/components/table/table-column/TableCollapsibleColumn.js.map +1 -1
  252. package/dist/esm/components/table/table-column/TableSelectableColumn.d.ts.map +1 -1
  253. package/dist/esm/components/table/table-column/TableSelectableColumn.js +4 -0
  254. package/dist/esm/components/table/table-column/TableSelectableColumn.js.map +1 -1
  255. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.d.ts +7 -12
  256. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.d.ts.map +1 -1
  257. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.js +22 -20
  258. package/dist/esm/components/table/table-columns-selector/TableColumnsSelector.js.map +1 -1
  259. package/dist/esm/components/table/table-date-range-picker/TableDateRangePicker.d.ts +1 -2
  260. package/dist/esm/components/table/table-date-range-picker/TableDateRangePicker.d.ts.map +1 -1
  261. package/dist/esm/components/table/table-date-range-picker/TableDateRangePicker.js +8 -8
  262. package/dist/esm/components/table/table-date-range-picker/TableDateRangePicker.js.map +1 -1
  263. package/dist/esm/components/table/table-filter/TableFilter.d.ts +1 -2
  264. package/dist/esm/components/table/table-filter/TableFilter.d.ts.map +1 -1
  265. package/dist/esm/components/table/table-filter/TableFilter.js +14 -18
  266. package/dist/esm/components/table/table-filter/TableFilter.js.map +1 -1
  267. package/dist/esm/components/table/table-header/TableHeader.d.ts +7 -2
  268. package/dist/esm/components/table/table-header/TableHeader.d.ts.map +1 -1
  269. package/dist/esm/components/table/table-header/TableHeader.js +15 -13
  270. package/dist/esm/components/table/table-header/TableHeader.js.map +1 -1
  271. package/dist/esm/components/table/table-header/Th.d.ts +1 -2
  272. package/dist/esm/components/table/table-header/Th.d.ts.map +1 -1
  273. package/dist/esm/components/table/table-header/Th.js +8 -4
  274. package/dist/esm/components/table/table-header/Th.js.map +1 -1
  275. package/dist/esm/components/table/table-last-updated/TableLastUpdated.d.ts +1 -3
  276. package/dist/esm/components/table/table-last-updated/TableLastUpdated.d.ts.map +1 -1
  277. package/dist/esm/components/table/table-last-updated/TableLastUpdated.js +6 -8
  278. package/dist/esm/components/table/table-last-updated/TableLastUpdated.js.map +1 -1
  279. package/dist/esm/components/table/table-no-data/TableNoData.d.ts +6 -0
  280. package/dist/esm/components/table/table-no-data/TableNoData.d.ts.map +1 -0
  281. package/dist/esm/components/table/table-no-data/TableNoData.js +6 -0
  282. package/dist/esm/components/table/table-no-data/TableNoData.js.map +1 -0
  283. package/dist/esm/components/table/table-pagination/TablePagination.d.ts.map +1 -1
  284. package/dist/esm/components/table/table-pagination/TablePagination.js +10 -13
  285. package/dist/esm/components/table/table-pagination/TablePagination.js.map +1 -1
  286. package/dist/esm/components/table/table-pagination/TablePagination.types.d.ts +0 -4
  287. package/dist/esm/components/table/table-pagination/TablePagination.types.d.ts.map +1 -1
  288. package/dist/esm/components/table/table-pagination/TablePagination.types.js.map +1 -1
  289. package/dist/esm/components/table/table-per-page/TablePerPage.d.ts.map +1 -1
  290. package/dist/esm/components/table/table-per-page/TablePerPage.js +13 -12
  291. package/dist/esm/components/table/table-per-page/TablePerPage.js.map +1 -1
  292. package/dist/esm/components/table/table-predicate/TablePredicate.d.ts +1 -2
  293. package/dist/esm/components/table/table-predicate/TablePredicate.d.ts.map +1 -1
  294. package/dist/esm/components/table/table-predicate/TablePredicate.js +14 -18
  295. package/dist/esm/components/table/table-predicate/TablePredicate.js.map +1 -1
  296. package/dist/esm/components/table/use-table.d.ts +182 -0
  297. package/dist/esm/components/table/use-table.d.ts.map +1 -0
  298. package/dist/esm/components/table/use-table.js +122 -0
  299. package/dist/esm/components/table/use-table.js.map +1 -0
  300. package/dist/esm/hooks/useControlledList.d.ts.map +1 -1
  301. package/dist/esm/index.d.ts +11 -1
  302. package/dist/esm/index.d.ts.map +1 -1
  303. package/dist/esm/index.js.map +1 -1
  304. package/dist/esm/theme/Theme.d.ts.map +1 -1
  305. package/dist/esm/theme/Theme.js +1 -8
  306. package/dist/esm/theme/Theme.js.map +1 -1
  307. package/dist/esm/utils/createFactoryComponent.d.ts.map +1 -1
  308. package/dist/esm/utils/overrideComponent.d.ts.map +1 -1
  309. package/package.json +61 -46
  310. package/src/__tests__/Utils.tsx +3 -1
  311. package/src/components/button/Button.tsx +3 -1
  312. package/src/components/button/__tests__/ButtonWithDisabledTooltip.spec.tsx +1 -1
  313. package/src/components/code-editor/CodeEditor.tsx +1 -7
  314. package/src/components/date-range-picker/__tests__/DateRangePickerPopoverCalendar.spec.tsx +4 -4
  315. package/src/components/header/__tests__/Header.spec.tsx +21 -22
  316. package/src/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +10 -15
  317. package/src/components/inline-confirm/InlineConfirm.tsx +12 -4
  318. package/src/components/inline-confirm/InlineConfirmPrompt.tsx +6 -9
  319. package/src/components/inline-confirm/InlineConfirmTarget.tsx +9 -4
  320. package/src/components/inline-confirm/__tests__/InlineConfirm.spec.tsx +39 -14
  321. package/src/components/table/Table.module.css +8 -1
  322. package/src/components/table/Table.tsx +148 -170
  323. package/src/components/table/Table.types.ts +57 -160
  324. package/src/components/table/TableContext.tsx +17 -16
  325. package/src/components/table/__tests__/Table.spec.tsx +176 -200
  326. package/src/components/table/__tests__/TableActions.spec.tsx +142 -31
  327. package/src/components/table/__tests__/TableCollapsibleColumn.spec.tsx +88 -0
  328. package/src/components/table/__tests__/TableColumnsSelector.spec.tsx +164 -123
  329. package/src/components/table/__tests__/TableDateRangePicker.spec.tsx +13 -17
  330. package/src/components/table/__tests__/TableFilter.spec.tsx +52 -96
  331. package/src/components/table/__tests__/TableLastUpdated.spec.tsx +18 -37
  332. package/src/components/table/__tests__/TablePagination.spec.tsx +84 -100
  333. package/src/components/table/__tests__/TablePerPage.spec.tsx +81 -104
  334. package/src/components/table/__tests__/TablePredicate.spec.tsx +26 -80
  335. package/src/components/table/__tests__/Th.spec.tsx +24 -19
  336. package/src/components/table/index.ts +3 -9
  337. package/src/components/table/layouts/TableLayoutControl.tsx +4 -4
  338. package/src/components/table/layouts/TableLayouts.tsx +0 -22
  339. package/src/components/table/layouts/__tests__/RowLayout.spec.tsx +210 -182
  340. package/src/components/table/layouts/row-layout/RowLayout.tsx +2 -2
  341. package/src/components/table/layouts/row-layout/RowLayoutBody.tsx +17 -17
  342. package/src/components/table/layouts/row-layout/RowLayoutHeader.tsx +18 -9
  343. package/src/components/table/layouts/row-layout/RowLayoutIcon.tsx +3 -8
  344. package/src/components/table/table-actions/TableActionContext.ts +9 -0
  345. package/src/components/table/table-actions/TableActionItem.tsx +80 -0
  346. package/src/components/table/table-actions/TableActionsList.tsx +209 -0
  347. package/src/components/table/table-actions/TableHeaderActions.tsx +56 -0
  348. package/src/components/table/table-actions/index.ts +2 -0
  349. package/src/components/table/table-column/TableActionsColumn.tsx +39 -0
  350. package/src/components/table/table-column/TableCollapsibleColumn.tsx +7 -3
  351. package/src/components/table/table-column/TableSelectableColumn.tsx +4 -0
  352. package/src/components/table/table-columns-selector/TableColumnsSelector.tsx +33 -28
  353. package/src/components/table/table-date-range-picker/TableDateRangePicker.tsx +9 -11
  354. package/src/components/table/table-filter/TableFilter.tsx +12 -18
  355. package/src/components/table/table-header/TableHeader.tsx +32 -15
  356. package/src/components/table/table-header/Th.tsx +8 -7
  357. package/src/components/table/table-last-updated/TableLastUpdated.tsx +7 -10
  358. package/src/components/table/table-no-data/TableNoData.tsx +7 -0
  359. package/src/components/table/table-pagination/TablePagination.tsx +8 -11
  360. package/src/components/table/table-pagination/TablePagination.types.ts +0 -4
  361. package/src/components/table/table-per-page/TablePerPage.tsx +8 -10
  362. package/src/components/table/table-predicate/TablePredicate.tsx +21 -17
  363. package/src/components/table/use-table.ts +323 -0
  364. package/src/index.ts +11 -1
  365. package/src/theme/Theme.tsx +0 -6
  366. package/dist/cjs/components/table/table-actions/TableActions.d.ts +0 -38
  367. package/dist/cjs/components/table/table-actions/TableActions.d.ts.map +0 -1
  368. package/dist/cjs/components/table/table-actions/TableActions.js +0 -47
  369. package/dist/cjs/components/table/table-actions/TableActions.js.map +0 -1
  370. package/dist/cjs/components/table/table-consumer/TableConsumer.d.ts +0 -5
  371. package/dist/cjs/components/table/table-consumer/TableConsumer.d.ts.map +0 -1
  372. package/dist/cjs/components/table/table-consumer/TableConsumer.js.map +0 -1
  373. package/dist/cjs/hooks/useRowSelection.d.ts +0 -10
  374. package/dist/cjs/hooks/useRowSelection.d.ts.map +0 -1
  375. package/dist/cjs/hooks/useRowSelection.js +0 -80
  376. package/dist/cjs/hooks/useRowSelection.js.map +0 -1
  377. package/dist/cjs/styles/Title.module.css +0 -5
  378. package/dist/esm/components/table/table-actions/TableActions.d.ts +0 -38
  379. package/dist/esm/components/table/table-actions/TableActions.d.ts.map +0 -1
  380. package/dist/esm/components/table/table-actions/TableActions.js +0 -29
  381. package/dist/esm/components/table/table-actions/TableActions.js.map +0 -1
  382. package/dist/esm/components/table/table-consumer/TableConsumer.d.ts +0 -5
  383. package/dist/esm/components/table/table-consumer/TableConsumer.d.ts.map +0 -1
  384. package/dist/esm/components/table/table-consumer/TableConsumer.js +0 -6
  385. package/dist/esm/components/table/table-consumer/TableConsumer.js.map +0 -1
  386. package/dist/esm/hooks/useRowSelection.d.ts +0 -10
  387. package/dist/esm/hooks/useRowSelection.d.ts.map +0 -1
  388. package/dist/esm/hooks/useRowSelection.js +0 -59
  389. package/dist/esm/hooks/useRowSelection.js.map +0 -1
  390. package/dist/esm/styles/Title.module.css +0 -5
  391. package/src/components/table/table-actions/TableActions.tsx +0 -67
  392. package/src/components/table/table-consumer/TableConsumer.tsx +0 -3
  393. package/src/hooks/useRowSelection.ts +0 -76
  394. package/src/styles/Title.module.css +0 -5
@@ -1,10 +1,9 @@
1
- import {BoxProps, Factory, useProps} from '@mantine/core';
2
- import {CompoundStylesApiProps} from '@mantine/core/lib/core/styles-api/styles-api.types';
1
+ import {BoxProps, CompoundStylesApiProps, Factory, useProps} from '@mantine/core';
3
2
  import {ForwardedRef} from 'react';
4
3
  import {CustomComponentThemeExtend, identity} from '../../../../utils';
4
+ import {TableLayoutProps} from '../../Table.types';
5
+ import {useTableContext} from '../../TableContext';
5
6
  import {Th} from '../../table-header/Th';
6
- import {useTable} from '../../TableContext';
7
- import {type TableLayoutProps} from '../TableLayouts';
8
7
  import {RowLayoutBodyFactory} from './RowLayoutBody';
9
8
  import {useRowLayout} from './RowLayoutContext';
10
9
 
@@ -26,15 +25,25 @@ const defaultProps: Partial<RowLayoutHeaderProps<unknown>> = {};
26
25
 
27
26
  export const RowLayoutHeader = <T,>(props: RowLayoutHeaderProps<T> & {ref?: ForwardedRef<HTMLTableRowElement>}) => {
28
27
  const ctx = useRowLayout();
29
- const {table, getExpandChildren, loading, doubleClickAction, className, style, classNames, styles, ...others} =
30
- useProps('RowLayoutHeader', defaultProps as RowLayoutHeaderProps<T>, props);
31
- const {multiRowSelectionEnabled, disableRowSelection} = useTable();
28
+ const {
29
+ getRowExpandedContent: _getRowExpandedContent,
30
+ getRowActions: _getRowActions,
31
+ loading: _loading,
32
+ getRowAttributes: _getRowAttributes,
33
+ onRowDoubleClick: _onRowDoubleClick,
34
+ className,
35
+ style,
36
+ classNames,
37
+ styles,
38
+ ...others
39
+ } = useProps('RowLayoutHeader', defaultProps as RowLayoutHeaderProps<T>, props);
40
+ const {table, store} = useTableContext<T>();
32
41
 
33
42
  const headers = table.getHeaderGroups().map((headerGroup) => (
34
43
  <tr
35
44
  key={headerGroup.id}
36
- data-selectable={!disableRowSelection}
37
- data-multi-selection={multiRowSelectionEnabled}
45
+ data-selectable={store.rowSelectionEnabled}
46
+ data-multi-selection={store.multiRowSelectionEnabled}
38
47
  {...ctx.getStyles('headerRow', {className, classNames, styles, style})}
39
48
  {...others}
40
49
  >
@@ -1,9 +1,6 @@
1
1
  import {Icon as IconType, ListSize16Px} from '@coveord/plasma-react-icons';
2
- import {factory, Factory, useProps} from '@mantine/core';
3
- import {CompoundStylesApiProps} from '@mantine/core/lib/core/styles-api/styles-api.types';
4
- import {useRowLayout} from './RowLayoutContext';
2
+ import {CompoundStylesApiProps, Factory, factory, useProps} from '@mantine/core';
5
3
 
6
- export type RowLayoutIconStylesNames = 'icon';
7
4
  export interface RowLayoutIconProps extends CompoundStylesApiProps<RowLayoutIconFactory> {
8
5
  icon: IconType;
9
6
  }
@@ -11,7 +8,6 @@ export interface RowLayoutIconProps extends CompoundStylesApiProps<RowLayoutIcon
11
8
  export type RowLayoutIconFactory = Factory<{
12
9
  props: RowLayoutIconProps;
13
10
  ref: SVGSVGElement;
14
- stylesNames: RowLayoutIconStylesNames;
15
11
  compound: true;
16
12
  }>;
17
13
 
@@ -20,8 +16,7 @@ const defaultProps: Partial<RowLayoutIconProps> = {
20
16
  };
21
17
 
22
18
  export const RowLayoutIcon = factory<RowLayoutIconFactory>((props, ref) => {
23
- const ctx = useRowLayout();
24
- const {icon: Icon, classNames, styles} = useProps('RowLayoutIcon', defaultProps, props);
19
+ const {icon: Icon} = useProps('RowLayoutIcon', defaultProps, props);
25
20
 
26
- return <Icon ref={ref} {...ctx.getStyles('icon', {styles, classNames})} />;
21
+ return <Icon ref={ref} />;
27
22
  });
@@ -0,0 +1,9 @@
1
+ import {createSafeContext} from '@mantine/core';
2
+
3
+ export interface TableActionContextValue {
4
+ primary: boolean;
5
+ }
6
+
7
+ export const [TableActionProvider, useTableActionContext] = createSafeContext<TableActionContextValue>(
8
+ 'TableActionProvider component was not found in the tree',
9
+ );
@@ -0,0 +1,80 @@
1
+ import {
2
+ CompoundStylesApiProps,
3
+ Menu,
4
+ MenuItemProps,
5
+ PolymorphicFactory,
6
+ polymorphicFactory,
7
+ useProps,
8
+ } from '@mantine/core';
9
+ import {ReactNode} from 'react';
10
+ import {Button, ButtonProps} from '../../button';
11
+ import {useTableContext} from '../TableContext';
12
+ import {useTableActionContext} from './TableActionContext';
13
+
14
+ export type TableActionItemStylesNames = 'actionItemRoot';
15
+
16
+ export interface TableActionItemProps
17
+ extends Omit<ButtonProps, 'classNames' | 'styles' | 'vars' | 'variant' | 'leftSection' | 'rightSection'>,
18
+ Omit<MenuItemProps, 'classNames' | 'styles' | 'vars' | 'variant' | 'leftSection' | 'disabled'>,
19
+ CompoundStylesApiProps<TableActionItemFactory> {
20
+ /**
21
+ * Action label
22
+ */
23
+ children: ReactNode;
24
+ /**
25
+ * Content to put on the left of the label
26
+ */
27
+ leftSection?: ReactNode;
28
+ }
29
+
30
+ type TableActionItemFactory = PolymorphicFactory<{
31
+ props: TableActionItemProps;
32
+ defaultRef: HTMLButtonElement;
33
+ defaultComponent: 'button';
34
+ stylesNames: TableActionItemStylesNames;
35
+ compound: true;
36
+ }>;
37
+
38
+ const defaultProps: Partial<TableActionItemProps> = {};
39
+
40
+ export const TableActionItem = polymorphicFactory<TableActionItemFactory>(
41
+ (props: TableActionItemProps & {component?: any}, ref) => {
42
+ const {getStyles} = useTableContext();
43
+ const {primary} = useTableActionContext();
44
+ const {
45
+ classNames,
46
+ className,
47
+ style,
48
+ styles,
49
+ vars: _vars,
50
+ children,
51
+ component,
52
+ ...others
53
+ } = useProps('PlasmaTableActionItem', defaultProps, props);
54
+
55
+ if (primary) {
56
+ return (
57
+ <Button
58
+ component={component}
59
+ ref={ref}
60
+ variant="subtle"
61
+ {...others}
62
+ {...getStyles('actionItemRoot', {className, style, classNames, styles})}
63
+ >
64
+ {children}
65
+ </Button>
66
+ );
67
+ }
68
+
69
+ return (
70
+ <Menu.Item
71
+ component={component}
72
+ ref={ref}
73
+ {...others}
74
+ {...getStyles('actionItemRoot', {className, style, classNames, styles})}
75
+ >
76
+ {children}
77
+ </Menu.Item>
78
+ );
79
+ },
80
+ );
@@ -0,0 +1,209 @@
1
+ import {MoreSize16Px} from '@coveord/plasma-react-icons';
2
+ import {
3
+ ActionIcon,
4
+ Box,
5
+ Button,
6
+ CSSProperties,
7
+ CompoundStylesApiProps,
8
+ ExtendComponent,
9
+ Factory,
10
+ Menu,
11
+ MenuProps,
12
+ Tooltip,
13
+ useProps,
14
+ } from '@mantine/core';
15
+ import {MouseEventHandler, ReactNode, useState} from 'react';
16
+ import {InlineConfirm} from '../../inline-confirm';
17
+ import {TableAction} from '../Table.types';
18
+ import {useTableContext} from '../TableContext';
19
+ import {TableActionProvider} from './TableActionContext';
20
+
21
+ export type TableActionsListStylesNames =
22
+ | 'actionsTarget'
23
+ | 'actionsDropdown'
24
+ | 'actionsTooltip'
25
+ | 'actionsGroup'
26
+ | 'actionsGroupLabel'
27
+ | 'actionsGroupDivider'
28
+ | 'actionsGroupItems';
29
+
30
+ export interface TableActionsListProps
31
+ extends Omit<MenuProps, 'classNames' | 'styles' | 'vars' | 'variant'>,
32
+ CompoundStylesApiProps<TableActionsListFactory> {
33
+ actions: TableAction[];
34
+ /**
35
+ * Label for the more menu
36
+ * @default 'More' when variant is 'split', 'Actions' when variant is 'combined'
37
+ */
38
+ label?: string;
39
+ /**
40
+ * Label for the primary actions group when variant is 'combined'
41
+ * @default ''
42
+ */
43
+ primaryGroupLabel?: string;
44
+ icon?: ReactNode;
45
+ }
46
+
47
+ type TableActionsListFactory = Factory<{
48
+ props: TableActionsListProps;
49
+ ref: HTMLDivElement;
50
+ stylesNames: TableActionsListStylesNames;
51
+ compound: true;
52
+ variant: 'split' | 'combined';
53
+ }>;
54
+
55
+ const defaultProps: Partial<TableActionsListProps> = {
56
+ label: 'More',
57
+ primaryGroupLabel: '',
58
+ icon: <MoreSize16Px height={16} />,
59
+ };
60
+
61
+ interface ActionsDict {
62
+ $$primary: TableAction[];
63
+ $$confirmPrompt: TableAction[];
64
+ secondary: Record<string, Array<TableAction['component']>>;
65
+ }
66
+
67
+ interface ActionGroup {
68
+ name: string;
69
+ actions: ReactNode[];
70
+ }
71
+
72
+ export const TableActionsList = (props: TableActionsListProps) => {
73
+ const {getStyles} = useTableContext();
74
+ const {
75
+ actions,
76
+ icon,
77
+ label,
78
+ primaryGroupLabel,
79
+ classNames,
80
+ styles,
81
+ vars: _vars,
82
+ variant,
83
+ ...others
84
+ } = useProps('PlasmaTableActionsListColumn', defaultProps, props);
85
+ const [opened, setOpened] = useState(false);
86
+
87
+ const onClick: MouseEventHandler = (e) => {
88
+ e.preventDefault();
89
+ e.stopPropagation();
90
+ setOpened((prevState) => !prevState);
91
+ };
92
+ const onChange = (newOpened: boolean) => {
93
+ if (!newOpened) {
94
+ setOpened(false);
95
+ }
96
+ };
97
+
98
+ const actionsGroups: ActionsDict = actions.reduce<ActionsDict>(
99
+ (acc, action) => {
100
+ if (action.group === '$$primary') {
101
+ acc.$$primary.push(action);
102
+ } else if (action.group === '$$confirmPrompt') {
103
+ acc.$$confirmPrompt.push(action);
104
+ } else {
105
+ if (acc.secondary[action.group]) {
106
+ acc.secondary[action.group].push(action.component);
107
+ } else {
108
+ acc.secondary[action.group] = [action.component];
109
+ }
110
+ }
111
+ return acc;
112
+ },
113
+ {$$primary: [], $$confirmPrompt: [], secondary: {}},
114
+ );
115
+
116
+ const primaryActions = actionsGroups.$$primary.map((action) => action.component);
117
+ const confirmPrompts = actionsGroups.$$confirmPrompt.map((confirmPromptAction) => confirmPromptAction.component);
118
+ const secondaryActionGroups = Object.entries(actionsGroups.secondary).map(
119
+ ([group, groupActions]): ActionGroup => ({
120
+ name: group,
121
+ actions: groupActions,
122
+ }),
123
+ );
124
+
125
+ if (variant === 'split') {
126
+ return (
127
+ <InlineConfirm>
128
+ {confirmPrompts}
129
+ <TableActionProvider value={{primary: true}}>{primaryActions}</TableActionProvider>
130
+ {secondaryActionGroups.length > 0 ? (
131
+ <TableActionProvider value={{primary: false}}>
132
+ <Menu withinPortal={false} {...others}>
133
+ <Menu.Target>
134
+ <Button
135
+ {...getStyles('actionsTarget', {styles, classNames})}
136
+ variant="subtle"
137
+ leftSection={icon}
138
+ >
139
+ {label}
140
+ </Button>
141
+ </Menu.Target>
142
+ <Menu.Dropdown {...getStyles('actionsDropdown', {styles, classNames})}>
143
+ <ActionsGroupsMenuItems
144
+ classNames={classNames}
145
+ styles={styles}
146
+ actionGroups={secondaryActionGroups}
147
+ />
148
+ </Menu.Dropdown>
149
+ </Menu>
150
+ </TableActionProvider>
151
+ ) : null}
152
+ </InlineConfirm>
153
+ );
154
+ }
155
+ return (
156
+ <InlineConfirm>
157
+ {confirmPrompts}
158
+ <TableActionProvider value={{primary: false}}>
159
+ <Menu opened={opened} onChange={onChange} {...others}>
160
+ <Menu.Target>
161
+ <Tooltip label={label} {...getStyles('actionsTooltip', {styles, classNames})}>
162
+ <ActionIcon
163
+ onClick={onClick}
164
+ variant="subtle"
165
+ {...getStyles('actionsTarget', {styles, classNames})}
166
+ >
167
+ {icon}
168
+ </ActionIcon>
169
+ </Tooltip>
170
+ </Menu.Target>
171
+ <Menu.Dropdown {...getStyles('actionsDropdown', {styles, classNames})}>
172
+ <ActionsGroupsMenuItems
173
+ classNames={classNames}
174
+ styles={styles}
175
+ actionGroups={
176
+ primaryActions.length > 0
177
+ ? [{name: primaryGroupLabel, actions: primaryActions}, ...secondaryActionGroups]
178
+ : secondaryActionGroups
179
+ }
180
+ />
181
+ </Menu.Dropdown>
182
+ </Menu>
183
+ </TableActionProvider>
184
+ </InlineConfirm>
185
+ );
186
+ };
187
+
188
+ interface ActionsGroupsMenuItemsProps {
189
+ styles: Partial<Record<TableActionsListStylesNames, CSSProperties>>;
190
+ classNames: Partial<Record<TableActionsListStylesNames, string>>;
191
+ actionGroups: ActionGroup[];
192
+ }
193
+
194
+ const ActionsGroupsMenuItems = ({styles, classNames, actionGroups}: ActionsGroupsMenuItemsProps) => {
195
+ const {getStyles} = useTableContext();
196
+ return actionGroups.map(({name, actions}, index) => (
197
+ <Box key={name} {...getStyles('actionsGroup', {styles, classNames})}>
198
+ {actionGroups.length > 1 ? (
199
+ <Menu.Label {...getStyles('actionsGroupLabel', {styles, classNames})}>{name}</Menu.Label>
200
+ ) : null}
201
+ <Box {...getStyles('actionsGroupItems', {styles, classNames})}>{actions}</Box>
202
+ {index < actionGroups.length - 1 ? (
203
+ <Menu.Divider {...getStyles('actionsGroupDivider', {styles, classNames})} />
204
+ ) : null}
205
+ </Box>
206
+ ));
207
+ };
208
+
209
+ TableActionsList.extend = (input: ExtendComponent<TableActionsListFactory>) => input;
@@ -0,0 +1,56 @@
1
+ import {Factory, factory, Grid, GridColProps, Group, useProps} from '@mantine/core';
2
+ import {ReactElement} from 'react';
3
+
4
+ import {TableComponentsOrder} from '../Table';
5
+ import {TableAction} from '../Table.types';
6
+ import {useTableContext} from '../TableContext';
7
+ import {TableActionsList} from './TableActionsList';
8
+
9
+ export type TableHeaderActionsStylesNames = 'headerActionsRoot' | 'headerActionsGroup';
10
+
11
+ export interface TableHeaderActionsProps extends Omit<GridColProps, 'children'> {}
12
+
13
+ type TableHeaderActionsFactory = Factory<{
14
+ props: TableHeaderActionsProps;
15
+ ref: HTMLDivElement;
16
+ stylesNames: TableHeaderActionsStylesNames;
17
+ compound: true;
18
+ }>;
19
+
20
+ const defaultProps: Partial<TableHeaderActionsProps> = {};
21
+
22
+ export const TableHeaderActions = factory<TableHeaderActionsFactory>(
23
+ (props: TableHeaderActionsProps, ref): ReactElement => {
24
+ const {store, getStyles, getRowActions} = useTableContext();
25
+ const {style, className, classNames, styles, ...others} = useProps(
26
+ 'PlasmaTableHeaderActions',
27
+ defaultProps,
28
+ props,
29
+ );
30
+ const selectedRows = store.getSelectedRows();
31
+ if (selectedRows.length === 0) {
32
+ return null;
33
+ }
34
+
35
+ const actions: TableAction[] = getRowActions(selectedRows);
36
+ if (actions.length === 0) {
37
+ return null;
38
+ }
39
+
40
+ const stylesApiProps = {classNames, styles};
41
+
42
+ return (
43
+ <Grid.Col
44
+ span="content"
45
+ order={TableComponentsOrder.Actions}
46
+ ref={ref}
47
+ {...getStyles('headerActionsRoot', {className, style, ...stylesApiProps})}
48
+ {...others}
49
+ >
50
+ <Group gap="xs" {...getStyles('headerActionsGroup', stylesApiProps)}>
51
+ <TableActionsList actions={actions} variant="split" />
52
+ </Group>
53
+ </Grid.Col>
54
+ );
55
+ },
56
+ );
@@ -0,0 +1,2 @@
1
+ export * from './TableActionItem';
2
+ export * from './TableHeaderActions';
@@ -0,0 +1,39 @@
1
+ import {MoreSize16Px} from '@coveord/plasma-react-icons';
2
+ import {useProps} from '@mantine/core';
3
+ import {CellContext, ColumnDef} from '@tanstack/table-core';
4
+ import {FunctionComponent} from 'react';
5
+ import {TableActionsList, TableActionsListProps} from '../table-actions/TableActionsList';
6
+ import {useTableContext} from '../TableContext';
7
+
8
+ /**
9
+ * Generic column to use when your table needs actions on rows
10
+ */
11
+ export const TableActionsColumn: ColumnDef<unknown> = {
12
+ id: 'actions',
13
+ enableSorting: false,
14
+ enableHiding: false,
15
+ meta: {
16
+ controlColumn: true,
17
+ },
18
+ header: '',
19
+ size: 84, // 16px padding left + 28px ActionIcon + 40px padding right
20
+ cell: (info) => <ActionsMenu info={info} />,
21
+ };
22
+
23
+ interface TableActionsColumnProps extends Omit<TableActionsListProps, 'actions'> {
24
+ info: CellContext<unknown, unknown>;
25
+ }
26
+
27
+ const defaultProps: Partial<TableActionsColumnProps> = {
28
+ label: 'Actions',
29
+ icon: <MoreSize16Px height={16} />,
30
+ };
31
+
32
+ const ActionsMenu: FunctionComponent<TableActionsColumnProps> = (props) => {
33
+ const {getRowActions} = useTableContext();
34
+
35
+ const {info, ...others} = useProps('PlasmaTableActionsColumn', defaultProps, props);
36
+
37
+ const actionsElements = getRowActions([info.row.original]);
38
+ return <TableActionsList actions={actionsElements} variant="combined" {...others} />;
39
+ };
@@ -3,13 +3,17 @@ import {Factory, factory, useProps} from '@mantine/core';
3
3
  import {CellContext, ColumnDef} from '@tanstack/table-core';
4
4
  import {MouseEvent as ReactMouseEvent, ReactNode} from 'react';
5
5
  import {ActionIcon, ActionIconProps} from '../../action-icon';
6
- import {useTableStyles} from '../TableContext';
6
+ import {useTableContext} from '../TableContext';
7
7
 
8
8
  export type TableCollapsibleColumnStylesNames = 'collapsibleIcon';
9
9
 
10
10
  const sharedProps: ColumnDef<unknown> = {
11
11
  id: 'collapsible',
12
12
  enableSorting: false,
13
+ enableHiding: false,
14
+ meta: {
15
+ controlColumn: true,
16
+ },
13
17
  header: '',
14
18
  size: 84, // 16px padding left + 28px ActionIcon + 40px padding right
15
19
  };
@@ -59,7 +63,7 @@ const defaultProps: Partial<CollapsibleIconProps> = {
59
63
  };
60
64
 
61
65
  const CollapsibleIcon = factory<TableCollapsibleColumnFactory>((props, ref) => {
62
- const ctx = useTableStyles();
66
+ const {getStyles} = useTableContext();
63
67
  const {info, onToggle, iconExpanded, iconCollapsed, classNames, className, style, styles, ...others} = useProps(
64
68
  'PlasmaTableCollapsibleColumn',
65
69
  defaultProps,
@@ -78,7 +82,7 @@ const CollapsibleIcon = factory<TableCollapsibleColumnFactory>((props, ref) => {
78
82
  variant="subtle"
79
83
  color="gray"
80
84
  radius="sm"
81
- {...ctx.getStyles('collapsibleIcon', {className, classNames, styles, style})}
85
+ {...getStyles('collapsibleIcon', {className, classNames, styles, style})}
82
86
  {...others}
83
87
  >
84
88
  {info.row.getIsExpanded() ? iconExpanded : iconCollapsed}
@@ -7,6 +7,10 @@ import {ColumnDef} from '@tanstack/table-core';
7
7
  export const TableSelectableColumn: ColumnDef<unknown> = {
8
8
  id: 'select',
9
9
  enableSorting: false,
10
+ enableHiding: false,
11
+ meta: {
12
+ controlColumn: true,
13
+ },
10
14
  header: ({table}) => {
11
15
  const label = table.getIsAllRowsSelected() ? 'Unselect all from this page' : 'Select all from this page';
12
16
  return (
@@ -2,6 +2,7 @@ import {
2
2
  BoxProps,
3
3
  Button,
4
4
  Checkbox,
5
+ CompoundStylesApiProps,
5
6
  Divider,
6
7
  factory,
7
8
  Factory,
@@ -12,11 +13,10 @@ import {
12
13
  Tooltip,
13
14
  useProps,
14
15
  } from '@mantine/core';
15
- import {CompoundStylesApiProps} from '@mantine/core/lib/core/styles-api/styles-api.types';
16
+ import {flexRender, Header} from '@tanstack/react-table';
16
17
  import {ReactNode} from 'react';
17
-
18
18
  import {TableComponentsOrder} from '../Table';
19
- import {useTable, useTableStyles} from '../TableContext';
19
+ import {useTableContext} from '../TableContext';
20
20
 
21
21
  export type TableColumnsSelectorStylesNames = 'columnSelector' | 'columnSelectorWrapper';
22
22
 
@@ -31,11 +31,6 @@ export interface TableColumnsSelectorProps extends BoxProps, CompoundStylesApiPr
31
31
  * @default 'outline'
32
32
  */
33
33
  buttonVariant?: string;
34
- /**
35
- * An array of column ids that the user cannot hide. This is useful for columns that are required for the table to function properly.
36
- * @default []
37
- */
38
- nonHideableColumns?: string[];
39
34
  /**
40
35
  * Whether the count of visible columns is shown in the button label.
41
36
  * @default false
@@ -46,19 +41,20 @@ export interface TableColumnsSelectorProps extends BoxProps, CompoundStylesApiPr
46
41
  * If defined a footer will render with the remaining number of columns that can be selected.
47
42
  */
48
43
  maxSelectableColumns?: number;
49
- /**
50
- * A dictionary of column ids and names to use for the checkbox labels.
51
- */
52
- columnNames: Record<string, string>;
53
44
  /**
54
45
  * The content to display in the footer when maxSelectableColumns is defined.
55
46
  */
56
47
  footer?: ReactNode;
57
48
  /**
58
- * The tooltip to display when the user hovers over a disabled checkbox.
49
+ * The tooltip to display when the user hovers over a disabled checkbox because of the limit.
59
50
  * @default 'You have reached the maximum display limit.'
60
51
  */
61
52
  limitReachedTooltip?: string;
53
+ /**
54
+ * The tooltip to display when the user hovers over a disabled checkbox because a column cannot be hidden.
55
+ * @default 'This column is always visible.'
56
+ */
57
+ alwaysVisibleTooltip?: string;
62
58
  }
63
59
 
64
60
  export type TableColumnsSelectorFactory = Factory<{
@@ -68,26 +64,24 @@ export type TableColumnsSelectorFactory = Factory<{
68
64
  compound: true;
69
65
  }>;
70
66
 
71
- const COLUMNS_IDS_TO_EXCLUDE = ['collapsible', 'select'];
72
-
73
67
  const defaultProps: Partial<TableColumnsSelectorProps> = {
74
68
  label: 'Edit columns',
75
69
  buttonVariant: 'outline',
76
70
  limitReachedTooltip: 'You have reached the maximum display limit.',
71
+ alwaysVisibleTooltip: 'This column is always visible.',
77
72
  showVisibleCountLabel: false,
78
73
  };
79
74
 
80
75
  export const TableColumnsSelector = factory<TableColumnsSelectorFactory>((props, ref) => {
81
- const ctx = useTableStyles();
76
+ const {getStyles} = useTableContext();
82
77
  const {
83
78
  label,
84
79
  buttonVariant,
85
80
  showVisibleCountLabel,
86
- nonHideableColumns = [],
87
81
  maxSelectableColumns,
88
82
  footer,
89
83
  limitReachedTooltip,
90
- columnNames,
84
+ alwaysVisibleTooltip,
91
85
  classNames,
92
86
  className,
93
87
  styles,
@@ -95,12 +89,11 @@ export const TableColumnsSelector = factory<TableColumnsSelectorFactory>((props,
95
89
  vars,
96
90
  ...others
97
91
  } = useProps('TableColumnsSelector', defaultProps, props);
98
- const {getAllColumns} = useTable();
92
+ const {table} = useTableContext();
99
93
 
100
- const columnsToExclude = [...nonHideableColumns, ...COLUMNS_IDS_TO_EXCLUDE];
101
-
102
- const filteredColumns = getAllColumns().filter((column) => !columnsToExclude.includes(column.id));
94
+ const allColumns = table.getAllLeafColumns();
103
95
 
96
+ const filteredColumns = allColumns.filter((column) => !column.columnDef.meta?.controlColumn);
104
97
  const selectedColumnsCount = filteredColumns.filter((column) => column.getIsVisible()).length;
105
98
 
106
99
  if (filteredColumns.length <= 0) {
@@ -113,7 +106,7 @@ export const TableColumnsSelector = factory<TableColumnsSelectorFactory>((props,
113
106
  <Grid.Col
114
107
  span="content"
115
108
  order={TableComponentsOrder.ColumnsSelector}
116
- {...ctx.getStyles('columnSelector', {className, style, ...stylesApiProps})}
109
+ {...getStyles('columnSelector', {className, style, ...stylesApiProps})}
117
110
  {...others}
118
111
  >
119
112
  <Popover withinPortal position="bottom" shadow="md">
@@ -124,18 +117,30 @@ export const TableColumnsSelector = factory<TableColumnsSelectorFactory>((props,
124
117
  </Popover.Target>
125
118
  <Popover.Dropdown miw={240}>
126
119
  <ScrollArea.Autosize mah={154}>
127
- <Stack {...ctx.getStyles('columnSelectorWrapper', stylesApiProps)}>
120
+ <Stack {...getStyles('columnSelectorWrapper', stylesApiProps)}>
128
121
  {filteredColumns.map((column) => {
122
+ const alwaysVisible = !column.getCanHide();
129
123
  const isDisabled =
130
- selectedColumnsCount >= maxSelectableColumns && !column.getIsVisible();
124
+ (selectedColumnsCount >= maxSelectableColumns && !column.getIsVisible()) ||
125
+ alwaysVisible;
126
+
131
127
  return (
132
- <Tooltip label={limitReachedTooltip} disabled={!isDisabled} position="left">
128
+ <Tooltip
129
+ label={alwaysVisible ? alwaysVisibleTooltip : limitReachedTooltip}
130
+ disabled={!isDisabled}
131
+ position="left"
132
+ key={column.id}
133
+ >
133
134
  <div>
134
135
  <Checkbox
135
136
  key={column.id}
136
- label={columnNames?.[column.id] || column.id}
137
+ label={flexRender(column.columnDef.header, {
138
+ table,
139
+ column,
140
+ header: {column} as Header<unknown, unknown>,
141
+ })}
137
142
  name={column.id}
138
- checked={column.getIsVisible()}
143
+ checked={column.getIsVisible() || alwaysVisible}
139
144
  disabled={isDisabled}
140
145
  onChange={column.getToggleVisibilityHandler()}
141
146
  />