@payfit/unity-components 1.2.0 → 2.1.4

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 (460) hide show
  1. package/dist/esm/components/action-bar/ActionBar.js +14 -14
  2. package/dist/esm/components/actionable/Actionable.js +31 -28
  3. package/dist/esm/components/alert/Alert.js +41 -29
  4. package/dist/esm/components/alert/parts/AlertTitle.js +8 -8
  5. package/dist/esm/components/app-layout/AppLayout.d.ts +2 -0
  6. package/dist/esm/components/app-layout/AppLayout.js +17 -17
  7. package/dist/esm/components/app-menu/parts/AppMenuFooter.js +23 -23
  8. package/dist/esm/components/app-menu/parts/AppMenuHeader.d.ts +87 -5
  9. package/dist/esm/components/app-menu/parts/AppMenuHeader.js +25 -25
  10. package/dist/esm/components/autocomplete/Autocomplete.d.ts +0 -9
  11. package/dist/esm/components/autocomplete/Autocomplete.js +54 -57
  12. package/dist/esm/components/autocomplete/parts/AutocompleteItem.js +8 -8
  13. package/dist/esm/components/avatar/Avatar.variants.js +1 -1
  14. package/dist/esm/components/avatar/parts/AvatarFallback.js +26 -27
  15. package/dist/esm/components/badge/Badge.js +1 -1
  16. package/dist/esm/components/breadcrumbs/Breadcrumbs.context.js +3 -3
  17. package/dist/esm/components/breadcrumbs/Breadcrumbs.d.ts +19 -11
  18. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +29 -18
  19. package/dist/esm/components/breadcrumbs/Breadcrumbs.variant.js +1 -1
  20. package/dist/esm/components/breadcrumbs/parts/Breadcrumb.d.ts +30 -5
  21. package/dist/esm/components/breadcrumbs/parts/Breadcrumb.js +35 -27
  22. package/dist/esm/components/breadcrumbs/parts/RawBreadcrumbLink.d.ts +37 -0
  23. package/dist/esm/components/breadcrumbs/parts/RawBreadcrumbLink.js +36 -0
  24. package/dist/esm/components/button/Button.js +6 -6
  25. package/dist/esm/components/button/Button.variants.d.ts +1 -0
  26. package/dist/esm/components/button/Button.variants.js +22 -15
  27. package/dist/esm/components/card/Card.context.d.ts +5 -0
  28. package/dist/esm/components/card/Card.context.js +14 -0
  29. package/dist/esm/components/card/Card.d.ts +210 -0
  30. package/dist/esm/components/card/Card.js +93 -0
  31. package/dist/esm/components/card/parts/CardContent.d.ts +37 -0
  32. package/dist/esm/components/card/parts/CardContent.js +8 -0
  33. package/dist/esm/components/card/parts/CardTitle.d.ts +55 -0
  34. package/dist/esm/components/card/parts/CardTitle.js +33 -0
  35. package/dist/esm/components/checkbox/Checkbox.js +38 -30
  36. package/dist/esm/components/checkbox/Checkbox.variants.d.ts +9 -9
  37. package/dist/esm/components/checkbox/Checkbox.variants.js +23 -7
  38. package/dist/esm/components/checkbox/TanstackCheckbox.d.ts +28 -0
  39. package/dist/esm/components/checkbox/TanstackCheckbox.js +51 -0
  40. package/dist/esm/components/checkbox/parts/CheckboxIndicator.js +7 -7
  41. package/dist/esm/components/checkbox-field/CheckboxField.d.ts +2 -0
  42. package/dist/esm/components/checkbox-field/TanstackCheckboxField.d.ts +14 -0
  43. package/dist/esm/components/checkbox-field/TanstackCheckboxField.js +40 -0
  44. package/dist/esm/components/checkbox-group/TanstackCheckboxGroup.d.ts +4 -0
  45. package/dist/esm/components/checkbox-group/TanstackCheckboxGroup.js +37 -0
  46. package/dist/esm/components/checkbox-group-field/CheckboxGroupField.d.ts +2 -0
  47. package/dist/esm/components/checkbox-group-field/TanstackCheckGroupField.d.ts +72 -0
  48. package/dist/esm/components/checkbox-group-field/TanstackCheckGroupField.js +40 -0
  49. package/dist/esm/components/client-side-pagination/ClientSidePagination.d.ts +103 -0
  50. package/dist/esm/components/client-side-pagination/ClientSidePagination.js +177 -0
  51. package/dist/esm/components/client-side-pagination/parts/PaginationEllipsis.d.ts +11 -0
  52. package/dist/esm/components/client-side-pagination/parts/PaginationEllipsis.js +30 -0
  53. package/dist/esm/components/client-side-pagination/parts/PaginationJumpDialog.d.ts +8 -0
  54. package/dist/esm/components/{pagination → client-side-pagination}/parts/PaginationNavButton.js +1 -1
  55. package/dist/esm/components/{pagination/parts/PaginationLink.d.ts → client-side-pagination/parts/RawPaginationLink.d.ts} +2 -2
  56. package/dist/esm/components/{pagination/parts/PaginationLink.js → client-side-pagination/parts/RawPaginationLink.js} +12 -12
  57. package/dist/esm/components/client-side-pagination/utils/pagination-window.d.ts +8 -0
  58. package/dist/esm/components/client-side-pagination/utils/pagination-window.js +33 -0
  59. package/dist/esm/components/collapsible/parts/CollapsibleContent.js +5 -5
  60. package/dist/esm/components/collapsible/parts/CollapsibleTitle.js +8 -8
  61. package/dist/esm/components/data-table/DataTable.d.ts +109 -16
  62. package/dist/esm/components/data-table/DataTable.js +107 -93
  63. package/dist/esm/components/data-table/mocks/employee-data.d.ts +1 -0
  64. package/dist/esm/components/date-calendar/DateCalendar.js +1 -1
  65. package/dist/esm/components/date-calendar/parts/DateSegmentSelect.js +1 -1
  66. package/dist/esm/components/date-picker/DatePicker.d.ts +1 -1
  67. package/dist/esm/components/date-picker/DatePicker.js +59 -50
  68. package/dist/esm/components/date-picker/TanstackDatePicker.d.ts +22 -0
  69. package/dist/esm/components/date-picker/TanstackDatePicker.js +53 -0
  70. package/dist/esm/components/date-picker/parts/DateInput.js +4 -4
  71. package/dist/esm/components/date-picker-field/DatePickerField.d.ts +2 -0
  72. package/dist/esm/components/date-picker-field/TanstackDatePickerField.d.ts +71 -0
  73. package/dist/esm/components/date-picker-field/TanstackDatePickerField.js +41 -0
  74. package/dist/esm/components/definition-list/DefinitionList.context.d.ts +19 -0
  75. package/dist/esm/components/definition-list/DefinitionList.d.ts +24 -0
  76. package/dist/esm/components/definition-list/parts/DefinitionItem.d.ts +25 -0
  77. package/dist/esm/components/dialog/Dialog.d.ts +34 -22
  78. package/dist/esm/components/dialog/Dialog.js +90 -52
  79. package/dist/esm/components/dialog/parts/DialogActions.js +6 -6
  80. package/dist/esm/components/dialog/parts/DialogTitle.js +7 -4
  81. package/dist/esm/components/dialog/test-utils.d.ts +28 -0
  82. package/dist/esm/components/dialog/test-utils.js +78 -0
  83. package/dist/esm/components/error-state/ErrorState.d.ts +13 -1
  84. package/dist/esm/components/error-state/ErrorState.js +133 -92
  85. package/dist/esm/components/error-state/initConfig.js +1 -1
  86. package/dist/esm/components/fieldset/Fieldset.d.ts +19 -0
  87. package/dist/esm/components/fieldset/Fieldset.js +32 -26
  88. package/dist/esm/components/filter/Filter.controls.d.ts +192 -0
  89. package/dist/esm/components/filter/Filter.controls.js +45 -0
  90. package/dist/esm/components/filter/Filter.d.ts +189 -0
  91. package/dist/esm/components/filter/Filter.js +147 -0
  92. package/dist/esm/components/filter/Filter.types.d.ts +121 -0
  93. package/dist/esm/components/filter/hooks/useFilterIds.d.ts +49 -0
  94. package/dist/esm/components/filter/hooks/useFilterIds.js +13 -0
  95. package/dist/esm/components/filter/hooks/useFilterState.d.ts +74 -0
  96. package/dist/esm/components/filter/hooks/useFilterState.js +23 -0
  97. package/dist/esm/components/filter/hooks/useFilterValue.d.ts +61 -0
  98. package/dist/esm/components/filter/hooks/useFilterValue.js +31 -0
  99. package/dist/esm/components/filter/parts/FilterButton.d.ts +75 -0
  100. package/dist/esm/components/filter/parts/FilterButton.js +55 -0
  101. package/dist/esm/components/filter/parts/FilterLabel.d.ts +96 -0
  102. package/dist/esm/components/filter/parts/FilterLabel.js +57 -0
  103. package/dist/esm/components/filter/parts/FilterPopover.d.ts +95 -0
  104. package/dist/esm/components/filter/parts/FilterPopover.js +79 -0
  105. package/dist/esm/components/filter/utils/value-formatters.d.ts +62 -0
  106. package/dist/esm/components/filter/utils/value-formatters.js +14 -0
  107. package/dist/esm/components/filter-toolbar/FilterToolbar.d.ts +110 -0
  108. package/dist/esm/components/filter-toolbar/FilterToolbar.js +172 -0
  109. package/dist/esm/components/filter-toolbar/FilterToolbar.types.d.ts +119 -0
  110. package/dist/esm/components/filter-toolbar/hooks/use-filter-toolbar-state.d.ts +96 -0
  111. package/dist/esm/components/filter-toolbar/hooks/use-filter-toolbar-state.js +132 -0
  112. package/dist/esm/components/filter-toolbar/parts/AddFilter.d.ts +63 -0
  113. package/dist/esm/components/filter-toolbar/parts/AddFilter.js +107 -0
  114. package/dist/esm/components/filter-toolbar/parts/AddFilterItem.d.ts +18 -0
  115. package/dist/esm/components/filter-toolbar/parts/AddFilterItem.js +18 -0
  116. package/dist/esm/components/filter-toolbar/utils/filter-adapters.d.ts +93 -0
  117. package/dist/esm/components/filter-toolbar/utils/filter-adapters.js +88 -0
  118. package/dist/esm/components/filter-toolbar/utils/normalize-filter-value.d.ts +24 -0
  119. package/dist/esm/components/filter-toolbar/utils/normalize-filter-value.js +19 -0
  120. package/dist/esm/components/flex/Flex.js +52 -37
  121. package/dist/esm/components/form/Form.d.ts +2 -0
  122. package/dist/esm/components/form/TanstackForm.d.ts +24 -0
  123. package/dist/esm/components/form/TanstackForm.js +29 -0
  124. package/dist/esm/components/form-field/FormField.d.ts +2 -0
  125. package/dist/esm/components/form-field/FormField.js +12 -12
  126. package/dist/esm/components/form-field/TanstackFormField.context.d.ts +10 -0
  127. package/dist/esm/components/form-field/TanstackFormField.context.js +14 -0
  128. package/dist/esm/components/form-field/TanstackFormField.d.ts +49 -0
  129. package/dist/esm/components/form-field/TanstackFormField.js +46 -0
  130. package/dist/esm/components/form-field/parts/FormControl.d.ts +2 -0
  131. package/dist/esm/components/form-field/parts/FormFeedbackText.d.ts +2 -0
  132. package/dist/esm/components/form-field/parts/FormHelperText.d.ts +2 -0
  133. package/dist/esm/components/form-field/parts/FormLabel.d.ts +2 -0
  134. package/dist/esm/components/form-field/parts/RawFormContextualLink.d.ts +22 -0
  135. package/dist/esm/components/form-field/parts/RawFormContextualLink.js +39 -0
  136. package/dist/esm/components/form-field/parts/TanstackFormFeedbackText.d.ts +12 -0
  137. package/dist/esm/components/form-field/parts/TanstackFormFeedbackText.js +32 -0
  138. package/dist/esm/components/form-field/parts/TanstackFormHelperText.d.ts +11 -0
  139. package/dist/esm/components/form-field/parts/TanstackFormHelperText.js +25 -0
  140. package/dist/esm/components/form-field/parts/TanstackFormLabel.d.ts +8 -0
  141. package/dist/esm/components/form-field/parts/TanstackFormLabel.js +26 -0
  142. package/dist/esm/components/form-field/parts/TanstackRawFormContextualLink.d.ts +26 -0
  143. package/dist/esm/components/form-field/parts/TanstackRawFormContextualLink.js +45 -0
  144. package/dist/esm/components/funnel-layout/parts/FunnelSidebar.d.ts +2 -2
  145. package/dist/esm/components/icon/Icon.js +23 -19
  146. package/dist/esm/components/icon-button/CircularIconButton.d.ts +9 -9
  147. package/dist/esm/components/icon-button/CircularIconButton.js +53 -36
  148. package/dist/esm/components/icon-button/IconButton.variants.d.ts +1 -0
  149. package/dist/esm/components/icon-button/IconButton.variants.js +44 -28
  150. package/dist/esm/components/input/Input.js +36 -35
  151. package/dist/esm/components/input/TanstackInput.d.ts +22 -0
  152. package/dist/esm/components/input/TanstackInput.js +38 -0
  153. package/dist/esm/components/label/Label.js +12 -12
  154. package/dist/esm/components/link/{Link.variants.d.ts → RawLink.d.ts} +92 -0
  155. package/dist/esm/components/link/{Link.variants.js → RawLink.js} +78 -5
  156. package/dist/esm/components/list-view/ListView.d.ts +56 -0
  157. package/dist/esm/components/list-view/ListView.fixtures.d.ts +20 -0
  158. package/dist/esm/components/list-view/ListView.js +44 -0
  159. package/dist/esm/components/list-view/parts/ListViewItemLabel.d.ts +34 -0
  160. package/dist/esm/components/list-view/parts/ListViewItemLabel.js +22 -0
  161. package/dist/esm/components/list-view/parts/ListViewItemText.d.ts +33 -0
  162. package/dist/esm/components/list-view/parts/ListViewItemText.js +22 -0
  163. package/dist/esm/components/list-view/parts/ListViewSection.d.ts +14 -0
  164. package/dist/esm/components/list-view/parts/ListViewSection.js +21 -0
  165. package/dist/esm/components/list-view/parts/RawListViewItem.d.ts +102 -0
  166. package/dist/esm/components/list-view/parts/RawListViewItem.js +80 -0
  167. package/dist/esm/components/menu/parts/{MenuItem.d.ts → RawMenuItem.d.ts} +3 -4
  168. package/dist/esm/components/menu/parts/{MenuItem.js → RawMenuItem.js} +9 -9
  169. package/dist/esm/components/multi-select/MultiSelect.d.ts +5 -7
  170. package/dist/esm/components/multi-select/MultiSelect.js +199 -176
  171. package/dist/esm/components/multi-select/MultiselectTypes.d.ts +114 -0
  172. package/dist/esm/components/multi-select/TanstackMultiSelect.d.ts +7 -0
  173. package/dist/esm/components/multi-select/TanstackMultiSelect.js +41 -0
  174. package/dist/esm/components/multi-select/parts/MultiSelectButton.d.ts +2 -0
  175. package/dist/esm/components/multi-select/parts/MultiSelectButton.js +62 -46
  176. package/dist/esm/components/multi-select/parts/MultiSelectPopover.js +15 -15
  177. package/dist/esm/components/multi-select-field/MultiSelectField.d.ts +45 -12
  178. package/dist/esm/components/multi-select-field/MultiSelectField.js +56 -66
  179. package/dist/esm/components/multi-select-field/TanstackMultiSelectField.d.ts +92 -0
  180. package/dist/esm/components/multi-select-field/TanstackMultiSelectField.js +48 -0
  181. package/dist/esm/components/multi-select-field/test-utils.d.ts +17 -0
  182. package/dist/esm/components/multi-select-field/test-utils.js +45 -0
  183. package/dist/esm/components/nav/parts/NavGroup.d.ts +3 -3
  184. package/dist/esm/components/nav/parts/NavGroup.js +62 -51
  185. package/dist/esm/components/nav/parts/{NavItem.d.ts → RawNavItem.d.ts} +102 -5
  186. package/dist/esm/components/nav/parts/RawNavItem.js +106 -0
  187. package/dist/esm/components/navigation-card/NavigationCard.context.d.ts +31 -0
  188. package/dist/esm/components/navigation-card/NavigationCard.context.js +13 -0
  189. package/dist/esm/components/navigation-card/NavigationCard.d.ts +46 -0
  190. package/dist/esm/components/navigation-card/NavigationCard.js +62 -0
  191. package/dist/esm/components/navigation-card/NavigationCard.types.d.ts +37 -0
  192. package/dist/esm/components/navigation-card/NavigationCard.variants.d.ts +1147 -0
  193. package/dist/esm/components/navigation-card/NavigationCard.variants.js +164 -0
  194. package/dist/esm/components/navigation-card/parts/NavigationCardDescription.d.ts +39 -0
  195. package/dist/esm/components/navigation-card/parts/NavigationCardDescription.js +22 -0
  196. package/dist/esm/components/navigation-card/parts/NavigationCardGroup.d.ts +146 -0
  197. package/dist/esm/components/navigation-card/parts/NavigationCardGroup.js +93 -0
  198. package/dist/esm/components/navigation-card/parts/NavigationCardLabel.d.ts +32 -0
  199. package/dist/esm/components/navigation-card/parts/NavigationCardLabel.js +24 -0
  200. package/dist/esm/components/number-field/NumberField.d.ts +2 -0
  201. package/dist/esm/components/number-field/TanstackNumberField.d.ts +74 -0
  202. package/dist/esm/components/number-field/TanstackNumberField.js +44 -0
  203. package/dist/esm/components/number-input/NumberInput.js +31 -29
  204. package/dist/esm/components/number-input/TanstackNumberInput.d.ts +58 -0
  205. package/dist/esm/components/number-input/TanstackNumberInput.js +38 -0
  206. package/dist/esm/components/page/Page.js +13 -12
  207. package/dist/esm/components/page/parts/PageHeader.d.ts +79 -9
  208. package/dist/esm/components/page/parts/PageHeader.js +22 -20
  209. package/dist/esm/components/pagination/Pagination.d.ts +23 -44
  210. package/dist/esm/components/pagination/Pagination.js +89 -163
  211. package/dist/esm/components/pagination/PaginationContext.d.ts +11 -0
  212. package/dist/esm/components/pagination/PaginationContext.js +15 -0
  213. package/dist/esm/components/pagination/hooks/use-pagination-state.d.ts +63 -0
  214. package/dist/esm/components/pagination/hooks/use-pagination-state.js +27 -0
  215. package/dist/esm/components/pagination/hooks/use-pagination-window.d.ts +64 -0
  216. package/dist/esm/components/pagination/hooks/use-pagination-window.js +15 -0
  217. package/dist/esm/components/pagination/parts/PaginationContent.d.ts +30 -0
  218. package/dist/esm/components/pagination/parts/PaginationContent.js +37 -0
  219. package/dist/esm/components/pagination/parts/PaginationEllipsis.d.ts +23 -4
  220. package/dist/esm/components/pagination/parts/PaginationEllipsis.js +20 -16
  221. package/dist/esm/components/pagination/parts/PaginationItem.d.ts +38 -0
  222. package/dist/esm/components/pagination/parts/PaginationItem.js +22 -0
  223. package/dist/esm/components/pagination/parts/RawPaginationLink.d.ts +11 -0
  224. package/dist/esm/components/pagination/parts/RawPaginationLink.js +60 -0
  225. package/dist/esm/components/pagination/parts/RawPaginationNext.d.ts +22 -0
  226. package/dist/esm/components/pagination/parts/RawPaginationNext.js +70 -0
  227. package/dist/esm/components/pagination/parts/RawPaginationPrevious.d.ts +22 -0
  228. package/dist/esm/components/pagination/parts/RawPaginationPrevious.js +67 -0
  229. package/dist/esm/components/pagination/utils/pagination-window.js +29 -20
  230. package/dist/esm/components/payfit-brand/PayFitBrand.d.ts +4 -0
  231. package/dist/esm/components/payfit-brand/PayFitBrand.js +30 -22
  232. package/dist/esm/components/payfit-brand/PayFitPreprod.js +25 -25
  233. package/dist/esm/components/phone-number/PhoneNumberInput.d.ts +67 -0
  234. package/dist/esm/components/phone-number/PhoneNumberInput.js +322 -0
  235. package/dist/esm/components/phone-number/TanstackPhoneNumberInput.d.ts +64 -0
  236. package/dist/esm/components/phone-number/TanstackPhoneNumberInput.js +33 -0
  237. package/dist/esm/components/phone-number/parts/PhoneNumberItem.d.ts +42 -0
  238. package/dist/esm/components/phone-number/parts/PhoneNumberItem.js +68 -0
  239. package/dist/esm/components/phone-number/unknownFlag.svg.js +4 -0
  240. package/dist/esm/components/phone-number-field/TanstackPhoneNumberField.d.ts +15 -0
  241. package/dist/esm/components/phone-number-field/TanstackPhoneNumberField.js +32 -0
  242. package/dist/esm/components/pill/Pill.d.ts +2 -2
  243. package/dist/esm/components/pill/Pill.js +8 -8
  244. package/dist/esm/components/popover/Popover.js +6 -6
  245. package/dist/esm/components/promo-dialog/PromoDialog.d.ts +149 -0
  246. package/dist/esm/components/promo-dialog/PromoDialog.js +219 -0
  247. package/dist/esm/components/promo-dialog/parts/PromoDialogActions.d.ts +44 -0
  248. package/dist/esm/components/promo-dialog/parts/PromoDialogActions.js +29 -0
  249. package/dist/esm/components/promo-dialog/parts/PromoDialogContent.d.ts +43 -0
  250. package/dist/esm/components/promo-dialog/parts/PromoDialogContent.js +20 -0
  251. package/dist/esm/components/promo-dialog/parts/PromoDialogHero.d.ts +47 -0
  252. package/dist/esm/components/promo-dialog/parts/PromoDialogHero.js +25 -0
  253. package/dist/esm/components/promo-dialog/parts/PromoDialogSubtitle.d.ts +53 -0
  254. package/dist/esm/components/promo-dialog/parts/PromoDialogSubtitle.js +21 -0
  255. package/dist/esm/components/promo-dialog/parts/PromoDialogTitle.d.ts +6 -0
  256. package/dist/esm/components/promo-dialog/parts/PromoDialogTitle.js +18 -0
  257. package/dist/esm/components/radio-button-group/TanstackRadioButtonGroup.d.ts +13 -0
  258. package/dist/esm/components/radio-button-group/TanstackRadioButtonGroup.js +43 -0
  259. package/dist/esm/components/radio-button-group/parts/RadioButton.d.ts +29 -11
  260. package/dist/esm/components/radio-button-group/parts/RadioButton.js +53 -51
  261. package/dist/esm/components/radio-button-group-field/RadioButtonGroupField.d.ts +2 -0
  262. package/dist/esm/components/radio-button-group-field/TanstackRadioButtonGroupField.d.ts +13 -0
  263. package/dist/esm/components/radio-button-group-field/TanstackRadioButtonGroupField.js +38 -0
  264. package/dist/esm/components/search/Search.js +46 -46
  265. package/dist/esm/components/segmented-button-group/parts/ToggleButton.js +5 -5
  266. package/dist/esm/components/select/Select.d.ts +5 -4
  267. package/dist/esm/components/select/Select.js +79 -53
  268. package/dist/esm/components/select/TanstackSelect.d.ts +80 -0
  269. package/dist/esm/components/select/TanstackSelect.js +34 -0
  270. package/dist/esm/components/select/parts/SearchInput.d.ts +4 -1
  271. package/dist/esm/components/select/parts/SearchInput.js +49 -31
  272. package/dist/esm/components/select/parts/SelectButton.js +19 -17
  273. package/dist/esm/components/select/parts/SelectOption.js +9 -9
  274. package/dist/esm/components/select-field/SelectField.d.ts +2 -0
  275. package/dist/esm/components/select-field/SelectField.js +8 -9
  276. package/dist/esm/components/select-field/TanstackSelectField.d.ts +124 -0
  277. package/dist/esm/components/select-field/TanstackSelectField.js +44 -0
  278. package/dist/esm/components/select-list/SelectList.d.ts +95 -0
  279. package/dist/esm/components/select-list/SelectList.js +79 -0
  280. package/dist/esm/components/select-list/SelectList.types.d.ts +29 -0
  281. package/dist/esm/components/select-list/constants.d.ts +36 -0
  282. package/dist/esm/components/select-list/constants.js +29 -0
  283. package/dist/esm/components/select-list/helpers.d.ts +42 -0
  284. package/dist/esm/components/select-list/helpers.js +48 -0
  285. package/dist/esm/components/select-list/hooks/useControlledSelection.d.ts +23 -0
  286. package/dist/esm/components/select-list/hooks/useControlledSelection.js +16 -0
  287. package/dist/esm/components/select-list/hooks/useSelectedFirstSorting.d.ts +23 -0
  288. package/dist/esm/components/select-list/hooks/useSelectedFirstSorting.js +31 -0
  289. package/dist/esm/components/select-list/parts/SelectListEmptyState.d.ts +8 -0
  290. package/dist/esm/components/select-list/parts/SelectListEmptyState.js +25 -0
  291. package/dist/esm/components/select-list/parts/SelectListOptGroup.d.ts +118 -0
  292. package/dist/esm/components/select-list/parts/SelectListOptGroup.js +28 -0
  293. package/dist/esm/components/select-list/parts/SelectListOption.d.ts +24 -0
  294. package/dist/esm/components/select-list/parts/SelectListOption.js +72 -0
  295. package/dist/esm/components/select-list/parts/SelectListSearchInput.d.ts +2 -0
  296. package/dist/esm/components/select-list/parts/SelectListSearchInput.js +43 -0
  297. package/dist/esm/components/select-list/parts/SelectedItemsSection.d.ts +54 -0
  298. package/dist/esm/components/select-list/parts/SelectedItemsSection.js +35 -0
  299. package/dist/esm/components/select-list/utils/partition.d.ts +13 -0
  300. package/dist/esm/components/select-list/utils/partition.js +9 -0
  301. package/dist/esm/components/selectable-button-group/SelectableButtonGroup.context.d.ts +1 -5
  302. package/dist/esm/components/selectable-button-group/SelectableButtonGroup.d.ts +6 -1
  303. package/dist/esm/components/selectable-button-group/SelectableButtonGroup.js +23 -23
  304. package/dist/esm/components/selectable-button-group/TanstackSelectableButtonGroup.d.ts +27 -0
  305. package/dist/esm/components/selectable-button-group/TanstackSelectableButtonGroup.js +34 -0
  306. package/dist/esm/components/selectable-button-group/parts/SelectableButton.d.ts +1 -16
  307. package/dist/esm/components/selectable-button-group/parts/SelectableButton.js +56 -57
  308. package/dist/esm/components/selectable-button-group-field/SelectableButtonGroupField.d.ts +2 -0
  309. package/dist/esm/components/selectable-button-group-field/TanstackSelectableButtonGroupField.d.ts +81 -0
  310. package/dist/esm/components/selectable-button-group-field/TanstackSelectableButtonGroupField.js +47 -0
  311. package/dist/esm/components/selectable-card/internals/Description.js +1 -1
  312. package/dist/esm/components/selectable-card/selectable-card-checkbox-group/SelectableCardCheckboxGroup.js +1 -1
  313. package/dist/esm/components/selectable-card/selectable-card-checkbox-group/TanstackSelectableCardCheckboxGroup.d.ts +26 -0
  314. package/dist/esm/components/selectable-card/selectable-card-checkbox-group/TanstackSelectableCardCheckboxGroup.js +32 -0
  315. package/dist/esm/components/selectable-card/selectable-card-checkbox-group/parts/SelectableCardCheckbox.js +24 -24
  316. package/dist/esm/components/selectable-card/selectable-card-radio-group/SelectableCardRadioGroup.d.ts +2 -0
  317. package/dist/esm/components/selectable-card/selectable-card-radio-group/SelectableCardRadioGroup.js +12 -14
  318. package/dist/esm/components/selectable-card/selectable-card-radio-group/TanstackSelectableCardRadioGroup.d.ts +28 -0
  319. package/dist/esm/components/selectable-card/selectable-card-radio-group/TanstackSelectableCardRadioGroup.js +32 -0
  320. package/dist/esm/components/selectable-card/selectable-card-radio-group/parts/RadioIndicator.js +14 -13
  321. package/dist/esm/components/selectable-card/selectable-card-radio-group/parts/SelectableCardRadio.js +27 -25
  322. package/dist/esm/components/selectable-card/selectableCard.variant.js +5 -5
  323. package/dist/esm/components/selectable-card-checkbox-group-field/SelectableCardCheckboxGroupField.d.ts +2 -0
  324. package/dist/esm/components/selectable-card-checkbox-group-field/TanstackSelectableCardCheckboxGroupField.d.ts +10 -0
  325. package/dist/esm/components/selectable-card-checkbox-group-field/TanstackSelectableCardCheckboxGroupField.js +38 -0
  326. package/dist/esm/components/selectable-card-radio-group-field/SelectableCardRadioGroupField.d.ts +2 -0
  327. package/dist/esm/components/selectable-card-radio-group-field/TanstackSelectableCardRadioGroupField.d.ts +10 -0
  328. package/dist/esm/components/selectable-card-radio-group-field/TanstackSelectableCardRadioGroupField.js +38 -0
  329. package/dist/esm/components/skip-links/SkipLinks.js +1 -1
  330. package/dist/esm/components/table/Table.context.d.ts +5 -0
  331. package/dist/esm/components/table/Table.context.js +14 -13
  332. package/dist/esm/components/table/Table.d.ts +94 -0
  333. package/dist/esm/components/table/Table.js +145 -108
  334. package/dist/esm/components/table/hooks/useTableKeyboardNavigation.js +6 -6
  335. package/dist/esm/components/table/parts/TableBody.js +83 -21
  336. package/dist/esm/components/table/parts/TableCell.js +29 -26
  337. package/dist/esm/components/table/parts/TableEmptyState.js +6 -6
  338. package/dist/esm/components/table/parts/TableHeader.js +1 -1
  339. package/dist/esm/components/table/parts/TablePagination.d.ts +5 -5
  340. package/dist/esm/components/table/parts/TablePagination.js +11 -11
  341. package/dist/esm/components/table/parts/TableRow.js +22 -18
  342. package/dist/esm/components/tabs/Tabs.variant.d.ts +0 -6
  343. package/dist/esm/components/tabs/Tabs.variant.js +11 -12
  344. package/dist/esm/components/tabs/parts/{Tab.d.ts → RawTab.d.ts} +2 -2
  345. package/dist/esm/components/tabs/parts/{Tab.js → RawTab.js} +6 -6
  346. package/dist/esm/components/task-menu/TaskMenu.d.ts +4 -4
  347. package/dist/esm/components/task-menu/parts/{SubTask.d.ts → RawSubTask.d.ts} +7 -7
  348. package/dist/esm/components/task-menu/parts/{SubTask.js → RawSubTask.js} +43 -43
  349. package/dist/esm/components/task-menu/parts/{Task.d.ts → RawTask.d.ts} +7 -7
  350. package/dist/esm/components/task-menu/parts/{Task.js → RawTask.js} +45 -41
  351. package/dist/esm/components/task-menu/parts/TaskGroup.d.ts +5 -5
  352. package/dist/esm/components/task-menu/parts/TaskGroup.js +30 -26
  353. package/dist/esm/components/task-menu/parts/task.variants.js +4 -2
  354. package/dist/esm/components/text/Text.d.ts +11 -1
  355. package/dist/esm/components/text/Text.js +43 -30
  356. package/dist/esm/components/text/Text.variants.d.ts +12 -0
  357. package/dist/esm/components/text/Text.variants.js +4 -0
  358. package/dist/esm/components/text-area/TanstackTextArea.d.ts +21 -0
  359. package/dist/esm/components/text-area/TanstackTextArea.js +35 -0
  360. package/dist/esm/components/text-area/TextArea.js +31 -29
  361. package/dist/esm/components/text-field/TanstackTextField.d.ts +79 -0
  362. package/dist/esm/components/text-field/TanstackTextField.js +60 -0
  363. package/dist/esm/components/text-field/TextField.d.ts +2 -0
  364. package/dist/esm/components/toast/UnityToast.js +5 -5
  365. package/dist/esm/components/toast/test-utils.d.ts +36 -0
  366. package/dist/esm/components/toast/test-utils.js +118 -0
  367. package/dist/esm/components/toggle-switch/TanstackToggleSwitch.d.ts +46 -0
  368. package/dist/esm/components/toggle-switch/TanstackToggleSwitch.js +25 -0
  369. package/dist/esm/components/toggle-switch/ToggleSwitch.d.ts +21 -9
  370. package/dist/esm/components/toggle-switch/ToggleSwitch.js +71 -32
  371. package/dist/esm/components/toggle-switch-field/TanstackToggleSwitchField.d.ts +11 -0
  372. package/dist/esm/components/toggle-switch-field/TanstackToggleSwitchField.js +34 -0
  373. package/dist/esm/components/toggle-switch-field/ToggleSwitchField.d.ts +2 -0
  374. package/dist/esm/components/toggle-switch-group/TanstackToggleSwitchGroup.d.ts +57 -0
  375. package/dist/esm/components/toggle-switch-group/TanstackToggleSwitchGroup.js +23 -0
  376. package/dist/esm/components/toggle-switch-group/ToggleSwitchGroup.js +1 -1
  377. package/dist/esm/components/toggle-switch-group-field/TanstackToggleSwitchGroupField.d.ts +19 -0
  378. package/dist/esm/components/toggle-switch-group-field/TanstackToggleSwitchGroupField.js +50 -0
  379. package/dist/esm/components/toggle-switch-group-field/ToggleSwitchGroupField.d.ts +2 -0
  380. package/dist/esm/docs/{table → examples/data}/mocks/employee-columns.d.ts +1 -1
  381. package/dist/esm/hooks/tanstack-form-context.d.ts +1 -0
  382. package/dist/esm/hooks/tanstack-form-context.js +8 -0
  383. package/dist/esm/hooks/use-container-query-level.d.ts +42 -0
  384. package/dist/esm/hooks/use-container-query-level.js +33 -0
  385. package/dist/esm/hooks/use-form.d.ts +2 -0
  386. package/dist/esm/hooks/use-has-scroll.d.ts +71 -0
  387. package/dist/esm/hooks/use-has-scroll.js +75 -0
  388. package/dist/esm/hooks/use-tanstack-form.d.ts +369 -0
  389. package/dist/esm/hooks/use-tanstack-form.js +209 -0
  390. package/dist/esm/index.d.ts +64 -30
  391. package/dist/esm/index.js +482 -394
  392. package/dist/esm/index.storybook-testing.d.ts +3 -0
  393. package/dist/esm/integrations/tanstack-router/components/breadcrumbs/Breadcrumb.d.ts +23 -0
  394. package/dist/esm/integrations/tanstack-router/components/breadcrumbs/BreadcrumbLink.d.ts +38 -0
  395. package/dist/esm/integrations/tanstack-router/components/breadcrumbs/BreadcrumbLink.js +7 -0
  396. package/dist/esm/integrations/tanstack-router/components/breadcrumbs/Breadcrumbs.d.ts +23 -0
  397. package/dist/esm/integrations/tanstack-router/components/breadcrumbs/use-route-breadcrumb.d.ts +53 -0
  398. package/dist/esm/integrations/tanstack-router/components/form-contextual-link/FormContextualLink.d.ts +45 -0
  399. package/dist/esm/integrations/tanstack-router/components/form-contextual-link/FormContextualLink.js +7 -0
  400. package/dist/esm/integrations/tanstack-router/components/form-contextual-link/TanstackFormContextualLink.d.ts +43 -0
  401. package/dist/esm/integrations/tanstack-router/components/link/Link.d.ts +33 -0
  402. package/dist/esm/integrations/tanstack-router/components/link/Link.js +7 -0
  403. package/dist/esm/integrations/tanstack-router/components/list-view/ListView.d.ts +34 -0
  404. package/dist/esm/integrations/tanstack-router/components/list-view/ListView.js +25 -0
  405. package/dist/esm/integrations/tanstack-router/components/list-view/parts/ListViewItem.d.ts +51 -0
  406. package/dist/esm/integrations/tanstack-router/components/list-view/parts/ListViewItem.js +32 -0
  407. package/dist/esm/integrations/tanstack-router/components/menu-item/MenuItem.d.ts +49 -0
  408. package/dist/esm/integrations/tanstack-router/components/menu-item/MenuItem.js +16 -0
  409. package/dist/esm/integrations/tanstack-router/components/nav-item/NavItem.d.ts +52 -0
  410. package/dist/esm/integrations/tanstack-router/components/nav-item/NavItem.js +29 -0
  411. package/dist/esm/integrations/tanstack-router/components/navigation-card/NavigationCard.d.ts +73 -0
  412. package/dist/esm/integrations/tanstack-router/components/navigation-card/NavigationCard.js +37 -0
  413. package/dist/esm/integrations/tanstack-router/components/pagination/PaginationLink.d.ts +54 -0
  414. package/dist/esm/integrations/tanstack-router/components/pagination/PaginationLink.js +21 -0
  415. package/dist/esm/integrations/tanstack-router/components/pagination/PaginationNext.d.ts +52 -0
  416. package/dist/esm/integrations/tanstack-router/components/pagination/PaginationNext.js +22 -0
  417. package/dist/esm/integrations/tanstack-router/components/pagination/PaginationPrevious.d.ts +51 -0
  418. package/dist/esm/integrations/tanstack-router/components/pagination/PaginationPrevious.js +22 -0
  419. package/dist/esm/integrations/tanstack-router/components/tabs/Tabs.d.ts +82 -0
  420. package/dist/esm/integrations/tanstack-router/components/tabs/Tabs.js +41 -0
  421. package/dist/esm/integrations/tanstack-router/components/tabs/parts/Tab.d.ts +52 -0
  422. package/dist/esm/integrations/tanstack-router/components/tabs/parts/Tab.js +15 -0
  423. package/dist/esm/integrations/tanstack-router/components/tabs/parts/TabList.d.ts +5 -0
  424. package/dist/esm/integrations/tanstack-router/components/tabs/parts/TabPanel.d.ts +77 -0
  425. package/dist/esm/integrations/tanstack-router/components/tabs/parts/TabPanel.js +16 -0
  426. package/dist/esm/integrations/tanstack-router/components/task-menu/SubTask.d.ts +69 -0
  427. package/dist/esm/integrations/tanstack-router/components/task-menu/SubTask.js +14 -0
  428. package/dist/esm/integrations/tanstack-router/components/task-menu/Task.d.ts +64 -0
  429. package/dist/esm/integrations/tanstack-router/components/task-menu/Task.js +14 -0
  430. package/dist/esm/integrations/tanstack-router/index.d.ts +19 -0
  431. package/dist/esm/integrations/tanstack-router/utils/decorators.d.ts +23 -0
  432. package/dist/esm/integrations/tanstack-router.js +40 -0
  433. package/dist/esm/mocks/employees.d.ts +1 -5
  434. package/dist/esm/providers/router/RouterProvider.d.ts +7 -2
  435. package/dist/esm/providers/router/RouterProvider.js +14 -10
  436. package/dist/esm/storybook-testing.js +8 -2
  437. package/dist/esm/storybook-utilities/previewTransform.d.ts +1 -0
  438. package/dist/esm/types/DataAttributes.d.ts +1 -1
  439. package/dist/esm/utils/scroll-detection.d.ts +77 -0
  440. package/dist/esm/utils/scroll-detection.js +33 -0
  441. package/dist/esm/utils/spacing.d.ts +63 -0
  442. package/dist/esm/utils/spacing.js +15 -0
  443. package/i18n/en-GB.json +22 -8
  444. package/i18n/es-ES.json +24 -10
  445. package/i18n/fr-FR.json +25 -11
  446. package/package.json +66 -45
  447. package/dist/esm/components/form-field/parts/FormContextualLink.d.ts +0 -20
  448. package/dist/esm/components/form-field/parts/FormContextualLink.js +0 -37
  449. package/dist/esm/components/link/Link.d.ts +0 -93
  450. package/dist/esm/components/link/Link.js +0 -68
  451. package/dist/esm/components/multi-select/Multiselect.types.d.ts +0 -109
  452. package/dist/esm/components/nav/parts/NavItem.js +0 -95
  453. package/dist/esm/integrations/react-router/v5/UnityReactRouterV5Provider.d.ts +0 -6
  454. package/dist/esm/integrations/react-router/v5/UnityReactRouterV5Provider.js +0 -28
  455. package/dist/esm/integrations/react-router/v5/index.d.ts +0 -1
  456. package/dist/esm/integrations/react-router/v5.js +0 -4
  457. /package/dist/esm/components/{pagination → client-side-pagination}/hooks/use-pagination.d.ts +0 -0
  458. /package/dist/esm/components/{pagination → client-side-pagination}/hooks/use-pagination.js +0 -0
  459. /package/dist/esm/components/{pagination → client-side-pagination}/parts/PaginationJumpDialog.js +0 -0
  460. /package/dist/esm/components/{pagination → client-side-pagination}/parts/PaginationNavButton.d.ts +0 -0
@@ -4,10 +4,77 @@ import { TablePaginationProps } from '../table/parts/TablePagination.js';
4
4
  import { TableProps, TableRootProps } from '../table/Table.js';
5
5
  declare module '@tanstack/react-table' {
6
6
  interface ColumnMeta<TData extends RowData, TValue> {
7
+ /**
8
+ * Marks the cell as a row header. When true, the cell renders as `<th scope="row">` instead of `<td>`.
9
+ * Use this for the first column that identifies each row (e.g., ID, name). Important for accessibility.
10
+ * @default false
11
+ * @example
12
+ * ```ts
13
+ * {
14
+ * meta: {
15
+ * isRowHeader: true
16
+ * }
17
+ * }
18
+ * ```
19
+ */
7
20
  isRowHeader?: boolean;
21
+ /**
22
+ * CSS classes to apply to table cells (`TableCell`) in this column.
23
+ * Use this to control cell styling such as width, truncation, or alignment.
24
+ * @example
25
+ * ```ts
26
+ * {
27
+ * meta: {
28
+ * className: 'uy:w-1/4 uy:truncate'
29
+ * }
30
+ * }
31
+ * ```
32
+ */
8
33
  className?: string;
34
+ /**
35
+ * Helper text to display as a tooltip icon next to the column header.
36
+ * Use this to provide additional context or explanations for the column.
37
+ * @example
38
+ * ```ts
39
+ * {
40
+ * meta: {
41
+ * helperText: 'This column shows the employee ID'
42
+ * }
43
+ * }
44
+ * ```
45
+ */
9
46
  helperText?: string;
47
+ /**
48
+ * Controls whether the column cells can receive keyboard focus during table navigation.
49
+ * Set to false for cells containing interactive elements like buttons or checkboxes.
50
+ * @default true
51
+ * @example
52
+ * ```ts
53
+ * {
54
+ * meta: {
55
+ * isFocusable: false // For cells with buttons or checkboxes
56
+ * }
57
+ * }
58
+ * ```
59
+ */
10
60
  isFocusable?: boolean;
61
+ /**
62
+ * CSS classes to apply to the column header (`TableColumnHeader`).
63
+ * Use this to set explicit widths when using `layout="fixed"`.
64
+ * @example
65
+ * ```ts
66
+ * {
67
+ * meta: {
68
+ * headerClassName: 'uy:w-[200px]' // Fixed pixel width
69
+ * // or
70
+ * headerClassName: 'uy:w-1/4' // Percentage width
71
+ * // or
72
+ * headerClassName: 'uy:w-[20ch]' // Character-based width
73
+ * }
74
+ * }
75
+ * ```
76
+ */
77
+ headerClassName?: string;
11
78
  }
12
79
  }
13
80
  export interface DataTablePaginationLabels {
@@ -107,10 +174,15 @@ export interface DataTableProps<TData> extends Omit<TableRootProps, 'children'>,
107
174
  * The DataTable component provides a standardized way to display tabular data with built-in support for
108
175
  * pagination, sorting, filtering, and row selection. It handles common table patterns like loading states,
109
176
  * empty states, and consistent table heights.
177
+ *
178
+ * The component supports two layout modes via the `layout` prop:
179
+ * - **Auto layout** (default): Columns adapt to content with horizontal scrolling
180
+ * - **Fixed layout**: Explicit column widths that fit the container. Set widths using `headerClassName` in column meta.
110
181
  * @param props - The props for the `DataTable` component
111
182
  * @param props.table - The table instance from @tanstack/react-table
112
183
  * @param props.minRows - The minimum number of rows to display, affecting the minimum height
113
184
  * @param props.maxRows - The maximum number of rows to display, affecting the maximum height
185
+ * @param props.layout - Table layout algorithm: 'auto' (default) or 'fixed'. See {@link TableProps['layout']}
114
186
  * @param props.isLoading - Custom loading state to show when isLoading is true
115
187
  * @param props.error - Custom error state
116
188
  * @param props.emptyState - Custom empty state to show when there's no data
@@ -120,47 +192,65 @@ export interface DataTableProps<TData> extends Omit<TableRootProps, 'children'>,
120
192
  * @param props.onPageChange - Optional callback for pagination change
121
193
  * @param props.onPageHover - Optional callback for pagination hover
122
194
  * @param props.onPageSizeChange - Optional callback for pagination size change
195
+ * @param props.enableVirtualization - Enable internal scroll virtualization for large datasets
196
+ * @param props.estimatedRowHeight - Estimated row height in pixels for the virtualizer
197
+ * @param props.overscan - Number of extra rows rendered above/below viewport for virtualization
123
198
  * @param props.children - Render function that takes care of rendering the table rows
124
199
  * @see {@link DataTableProps} for all available props
125
200
  * @example
126
201
  * ```tsx
127
202
  * import { DataTableRoot, DataTable, DataTableBulkActions, TableRow, TableCell } from '@payfit/unity-components'
128
- * import { flexRender, useReactTable, getCoreRowModel, getPaginationRowModel } from '@tanstack/react-table'
203
+ * import { flexRender, useReactTable, getCoreRowModel, getPaginationRowModel, createColumnHelper } from '@tanstack/react-table'
129
204
  * import { useState, useMemo } from 'react'
130
205
  *
131
206
  * function EmployeeTable() {
132
207
  * const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })
133
208
  * const [rowSelection, setRowSelection] = useState({})
134
209
  *
135
- * // Memoize columns to prevent unnecessary re-renders
136
- * const columns = useMemo(() => employeeColumns, [])
210
+ * const columnHelper = createColumnHelper<Employee>()
211
+ *
212
+ * // Define columns with optional width control for fixed layout
213
+ * const columns = useMemo(() => [
214
+ * columnHelper.accessor('name', {
215
+ * header: 'Name',
216
+ * meta: {
217
+ * isRowHeader: true,
218
+ * headerClassName: 'uy:w-[200px]' // Set explicit width for fixed layout
219
+ * }
220
+ * }),
221
+ * columnHelper.accessor('position', {
222
+ * header: 'Position',
223
+ * meta: {
224
+ * headerClassName: 'uy:w-1/3' // Use percentage for proportional width
225
+ * }
226
+ * }),
227
+ * columnHelper.accessor('department', {
228
+ * header: 'Department'
229
+ * // No headerClassName: will share remaining space
230
+ * })
231
+ * ], [])
137
232
  *
138
233
  * const table = useReactTable({
139
234
  * data: employees,
140
235
  * columns,
141
- * // Provide stable row ID for better performance
142
236
  * getRowId: (row) => row.id,
143
- * state: {
144
- * pagination,
145
- * rowSelection,
146
- * },
237
+ * state: { pagination, rowSelection },
147
238
  * onPaginationChange: setPagination,
148
239
  * onRowSelectionChange: setRowSelection,
149
240
  * getCoreRowModel: getCoreRowModel(),
150
241
  * getPaginationRowModel: getPaginationRowModel(),
151
- * // Enable row selection features
152
242
  * enableRowSelection: true,
153
243
  * enableMultiRowSelection: true,
154
244
  * })
155
245
  *
156
- * const actions = [
157
- * { id: 'delete', label: 'Delete', onPress: handleDelete },
158
- * { id: 'archive', label: 'Archive', onPress: handleArchive },
159
- * ]
160
- *
161
246
  * return (
162
247
  * <DataTableRoot>
163
- * <DataTable table={table} minRows={5} maxRows={10}>
248
+ * <DataTable
249
+ * table={table}
250
+ * minRows={5}
251
+ * maxRows={10}
252
+ * layout="fixed" // Use fixed layout with explicit column widths
253
+ * >
164
254
  * {row => (
165
255
  * <TableRow key={row.id} isSelected={row.getIsSelected()}>
166
256
  * {row.getVisibleCells().map(cell => (
@@ -179,9 +269,12 @@ export interface DataTableProps<TData> extends Omit<TableRootProps, 'children'>,
179
269
  * @remarks
180
270
  * - For bulk actions, use DataTableBulkActions component alongside DataTable within DataTableRoot
181
271
  * - DataTableBulkActions provides the F6 keyboard shortcut for accessibility
272
+ * - **Layout modes**: Use `layout="auto"` (default) for content-driven columns with scrolling, or `layout="fixed"` for predictable widths that fit the container
273
+ * - **Setting column widths**: Add `headerClassName` to column meta with width classes (e.g., `'uy:w-[200px]'`, `'uy:w-1/3'`)
274
+ * - **Fixed layout best practices**: Set explicit widths on column headers and use truncation for overflow content
182
275
  * - [API](https://unity-components.payfit.io/?path=/docs/data-datatable--docs) • [Demo](https://unity-components.payfit.io/?path=/docs/data-datatable--docs)
183
276
  */
184
- declare function DataTable<TData extends object>({ table, isLoading, error, emptyState, loadingState, errorState, pagination, minRows, maxRows, onPageChange: onPaginationChange, onPageHover: onPaginationPageHover, onPageSizeChange: onPaginationSizeChange, children, ...rest }: DataTableProps<TData>): import("react/jsx-runtime").JSX.Element;
277
+ declare function DataTable<TData extends object>({ table, isLoading, error, emptyState, loadingState, errorState, pagination, minRows, maxRows, onPageChange: onPaginationChange, onPageHover: onPaginationPageHover, onPageSizeChange: onPaginationSizeChange, children, enableVirtualization, estimatedRowHeight, overscan, ...rest }: DataTableProps<TData>): import("react/jsx-runtime").JSX.Element;
185
278
  declare namespace DataTable {
186
279
  var displayName: string;
187
280
  }
@@ -1,129 +1,143 @@
1
- import { jsxs as m, jsx as e, Fragment as E } from "react/jsx-runtime";
2
- import { useRef as R, useEffect as z } from "react";
1
+ import { jsxs as i, jsx as o, Fragment as N } from "react/jsx-runtime";
2
+ import { useRef as v, useEffect as F } from "react";
3
3
  import { flexRender as f } from "@tanstack/react-table";
4
- import { useId as I } from "react-aria";
5
- import { CircularIconButton as N } from "../icon-button/CircularIconButton.js";
6
- import { TableBody as F } from "../table/parts/TableBody.js";
7
- import { TableColumnHeader as M } from "../table/parts/TableColumnHeader.js";
8
- import { TableEmptyStateLoading as O, TableEmptyStateError as j, TableEmptyStateNoData as B } from "../table/parts/TableEmptyState.js";
9
- import { TableHeader as $ } from "../table/parts/TableHeader.js";
10
- import { TablePagination as G } from "../table/parts/TablePagination.js";
11
- import { TableRoot as L, Table as Q } from "../table/Table.js";
12
- import { ColumnSortHeader as W } from "./parts/ColumnSortHeader.js";
13
- const b = ({
14
- children: o,
4
+ import { useId as M } from "react-aria";
5
+ import { CircularIconButton as O } from "../icon-button/CircularIconButton.js";
6
+ import { TableBody as j } from "../table/parts/TableBody.js";
7
+ import { TableColumnHeader as B } from "../table/parts/TableColumnHeader.js";
8
+ import { TableEmptyStateLoading as $, TableEmptyStateError as G, TableEmptyStateNoData as L } from "../table/parts/TableEmptyState.js";
9
+ import { TableHeader as Q } from "../table/parts/TableHeader.js";
10
+ import { TablePagination as W } from "../table/parts/TablePagination.js";
11
+ import { TableRoot as k, Table as q } from "../table/Table.js";
12
+ import { ColumnSortHeader as A } from "./parts/ColumnSortHeader.js";
13
+ const C = ({
14
+ children: t,
15
15
  columnNameId: a,
16
16
  helperText: r
17
- }) => r !== void 0 ? /* @__PURE__ */ m("div", { className: "uy:flex uy:gap-50 uy:items-center", children: [
18
- o,
19
- /* @__PURE__ */ e(
20
- N,
17
+ }) => r !== void 0 ? /* @__PURE__ */ i("div", { className: "uy:flex uy:gap-50 uy:items-center", children: [
18
+ t,
19
+ /* @__PURE__ */ o(
20
+ O,
21
21
  {
22
22
  "aria-labelledby": a,
23
- className: "uy:text-content-neutral-low uy:hover:bg-surface-neutral-hover uy:hover:text-content-neutral-low",
24
23
  icon: "QuestionOutlined",
25
24
  title: r,
26
- color: "content.neutral.low"
25
+ color: "content.neutral.lowest"
27
26
  }
28
27
  )
29
- ] }) : /* @__PURE__ */ e(E, { children: o });
30
- function k({
31
- table: o,
28
+ ] }) : /* @__PURE__ */ o(N, { children: t });
29
+ function J({
30
+ table: t,
32
31
  isLoading: a,
33
32
  error: r,
34
33
  emptyState: u,
35
- loadingState: C,
34
+ loadingState: b,
36
35
  errorState: T,
37
36
  pagination: c,
38
- minRows: h,
39
- maxRows: P,
40
- onPageChange: S,
37
+ minRows: P,
38
+ maxRows: S,
39
+ onPageChange: h,
41
40
  onPageHover: x,
42
- onPageSizeChange: w,
43
- children: y,
44
- ...i
41
+ onPageSizeChange: y,
42
+ children: D,
43
+ enableVirtualization: w,
44
+ estimatedRowHeight: H,
45
+ overscan: E,
46
+ ...m
45
47
  }) {
46
- const p = R(null), D = I(), { pageIndex: s, pageSize: g } = o.getState().pagination;
47
- z(() => {
48
- p.current?.scrollToTop();
49
- }, [s, g]);
50
- const H = {
51
- label: i.label,
52
- description: i.description,
53
- isHorizontalScrollEnabled: i.isHorizontalScrollEnabled
48
+ const s = v(null), R = M(), { pageIndex: p, pageSize: g } = t.getState().pagination;
49
+ F(() => {
50
+ s.current?.scrollToTop();
51
+ }, [p, g]);
52
+ const z = {
53
+ label: m.label,
54
+ description: m.description,
55
+ isHorizontalScrollEnabled: m.isHorizontalScrollEnabled,
56
+ layout: m.layout
54
57
  }, d = () => {
55
58
  if (a)
56
- return C ?? /* @__PURE__ */ e(O, {});
59
+ return b ?? /* @__PURE__ */ o($, {});
57
60
  if (r)
58
- return T ?? /* @__PURE__ */ e(j, {});
59
- }, v = () => a || r ? d() : o.getRowModel().rows.length === 0 ? u ?? /* @__PURE__ */ e(B, {}) : u;
60
- return /* @__PURE__ */ m(L, { minRows: h, maxRows: P, children: [
61
- /* @__PURE__ */ m(Q, { ref: p, ...H, children: [
62
- /* @__PURE__ */ e($, { children: o.getHeaderGroups().map(
63
- (n) => n.headers.map((t) => {
64
- const l = `${D}-column-name-${t.column.columnDef.id}`;
65
- return /* @__PURE__ */ e(
66
- M,
67
- {
68
- isFocusable: t.column.columnDef.meta?.isFocusable,
69
- children: o.getRowModel().rows.length > 0 && t.column.getCanSort() ? /* @__PURE__ */ e(W, { header: t, children: /* @__PURE__ */ e(
70
- b,
71
- {
72
- columnNameId: l,
73
- helperText: t.column.columnDef.meta?.helperText,
74
- children: /* @__PURE__ */ e("span", { id: l, children: f(
75
- t.column.columnDef.header,
76
- t.getContext()
77
- ) })
78
- }
79
- ) }) : /* @__PURE__ */ e(
80
- b,
61
+ return T ?? /* @__PURE__ */ o(G, {});
62
+ }, I = () => a || r ? d() : t.getRowModel().rows.length === 0 ? u ?? /* @__PURE__ */ o(L, {}) : u;
63
+ return /* @__PURE__ */ i(k, { minRows: P, maxRows: S, children: [
64
+ /* @__PURE__ */ i(
65
+ q,
66
+ {
67
+ ref: s,
68
+ ...z,
69
+ enableVirtualization: w,
70
+ estimatedRowHeight: H,
71
+ overscan: E,
72
+ children: [
73
+ /* @__PURE__ */ o(Q, { children: t.getHeaderGroups().map(
74
+ (n) => n.headers.map((e) => {
75
+ const l = `${R}-column-name-${e.column.columnDef.id}`;
76
+ return /* @__PURE__ */ o(
77
+ B,
81
78
  {
82
- columnNameId: l,
83
- helperText: t.column.columnDef.meta?.helperText,
84
- children: /* @__PURE__ */ e("span", { id: l, children: f(
85
- t.column.columnDef.header,
86
- t.getContext()
87
- ) })
88
- }
89
- )
90
- },
91
- t.id
92
- );
93
- })
94
- ) }),
95
- /* @__PURE__ */ e(
96
- F,
97
- {
98
- renderEmptyState: v,
99
- renderDataState: d,
100
- children: !a && !r && o.getRowModel().rows.map(y)
101
- }
102
- )
103
- ] }),
104
- o.getPageCount() > 0 && /* @__PURE__ */ e(
105
- G,
79
+ isFocusable: e.column.columnDef.meta?.isFocusable,
80
+ className: e.column.columnDef.meta?.headerClassName,
81
+ children: t.getRowModel().rows.length > 0 && e.column.getCanSort() ? /* @__PURE__ */ o(A, { header: e, children: /* @__PURE__ */ o(
82
+ C,
83
+ {
84
+ columnNameId: l,
85
+ helperText: e.column.columnDef.meta?.helperText,
86
+ children: /* @__PURE__ */ o("span", { id: l, children: f(
87
+ e.column.columnDef.header,
88
+ e.getContext()
89
+ ) })
90
+ }
91
+ ) }) : /* @__PURE__ */ o(
92
+ C,
93
+ {
94
+ columnNameId: l,
95
+ helperText: e.column.columnDef.meta?.helperText,
96
+ children: /* @__PURE__ */ o("span", { id: l, children: f(
97
+ e.column.columnDef.header,
98
+ e.getContext()
99
+ ) })
100
+ }
101
+ )
102
+ },
103
+ e.id
104
+ );
105
+ })
106
+ ) }),
107
+ /* @__PURE__ */ o(
108
+ j,
109
+ {
110
+ renderEmptyState: I,
111
+ renderDataState: d,
112
+ children: !a && !r && t.getRowModel().rows.map(D)
113
+ }
114
+ )
115
+ ]
116
+ }
117
+ ),
118
+ t.getPageCount() > 0 && /* @__PURE__ */ o(
119
+ W,
106
120
  {
107
- pageCount: o.getPageCount(),
108
- rowCount: o.getRowCount(),
109
- currentPage: s + 1,
121
+ pageCount: t.getPageCount(),
122
+ rowCount: t.getRowCount(),
123
+ currentPage: p + 1,
110
124
  rowsPerPage: g,
111
125
  pageSizeOptions: c?.pageSizeOptions,
112
- onPageChange: (n, t, l) => {
113
- o.setPageIndex(n - 1), S?.(n - 1, t, l);
126
+ onPageChange: (n, e, l) => {
127
+ t.setPageIndex(n - 1), h?.(n - 1, e, l);
114
128
  },
115
129
  onPageHover: (n) => {
116
130
  x?.(n);
117
131
  },
118
132
  onPageSizeChange: (n) => {
119
- o.setPageSize(n), w?.(n);
133
+ t.setPageSize(n), y?.(n);
120
134
  },
121
135
  itemLabel: c?.labels?.itemLabel
122
136
  }
123
137
  )
124
138
  ] });
125
139
  }
126
- k.displayName = "DataTable";
140
+ J.displayName = "DataTable";
127
141
  export {
128
- k as DataTable
142
+ J as DataTable
129
143
  };
@@ -15,3 +15,4 @@ export type Employee = {
15
15
  } | null;
16
16
  };
17
17
  export declare const employees: Employee[];
18
+ export declare const employees500: Employee[];
@@ -14,7 +14,7 @@ const q = k({
14
14
  dialogHeader: "uy:flex uy:items-center uy:h-500 uy:w-full",
15
15
  dialogHeaderGroup: "uy:flex uy:items-center",
16
16
  calendarGrid: "uy:border-separate uy:border-spacing-25 uy:w-full",
17
- calendarHeaderCell: "uy:typography-body-strong uy:text-content-neutral-low uy:w-[44px] uy:h-[44px] uy:p-[1px] uy:uppercase",
17
+ calendarHeaderCell: "uy:typography-body-small-strong uy:sm:typography-body-strong uy:text-content-neutral-low uy:w-[44px] uy:h-[44px] uy:p-[1px] uy:uppercase",
18
18
  calendarCell: [
19
19
  // base styles
20
20
  "uy:typography-body uy:relative uy:text-content-form-enabled uy:w-[44px] uy:h-[44px] uy:p-[1px] uy:outline-hidden uy:cursor-pointer uy:rounded-circle uy:flex uy:items-center uy:justify-center",
@@ -34,7 +34,7 @@ function x({
34
34
  m(t.target.value), p(s(t.target.value));
35
35
  },
36
36
  disabled: i,
37
- className: "uy:appearance-none uy:box-border uy:w-[var(--uy-selected-item-width)] uy:bg-transparent uy:border-none uy:rounded-50 uy:capitalize uy:text-content-form-enabled uy:typography-action-large uy:cursor-pointer uy:pr-300 uy:disabled:text-content-form-disabled uy:focus-visible:outline-2 uy:focus-visible:outline-offset-2 uy:focus-visible:outline-utility-focus-ring [-webkit-tap-highlight-color:transparent] [background-color:transparent]",
37
+ className: "uy:appearance-none uy:box-border uy:w-[var(--uy-selected-item-width)] uy:bg-transparent uy:border-none uy:rounded-50 uy:capitalize uy:text-content-form-enabled uy:typography-action-large uy:cursor-pointer uy:pr-300 uy:disabled:text-content-form-disabled uy:data-[focus-visible='true']:outline-2 uy:data-[focus-visible='true']:outline-offset-2 uy:data-[focus-visible='true']:outline-utility-focus-ring [-webkit-tap-highlight-color:transparent] [background-color:transparent]",
38
38
  style: {
39
39
  "--uy-selected-item-width": `calc(var(--uy-spacing-300) + ${y.length}ch)`
40
40
  },
@@ -1,6 +1,6 @@
1
1
  import { CalendarDate } from '@internationalized/date';
2
2
  import { DatePickerProps as AriaDatePickerProps } from 'react-aria-components';
3
- export interface DatePickerProps extends Pick<AriaDatePickerProps<CalendarDate>, 'id' | 'firstDayOfWeek'> {
3
+ export interface DatePickerProps extends Pick<AriaDatePickerProps<CalendarDate>, 'id' | 'firstDayOfWeek' | 'aria-label' | 'aria-labelledby' | 'aria-describedby' | 'aria-details'> {
4
4
  /** The currently selected date */
5
5
  value?: CalendarDate | null;
6
6
  /** The default selected date (uncontrolled) */
@@ -1,28 +1,28 @@
1
1
  import { jsxs as f, jsx as a } from "react/jsx-runtime";
2
- import { forwardRef as V } from "react";
2
+ import { forwardRef as U } from "react";
3
3
  import { uyTv as b } from "@payfit/unity-themes";
4
- import { DatePicker as N, Group as O, Button as W, Popover as I, Dialog as U } from "react-aria-components";
5
- import { useIntl as B } from "react-intl";
6
- import { DateCalendar as j } from "../date-calendar/DateCalendar.js";
7
- import { Icon as E } from "../icon/Icon.js";
8
- import { DateInput as M } from "./parts/DateInput.js";
9
- const R = b({
4
+ import { DatePicker as B, Group as j, Button as E, Popover as M, Dialog as R } from "react-aria-components";
5
+ import { useIntl as G } from "react-intl";
6
+ import { DateCalendar as T } from "../date-calendar/DateCalendar.js";
7
+ import { Icon as $ } from "../icon/Icon.js";
8
+ import { DateInput as q } from "./parts/DateInput.js";
9
+ const z = b({
10
10
  slots: {
11
11
  base: [
12
- "uy:group uy:flex uy:h-500 uy:border uy:border-solid uy:rounded-75",
13
- "uy:active:border-border-form-active uy:data-[focus-visible]:border-border-form-active"
12
+ "uy:group uy:flex uy:h-5.5 uy:sm:h-500 uy:border uy:border-solid uy:rounded-100 uy:sm:rounded-75",
13
+ "uy:active:border-border-form-active uy:data-[focus-visible=true]:border-border-form-active"
14
14
  ],
15
15
  inputWrapper: [
16
- "uy:flex uy:grow uy:rounded-75 uy:outline-none",
16
+ "uy:flex uy:grow uy:rounded-100 uy:sm:rounded-75 uy:outline-none",
17
17
  // Show focus styles when input wrapper is focused AND button is not focused
18
- "uy:focus-within:outline-2 uy:focus-within:outline-solid uy:focus-within:outline-utility-focus-ring uy:focus-within:outline-offset-2",
18
+ "uy:focus-within:outline-2 uy:focus-within:outline-solid uy:focus-within:outline-utility-focus-ring uy:focus-within:outline-offset-3",
19
19
  // Hide focus styles when button is focused
20
20
  "uy:group-[:has(button:focus)]:data-[focus-within]:outline-none uy:group-[:has(button:focus)]:data-[focus-within]:outline-offset-0 uy:group-[:has(button:focus)]:data-[focus-within]:outline-transparent"
21
21
  ],
22
22
  suffix: [
23
- "uy:flex-grow-0 uy:content-center uy:pt-100 uy:pb-100 uy:pl-150 uy:pr-150 uy:border-l uy:border-solid uy:rounded-r-75 uy:text-content-neutral-low",
24
- "uy:hover:bg-surface-neutral-hover uy:active:bg-surface-neutral-pressed uy:active:border-border-form-active uy:data-[pressed]:bg-surface-neutral-pressed uy:data-[pressed]:border-border-form-active",
25
- "uy:focus-visible:outline-2 uy:focus-visible:outline-utility-focus-ring uy:focus-visible:outline-offset-[3px]"
23
+ "uy:flex-grow-0 uy:content-center uy:p-125 uy:border-l uy:border-solid uy:rounded-r-100 uy:sm:rounded-r-75 uy:text-content-neutral-low",
24
+ "uy:hover:bg-surface-neutral-hover uy:active:bg-surface-neutral-pressed uy:active:border-border-form-active uy:data-[pressed=true]:bg-surface-neutral-pressed uy:data-[pressed=true]:not-group-data-[open=true]:border-border-form-active",
25
+ "uy:focus-visible:outline-2 uy:focus-visible:outline-utility-focus-ring uy:focus-visible:outline-offset-3"
26
26
  ]
27
27
  },
28
28
  variants: {
@@ -58,8 +58,8 @@ const R = b({
58
58
  }
59
59
  }
60
60
  ]
61
- }), G = b({
62
- base: "uy:overflow-auto uy:shadow-floating uy:border uy:border-solid uy:border-border-neutral uy:bg-surface-neutral uy:rounded-75",
61
+ }), A = b({
62
+ base: "uy:overflow-auto uy:shadow-floating uy:border uy:border-solid uy:border-border-neutral uy:bg-surface-neutral uy:rounded-md uy:sm:rounded-75",
63
63
  variants: {
64
64
  isEntering: {
65
65
  true: "uy:animate-in uy:fade-in uy:data-[placement-bottom]:slide-in-from-top-1 uy:data-[placement-top]:slide-in-from-bottom-1 uy:duration-200 uy:ease-out"
@@ -68,68 +68,77 @@ const R = b({
68
68
  true: "uy:animate-out uy:fade-out uy:data-[placement-bottom]:slide-out-to-top-1 uy:data-[placement-top]:slide-out-to-bottom-1 uy:duration-150 uy:ease-in"
69
69
  }
70
70
  }
71
- }), T = V(
71
+ }), H = U(
72
72
  ({
73
- value: u,
73
+ value: t,
74
74
  defaultValue: i,
75
- isInvalid: n,
75
+ isInvalid: d,
76
76
  isLoading: y,
77
77
  isDisabled: o,
78
- isReadOnly: t,
78
+ isReadOnly: u,
79
79
  onClearButtonPress: c,
80
80
  onBlur: s,
81
- onFocus: d,
81
+ onFocus: n,
82
82
  onChange: m,
83
83
  onOpenChange: p,
84
84
  id: g,
85
+ "aria-label": h,
86
+ "aria-labelledby": v,
87
+ "aria-describedby": x,
88
+ "aria-details": D,
85
89
  ...e
86
- }, $) => {
87
- const h = B(), { base: v, inputWrapper: x, suffix: D } = R({
88
- isInvalid: !!n,
89
- isReadOnly: !!t,
90
+ }, w) => {
91
+ const k = G(), { base: C, inputWrapper: P, suffix: V } = z({
92
+ isInvalid: !!d,
93
+ isReadOnly: !!u,
90
94
  isDisabled: !!o
91
95
  }), l = (r) => {
92
96
  m?.(r);
93
- }, w = (r) => {
94
- p?.(r), r ? d?.() : s?.();
95
- }, k = (r) => e.isDateUnavailable ? e.isDateUnavailable(r) : !1, C = () => {
97
+ }, N = (r) => {
98
+ p?.(r), r ? n?.() : s?.();
99
+ }, O = (r) => e.isDateUnavailable ? e.isDateUnavailable(r) : !1, W = () => {
96
100
  c?.();
97
101
  };
98
102
  return /* @__PURE__ */ f(
99
- N,
103
+ B,
100
104
  {
105
+ ref: w,
101
106
  "data-dd-privacy": "mask",
102
107
  ...e,
103
- className: v(),
104
- value: u,
108
+ className: C(),
109
+ value: t,
105
110
  defaultValue: i,
106
111
  minValue: e.minValue,
107
112
  maxValue: e.maxValue,
108
- isReadOnly: !!t,
113
+ isReadOnly: !!u,
109
114
  isDisabled: !!o,
110
115
  onChange: l,
111
- onFocus: d,
116
+ onFocus: n,
112
117
  onBlur: s,
113
- onOpenChange: w,
114
- isDateUnavailable: k,
118
+ onOpenChange: N,
119
+ isDateUnavailable: O,
120
+ "aria-label": h,
121
+ "aria-labelledby": v,
122
+ "aria-describedby": x,
123
+ "aria-details": D,
115
124
  children: [
116
- /* @__PURE__ */ f(O, { className: x(), id: g, children: [
125
+ /* @__PURE__ */ f(j, { className: P(), id: g, children: [
117
126
  /* @__PURE__ */ a(
118
- M,
127
+ q,
119
128
  {
120
129
  isLoading: y,
121
130
  isDisabled: o,
122
- isReadOnly: t,
123
- isInvalid: n,
124
- onClearButtonPress: C
131
+ isReadOnly: u,
132
+ isInvalid: d,
133
+ onClearButtonPress: W
125
134
  }
126
135
  ),
127
- /* @__PURE__ */ a(W, { className: D(), isDisabled: t || o, children: /* @__PURE__ */ a(
128
- E,
136
+ /* @__PURE__ */ a(E, { className: V(), isDisabled: u || o, children: /* @__PURE__ */ a(
137
+ $,
129
138
  {
130
139
  src: "CalendarBlankOutlined",
131
140
  color: "inherit",
132
- alt: h.formatMessage({
141
+ alt: k.formatMessage({
133
142
  id: "unity:component:form-field:date-picker:calendar-button",
134
143
  defaultMessage: "Open Calendar"
135
144
  })
@@ -137,13 +146,13 @@ const R = b({
137
146
  ) })
138
147
  ] }),
139
148
  /* @__PURE__ */ a(
140
- I,
149
+ M,
141
150
  {
142
- className: ({ isEntering: r, isExiting: P }) => G({ isEntering: r, isExiting: P }),
143
- children: /* @__PURE__ */ a(U, { className: "uy:p-150", "data-dd-privacy": "mask", children: /* @__PURE__ */ a(
144
- j,
151
+ className: ({ isEntering: r, isExiting: I }) => A({ isEntering: r, isExiting: I }),
152
+ children: /* @__PURE__ */ a(R, { className: "uy:p-150", "data-dd-privacy": "mask", children: /* @__PURE__ */ a(
153
+ T,
145
154
  {
146
- value: u,
155
+ value: t,
147
156
  defaultValue: i,
148
157
  minValue: e.minValue,
149
158
  maxValue: e.maxValue,
@@ -158,7 +167,7 @@ const R = b({
158
167
  );
159
168
  }
160
169
  );
161
- T.displayName = "DatePicker";
170
+ H.displayName = "DatePicker";
162
171
  export {
163
- T as DatePicker
172
+ H as DatePicker
164
173
  };