@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
@@ -0,0 +1,41 @@
1
+ import { jsx as h } from "react/jsx-runtime";
2
+ import { forwardRef as p } from "react";
3
+ import { useFieldContext as C } from "../../hooks/tanstack-form-context.js";
4
+ import { useFieldA11yContext as B } from "../form-field/TanstackFormField.context.js";
5
+ import { MultiSelect as y } from "./MultiSelect.js";
6
+ const S = (l, o) => {
7
+ const e = C(), t = B(), s = e.state.meta.isTouched && !e.state.meta.isValid, { onClearButtonPress: a, onFocus: i, isReadOnly: r, isDisabled: d, ...n } = l, u = (f) => {
8
+ e.handleChange(f);
9
+ }, c = () => {
10
+ e.handleBlur();
11
+ }, m = () => {
12
+ e.setValue(/* @__PURE__ */ new Set()), a && a();
13
+ };
14
+ return (
15
+ // @ts-expect-error - Typescript is not able to infer the type of the MultiSelect component
16
+ /* @__PURE__ */ h(
17
+ y,
18
+ {
19
+ ...n,
20
+ ref: o,
21
+ id: t.inputId || n.id,
22
+ value: e.state.value,
23
+ onChange: u,
24
+ onBlur: c,
25
+ onFocus: i,
26
+ onClearButtonPress: m,
27
+ isReadOnly: r,
28
+ isDisabled: d,
29
+ isInvalid: s,
30
+ "aria-labelledby": t.labelId
31
+ }
32
+ )
33
+ );
34
+ }, b = p(
35
+ // @ts-expect-error - forwardRef struggles with generic components
36
+ S
37
+ );
38
+ b.displayName = "TanstackMultiSelect";
39
+ export {
40
+ b as TanstackMultiSelect
41
+ };
@@ -10,6 +10,8 @@ export interface MultiSelectButtonProps<TItem> {
10
10
  /** Function to render the selected items */
11
11
  renderValue: (values: Set<TItem>) => string;
12
12
  onClearButtonPress?: () => void;
13
+ onBlur?: () => void;
14
+ onFocus?: () => void;
13
15
  }
14
16
  export declare const MultiSelectButton: <TItem>(props: MultiSelectButtonProps<TItem> & {
15
17
  ref?: ForwardedRef<HTMLButtonElement>;
@@ -1,18 +1,18 @@
1
1
  import { jsxs as i, jsx as e } from "react/jsx-runtime";
2
- import { memo as j, forwardRef as E, useContext as k, useMemo as A } from "react";
3
- import { useSelectContext as D, useStoreState as K, Select as $ } from "@ariakit/react";
4
- import { uyTv as L } from "@payfit/unity-themes";
5
- import { useId as P } from "react-aria";
6
- import { useIntl as R } from "react-intl";
7
- import { Badge as T } from "../../badge/Badge.js";
8
- import { CircularIconButton as U } from "../../icon-button/CircularIconButton.js";
2
+ import { memo as D, forwardRef as k, useContext as A, useMemo as K } from "react";
3
+ import { useSelectContext as R, useStoreState as $, Select as L } from "@ariakit/react";
4
+ import { uyTv as P } from "@payfit/unity-themes";
5
+ import { useId as T } from "react-aria";
6
+ import { useIntl as U } from "react-intl";
7
+ import { Badge as W } from "../../badge/Badge.js";
8
+ import { CircularIconButton as q } from "../../icon-button/CircularIconButton.js";
9
9
  import { Icon as b } from "../../icon/Icon.js";
10
- import { Spinner as W } from "../../spinner/Spinner.js";
11
- import { MultiSelectContext as q } from "../Multiselect.context.js";
12
- const F = L({
10
+ import { Spinner as F } from "../../spinner/Spinner.js";
11
+ import { MultiSelectContext as G } from "../Multiselect.context.js";
12
+ const H = P({
13
13
  slots: {
14
- base: "uy:h-500 uy:flex uy:items-center uy:justify-between uy:py-100 uy:px-150 uy:w-full uy:border uy:border-solid uy:rounded-75 uy:focus-within:outline-none uy:focus-within:ring-2 uy:focus-within:ring-utility-focus-ring uy:focus-within:ring-offset-2 uy:active:not([disabled]):border-border-form-active uy:pointer-events-auto!",
15
- inputValue: "uy:flex-1 uy:typography-body uy:text-content-form-enabled uy:text-left uy:line-clamp-1",
14
+ base: "uy:h-5.5 uy:sm:h-500 uy:flex uy:items-center uy:justify-between uy:py-125 uy:sm:py-100 uy:px-150 uy:w-full uy:border uy:border-solid uy:rounded-100 uy:sm:rounded-75 uy:focus-within:outline-none uy:focus-within:ring-2 uy:focus-within:ring-utility-focus-ring uy:focus-within:ring-offset-2 uy:active:not([disabled]):border-border-form-active uy:pointer-events-auto!",
15
+ inputValue: "uy:flex-1 uy:typography-body uy:text-left uy:line-clamp-1",
16
16
  state: "uy:grow-0 uy:outline-none uy:typography-body uy:placeholder:text-content-neutral-lowest uy:inline-flex uy:gap-50 uy:items-center uy:px-100",
17
17
  suffix: "uy:text-content-neutral-low"
18
18
  },
@@ -44,6 +44,9 @@ const F = L({
44
44
  isEmpty: {
45
45
  true: {
46
46
  inputValue: "uy:text-content-neutral-lowest"
47
+ },
48
+ false: {
49
+ inputValue: "uy:text-content-form-enabled"
47
50
  }
48
51
  }
49
52
  },
@@ -58,77 +61,90 @@ const F = L({
58
61
  state: "uy:text-content-neutral-disabled",
59
62
  suffix: "uy:border-border-form-enabled uy:text-content-form-enabled"
60
63
  }
64
+ },
65
+ {
66
+ isEmpty: !0,
67
+ isDisabled: !1,
68
+ isReadOnly: !1,
69
+ isInvalid: !1,
70
+ className: {
71
+ inputValue: "uy:text-content-neutral-lowest"
72
+ }
61
73
  }
62
74
  ]
63
75
  });
64
- function G({
65
- isDisabled: r,
76
+ function J({
77
+ isDisabled: n,
66
78
  isReadOnly: t,
67
79
  isLoading: c,
68
- isInvalid: n,
69
- placeholder: u,
80
+ isInvalid: r,
81
+ placeholder: s,
70
82
  selectedItems: x,
71
83
  renderValue: d,
72
84
  onClearButtonPress: g,
73
- ...w
74
- }, h) {
75
- const m = P(), s = R(), S = D(), C = K(S, "open"), f = k(q), a = f.maxVisibleItems ?? 0, l = f.selectedKeys ?? /* @__PURE__ */ new Set(), o = Array.from(x), { base: M, inputValue: v, state: I, suffix: B } = F({
76
- isDisabled: !!r,
85
+ onBlur: w,
86
+ onFocus: h,
87
+ ...S
88
+ }, v) {
89
+ const m = T(), u = U(), C = R(), I = $(C, "open"), f = A(G), a = f.maxVisibleItems ?? 0, l = f.selectedKeys ?? /* @__PURE__ */ new Set(), o = Array.from(x), { base: M, inputValue: V, state: B, suffix: N } = H({
90
+ isDisabled: !!n,
77
91
  isReadOnly: !!t,
78
- isInvalid: !!n,
92
+ isInvalid: !!r,
79
93
  isEmpty: l.size === 0
80
94
  }), y = Math.max(
81
95
  o.length - a,
82
96
  0
83
- ), V = l.size > 0 && !r && !t && !c, N = A(() => {
84
- if (o.length === 0) return u;
85
- const O = o.slice(0, a), z = new Set(O);
86
- return d(z);
87
- }, [o, a, d, u]);
97
+ ), O = l.size > 0 && !n && !t && !c, z = K(() => {
98
+ if (o.length === 0) return s;
99
+ const E = o.slice(0, a), j = new Set(E);
100
+ return d(j);
101
+ }, [o, a, d, s]);
88
102
  return /* @__PURE__ */ i(
89
- $,
103
+ L,
90
104
  {
91
- ...w,
92
- ref: h,
105
+ ...S,
106
+ ref: v,
93
107
  className: M(),
94
- disabled: r || t,
95
- "aria-invalid": n,
108
+ disabled: n || t,
109
+ "aria-invalid": r,
96
110
  "aria-readonly": t,
97
111
  "aria-labelledby": `${m}-select-button-label`,
98
112
  "data-dd-privacy": "mask",
113
+ onBlur: w,
114
+ onFocus: h,
99
115
  children: [
100
- /* @__PURE__ */ e("span", { id: `${m}-select-button-label`, className: v(), children: l.size > 0 ? N : u }),
101
- /* @__PURE__ */ i("div", { className: I(), children: [
116
+ /* @__PURE__ */ e("span", { id: `${m}-select-button-label`, className: V(), children: l.size > 0 ? z : s }),
117
+ /* @__PURE__ */ i("div", { className: B(), children: [
102
118
  c && /* @__PURE__ */ e(
103
- W,
119
+ F,
104
120
  {
105
121
  color: "inherit",
106
122
  size: "small",
107
- label: s.formatMessage({
123
+ label: u.formatMessage({
108
124
  id: "unity:component:form-field:form-input:spinner:label",
109
125
  defaultMessage: "Loading"
110
126
  })
111
127
  }
112
128
  ),
113
- n && /* @__PURE__ */ e(
129
+ r && /* @__PURE__ */ e(
114
130
  b,
115
131
  {
116
132
  src: "WarningCircleOutlined",
117
133
  color: "content.form.invalid",
118
- alt: s.formatMessage({
134
+ alt: u.formatMessage({
119
135
  id: "unity:component:form-field:form-input:error:alt",
120
136
  defaultMessage: "Error"
121
137
  })
122
138
  }
123
139
  ),
124
- y > 0 && /* @__PURE__ */ i(T, { variant: "numeric", children: [
140
+ y > 0 && /* @__PURE__ */ i(W, { variant: "numeric", children: [
125
141
  "+",
126
142
  y
127
143
  ] }),
128
- V && /* @__PURE__ */ e(
129
- U,
144
+ O && /* @__PURE__ */ e(
145
+ q,
130
146
  {
131
- title: s.formatMessage({
147
+ title: u.formatMessage({
132
148
  id: "unity:component:common:clear:title",
133
149
  defaultMessage: "Clear"
134
150
  }),
@@ -144,8 +160,8 @@ function G({
144
160
  b,
145
161
  {
146
162
  color: "content.neutral.low",
147
- className: B(),
148
- src: C ? "CaretUpOutlined" : "CaretDownOutlined",
163
+ className: N(),
164
+ src: I ? "CaretUpOutlined" : "CaretDownOutlined",
149
165
  role: "presentation"
150
166
  }
151
167
  )
@@ -153,9 +169,9 @@ function G({
153
169
  }
154
170
  );
155
171
  }
156
- const p = j(E(G));
172
+ const p = D(k(J));
157
173
  p.displayName = "MultiselectButton";
158
- const ne = p;
174
+ const ue = p;
159
175
  export {
160
- ne as MultiSelectButton
176
+ ue as MultiSelectButton
161
177
  };
@@ -1,4 +1,4 @@
1
- import { jsx as e, jsxs as o, Fragment as m } from "react/jsx-runtime";
1
+ import { jsx as o, jsxs as e, Fragment as m } from "react/jsx-runtime";
2
2
  import { memo as b, useContext as f } from "react";
3
3
  import { SelectPopover as h, Combobox as v, ComboboxList as x } from "@ariakit/react";
4
4
  import { uyTv as t } from "@payfit/unity-themes";
@@ -6,35 +6,35 @@ import { Icon as g } from "../../icon/Icon.js";
6
6
  import { MultiSelectContext as w } from "../Multiselect.context.js";
7
7
  const S = t({
8
8
  slots: {
9
- base: "uy:shadow-floating uy:absolute uy:top-full uy:left-0 uy:z-50 uy:w-full uy:rounded-75 uy:border uy:border-solid uy:border-border-neutral uy:bg-surface-neutral uy:overflow-auto uy:max-h-[min(var(--popover-available-height,300px),300px)] uy:outline-none",
9
+ base: "uy:shadow-floating uy:absolute uy:top-full uy:left-0 uy:z-50 uy:w-full uy:rounded-100 uy:sm:rounded-75 uy:border uy:border-solid uy:border-border-neutral uy:bg-surface-neutral uy:overflow-auto uy:max-h-[min(var(--popover-available-height,300px),300px)] uy:outline-none",
10
10
  list: "uy:p-100"
11
11
  }
12
12
  }), N = t({
13
13
  slots: {
14
14
  wrapper: "uy:sticky uy:top-0 uy:bg-surface-neutral uy:pt-100 uy:px-100",
15
- base: "uy:flex uy:w-full uy:gap-100 uy:h-500 uy:border uy:border-solid uy:rounded-75 uy:py-100 uy:border-border-form-enabled uy:bg-surface-form-enabled uy:px-150 uy:typography-body uy:focus-within:outline-none uy:focus-within:ring-2 uy:focus-within:ring-utility-focus-ring uy:focus-within:ring-offset-2 uy:active:border-border-form-active",
15
+ base: "uy:flex uy:w-full uy:gap-100 uy:sm:h-500 uy:transition-colors uy:rounded-100 uy:sm:rounded-75 uy:py-125 uy:sm:py-100 uy:bg-surface-form-high-enabled uy:px-125 uy:sm:px-150 uy:typography-body uy:focus-within:outline-none uy:focus-within:ring-2 uy:focus-within:ring-utility-focus-ring uy:focus-within:ring-offset-2 uy:active:border uy:active:border-solid uy:active:border-border-form-active",
16
16
  input: "uy:focus-visible:outline-none",
17
17
  divider: "uy:my-100 uy:border-t uy:border-border-neutral"
18
18
  }
19
19
  });
20
20
  function C({
21
21
  children: r,
22
- ...l
22
+ ...s
23
23
  }) {
24
- const i = f(w), { base: s, list: u } = S(), { base: n, input: a, wrapper: y, divider: c } = N(), { onBlur: d, ...p } = l;
25
- return /* @__PURE__ */ e(
24
+ const i = f(w), { base: l, list: u } = S(), { base: n, input: a, wrapper: y, divider: c } = N(), { onBlur: d, ...p } = s;
25
+ return /* @__PURE__ */ o(
26
26
  h,
27
27
  {
28
28
  portal: !0,
29
29
  sameWidth: !0,
30
30
  unmountOnHide: !0,
31
- className: s(),
31
+ className: l(),
32
32
  onClose: () => d?.(),
33
33
  ...p,
34
- children: i.isSearchable ? /* @__PURE__ */ o(m, { children: [
35
- /* @__PURE__ */ o("div", { className: y(), children: [
36
- /* @__PURE__ */ o("div", { className: n(), children: [
37
- /* @__PURE__ */ e(
34
+ children: i.isSearchable ? /* @__PURE__ */ e(m, { children: [
35
+ /* @__PURE__ */ e("div", { className: y(), children: [
36
+ /* @__PURE__ */ e("div", { className: n(), children: [
37
+ /* @__PURE__ */ o(
38
38
  g,
39
39
  {
40
40
  src: "MagnifyingGlassOutlined",
@@ -42,7 +42,7 @@ function C({
42
42
  "aria-hidden": !0
43
43
  }
44
44
  ),
45
- /* @__PURE__ */ e(
45
+ /* @__PURE__ */ o(
46
46
  v,
47
47
  {
48
48
  autoSelect: !0,
@@ -51,10 +51,10 @@ function C({
51
51
  }
52
52
  )
53
53
  ] }),
54
- /* @__PURE__ */ e("hr", { className: c() })
54
+ /* @__PURE__ */ o("hr", { className: c() })
55
55
  ] }),
56
- /* @__PURE__ */ e(x, { className: u(), children: r })
57
- ] }) : /* @__PURE__ */ e("div", { className: u(), children: r })
56
+ /* @__PURE__ */ o(x, { className: u(), children: r })
57
+ ] }) : /* @__PURE__ */ o("div", { className: u(), children: r })
58
58
  }
59
59
  );
60
60
  }
@@ -3,8 +3,7 @@ import { ForwardedRef, ReactNode } from 'react';
3
3
  import { FieldPath, FieldValues } from 'react-hook-form';
4
4
  import { Schema } from '../../hooks/use-form.types.js';
5
5
  import { LabelProps } from '../label/Label.js';
6
- import { MultiSelectProps } from '../multi-select/Multiselect.types.js';
7
- type Key = string | number;
6
+ import { MultiSelectProps } from '../multi-select/MultiselectTypes.js';
8
7
  interface FieldProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends Pick<LabelProps, 'isRequired' | 'requiredVariant'> {
9
8
  /** The name of the field, which should match the form schema. */
10
9
  name: TName;
@@ -17,13 +16,14 @@ interface FieldProps<TFieldValues extends FieldValues = FieldValues, TName exten
17
16
  /** A contextual link to display below the multi-select field. */
18
17
  contextualLink?: ReactNode;
19
18
  }
20
- type BaseMultiSelectProps<TItem, // Item type
21
- TItemKey extends keyof TItem, // key name of the item
22
- TKeyType extends TItem[TItemKey] & Key> = Omit<MultiSelectProps<TItem, TItemKey, TKeyType>, 'value' | 'defaultValue' | 'onChange' | 'aria-labelledby' | 'aria-label'>;
23
- export type MultiSelectFieldProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TItem = unknown, TItemKey extends keyof TItem = keyof TItem, TKeyType extends TItem[TItemKey] & Key = TItem[TItemKey] & Key> = FieldProps<TFieldValues, TName> & BaseMultiSelectProps<TItem, TItemKey, TKeyType>;
19
+ type BaseMultiSelectProps<TItems = undefined> = Omit<MultiSelectProps<TItems>, 'value' | 'defaultValue' | 'onChange' | 'aria-labelledby' | 'aria-label'>;
20
+ export type MultiSelectFieldProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TItems = undefined> = FieldProps<TFieldValues, TName> & BaseMultiSelectProps<TItems>;
24
21
  /**
25
22
  * The `MultiSelectField` component renders a full field that allows selecting multiple items from a dropdown list, and integrates with the `Form` component automatically.
26
- * @example
23
+ *
24
+ * The component uses a single generic parameter `TItems` that infers the item type from the `items` prop
25
+ * for the dynamic API, or defaults to `undefined` for the static API (using `children` directly).
26
+ * @example Static API
27
27
  * ```tsx
28
28
  * const schema = z.object({
29
29
  * fruits: z.set(z.string()),
@@ -46,14 +46,47 @@ export type MultiSelectFieldProps<TFieldValues extends FieldValues = FieldValues
46
46
  * )
47
47
  * }
48
48
  * ```
49
+ * @example Dynamic API
50
+ * ```tsx
51
+ * interface Fruit { id: string; name: string }
52
+ * const fruits = new Set<Fruit>([...])
53
+ *
54
+ * const schema = z.object({
55
+ * fruits: z.set(z.string()),
56
+ * })
57
+ *
58
+ * function MyForm() {
59
+ * const { Form } = useUnityForm(schema)
60
+ *
61
+ * return (
62
+ * <Form action={handleSubmit}>
63
+ * <MultiSelectField<typeof schema, Set<Fruit>>
64
+ * name="fruits"
65
+ * label="Select fruits"
66
+ * items={fruits}
67
+ * getItemValue={fruit => fruit.id}
68
+ * >
69
+ * {fruit => (
70
+ * <MultiSelectOption value={fruit.id}>{fruit.name}</MultiSelectOption>
71
+ * )}
72
+ * </MultiSelectField>
73
+ * </Form>
74
+ * )
75
+ * }
76
+ * ```
49
77
  * @note The schema type parameter is needed to ensure type safety with the form's schema. If you omit it, the `name` prop will not be type-safe.
50
78
  * @remarks
51
79
  * [API & Docs](https://unity-components.payfit.io/?path=/docs/forms-multiselectfield--docs) • [Design Guidelines](https://www.payfit.design/24f360409/p/928776-multiselect)
80
+ * @deprecated React Hook Form components are deprecated. Use the TanStack Form version instead.
81
+ * @see Storybook docs: https://unity-components.payfit.io/?path=/docs/forms-introduction-to-unity-forms--docs
82
+ */
83
+ /**
84
+ * Component type for MultiSelectField with proper generic support
52
85
  */
53
- export declare const MultiSelectField: {
54
- <TSchema extends Schema, TItem = unknown>(props: MultiSelectFieldProps<StandardSchemaV1.InferOutput<TSchema>, FieldPath<StandardSchemaV1.InferOutput<TSchema>>, TItem, keyof TItem, TItem[keyof TItem] & Key> & {
55
- ref?: ForwardedRef<HTMLButtonElement>;
56
- }): React.JSX.Element;
57
- displayName?: string;
86
+ type MultiSelectFieldComponent = <TSchema extends Schema = Schema, TItems = undefined>(props: MultiSelectFieldProps<StandardSchemaV1.InferOutput<TSchema>, FieldPath<StandardSchemaV1.InferOutput<TSchema>>, TItems> & {
87
+ ref?: ForwardedRef<HTMLButtonElement>;
88
+ }) => React.JSX.Element;
89
+ export declare const MultiSelectField: MultiSelectFieldComponent & {
90
+ displayName: string;
58
91
  };
59
92
  export {};
@@ -1,82 +1,72 @@
1
- import { jsxs as C, jsx as t } from "react/jsx-runtime";
2
- import { forwardRef as P } from "react";
3
- import { uyTv as M } from "@payfit/unity-themes";
4
- import { useFormContext as T } from "react-hook-form";
5
- import { FormField as k } from "../form-field/FormField.js";
6
- import { FormControl as g } from "../form-field/parts/FormControl.js";
7
- import { FormFeedbackText as B } from "../form-field/parts/FormFeedbackText.js";
8
- import { FormHelperText as L } from "../form-field/parts/FormHelperText.js";
9
- import { FormLabel as R } from "../form-field/parts/FormLabel.js";
10
- import { MultiSelect as u } from "../multi-select/MultiSelect.js";
11
- const j = M({
1
+ import { jsxs as y, jsx as r } from "react/jsx-runtime";
2
+ import { forwardRef as C } from "react";
3
+ import { uyTv as I } from "@payfit/unity-themes";
4
+ import { useFormContext as P } from "react-hook-form";
5
+ import { FormField as T } from "../form-field/FormField.js";
6
+ import { FormControl as k } from "../form-field/parts/FormControl.js";
7
+ import { FormFeedbackText as M } from "../form-field/parts/FormFeedbackText.js";
8
+ import { FormHelperText as B } from "../form-field/parts/FormHelperText.js";
9
+ import { FormLabel as L } from "../form-field/parts/FormLabel.js";
10
+ import { MultiSelect as R } from "../multi-select/MultiSelect.js";
11
+ const g = I({
12
12
  base: "uy:flex uy:flex-col uy:gap-100"
13
13
  });
14
- function q(e, l) {
15
- const { control: r, setValue: d } = T(), {
16
- name: i,
17
- label: f,
18
- helperText: o,
19
- feedbackText: x,
20
- contextualLink: F,
21
- isRequired: b,
22
- isInvalid: h,
23
- isLoading: n,
24
- isDisabled: m,
25
- isReadOnly: a,
26
- requiredVariant: p,
27
- children: s,
28
- onClearButtonPress: S,
29
- ...y
30
- } = e, I = {
31
- isRequired: b,
32
- isInvalid: h,
33
- isLoading: n,
34
- isDisabled: m,
35
- isReadOnly: a
36
- }, V = "items" in e && "getItemValue" in e, c = {
14
+ function j(e, a) {
15
+ const { control: m, setValue: s } = P(), {
16
+ name: l,
17
+ label: c,
18
+ helperText: t,
19
+ feedbackText: d,
20
+ contextualLink: u,
21
+ isRequired: f,
22
+ isInvalid: p,
23
+ isLoading: o,
24
+ isDisabled: i,
25
+ isReadOnly: n,
26
+ requiredVariant: x,
27
+ children: F,
28
+ onClearButtonPress: b,
29
+ ...h
30
+ } = e, S = {
31
+ isRequired: f,
32
+ isInvalid: p,
33
+ isLoading: o,
34
+ isDisabled: i,
35
+ isReadOnly: n
36
+ }, V = {
37
37
  onClearButtonPress: () => {
38
- d(i, /* @__PURE__ */ new Set()), S?.();
38
+ s(l, /* @__PURE__ */ new Set()), b?.();
39
39
  },
40
40
  placeholder: e.placeholder,
41
41
  isSearchable: e.isSearchable,
42
42
  maxVisibleItems: e.maxVisibleItems,
43
- isDisabled: m,
44
- isReadOnly: a,
45
- isLoading: n,
46
- renderValue: e.renderValue
43
+ isDisabled: i,
44
+ isReadOnly: n,
45
+ isLoading: o,
46
+ ...e.renderValue && { renderValue: e.renderValue }
47
47
  };
48
- return /* @__PURE__ */ C(
49
- k,
48
+ return /* @__PURE__ */ y(
49
+ T,
50
50
  {
51
- control: r,
52
- name: i,
53
- className: j(),
54
- ...I,
51
+ control: m,
52
+ name: l,
53
+ className: g(),
54
+ ...S,
55
55
  children: [
56
- /* @__PURE__ */ t(R, { requiredVariant: p, children: f }),
57
- o && /* @__PURE__ */ t(L, { children: o }),
58
- /* @__PURE__ */ t(g, { children: V ? (
59
- // @ts-expect-error - Type system cannot fully express this but it works correctly at runtime
60
- /* @__PURE__ */ t(
61
- u,
62
- {
63
- ...y,
64
- ...c,
65
- ref: l,
66
- children: s
67
- }
68
- )
69
- ) : /* @__PURE__ */ t(u, { ...c, ref: l, children: s }) }),
70
- /* @__PURE__ */ t(B, { children: x }),
71
- F
56
+ /* @__PURE__ */ r(L, { requiredVariant: x, children: c }),
57
+ t && /* @__PURE__ */ r(B, { children: t }),
58
+ /* @__PURE__ */ r(k, { children: /* @__PURE__ */ r(R, { ...h, ...V, ref: a, children: F }) }),
59
+ /* @__PURE__ */ r(M, { children: d }),
60
+ u
72
61
  ]
73
62
  }
74
63
  );
75
64
  }
76
- const v = P(function(l, r) {
77
- return q(l, r);
78
- });
79
- v.displayName = "MultiSelectField";
65
+ const q = (
66
+ // @ts-expect-error - forwardRef struggles with generic components
67
+ C(j)
68
+ );
69
+ q.displayName = "MultiSelectField";
80
70
  export {
81
- v as MultiSelectField
71
+ q as MultiSelectField
82
72
  };
@@ -0,0 +1,92 @@
1
+ import { ForwardedRef, ReactNode } from 'react';
2
+ import { LabelProps } from '../label/Label.js';
3
+ import { TanstackMultiSelectProps } from '../multi-select/TanstackMultiSelect.js';
4
+ export type TanstackMultiSelectFieldProps<TItems = undefined> = TanstackMultiSelectProps<TItems> & Pick<LabelProps, 'isRequired' | 'requiredVariant'> & {
5
+ /** The label for the multi-select field. */
6
+ label: string;
7
+ /** Helper text to display below the multi-select field. */
8
+ helperText?: ReactNode;
9
+ /** A contextual link to display below the multi-select field. */
10
+ contextualLink?: ReactNode;
11
+ };
12
+ type TanstackMultiSelectFieldComponent = <TItems = undefined>(props: TanstackMultiSelectFieldProps<TItems> & {
13
+ ref?: ForwardedRef<HTMLButtonElement>;
14
+ }) => React.JSX.Element;
15
+ /**
16
+ * The `TanstackMultiSelectField` component renders a full field (label, multi-select, feedback)
17
+ * wired to the TanStack Form context. It manages state and accessibility via the
18
+ * context provided by `useTanstackUnityForm` and `<form.AppField name="…">`.
19
+ @example
20
+ * ```tsx
21
+ * import { TanstackMultiSelectField } from "@/components/multi-select-field/TanstackMultiSelectField"
22
+ * import { useTanstackUnityForm } from "@/hooks/use-tanstack-form"
23
+ * import { MultiSelectOption } from "@/components/multi-select/parts/MultiSelectOption"
24
+ *
25
+ * function Example() {
26
+ * const schema = z.object({
27
+ * fruits: z.set(z.string()).min(1, 'Select at least one fruit'),
28
+ * })
29
+ *
30
+ * const form = useTanstackUnityForm({ validators: {
31
+ * onBlur: schema,
32
+ * } })
33
+ * return (
34
+ * <form>
35
+ * <form.AppField name="fruits">
36
+ * {() => (
37
+ * <TanstackMultiSelectField
38
+ * label="Favorite Fruits"
39
+ * helperText="Choose your favorites"
40
+ * placeholder="Select fruits..."
41
+ * >
42
+ * <MultiSelectOption value="apple">Apple</MultiSelectOption>
43
+ * <MultiSelectOption value="banana">Banana</MultiSelectOption>
44
+ * <MultiSelectOption value="orange">Orange</MultiSelectOption>
45
+ * </TanstackMultiSelectField>
46
+ * )}
47
+ * </form.AppField>
48
+ * </form>
49
+ * )
50
+ * }
51
+ * ```
52
+ * @example
53
+ * ```tsx
54
+ * interface Fruit { id: string; name: string }
55
+ * const fruits = new Set<Fruit>([...])
56
+ *
57
+ * function Example() {
58
+ * const schema = z.object({
59
+ * fruits: z.set(z.string()).min(1, 'Select at least one fruit'),
60
+ * })
61
+ *
62
+ * const form = useTanstackUnityForm({ validators: {
63
+ * onBlur: schema,
64
+ * } })
65
+ * return (
66
+ * <form>
67
+ * <form.AppField name="fruits">
68
+ * {() => (
69
+ * <TanstackMultiSelectField
70
+ * label="Favorite Fruits"
71
+ * items={fruits}
72
+ * getItemValue={fruit => fruit.id}
73
+ * renderValue={items => Array.from(items).map(i => i.name).join(', ')}
74
+ * >
75
+ * {fruit => (
76
+ * <MultiSelectOption value={fruit.id}>{fruit.name}</MultiSelectOption>
77
+ * )}
78
+ * </TanstackMultiSelectField>
79
+ * )}
80
+ * </form.AppField>
81
+ * </form>
82
+ * )
83
+ * }
84
+ * ```
85
+ * @remarks Migration from `MultiSelectField` (non‑TanStack):
86
+ * - Do not pass a `name` prop to the field: use `<form.AppField name="…">`.
87
+ * - `value`, `defaultValue`, `onChange`, and `isInvalid` are derived from the TanStack form context.
88
+ */
89
+ export declare const TanstackMultiSelectField: TanstackMultiSelectFieldComponent & {
90
+ displayName: string;
91
+ };
92
+ export {};