@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
@@ -2,10 +2,10 @@ import {ColumnDef, createColumnHelper} from '@tanstack/table-core';
2
2
  import {render, screen, userEvent, waitFor, within} from '@test-utils';
3
3
  import {FunctionComponent} from 'react';
4
4
  import {Table} from '../../Table';
5
- import {TableLayouts} from '../TableLayouts';
5
+ import {useTable} from '../../use-table';
6
6
 
7
7
  describe('RowLayout', () => {
8
- type RowData = {id: string; firstName: string; lastName?: string};
8
+ type RowData = {id: string; firstName: string; lastName?: string; disabled?: boolean};
9
9
 
10
10
  const columnHelper = createColumnHelper<RowData>();
11
11
  const columns: Array<ColumnDef<RowData>> = [
@@ -14,13 +14,12 @@ describe('RowLayout', () => {
14
14
  ];
15
15
 
16
16
  it('renders the data using the RowLayout by default', () => {
17
- render(
18
- <Table
19
- getRowId={({id}) => id}
20
- data={[{id: '🆔', firstName: 'first', lastName: 'last'}]}
21
- columns={columns}
22
- />,
23
- );
17
+ const data: RowData[] = [{id: '🆔', firstName: 'first', lastName: 'last'}];
18
+ const Fixture = () => {
19
+ const store = useTable<RowData>();
20
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={columns} />;
21
+ };
22
+ render(<Fixture />);
24
23
 
25
24
  expect(screen.getByRole('columnheader', {name: 'firstName'})).toBeVisible();
26
25
  expect(screen.getByRole('columnheader', {name: 'lastName'})).toBeVisible();
@@ -50,7 +49,12 @@ describe('RowLayout', () => {
50
49
  enableSorting: false,
51
50
  }),
52
51
  ];
53
- render(<Table data={[{id: '🆔', firstName: 'first', lastName: 'last'}]} columns={customColumns} />);
52
+ const data: RowData[] = [{id: '🆔', firstName: 'first', lastName: 'last'}];
53
+ const Fixture = () => {
54
+ const store = useTable<RowData>();
55
+ return <Table store={store} data={data} columns={customColumns} />;
56
+ };
57
+ render(<Fixture />);
54
58
 
55
59
  expect(screen.getByRole('columnheader', {name: 'First Name'})).toBeVisible();
56
60
  expect(screen.getByRole('columnheader', {name: 'Last Name'})).toBeVisible();
@@ -64,16 +68,15 @@ describe('RowLayout', () => {
64
68
  columnHelper.accessor('firstName', {}),
65
69
  columnHelper.accessor('lastName', {}),
66
70
  ];
67
- render(
68
- <Table
69
- getRowId={({id}) => id}
70
- data={[
71
- {id: 'ash', firstName: 'Ash', lastName: 'Ketchum'},
72
- {id: 'gary', firstName: 'Gary', lastName: 'Oak'},
73
- ]}
74
- columns={customColumns}
75
- />,
76
- );
71
+ const data: RowData[] = [
72
+ {id: 'ash', firstName: 'Ash', lastName: 'Ketchum'},
73
+ {id: 'gary', firstName: 'Gary', lastName: 'Oak'},
74
+ ];
75
+ const Fixture = () => {
76
+ const store = useTable<RowData>();
77
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={customColumns} />;
78
+ };
79
+ render(<Fixture />);
77
80
 
78
81
  expect(screen.getByTestId('ash')).toBeVisible();
79
82
  expect(screen.getByTestId('ash_firstName')).toHaveTextContent('Ash');
@@ -86,21 +89,26 @@ describe('RowLayout', () => {
86
89
 
87
90
  it('opens the collapsible rows when the user click on the toggle', async () => {
88
91
  const user = userEvent.setup();
89
- const Fixture: FunctionComponent<{row: RowData}> = ({row}) => <div>Collapsible content: {row.lastName}</div>;
90
92
  const customColumns: Array<ColumnDef<RowData>> = [
91
93
  columnHelper.accessor('firstName', {
92
94
  enableSorting: false,
93
95
  }),
94
96
  Table.CollapsibleColumn as ColumnDef<RowData>,
95
97
  ];
96
- render(
97
- <Table
98
- getRowId={({id}) => id}
99
- data={[{id: '🆔', firstName: 'first', lastName: 'last'}]}
100
- getExpandChildren={(row: RowData) => <Fixture row={row} />}
101
- columns={customColumns}
102
- />,
103
- );
98
+ const data: RowData[] = [{id: '🆔', firstName: 'first', lastName: 'last'}];
99
+ const Fixture = () => {
100
+ const store = useTable<RowData>();
101
+ return (
102
+ <Table
103
+ store={store}
104
+ getRowId={({id}) => id}
105
+ data={data}
106
+ getRowExpandedContent={(row) => <div>Collapsible content: {row.lastName}</div>}
107
+ columns={customColumns}
108
+ />
109
+ );
110
+ };
111
+ render(<Fixture />);
104
112
 
105
113
  // wait for the collapsible icon to show
106
114
  await screen.findByRole('button', {name: 'arrowHeadDown'});
@@ -114,29 +122,38 @@ describe('RowLayout', () => {
114
122
  });
115
123
 
116
124
  it('renders the collapsible button only for rows that can be expanded', async () => {
117
- const Fixture: FunctionComponent<{row: RowData}> = ({row}) => (
125
+ const Content: FunctionComponent<{row: RowData}> = ({row}) => (
118
126
  <div>
119
127
  Collapsible content: {row.firstName} {row.lastName}
120
128
  </div>
121
129
  );
130
+
122
131
  const customColumns: Array<ColumnDef<RowData>> = [
123
132
  columnHelper.accessor('firstName', {
124
133
  enableSorting: false,
125
134
  }),
126
135
  Table.CollapsibleColumn as ColumnDef<RowData>,
127
136
  ];
128
- render(
129
- <Table
130
- getRowId={({id}) => id}
131
- data={[
132
- {id: '🆔-1', firstName: 'Luke', lastName: 'Skywalker'},
133
- {id: '🆔-2', firstName: 'Lea', lastName: 'Skywalker'},
134
- {id: '🆔-3', firstName: 'Han', lastName: 'Solo'},
135
- ]}
136
- getExpandChildren={(row: RowData) => (row.lastName === 'Skywalker' ? <Fixture row={row} /> : null)}
137
- columns={customColumns}
138
- />,
139
- );
137
+ const data: RowData[] = [
138
+ {id: '🆔-1', firstName: 'Luke', lastName: 'Skywalker'},
139
+ {id: '🆔-2', firstName: 'Lea', lastName: 'Skywalker'},
140
+ {id: '🆔-3', firstName: 'Han', lastName: 'Solo'},
141
+ ];
142
+ const Fixture = () => {
143
+ const store = useTable<RowData>();
144
+ return (
145
+ <Table
146
+ store={store}
147
+ getRowId={({id}) => id}
148
+ data={data}
149
+ getRowExpandedContent={(row: RowData) =>
150
+ row.lastName === 'Skywalker' ? <Content row={row} /> : null
151
+ }
152
+ columns={customColumns}
153
+ />
154
+ );
155
+ };
156
+ render(<Fixture />);
140
157
 
141
158
  // wait for the collapsible icon to show
142
159
  await screen.findAllByRole('button', {name: 'arrowHeadDown'});
@@ -147,24 +164,30 @@ describe('RowLayout', () => {
147
164
 
148
165
  it('closes the opened collapsible when using the accordion column and the user expand a different row', async () => {
149
166
  const user = userEvent.setup();
150
- const Fixture: FunctionComponent<{row: RowData}> = ({row}) => <div>Collapsible content: {row.lastName}</div>;
167
+ const Content: FunctionComponent<{row: RowData}> = ({row}) => <div>Collapsible content: {row.lastName}</div>;
151
168
  const customColumns: Array<ColumnDef<RowData>> = [
152
169
  columnHelper.accessor('firstName', {
153
170
  enableSorting: false,
154
171
  }),
155
172
  Table.AccordionColumn as ColumnDef<RowData>,
156
173
  ];
157
- render(
158
- <Table
159
- getRowId={({id}) => id}
160
- data={[
161
- {id: '🆔-1', firstName: 'Jack', lastName: 'Russel'},
162
- {id: '🆔-2', firstName: 'Golden', lastName: 'Retriever'},
163
- ]}
164
- getExpandChildren={(row: RowData) => <Fixture row={row} />}
165
- columns={customColumns}
166
- />,
167
- );
174
+ const data: RowData[] = [
175
+ {id: '🆔-1', firstName: 'Jack', lastName: 'Russel'},
176
+ {id: '🆔-2', firstName: 'Golden', lastName: 'Retriever'},
177
+ ];
178
+ const Fixture = () => {
179
+ const store = useTable<RowData>();
180
+ return (
181
+ <Table
182
+ store={store}
183
+ getRowId={({id}) => id}
184
+ data={data}
185
+ getRowExpandedContent={(row: RowData) => <Content row={row} />}
186
+ columns={customColumns}
187
+ />
188
+ );
189
+ };
190
+ render(<Fixture />);
168
191
 
169
192
  // wait for the collapsible icon to show
170
193
  await screen.findAllByRole('button', {name: 'arrowHeadDown'});
@@ -189,37 +212,43 @@ describe('RowLayout', () => {
189
212
  it('calls an action when user double clicks on a row', async () => {
190
213
  const user = userEvent.setup();
191
214
  const doubleClickSpy = vi.fn();
192
- render(
193
- <Table<RowData>
194
- getRowId={({id}) => id}
195
- data={[
196
- {id: '🆔-1', firstName: 'Mario'},
197
- {id: '🆔-2', firstName: 'Luigi'},
198
- ]}
199
- columns={columns}
200
- doubleClickAction={doubleClickSpy}
201
- ></Table>,
202
- );
215
+ const data: RowData[] = [
216
+ {id: '🆔-1', firstName: 'Mario'},
217
+ {id: '🆔-2', firstName: 'Luigi'},
218
+ ];
219
+ const Fixture = () => {
220
+ const store = useTable<RowData>();
221
+ return (
222
+ <Table
223
+ store={store}
224
+ getRowId={({id}) => id}
225
+ data={data}
226
+ columns={columns}
227
+ layoutProps={{onRowDoubleClick: doubleClickSpy}}
228
+ />
229
+ );
230
+ };
231
+ render(<Fixture />);
203
232
  await user.dblClick(screen.getByRole('cell', {name: 'Mario'}));
204
233
  expect(doubleClickSpy).toHaveBeenCalledTimes(1);
205
- expect(doubleClickSpy).toHaveBeenCalledWith({id: '🆔-1', firstName: 'Mario'});
234
+ expect(doubleClickSpy).toHaveBeenCalledWith(
235
+ {id: '🆔-1', firstName: 'Mario'},
236
+ 0,
237
+ expect.objectContaining({id: '🆔-1'}),
238
+ );
206
239
  });
207
240
 
208
241
  it('toggles row selection when clicking on a selected row', async () => {
209
242
  const user = userEvent.setup();
210
-
211
- render(
212
- <div>
213
- <Table
214
- getRowId={({id}) => id}
215
- data={[
216
- {id: '🆔-1', firstName: 'first', lastName: 'last'},
217
- {id: '🆔-2', firstName: 'patate', lastName: 'king'},
218
- ]}
219
- columns={columns}
220
- />
221
- </div>,
222
- );
243
+ const data: RowData[] = [
244
+ {id: '🆔-1', firstName: 'first', lastName: 'last'},
245
+ {id: '🆔-2', firstName: 'patate', lastName: 'king'},
246
+ ];
247
+ const Fixture = () => {
248
+ const store = useTable<RowData>();
249
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={columns} />;
250
+ };
251
+ render(<Fixture />);
223
252
 
224
253
  await user.click(screen.getByRole('row', {name: /patate king/i}));
225
254
  expect(screen.getByRole('row', {name: /patate king/i, selected: true})).toBeInTheDocument();
@@ -230,27 +259,17 @@ describe('RowLayout', () => {
230
259
  expect(screen.queryByRole('row', {name: /patate king/i, selected: true})).not.toBeInTheDocument();
231
260
  });
232
261
 
233
- it('prevents row toggle if keepSelection is true', async () => {
262
+ it('prevents row deselection if row selection is forced', async () => {
234
263
  const user = userEvent.setup();
235
-
236
- render(
237
- <div>
238
- <Table
239
- getRowId={({id}) => id}
240
- data={[
241
- {id: '🆔-1', firstName: 'first', lastName: 'last'},
242
- {id: '🆔-2', firstName: 'patate', lastName: 'king'},
243
- ]}
244
- columns={columns}
245
- layouts={[
246
- {
247
- ...TableLayouts.Rows,
248
- Body: (props) => <TableLayouts.Rows.Body {...props} keepSelection />,
249
- },
250
- ]}
251
- />
252
- </div>,
253
- );
264
+ const data: RowData[] = [
265
+ {id: '🆔-1', firstName: 'first', lastName: 'last'},
266
+ {id: '🆔-2', firstName: 'patate', lastName: 'king'},
267
+ ];
268
+ const Fixture = () => {
269
+ const store = useTable<RowData>({forceSelection: true});
270
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={columns} />;
271
+ };
272
+ render(<Fixture />);
254
273
 
255
274
  await user.click(screen.getByRole('row', {name: /patate king/i}));
256
275
  expect(screen.getByRole('row', {name: /patate king/i, selected: true})).toBeInTheDocument();
@@ -261,27 +280,17 @@ describe('RowLayout', () => {
261
280
  expect(screen.queryByRole('row', {name: /patate king/i, selected: false})).not.toBeInTheDocument();
262
281
  });
263
282
 
264
- it('allows selection of another row if keepSelection is true', async () => {
283
+ it('allows selection of a different row if row selection is forced', async () => {
265
284
  const user = userEvent.setup();
266
-
267
- render(
268
- <div>
269
- <Table
270
- getRowId={({id}) => id}
271
- data={[
272
- {id: '🆔-1', firstName: 'first', lastName: 'last'},
273
- {id: '🆔-2', firstName: 'patate', lastName: 'king'},
274
- ]}
275
- columns={columns}
276
- layouts={[
277
- {
278
- ...TableLayouts.Rows,
279
- Body: (props) => <TableLayouts.Rows.Body {...props} keepSelection />,
280
- },
281
- ]}
282
- />
283
- </div>,
284
- );
285
+ const data: RowData[] = [
286
+ {id: '🆔-1', firstName: 'first', lastName: 'last'},
287
+ {id: '🆔-2', firstName: 'patate', lastName: 'king'},
288
+ ];
289
+ const Fixture = () => {
290
+ const store = useTable<RowData>({forceSelection: true});
291
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={columns} />;
292
+ };
293
+ render(<Fixture />);
285
294
 
286
295
  await user.click(screen.getByRole('row', {name: /patate king/i}));
287
296
  expect(screen.getByRole('row', {name: /patate king/i, selected: true})).toBeInTheDocument();
@@ -296,17 +305,15 @@ describe('RowLayout', () => {
296
305
 
297
306
  describe('when multi row selection is enabled', () => {
298
307
  it('displays a checkbox as the first cell of each row', () => {
299
- render(
300
- <Table
301
- getRowId={({id}) => id}
302
- data={[
303
- {id: '🆔-1', firstName: 'John', lastName: 'Smith'},
304
- {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'},
305
- ]}
306
- columns={columns}
307
- multiRowSelectionEnabled
308
- />,
309
- );
308
+ const data: RowData[] = [
309
+ {id: '🆔-1', firstName: 'John', lastName: 'Smith'},
310
+ {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'},
311
+ ];
312
+ const Fixture = () => {
313
+ const store = useTable<RowData>({enableMultiRowSelection: true});
314
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={columns} />;
315
+ };
316
+ render(<Fixture />);
310
317
 
311
318
  expect(screen.getByRole('columnheader', {name: /select all from this page/i})).toBeInTheDocument();
312
319
 
@@ -317,37 +324,33 @@ describe('RowLayout', () => {
317
324
  });
318
325
 
319
326
  it('selects the rows specified in the initial state on mount', () => {
320
- render(
321
- <Table
322
- getRowId={({id}) => id}
323
- data={[
324
- {id: '🆔-1', firstName: 'John', lastName: 'Smith'},
325
- {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'},
326
- ]}
327
- columns={columns}
328
- multiRowSelectionEnabled
329
- initialState={{
330
- rowSelection: {'🆔-2': {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'}},
331
- }}
332
- />,
333
- );
327
+ const data: RowData[] = [
328
+ {id: '🆔-1', firstName: 'John', lastName: 'Smith'},
329
+ {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'},
330
+ ];
331
+ const Fixture = () => {
332
+ const store = useTable<RowData>({
333
+ enableMultiRowSelection: true,
334
+ initialState: {rowSelection: {'🆔-2': {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'}}},
335
+ });
336
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={columns} />;
337
+ };
338
+ render(<Fixture />);
334
339
 
335
340
  expect(screen.getByRole('row', {name: /jane doe/i, selected: true})).toBeInTheDocument();
336
341
  });
337
342
 
338
343
  it('selects all rows of the current page when clicking on the checkbox that is in the column header', async () => {
339
344
  const user = userEvent.setup();
340
- render(
341
- <Table
342
- getRowId={({id}) => id}
343
- data={[
344
- {id: '🆔-1', firstName: 'John', lastName: 'Smith'},
345
- {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'},
346
- ]}
347
- columns={columns}
348
- multiRowSelectionEnabled
349
- />,
350
- );
345
+ const data: RowData[] = [
346
+ {id: '🆔-1', firstName: 'John', lastName: 'Smith'},
347
+ {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'},
348
+ ];
349
+ const Fixture = () => {
350
+ const store = useTable<RowData>({enableMultiRowSelection: true});
351
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={columns} />;
352
+ };
353
+ render(<Fixture />);
351
354
 
352
355
  const selectAll = screen.getByRole('checkbox', {name: /select all from this page/i});
353
356
  await user.click(selectAll);
@@ -360,21 +363,15 @@ describe('RowLayout', () => {
360
363
 
361
364
  it('prevents row selection if disableRowSelection is true', async () => {
362
365
  const user = userEvent.setup();
363
-
364
- render(
365
- <div>
366
- <Table
367
- getRowId={({id}) => id}
368
- data={[
369
- {id: '🆔-1', firstName: 'first', lastName: 'last'},
370
- {id: '🆔-2', firstName: 'patate', lastName: 'king'},
371
- ]}
372
- columns={columns}
373
- multiRowSelectionEnabled
374
- disableRowSelection
375
- />
376
- </div>,
377
- );
366
+ const data: RowData[] = [
367
+ {id: '🆔-1', firstName: 'first', lastName: 'last'},
368
+ {id: '🆔-2', firstName: 'patate', lastName: 'king'},
369
+ ];
370
+ const Fixture = () => {
371
+ const store = useTable<RowData>({enableMultiRowSelection: true, enableRowSelection: false});
372
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={columns} />;
373
+ };
374
+ render(<Fixture />);
378
375
 
379
376
  await user.click(screen.getByRole('row', {name: /patate king/i}));
380
377
  expect(screen.getByRole('row', {name: /patate king/i, selected: false})).toBeInTheDocument();
@@ -388,18 +385,15 @@ describe('RowLayout', () => {
388
385
  it('prevents click on checkboxes if disableRowSelection is true', async () => {
389
386
  const user = userEvent.setup();
390
387
  const onClick = vi.fn();
391
- render(
392
- <Table
393
- getRowId={({id}) => id}
394
- data={[
395
- {id: '🆔-1', firstName: 'John', lastName: 'Smith'},
396
- {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'},
397
- ]}
398
- columns={columns}
399
- multiRowSelectionEnabled
400
- disableRowSelection
401
- />,
402
- );
388
+ const data: RowData[] = [
389
+ {id: '🆔-1', firstName: 'John', lastName: 'Smith'},
390
+ {id: '🆔-2', firstName: 'Jane', lastName: 'Doe'},
391
+ ];
392
+ const Fixture = () => {
393
+ const store = useTable<RowData>({enableMultiRowSelection: true, enableRowSelection: false});
394
+ return <Table store={store} getRowId={({id}) => id} data={data} columns={columns} />;
395
+ };
396
+ render(<Fixture />);
403
397
  await user.click(screen.getByRole('checkbox', {name: /select all/i}));
404
398
  expect(onClick).not.toHaveBeenCalled();
405
399
 
@@ -411,4 +405,38 @@ describe('RowLayout', () => {
411
405
  });
412
406
  });
413
407
  });
408
+
409
+ it('passes down attributes given by getRowAttributes function to the row element', () => {
410
+ const customColumns: Array<ColumnDef<RowData>> = [
411
+ columnHelper.accessor('firstName', {
412
+ header: () => 'First Name',
413
+ cell: (info) => info.getValue().toUpperCase(),
414
+ enableSorting: false,
415
+ }),
416
+ columnHelper.accessor('lastName', {
417
+ header: () => 'Last Name',
418
+ cell: (info) => info.getValue().toUpperCase(),
419
+ enableSorting: false,
420
+ }),
421
+ ];
422
+ const data: RowData[] = [
423
+ {id: '1', firstName: 'Alberto', lastName: 'Contador'},
424
+ {id: '2', firstName: 'Lance', lastName: 'Armstrong', disabled: true},
425
+ ];
426
+ const Fixture = () => {
427
+ const store = useTable<RowData>();
428
+ return (
429
+ <Table
430
+ store={store}
431
+ data={data}
432
+ columns={customColumns}
433
+ getRowAttributes={({disabled}) => ({'data-disabled': disabled})}
434
+ />
435
+ );
436
+ };
437
+ render(<Fixture />);
438
+
439
+ expect(screen.getByRole('row', {name: /alberto contador/i})).not.toHaveAttribute('data-disabled');
440
+ expect(screen.getByRole('row', {name: /lance armstrong/i})).toHaveAttribute('data-disabled');
441
+ });
414
442
  });
@@ -5,9 +5,9 @@ import {TableLayout} from '../../Table.types';
5
5
  import {RowLayoutBody, RowLayoutBodyStylesNames} from './RowLayoutBody';
6
6
  import {RowLayoutProvider} from './RowLayoutContext';
7
7
  import {RowLayoutHeader, RowLayoutHeaderStyleNames} from './RowLayoutHeader';
8
- import {RowLayoutIcon, RowLayoutIconStylesNames} from './RowLayoutIcon';
8
+ import {RowLayoutIcon} from './RowLayoutIcon';
9
9
 
10
- type RowLayoutStylesNames = RowLayoutHeaderStyleNames | RowLayoutIconStylesNames | RowLayoutBodyStylesNames;
10
+ type RowLayoutStylesNames = RowLayoutHeaderStyleNames | RowLayoutBodyStylesNames;
11
11
  export interface RowLayoutProps extends StylesApiProps<RowLayoutFactory> {
12
12
  children: ReactNode;
13
13
  }
@@ -1,14 +1,13 @@
1
- import {Box, BoxProps, Collapse, Factory, useProps} from '@mantine/core';
2
- import {CompoundStylesApiProps} from '@mantine/core/lib/core/styles-api/styles-api.types';
1
+ import {Box, BoxProps, Collapse, CompoundStylesApiProps, Factory, useProps} from '@mantine/core';
3
2
  import {flexRender} from '@tanstack/react-table';
4
3
  import {defaultColumnSizing} from '@tanstack/table-core';
5
4
  import {ForwardedRef, Fragment, type MouseEvent} from 'react';
6
5
  import {CustomComponentThemeExtend, identity} from '../../../../utils';
6
+ import {TableLayoutProps} from '../../Table.types';
7
+ import {useTableContext} from '../../TableContext';
7
8
  import {TableCollapsibleColumn} from '../../table-column/TableCollapsibleColumn';
8
9
  import {TableSelectableColumn} from '../../table-column/TableSelectableColumn';
9
10
  import {TableLoading} from '../../table-loading/TableLoading';
10
- import {useTable} from '../../TableContext';
11
- import {TableLayoutProps} from '../TableLayouts';
12
11
  import {useRowLayout} from './RowLayoutContext';
13
12
 
14
13
  export type RowLayoutBodyStylesNames = 'row' | 'cell' | 'collapsibleRow' | 'collapsibleWrapper';
@@ -30,32 +29,31 @@ const defaultProps: Partial<RowLayoutBodyProps<unknown>> = {};
30
29
  export const RowLayoutBody = <T,>(props: RowLayoutBodyProps<T> & {ref?: ForwardedRef<HTMLTableRowElement>}) => {
31
30
  const ctx = useRowLayout();
32
31
  const {
33
- table,
34
- doubleClickAction,
35
- getExpandChildren,
32
+ getRowExpandedContent,
33
+ onRowDoubleClick,
36
34
  loading,
37
- keepSelection,
38
35
  classNames,
39
36
  className,
40
37
  styles,
41
38
  style,
39
+ getRowAttributes,
42
40
  ...others
43
41
  } = useProps('RowLayoutBody', defaultProps as RowLayoutBodyProps<T>, props);
44
- const {multiRowSelectionEnabled, disableRowSelection} = useTable();
42
+ const {table, store} = useTableContext<T>();
45
43
  const toggleCollapsible = (el: HTMLTableRowElement) => {
46
44
  const cell = el.children[el.children.length - 1] as HTMLTableCellElement;
47
45
  cell.querySelector('button').click();
48
46
  };
49
47
 
50
48
  const rows = table.getRowModel()?.rows.map((row) => {
51
- const rowChildren = getExpandChildren?.(row.original) ?? null;
49
+ const rowChildren = getRowExpandedContent?.(row.original, row.index, row) ?? null;
52
50
  const isSelected = !!row.getIsSelected();
53
- const shouldKeepSelection = keepSelection && isSelected;
51
+ const shouldKeepSelection = store.rowSelectionForced && isSelected;
54
52
  const onClick = (event: MouseEvent<HTMLTableRowElement>) => {
55
53
  if (rowChildren) {
56
54
  toggleCollapsible(event.currentTarget);
57
55
  }
58
- if (!disableRowSelection && !multiRowSelectionEnabled && !shouldKeepSelection) {
56
+ if (store.rowSelectionEnabled && !store.multiRowSelectionEnabled && !shouldKeepSelection) {
59
57
  row.toggleSelected();
60
58
  }
61
59
  };
@@ -64,13 +62,16 @@ export const RowLayoutBody = <T,>(props: RowLayoutBodyProps<T> & {ref?: Forwarde
64
62
  <Fragment key={row.id}>
65
63
  <tr
66
64
  onClick={onClick}
67
- onDoubleClick={() => doubleClickAction?.(row.original)}
68
- data-selectable={!disableRowSelection}
65
+ onDoubleClick={() => {
66
+ onRowDoubleClick?.(row.original, row.index, row);
67
+ }}
68
+ data-selectable={store.rowSelectionEnabled}
69
69
  data-selected={isSelected}
70
- data-multi-selection={multiRowSelectionEnabled}
70
+ data-multi-selection={store.multiRowSelectionEnabled}
71
71
  aria-selected={isSelected}
72
72
  data-testid={row.id}
73
73
  {...ctx.getStyles('row', {classNames, className, styles, style})}
74
+ {...(getRowAttributes?.(row.original, row.index, row) ?? {})}
74
75
  {...others}
75
76
  >
76
77
  {row.getVisibleCells().map((cell) => {
@@ -82,9 +83,8 @@ export const RowLayoutBody = <T,>(props: RowLayoutBodyProps<T> & {ref?: Forwarde
82
83
  };
83
84
 
84
85
  const onCollapsibleCellClick = (event: MouseEvent<HTMLTableCellElement>) => {
85
- if (cell.column.id === TableSelectableColumn.id && !disableRowSelection) {
86
+ if (cell.column.id === TableSelectableColumn.id && store.rowSelectionEnabled) {
86
87
  event.stopPropagation();
87
- row.getToggleSelectedHandler();
88
88
  }
89
89
  };
90
90