@payfit/unity-components 2.0.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 (353) hide show
  1. package/dist/esm/components/alert/Alert.js +41 -29
  2. package/dist/esm/components/alert/parts/AlertTitle.js +8 -8
  3. package/dist/esm/components/app-layout/AppLayout.d.ts +2 -0
  4. package/dist/esm/components/app-menu/parts/AppMenuFooter.js +23 -23
  5. package/dist/esm/components/app-menu/parts/AppMenuHeader.d.ts +1 -1
  6. package/dist/esm/components/app-menu/parts/AppMenuHeader.js +9 -9
  7. package/dist/esm/components/autocomplete/Autocomplete.d.ts +0 -9
  8. package/dist/esm/components/autocomplete/Autocomplete.js +54 -57
  9. package/dist/esm/components/autocomplete/parts/AutocompleteItem.js +8 -8
  10. package/dist/esm/components/avatar/Avatar.variants.js +1 -1
  11. package/dist/esm/components/avatar/parts/AvatarFallback.js +26 -27
  12. package/dist/esm/components/badge/Badge.js +1 -1
  13. package/dist/esm/components/breadcrumbs/Breadcrumbs.variant.js +1 -1
  14. package/dist/esm/components/button/Button.js +6 -6
  15. package/dist/esm/components/button/Button.variants.d.ts +1 -0
  16. package/dist/esm/components/button/Button.variants.js +22 -15
  17. package/dist/esm/components/card/Card.context.d.ts +5 -0
  18. package/dist/esm/components/card/Card.context.js +14 -0
  19. package/dist/esm/components/card/Card.d.ts +210 -0
  20. package/dist/esm/components/card/Card.js +93 -0
  21. package/dist/esm/components/card/parts/CardContent.d.ts +37 -0
  22. package/dist/esm/components/card/parts/CardContent.js +8 -0
  23. package/dist/esm/components/card/parts/CardTitle.d.ts +55 -0
  24. package/dist/esm/components/card/parts/CardTitle.js +33 -0
  25. package/dist/esm/components/checkbox/Checkbox.js +38 -30
  26. package/dist/esm/components/checkbox/Checkbox.variants.d.ts +9 -9
  27. package/dist/esm/components/checkbox/Checkbox.variants.js +23 -7
  28. package/dist/esm/components/checkbox/TanstackCheckbox.d.ts +28 -0
  29. package/dist/esm/components/checkbox/TanstackCheckbox.js +51 -0
  30. package/dist/esm/components/checkbox/parts/CheckboxIndicator.js +7 -7
  31. package/dist/esm/components/checkbox-field/CheckboxField.d.ts +2 -0
  32. package/dist/esm/components/checkbox-field/TanstackCheckboxField.d.ts +14 -0
  33. package/dist/esm/components/checkbox-field/TanstackCheckboxField.js +40 -0
  34. package/dist/esm/components/checkbox-group/TanstackCheckboxGroup.d.ts +4 -0
  35. package/dist/esm/components/checkbox-group/TanstackCheckboxGroup.js +37 -0
  36. package/dist/esm/components/checkbox-group-field/CheckboxGroupField.d.ts +2 -0
  37. package/dist/esm/components/checkbox-group-field/TanstackCheckGroupField.d.ts +72 -0
  38. package/dist/esm/components/checkbox-group-field/TanstackCheckGroupField.js +40 -0
  39. package/dist/esm/components/client-side-pagination/parts/PaginationNavButton.js +1 -1
  40. package/dist/esm/components/client-side-pagination/parts/RawPaginationLink.js +10 -10
  41. package/dist/esm/components/collapsible/parts/CollapsibleContent.js +5 -5
  42. package/dist/esm/components/collapsible/parts/CollapsibleTitle.js +8 -8
  43. package/dist/esm/components/data-table/DataTable.d.ts +109 -16
  44. package/dist/esm/components/data-table/DataTable.js +107 -93
  45. package/dist/esm/components/data-table/mocks/employee-data.d.ts +1 -0
  46. package/dist/esm/components/date-calendar/DateCalendar.js +1 -1
  47. package/dist/esm/components/date-calendar/parts/DateSegmentSelect.js +1 -1
  48. package/dist/esm/components/date-picker/DatePicker.d.ts +1 -1
  49. package/dist/esm/components/date-picker/DatePicker.js +59 -50
  50. package/dist/esm/components/date-picker/TanstackDatePicker.d.ts +22 -0
  51. package/dist/esm/components/date-picker/TanstackDatePicker.js +53 -0
  52. package/dist/esm/components/date-picker/parts/DateInput.js +4 -4
  53. package/dist/esm/components/date-picker-field/DatePickerField.d.ts +2 -0
  54. package/dist/esm/components/date-picker-field/TanstackDatePickerField.d.ts +71 -0
  55. package/dist/esm/components/date-picker-field/TanstackDatePickerField.js +41 -0
  56. package/dist/esm/components/definition-list/DefinitionList.context.d.ts +19 -0
  57. package/dist/esm/components/definition-list/DefinitionList.d.ts +24 -0
  58. package/dist/esm/components/definition-list/parts/DefinitionItem.d.ts +25 -0
  59. package/dist/esm/components/dialog/Dialog.d.ts +34 -22
  60. package/dist/esm/components/dialog/Dialog.js +90 -52
  61. package/dist/esm/components/dialog/parts/DialogActions.js +6 -6
  62. package/dist/esm/components/dialog/parts/DialogTitle.js +7 -4
  63. package/dist/esm/components/dialog/test-utils.d.ts +28 -0
  64. package/dist/esm/components/dialog/test-utils.js +78 -0
  65. package/dist/esm/components/error-state/ErrorState.js +7 -7
  66. package/dist/esm/components/filter/Filter.controls.d.ts +192 -0
  67. package/dist/esm/components/filter/Filter.controls.js +45 -0
  68. package/dist/esm/components/filter/Filter.d.ts +189 -0
  69. package/dist/esm/components/filter/Filter.js +147 -0
  70. package/dist/esm/components/filter/Filter.types.d.ts +121 -0
  71. package/dist/esm/components/filter/hooks/useFilterIds.d.ts +49 -0
  72. package/dist/esm/components/filter/hooks/useFilterIds.js +13 -0
  73. package/dist/esm/components/filter/hooks/useFilterState.d.ts +74 -0
  74. package/dist/esm/components/filter/hooks/useFilterState.js +23 -0
  75. package/dist/esm/components/filter/hooks/useFilterValue.d.ts +61 -0
  76. package/dist/esm/components/filter/hooks/useFilterValue.js +31 -0
  77. package/dist/esm/components/filter/parts/FilterButton.d.ts +75 -0
  78. package/dist/esm/components/filter/parts/FilterButton.js +55 -0
  79. package/dist/esm/components/filter/parts/FilterLabel.d.ts +96 -0
  80. package/dist/esm/components/filter/parts/FilterLabel.js +57 -0
  81. package/dist/esm/components/filter/parts/FilterPopover.d.ts +95 -0
  82. package/dist/esm/components/filter/parts/FilterPopover.js +79 -0
  83. package/dist/esm/components/filter/utils/value-formatters.d.ts +62 -0
  84. package/dist/esm/components/filter/utils/value-formatters.js +14 -0
  85. package/dist/esm/components/filter-toolbar/FilterToolbar.d.ts +110 -0
  86. package/dist/esm/components/filter-toolbar/FilterToolbar.js +172 -0
  87. package/dist/esm/components/filter-toolbar/FilterToolbar.types.d.ts +119 -0
  88. package/dist/esm/components/filter-toolbar/hooks/use-filter-toolbar-state.d.ts +96 -0
  89. package/dist/esm/components/filter-toolbar/hooks/use-filter-toolbar-state.js +132 -0
  90. package/dist/esm/components/filter-toolbar/parts/AddFilter.d.ts +63 -0
  91. package/dist/esm/components/filter-toolbar/parts/AddFilter.js +107 -0
  92. package/dist/esm/components/filter-toolbar/parts/AddFilterItem.d.ts +18 -0
  93. package/dist/esm/components/filter-toolbar/parts/AddFilterItem.js +18 -0
  94. package/dist/esm/components/filter-toolbar/utils/filter-adapters.d.ts +93 -0
  95. package/dist/esm/components/filter-toolbar/utils/filter-adapters.js +88 -0
  96. package/dist/esm/components/filter-toolbar/utils/normalize-filter-value.d.ts +24 -0
  97. package/dist/esm/components/filter-toolbar/utils/normalize-filter-value.js +19 -0
  98. package/dist/esm/components/form/Form.d.ts +2 -0
  99. package/dist/esm/components/form/TanstackForm.d.ts +24 -0
  100. package/dist/esm/components/form/TanstackForm.js +29 -0
  101. package/dist/esm/components/form-field/FormField.d.ts +2 -0
  102. package/dist/esm/components/form-field/TanstackFormField.context.d.ts +10 -0
  103. package/dist/esm/components/form-field/TanstackFormField.context.js +14 -0
  104. package/dist/esm/components/form-field/TanstackFormField.d.ts +49 -0
  105. package/dist/esm/components/form-field/TanstackFormField.js +46 -0
  106. package/dist/esm/components/form-field/parts/FormControl.d.ts +2 -0
  107. package/dist/esm/components/form-field/parts/FormFeedbackText.d.ts +2 -0
  108. package/dist/esm/components/form-field/parts/FormHelperText.d.ts +2 -0
  109. package/dist/esm/components/form-field/parts/FormLabel.d.ts +2 -0
  110. package/dist/esm/components/form-field/parts/RawFormContextualLink.d.ts +2 -0
  111. package/dist/esm/components/form-field/parts/TanstackFormFeedbackText.d.ts +12 -0
  112. package/dist/esm/components/form-field/parts/TanstackFormFeedbackText.js +32 -0
  113. package/dist/esm/components/form-field/parts/TanstackFormHelperText.d.ts +11 -0
  114. package/dist/esm/components/form-field/parts/TanstackFormHelperText.js +25 -0
  115. package/dist/esm/components/form-field/parts/TanstackFormLabel.d.ts +8 -0
  116. package/dist/esm/components/form-field/parts/TanstackFormLabel.js +26 -0
  117. package/dist/esm/components/form-field/parts/TanstackRawFormContextualLink.d.ts +26 -0
  118. package/dist/esm/components/form-field/parts/TanstackRawFormContextualLink.js +45 -0
  119. package/dist/esm/components/icon-button/CircularIconButton.d.ts +9 -9
  120. package/dist/esm/components/icon-button/CircularIconButton.js +53 -36
  121. package/dist/esm/components/icon-button/IconButton.variants.d.ts +1 -0
  122. package/dist/esm/components/icon-button/IconButton.variants.js +44 -28
  123. package/dist/esm/components/input/Input.js +36 -35
  124. package/dist/esm/components/input/TanstackInput.d.ts +22 -0
  125. package/dist/esm/components/input/TanstackInput.js +38 -0
  126. package/dist/esm/components/label/Label.js +12 -12
  127. package/dist/esm/components/link/RawLink.js +38 -31
  128. package/dist/esm/components/list-view/ListView.d.ts +56 -0
  129. package/dist/esm/components/list-view/ListView.fixtures.d.ts +20 -0
  130. package/dist/esm/components/list-view/ListView.js +44 -0
  131. package/dist/esm/components/list-view/parts/ListViewItemLabel.d.ts +34 -0
  132. package/dist/esm/components/list-view/parts/ListViewItemLabel.js +22 -0
  133. package/dist/esm/components/list-view/parts/ListViewItemText.d.ts +33 -0
  134. package/dist/esm/components/list-view/parts/ListViewItemText.js +22 -0
  135. package/dist/esm/components/list-view/parts/ListViewSection.d.ts +14 -0
  136. package/dist/esm/components/list-view/parts/ListViewSection.js +21 -0
  137. package/dist/esm/components/list-view/parts/RawListViewItem.d.ts +102 -0
  138. package/dist/esm/components/list-view/parts/RawListViewItem.js +80 -0
  139. package/dist/esm/components/multi-select/MultiSelect.d.ts +5 -7
  140. package/dist/esm/components/multi-select/MultiSelect.js +199 -176
  141. package/dist/esm/components/multi-select/MultiselectTypes.d.ts +114 -0
  142. package/dist/esm/components/multi-select/TanstackMultiSelect.d.ts +7 -0
  143. package/dist/esm/components/multi-select/TanstackMultiSelect.js +41 -0
  144. package/dist/esm/components/multi-select/parts/MultiSelectButton.d.ts +2 -0
  145. package/dist/esm/components/multi-select/parts/MultiSelectButton.js +62 -46
  146. package/dist/esm/components/multi-select/parts/MultiSelectPopover.js +15 -15
  147. package/dist/esm/components/multi-select-field/MultiSelectField.d.ts +45 -12
  148. package/dist/esm/components/multi-select-field/MultiSelectField.js +56 -66
  149. package/dist/esm/components/multi-select-field/TanstackMultiSelectField.d.ts +92 -0
  150. package/dist/esm/components/multi-select-field/TanstackMultiSelectField.js +48 -0
  151. package/dist/esm/components/multi-select-field/test-utils.d.ts +17 -0
  152. package/dist/esm/components/multi-select-field/test-utils.js +45 -0
  153. package/dist/esm/components/nav/parts/RawNavItem.js +6 -6
  154. package/dist/esm/components/navigation-card/NavigationCard.context.d.ts +31 -0
  155. package/dist/esm/components/navigation-card/NavigationCard.context.js +13 -0
  156. package/dist/esm/components/navigation-card/NavigationCard.d.ts +46 -0
  157. package/dist/esm/components/navigation-card/NavigationCard.js +62 -0
  158. package/dist/esm/components/navigation-card/NavigationCard.types.d.ts +37 -0
  159. package/dist/esm/components/navigation-card/NavigationCard.variants.d.ts +1147 -0
  160. package/dist/esm/components/navigation-card/NavigationCard.variants.js +164 -0
  161. package/dist/esm/components/navigation-card/parts/NavigationCardDescription.d.ts +39 -0
  162. package/dist/esm/components/navigation-card/parts/NavigationCardDescription.js +22 -0
  163. package/dist/esm/components/navigation-card/parts/NavigationCardGroup.d.ts +146 -0
  164. package/dist/esm/components/navigation-card/parts/NavigationCardGroup.js +93 -0
  165. package/dist/esm/components/navigation-card/parts/NavigationCardLabel.d.ts +32 -0
  166. package/dist/esm/components/navigation-card/parts/NavigationCardLabel.js +24 -0
  167. package/dist/esm/components/number-field/NumberField.d.ts +2 -0
  168. package/dist/esm/components/number-field/TanstackNumberField.d.ts +74 -0
  169. package/dist/esm/components/number-field/TanstackNumberField.js +44 -0
  170. package/dist/esm/components/number-input/NumberInput.js +31 -29
  171. package/dist/esm/components/number-input/TanstackNumberInput.d.ts +58 -0
  172. package/dist/esm/components/number-input/TanstackNumberInput.js +38 -0
  173. package/dist/esm/components/page/Page.js +12 -11
  174. package/dist/esm/components/pagination/parts/RawPaginationLink.js +22 -22
  175. package/dist/esm/components/pagination/parts/RawPaginationNext.js +13 -13
  176. package/dist/esm/components/pagination/parts/RawPaginationPrevious.js +10 -10
  177. package/dist/esm/components/payfit-brand/PayFitBrand.d.ts +4 -0
  178. package/dist/esm/components/payfit-brand/PayFitBrand.js +30 -22
  179. package/dist/esm/components/payfit-brand/PayFitPreprod.js +25 -25
  180. package/dist/esm/components/phone-number/PhoneNumberInput.d.ts +67 -0
  181. package/dist/esm/components/phone-number/PhoneNumberInput.js +322 -0
  182. package/dist/esm/components/phone-number/TanstackPhoneNumberInput.d.ts +64 -0
  183. package/dist/esm/components/phone-number/TanstackPhoneNumberInput.js +33 -0
  184. package/dist/esm/components/phone-number/parts/PhoneNumberItem.d.ts +42 -0
  185. package/dist/esm/components/phone-number/parts/PhoneNumberItem.js +68 -0
  186. package/dist/esm/components/phone-number/unknownFlag.svg.js +4 -0
  187. package/dist/esm/components/phone-number-field/TanstackPhoneNumberField.d.ts +15 -0
  188. package/dist/esm/components/phone-number-field/TanstackPhoneNumberField.js +32 -0
  189. package/dist/esm/components/pill/Pill.d.ts +2 -2
  190. package/dist/esm/components/pill/Pill.js +8 -8
  191. package/dist/esm/components/popover/Popover.js +6 -6
  192. package/dist/esm/components/promo-dialog/PromoDialog.d.ts +149 -0
  193. package/dist/esm/components/promo-dialog/PromoDialog.js +219 -0
  194. package/dist/esm/components/promo-dialog/parts/PromoDialogActions.d.ts +44 -0
  195. package/dist/esm/components/promo-dialog/parts/PromoDialogActions.js +29 -0
  196. package/dist/esm/components/promo-dialog/parts/PromoDialogContent.d.ts +43 -0
  197. package/dist/esm/components/promo-dialog/parts/PromoDialogContent.js +20 -0
  198. package/dist/esm/components/promo-dialog/parts/PromoDialogHero.d.ts +47 -0
  199. package/dist/esm/components/promo-dialog/parts/PromoDialogHero.js +25 -0
  200. package/dist/esm/components/promo-dialog/parts/PromoDialogSubtitle.d.ts +53 -0
  201. package/dist/esm/components/promo-dialog/parts/PromoDialogSubtitle.js +21 -0
  202. package/dist/esm/components/promo-dialog/parts/PromoDialogTitle.d.ts +6 -0
  203. package/dist/esm/components/promo-dialog/parts/PromoDialogTitle.js +18 -0
  204. package/dist/esm/components/radio-button-group/TanstackRadioButtonGroup.d.ts +13 -0
  205. package/dist/esm/components/radio-button-group/TanstackRadioButtonGroup.js +43 -0
  206. package/dist/esm/components/radio-button-group/parts/RadioButton.d.ts +29 -11
  207. package/dist/esm/components/radio-button-group/parts/RadioButton.js +53 -51
  208. package/dist/esm/components/radio-button-group-field/RadioButtonGroupField.d.ts +2 -0
  209. package/dist/esm/components/radio-button-group-field/TanstackRadioButtonGroupField.d.ts +13 -0
  210. package/dist/esm/components/radio-button-group-field/TanstackRadioButtonGroupField.js +38 -0
  211. package/dist/esm/components/search/Search.js +46 -46
  212. package/dist/esm/components/segmented-button-group/parts/ToggleButton.js +5 -5
  213. package/dist/esm/components/select/Select.d.ts +5 -4
  214. package/dist/esm/components/select/Select.js +53 -45
  215. package/dist/esm/components/select/TanstackSelect.d.ts +80 -0
  216. package/dist/esm/components/select/TanstackSelect.js +34 -0
  217. package/dist/esm/components/select/parts/SearchInput.d.ts +4 -1
  218. package/dist/esm/components/select/parts/SearchInput.js +49 -31
  219. package/dist/esm/components/select/parts/SelectButton.js +19 -17
  220. package/dist/esm/components/select-field/SelectField.d.ts +2 -0
  221. package/dist/esm/components/select-field/SelectField.js +8 -9
  222. package/dist/esm/components/select-field/TanstackSelectField.d.ts +124 -0
  223. package/dist/esm/components/select-field/TanstackSelectField.js +44 -0
  224. package/dist/esm/components/select-list/SelectList.d.ts +95 -0
  225. package/dist/esm/components/select-list/SelectList.js +79 -0
  226. package/dist/esm/components/select-list/SelectList.types.d.ts +29 -0
  227. package/dist/esm/components/select-list/constants.d.ts +36 -0
  228. package/dist/esm/components/select-list/constants.js +29 -0
  229. package/dist/esm/components/select-list/helpers.d.ts +42 -0
  230. package/dist/esm/components/select-list/helpers.js +48 -0
  231. package/dist/esm/components/select-list/hooks/useControlledSelection.d.ts +23 -0
  232. package/dist/esm/components/select-list/hooks/useControlledSelection.js +16 -0
  233. package/dist/esm/components/select-list/hooks/useSelectedFirstSorting.d.ts +23 -0
  234. package/dist/esm/components/select-list/hooks/useSelectedFirstSorting.js +31 -0
  235. package/dist/esm/components/select-list/parts/SelectListEmptyState.d.ts +8 -0
  236. package/dist/esm/components/select-list/parts/SelectListEmptyState.js +25 -0
  237. package/dist/esm/components/select-list/parts/SelectListOptGroup.d.ts +118 -0
  238. package/dist/esm/components/select-list/parts/SelectListOptGroup.js +28 -0
  239. package/dist/esm/components/select-list/parts/SelectListOption.d.ts +24 -0
  240. package/dist/esm/components/select-list/parts/SelectListOption.js +72 -0
  241. package/dist/esm/components/select-list/parts/SelectListSearchInput.d.ts +2 -0
  242. package/dist/esm/components/select-list/parts/SelectListSearchInput.js +43 -0
  243. package/dist/esm/components/select-list/parts/SelectedItemsSection.d.ts +54 -0
  244. package/dist/esm/components/select-list/parts/SelectedItemsSection.js +35 -0
  245. package/dist/esm/components/select-list/utils/partition.d.ts +13 -0
  246. package/dist/esm/components/select-list/utils/partition.js +9 -0
  247. package/dist/esm/components/selectable-button-group/SelectableButtonGroup.context.d.ts +1 -5
  248. package/dist/esm/components/selectable-button-group/SelectableButtonGroup.d.ts +6 -1
  249. package/dist/esm/components/selectable-button-group/SelectableButtonGroup.js +23 -23
  250. package/dist/esm/components/selectable-button-group/TanstackSelectableButtonGroup.d.ts +27 -0
  251. package/dist/esm/components/selectable-button-group/TanstackSelectableButtonGroup.js +34 -0
  252. package/dist/esm/components/selectable-button-group/parts/SelectableButton.d.ts +1 -16
  253. package/dist/esm/components/selectable-button-group/parts/SelectableButton.js +56 -57
  254. package/dist/esm/components/selectable-button-group-field/SelectableButtonGroupField.d.ts +2 -0
  255. package/dist/esm/components/selectable-button-group-field/TanstackSelectableButtonGroupField.d.ts +81 -0
  256. package/dist/esm/components/selectable-button-group-field/TanstackSelectableButtonGroupField.js +47 -0
  257. package/dist/esm/components/selectable-card/internals/Description.js +1 -1
  258. package/dist/esm/components/selectable-card/selectable-card-checkbox-group/SelectableCardCheckboxGroup.js +1 -1
  259. package/dist/esm/components/selectable-card/selectable-card-checkbox-group/TanstackSelectableCardCheckboxGroup.d.ts +26 -0
  260. package/dist/esm/components/selectable-card/selectable-card-checkbox-group/TanstackSelectableCardCheckboxGroup.js +32 -0
  261. package/dist/esm/components/selectable-card/selectable-card-checkbox-group/parts/SelectableCardCheckbox.js +24 -24
  262. package/dist/esm/components/selectable-card/selectable-card-radio-group/SelectableCardRadioGroup.d.ts +2 -0
  263. package/dist/esm/components/selectable-card/selectable-card-radio-group/SelectableCardRadioGroup.js +12 -14
  264. package/dist/esm/components/selectable-card/selectable-card-radio-group/TanstackSelectableCardRadioGroup.d.ts +28 -0
  265. package/dist/esm/components/selectable-card/selectable-card-radio-group/TanstackSelectableCardRadioGroup.js +32 -0
  266. package/dist/esm/components/selectable-card/selectable-card-radio-group/parts/RadioIndicator.js +14 -13
  267. package/dist/esm/components/selectable-card/selectable-card-radio-group/parts/SelectableCardRadio.js +27 -25
  268. package/dist/esm/components/selectable-card/selectableCard.variant.js +5 -5
  269. package/dist/esm/components/selectable-card-checkbox-group-field/SelectableCardCheckboxGroupField.d.ts +2 -0
  270. package/dist/esm/components/selectable-card-checkbox-group-field/TanstackSelectableCardCheckboxGroupField.d.ts +10 -0
  271. package/dist/esm/components/selectable-card-checkbox-group-field/TanstackSelectableCardCheckboxGroupField.js +38 -0
  272. package/dist/esm/components/selectable-card-radio-group-field/SelectableCardRadioGroupField.d.ts +2 -0
  273. package/dist/esm/components/selectable-card-radio-group-field/TanstackSelectableCardRadioGroupField.d.ts +10 -0
  274. package/dist/esm/components/selectable-card-radio-group-field/TanstackSelectableCardRadioGroupField.js +38 -0
  275. package/dist/esm/components/table/Table.context.d.ts +5 -0
  276. package/dist/esm/components/table/Table.context.js +14 -13
  277. package/dist/esm/components/table/Table.d.ts +93 -0
  278. package/dist/esm/components/table/Table.js +135 -107
  279. package/dist/esm/components/table/parts/TableBody.js +83 -21
  280. package/dist/esm/components/table/parts/TableEmptyState.js +6 -6
  281. package/dist/esm/components/table/parts/TableHeader.js +1 -1
  282. package/dist/esm/components/table/parts/TablePagination.js +1 -1
  283. package/dist/esm/components/table/parts/TableRow.js +1 -0
  284. package/dist/esm/components/tabs/Tabs.variant.d.ts +0 -6
  285. package/dist/esm/components/tabs/Tabs.variant.js +11 -12
  286. package/dist/esm/components/task-menu/parts/RawSubTask.js +26 -26
  287. package/dist/esm/components/task-menu/parts/RawTask.js +32 -28
  288. package/dist/esm/components/task-menu/parts/TaskGroup.js +30 -26
  289. package/dist/esm/components/task-menu/parts/task.variants.js +4 -2
  290. package/dist/esm/components/text/Text.d.ts +11 -1
  291. package/dist/esm/components/text/Text.js +41 -31
  292. package/dist/esm/components/text/Text.variants.d.ts +12 -0
  293. package/dist/esm/components/text/Text.variants.js +4 -0
  294. package/dist/esm/components/text-area/TanstackTextArea.d.ts +21 -0
  295. package/dist/esm/components/text-area/TanstackTextArea.js +35 -0
  296. package/dist/esm/components/text-area/TextArea.js +31 -29
  297. package/dist/esm/components/text-field/TanstackTextField.d.ts +79 -0
  298. package/dist/esm/components/text-field/TanstackTextField.js +60 -0
  299. package/dist/esm/components/text-field/TextField.d.ts +2 -0
  300. package/dist/esm/components/toast/UnityToast.js +5 -5
  301. package/dist/esm/components/toast/test-utils.d.ts +36 -0
  302. package/dist/esm/components/toast/test-utils.js +118 -0
  303. package/dist/esm/components/toggle-switch/TanstackToggleSwitch.d.ts +46 -0
  304. package/dist/esm/components/toggle-switch/TanstackToggleSwitch.js +25 -0
  305. package/dist/esm/components/toggle-switch/ToggleSwitch.d.ts +21 -9
  306. package/dist/esm/components/toggle-switch/ToggleSwitch.js +71 -32
  307. package/dist/esm/components/toggle-switch-field/TanstackToggleSwitchField.d.ts +11 -0
  308. package/dist/esm/components/toggle-switch-field/TanstackToggleSwitchField.js +34 -0
  309. package/dist/esm/components/toggle-switch-field/ToggleSwitchField.d.ts +2 -0
  310. package/dist/esm/components/toggle-switch-group/TanstackToggleSwitchGroup.d.ts +57 -0
  311. package/dist/esm/components/toggle-switch-group/TanstackToggleSwitchGroup.js +23 -0
  312. package/dist/esm/components/toggle-switch-group/ToggleSwitchGroup.js +1 -1
  313. package/dist/esm/components/toggle-switch-group-field/TanstackToggleSwitchGroupField.d.ts +19 -0
  314. package/dist/esm/components/toggle-switch-group-field/TanstackToggleSwitchGroupField.js +50 -0
  315. package/dist/esm/components/toggle-switch-group-field/ToggleSwitchGroupField.d.ts +2 -0
  316. package/dist/esm/docs/{table → examples/data}/mocks/employee-columns.d.ts +1 -1
  317. package/dist/esm/hooks/tanstack-form-context.d.ts +1 -0
  318. package/dist/esm/hooks/tanstack-form-context.js +8 -0
  319. package/dist/esm/hooks/use-form.d.ts +2 -0
  320. package/dist/esm/hooks/use-has-scroll.d.ts +71 -0
  321. package/dist/esm/hooks/use-has-scroll.js +75 -0
  322. package/dist/esm/hooks/use-tanstack-form.d.ts +369 -0
  323. package/dist/esm/hooks/use-tanstack-form.js +209 -0
  324. package/dist/esm/index.d.ts +44 -20
  325. package/dist/esm/index.js +457 -394
  326. package/dist/esm/index.storybook-testing.d.ts +3 -0
  327. package/dist/esm/integrations/tanstack-router/components/form-contextual-link/FormContextualLink.d.ts +6 -1
  328. package/dist/esm/integrations/tanstack-router/components/form-contextual-link/TanstackFormContextualLink.d.ts +43 -0
  329. package/dist/esm/integrations/tanstack-router/components/list-view/ListView.d.ts +34 -0
  330. package/dist/esm/integrations/tanstack-router/components/list-view/ListView.js +25 -0
  331. package/dist/esm/integrations/tanstack-router/components/list-view/parts/ListViewItem.d.ts +51 -0
  332. package/dist/esm/integrations/tanstack-router/components/list-view/parts/ListViewItem.js +32 -0
  333. package/dist/esm/integrations/tanstack-router/components/navigation-card/NavigationCard.d.ts +73 -0
  334. package/dist/esm/integrations/tanstack-router/components/navigation-card/NavigationCard.js +37 -0
  335. package/dist/esm/integrations/tanstack-router/index.d.ts +3 -0
  336. package/dist/esm/integrations/tanstack-router/utils/decorators.d.ts +1 -1
  337. package/dist/esm/integrations/tanstack-router.js +32 -26
  338. package/dist/esm/mocks/employees.d.ts +1 -5
  339. package/dist/esm/storybook-testing.js +8 -2
  340. package/dist/esm/storybook-utilities/previewTransform.d.ts +1 -0
  341. package/dist/esm/utils/scroll-detection.d.ts +77 -0
  342. package/dist/esm/utils/scroll-detection.js +33 -0
  343. package/dist/esm/utils/spacing.d.ts +63 -0
  344. package/dist/esm/utils/spacing.js +15 -0
  345. package/i18n/en-GB.json +21 -8
  346. package/i18n/es-ES.json +23 -10
  347. package/i18n/fr-FR.json +24 -11
  348. package/package.json +41 -42
  349. package/dist/esm/components/multi-select/Multiselect.types.d.ts +0 -109
  350. package/dist/esm/integrations/react-router/v5/UnityReactRouterV5Provider.d.ts +0 -6
  351. package/dist/esm/integrations/react-router/v5/UnityReactRouterV5Provider.js +0 -28
  352. package/dist/esm/integrations/react-router/v5/index.d.ts +0 -1
  353. package/dist/esm/integrations/react-router/v5.js +0 -4
@@ -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 {};