@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
@@ -1,72 +1,110 @@
1
- import { jsx as o } from "react/jsx-runtime";
2
- import { Children as i, isValidElement as t } from "react";
3
- import { uyTv as s } from "@payfit/unity-themes";
4
- import { useId as g } from "react-aria";
5
- import { ModalOverlay as p, Modal as f, DialogContext as c, Dialog as b, DialogTrigger as x } from "react-aria-components";
6
- import { DialogTrigger as E } from "react-aria-components";
7
- import { DialogActions as D } from "./parts/DialogActions.js";
8
- import { DialogButton as v } from "./parts/DialogActions/DialogButton.js";
9
- const w = s({
1
+ import { jsx as o, jsxs as c } from "react/jsx-runtime";
2
+ import { Children as l, isValidElement as i } from "react";
3
+ import { uyTv as f } from "@payfit/unity-themes";
4
+ import { useId as w } from "react-aria";
5
+ import { ModalOverlay as x, Modal as v, DialogContext as h, Dialog as b, DialogTrigger as D } from "react-aria-components";
6
+ import { DialogTrigger as H } from "react-aria-components";
7
+ import { useIntl as z } from "react-intl";
8
+ import { CircularIconButton as I } from "../icon-button/CircularIconButton.js";
9
+ import { DialogActions as N } from "./parts/DialogActions.js";
10
+ import { DialogButton as C } from "./parts/DialogActions/DialogButton.js";
11
+ const T = f({
10
12
  slots: {
11
13
  overlay: [
14
+ "uy:@container",
12
15
  "uy:fixed uy:inset-0 uy:z-30 uy:overflow-y-auto",
13
- "uy:flex uy:min-h-full uy:items-center uy:justify-center uy:text-center",
14
- "uy:backdrop-blur-sm uy:bg-utility-backdrop"
16
+ "uy:min-h-full",
17
+ "uy:flex uy:items-end uy:md:items-center uy:md:justify-center uy:md:text-center",
18
+ "uy:bg-utility-backdrop",
19
+ "uy:data-[entering]:animate-fade-in uy:data-[exiting]:animate-fade-out"
15
20
  ],
16
21
  wrapper: [
17
- "uy:w-full uy:md:max-w-[640px]",
18
- "uy:m-400 uy:md:m-0",
19
- "uy:overflow-hidden uy:rounded-200 uy:bg-white uy:p-300 uy:md:p-400",
22
+ "uy:w-full uy:max-h-[95dvh] uy:md:max-h-[82dvh] uy:relative uy:isolate",
23
+ "uy:m-0",
24
+ "uy:rounded-t-300 uy:md:rounded-200",
25
+ "uy:overflow-hidden uy:bg-white uy:p-300 uy:pt-400 uy:md:p-400",
20
26
  "uy:text-left uy:align-middle uy:shadow-floating",
21
- "uy:bg-surface-neutral"
27
+ "uy:bg-surface-neutral",
28
+ "uy:data-[entering]:animate-slide-up-fade-in uy:data-[exiting]:animate-slide-down-fade-out",
29
+ "uy:md:[animation-delay:100ms] uy:md:data-[entering]:animate-zoom-in uy:md:data-[exiting]:animate-zoom-out"
22
30
  ],
23
- content: [
24
- "uy:outline-none uy:relative uy:flex uy:flex-col uy:gap-300 uy:md:gap-400"
25
- ]
31
+ content: ["uy:group/dialog", "uy:outline-none uy:relative"],
32
+ dismissIcon: ["uy:absolute uy:right-200 uy:top-200 uy:z-20"]
33
+ },
34
+ variants: {
35
+ size: {
36
+ sm: {
37
+ wrapper: "uy:md:w-4/12 uy:md:max-w-62.5"
38
+ },
39
+ md: {
40
+ wrapper: "uy:md:w-5/12 uy:md:max-w-80"
41
+ }
42
+ }
43
+ },
44
+ defaultVariants: {
45
+ size: "md"
26
46
  }
27
- }), h = (e) => {
28
- const a = i.toArray(e).find(
29
- (r) => t(r) && r.type === D
47
+ }), j = (e) => {
48
+ const t = l.toArray(e).find(
49
+ (a) => i(a) && a.type === N
30
50
  );
31
- return t(a) ? i.toArray(a.props.children).some(
32
- (r) => t(
33
- r
34
- ) && r.type === v && r.props.variant === "danger"
51
+ return i(t) ? l.toArray(t.props.children).some(
52
+ (a) => i(
53
+ a
54
+ ) && a.type === C && a.props.variant === "danger"
35
55
  ) : !1;
36
56
  };
37
- function N({
57
+ function B({
38
58
  children: e,
39
- isOpen: a,
40
- onOpenChange: r,
41
- isDismissable: u = !0,
42
- ...y
59
+ isOpen: t,
60
+ onOpenChange: a,
61
+ isDismissable: r = !0,
62
+ size: n = "md",
63
+ ...d
43
64
  }) {
44
- const l = g(), { overlay: n, wrapper: d, content: m } = w();
65
+ const m = z(), u = w(), { overlay: y, wrapper: s, content: g, dismissIcon: p } = T({ size: n });
45
66
  return /* @__PURE__ */ o(
46
- p,
67
+ x,
47
68
  {
48
- isDismissable: u,
49
- isOpen: a,
50
- onOpenChange: r,
51
- className: n(),
52
- children: /* @__PURE__ */ o(f, { className: d(), "data-unity-dialog": !0, "data-dd-privacy": "allow", children: /* @__PURE__ */ o(c.Provider, { value: { "aria-describedby": l }, children: /* @__PURE__ */ o(
53
- b,
54
- {
55
- role: h(e) ? "alertdialog" : "dialog",
56
- "aria-modal": "true",
57
- className: m(),
58
- "aria-label": y["aria-label"],
59
- "aria-describedby": l,
60
- children: e
61
- }
62
- ) }) })
69
+ isDismissable: r,
70
+ isOpen: t,
71
+ onOpenChange: a,
72
+ className: y(),
73
+ children: /* @__PURE__ */ c(v, { className: s(), "data-unity-dialog": !0, "data-dd-privacy": "allow", children: [
74
+ r && /* @__PURE__ */ o(
75
+ I,
76
+ {
77
+ icon: "CloseOutlined",
78
+ color: "content.neutral.low",
79
+ title: m.formatMessage({
80
+ id: "unity:component:common:close:label"
81
+ }),
82
+ className: p(),
83
+ slot: "close",
84
+ size: "large"
85
+ }
86
+ ),
87
+ /* @__PURE__ */ o(h.Provider, { value: { "aria-describedby": u }, children: /* @__PURE__ */ o(
88
+ b,
89
+ {
90
+ role: j(e) ? "alertdialog" : "dialog",
91
+ "aria-modal": "true",
92
+ className: g(),
93
+ "aria-label": d["aria-label"],
94
+ "aria-describedby": u,
95
+ "data-unity-slot": "dialog",
96
+ "data-unity-size": n,
97
+ children: e
98
+ }
99
+ ) })
100
+ ] })
63
101
  }
64
102
  );
65
103
  }
66
- N.displayName = "Dialog";
67
- x.displayName = "DialogTrigger";
104
+ B.displayName = "Dialog";
105
+ D.displayName = "DialogTrigger";
68
106
  export {
69
- N as Dialog,
70
- E as DialogTrigger,
71
- w as dialog
107
+ B as Dialog,
108
+ H as DialogTrigger,
109
+ T as dialog
72
110
  };
@@ -1,13 +1,13 @@
1
- import { jsx as a } from "react/jsx-runtime";
2
- const s = ({ children: t }) => /* @__PURE__ */ a(
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ const a = ({ children: e }) => /* @__PURE__ */ t(
3
3
  "div",
4
4
  {
5
- className: "uy:flex uy:justify-end uy:items-start uy:gap-100 uy:self-stretch",
5
+ className: "uy:flex uy:flex-col-reverse uy:md:flex-row uy:md:justify-end uy:md:items-start uy:gap-150 uy:md:gap-100 uy:self-stretch uy:mt-500",
6
6
  "data-dd-privacy": "allow",
7
- children: t
7
+ children: e
8
8
  }
9
9
  );
10
- s.displayName = "DialogActions";
10
+ a.displayName = "DialogActions";
11
11
  export {
12
- s as DialogActions
12
+ a as DialogActions
13
13
  };
@@ -1,7 +1,10 @@
1
1
  import { jsx as t } from "react/jsx-runtime";
2
- import { Heading as o } from "react-aria-components";
3
- const i = ({ children: a }) => /* @__PURE__ */ t(o, { slot: "title", className: "uy:typography-h2", "data-dd-privacy": "allow", children: a });
4
- i.displayName = "DialogTitle";
2
+ import { uyTv as a } from "@payfit/unity-themes";
3
+ import { Heading as i } from "react-aria-components";
4
+ const l = a({
5
+ base: ["uy:typography-h2 uy:md:typography-h3", "uy:mb-200"]
6
+ }), r = ({ children: o }) => /* @__PURE__ */ t(i, { slot: "title", className: l(), "data-dd-privacy": "allow", children: o });
7
+ r.displayName = "DialogTitle";
5
8
  export {
6
- i as DialogTitle
9
+ r as DialogTitle
7
10
  };
@@ -0,0 +1,28 @@
1
+ import { PlayCtx } from '../../types/testing.js';
2
+ /**
3
+ * Factory function returning a set of helpers to test Unity Dialog components.
4
+ * It wires Storybook's `Play` context with convenient utilities to query,
5
+ * assert, and interact with dialogs rendered on the canvas.
6
+ * @param context The Storybook play context used to group steps and actions.
7
+ * @returns An object of helpers: `findDialog`, `closeDialog`, `assertDialogIsClosed`, `assertElementExistsInDialog`, and `triggerPrimaryAction`.
8
+ */
9
+ export declare const getTestingUtilsDialog: (context: PlayCtx) => {
10
+ findDialog: ({ title }: {
11
+ title: string;
12
+ }) => Promise<HTMLElement>;
13
+ closeDialog: ({ title, closeButtonLabel, }: {
14
+ title: string;
15
+ closeButtonLabel: string;
16
+ }) => Promise<void>;
17
+ assertDialogIsClosed: (dialog: HTMLElement) => Promise<void>;
18
+ assertElementExistsInDialog: ({ title, content, primaryActionLabel, secondaryActionLabel, }: {
19
+ title: string;
20
+ content?: string;
21
+ primaryActionLabel?: string;
22
+ secondaryActionLabel?: string;
23
+ }) => Promise<void>;
24
+ triggerPrimaryAction: ({ title, primaryActionLabel, }: {
25
+ title: string;
26
+ primaryActionLabel: string;
27
+ }) => Promise<void>;
28
+ };
@@ -0,0 +1,78 @@
1
+ import { userEvent as c, within as o, expect as n, waitFor as r, screen as w } from "storybook/test";
2
+ const f = (i) => {
3
+ const s = async ({ title: a }) => await r(() => {
4
+ const t = w.queryByRole("dialog", { name: a }) ?? w.queryByRole("alertdialog", { name: a });
5
+ if (!t)
6
+ throw new Error(`Dialog with title: "${a}" not found in the page`);
7
+ return t;
8
+ }), y = async (a, t) => {
9
+ await c.click(
10
+ o(a).getByRole("button", {
11
+ name: t
12
+ }),
13
+ { delay: 100 }
14
+ );
15
+ };
16
+ return {
17
+ findDialog: s,
18
+ closeDialog: async ({
19
+ title: a,
20
+ closeButtonLabel: t
21
+ }) => {
22
+ await i.step("Close dialog", async () => {
23
+ const e = await s({ title: a });
24
+ await y(e, t);
25
+ });
26
+ },
27
+ assertDialogIsClosed: async (a) => {
28
+ await r(
29
+ async () => {
30
+ await n(a).not.toBeInTheDocument();
31
+ },
32
+ { timeout: 1e3 }
33
+ );
34
+ },
35
+ assertElementExistsInDialog: async ({
36
+ title: a,
37
+ content: t,
38
+ primaryActionLabel: e,
39
+ secondaryActionLabel: g
40
+ }) => {
41
+ const l = await s({ title: a });
42
+ t && await i.step(`Check if "${t}" is in the dialog`, async () => {
43
+ await n(o(l).getByText(t)).toBeInTheDocument();
44
+ }), e && await i.step(
45
+ `Check if "${e}" is in the dialog`,
46
+ async () => {
47
+ await n(
48
+ o(l).getByRole("button", { name: e })
49
+ ).toBeInTheDocument();
50
+ }
51
+ ), g && await i.step(
52
+ `Check if "${g}" is in the dialog`,
53
+ async () => {
54
+ await n(
55
+ o(l).getByRole("button", { name: g })
56
+ ).toBeInTheDocument();
57
+ }
58
+ );
59
+ },
60
+ triggerPrimaryAction: async ({
61
+ title: a,
62
+ primaryActionLabel: t
63
+ }) => {
64
+ const e = await s({ title: a });
65
+ await i.step(
66
+ `Trigger the primary action "${t}" of the dialog`,
67
+ async () => {
68
+ await c.click(
69
+ o(e).getByRole("button", { name: t })
70
+ );
71
+ }
72
+ );
73
+ }
74
+ };
75
+ };
76
+ export {
77
+ f as getTestingUtilsDialog
78
+ };
@@ -77,7 +77,7 @@ const ee = W({
77
77
  ] });
78
78
  }, te = (t, n) => {
79
79
  const i = t.backButtonLabel ?? n?.backButtonLabel;
80
- return /* @__PURE__ */ e("div", { className: "uy:mt-200", children: /* @__PURE__ */ e(
80
+ return /* @__PURE__ */ e("div", { className: "uy:mt-200 uy:@section:block uy:hidden", children: /* @__PURE__ */ e(
81
81
  h,
82
82
  {
83
83
  onClick: () => {
@@ -114,7 +114,7 @@ const ee = W({
114
114
  h2: P,
115
115
  h3: z,
116
116
  h4: Q
117
- } = ee(), l = V(), q = _(l), y = K(null), { level: p } = X({ ref: y }), A = O(
117
+ } = ee(), l = V(), q = _(l), y = K(null), { level: d } = X({ ref: y }), A = O(
118
118
  (c) => {
119
119
  y.current = c, n && (typeof n == "function" ? n(c) : n.current = c);
120
120
  },
@@ -122,19 +122,19 @@ const ee = W({
122
122
  );
123
123
  let a = m === "404" ? "404" : "unknown";
124
124
  m === "generic" && C && (a = "known");
125
- const o = q.get(a), d = b ?? o?.illustration, f = i ?? o?.icon, F = g ?? o?.buttonLabel, s = x ?? o?.mainTitle, G = k ?? o?.mainDescription, H = w ?? o?.mainDescriptionComponent;
125
+ const o = q.get(a), p = b ?? o?.illustration, f = i ?? o?.icon, F = g ?? o?.buttonLabel, s = x ?? o?.mainTitle, G = k ?? o?.mainDescription, H = w ?? o?.mainDescriptionComponent;
126
126
  return /* @__PURE__ */ e(
127
127
  "div",
128
128
  {
129
129
  role: N,
130
130
  className: E(),
131
131
  ref: A,
132
- "data-container-level": p,
132
+ "data-container-level": d,
133
133
  children: /* @__PURE__ */ e("div", { className: B(), children: /* @__PURE__ */ u("div", { className: D(), children: [
134
- d && /* @__PURE__ */ e(
134
+ p && /* @__PURE__ */ e(
135
135
  U,
136
136
  {
137
- src: d,
137
+ src: p,
138
138
  variant: "picture",
139
139
  alt: l.formatMessage({
140
140
  id: "unity:component:error-state:common:illustration:alt",
@@ -176,7 +176,7 @@ const ee = W({
176
176
  /* @__PURE__ */ e(
177
177
  h,
178
178
  {
179
- variant: p === "component" ? "ghost" : "primary",
179
+ variant: d === "component" ? "ghost" : "primary",
180
180
  onPress: v,
181
181
  children: F
182
182
  }
@@ -0,0 +1,192 @@
1
+ import { Selection } from 'react-aria-components';
2
+ import { SelectListProps } from '../select-list/SelectList.js';
3
+ import { FilterProps } from './Filter.types.js';
4
+ /**
5
+ * Represents a single selectable item in a filter.
6
+ *
7
+ * Use this type to define the data structure for individual options in your filter.
8
+ * Each item must have a unique `id` and a human-readable `label`.
9
+ * @example
10
+ * ```tsx
11
+ * const statusItems: FilterItem[] = [
12
+ * { id: 'active', label: 'Active' },
13
+ * { id: 'inactive', label: 'Inactive' },
14
+ * { id: 'pending', label: 'Pending' },
15
+ * ]
16
+ * ```
17
+ */
18
+ export interface FilterItem {
19
+ /**
20
+ * Unique identifier for the item. Used as the value in selections.
21
+ */
22
+ id: string;
23
+ /**
24
+ * Human-readable label displayed to users.
25
+ */
26
+ label: string;
27
+ }
28
+ /**
29
+ * Represents a group of related filter items.
30
+ *
31
+ * Use this type to organize filter options into logical categories, improving UX when
32
+ * dealing with many options. Groups are rendered with a header label and contain multiple
33
+ * child items.
34
+ * @example
35
+ * ```tsx
36
+ * const departmentGroups: FilterItemGroup[] = [
37
+ * {
38
+ * id: 'business',
39
+ * label: 'Business',
40
+ * children: [
41
+ * { id: 'sales', label: 'Sales' },
42
+ * { id: 'marketing', label: 'Marketing' },
43
+ * ],
44
+ * },
45
+ * {
46
+ * id: 'tech',
47
+ * label: 'Tech',
48
+ * children: [
49
+ * { id: 'engineering', label: 'Engineering' },
50
+ * { id: 'product', label: 'Product' },
51
+ * ],
52
+ * },
53
+ * ]
54
+ * ```
55
+ */
56
+ export interface FilterItemGroup {
57
+ /**
58
+ * Unique identifier for the group.
59
+ */
60
+ id: string;
61
+ /**
62
+ * Label for the group header.
63
+ */
64
+ label: string;
65
+ /**
66
+ * Array of items belonging to this group.
67
+ */
68
+ children: FilterItem[];
69
+ }
70
+ /**
71
+ * Creates a pre-configured SelectList control for use with the Filter component.
72
+ *
73
+ * This helper function simplifies the most common filter use case: selecting items from a list.
74
+ * It handles the rendering of SelectList with proper multi-select behavior, keyboard navigation,
75
+ * and support for both flat lists and grouped items. Use this function to quickly create filter
76
+ * controls without manually managing SelectList configuration.
77
+ *
78
+ * The function returns a render function compatible with the Filter component's `renderControl` prop.
79
+ * It automatically configures the SelectList with sensible defaults: multiple selection, selected items
80
+ * sorted first, and proper accessibility attributes.
81
+ * @template TFilterType - The type of the filter value (defaults to Selection from React Aria)
82
+ * @template TItemType - The type of items in the list (FilterItem or FilterItemGroup)
83
+ * @param items - An iterable collection of items or item groups to display in the list
84
+ * @param props - Additional props to pass to the SelectList component (excluding items, value,
85
+ * onChange, and children which are managed internally)
86
+ * @returns A render function that creates a SelectList with the provided items and configuration
87
+ * @example
88
+ * ```tsx
89
+ * import { Filter, selectListFilter } from '@payfit/unity-components'
90
+ * import { useState } from 'react'
91
+ *
92
+ * // Simple flat list
93
+ * const statusItems = [
94
+ * { id: 'active', label: 'Active' },
95
+ * { id: 'inactive', label: 'Inactive' },
96
+ * { id: 'pending', label: 'Pending' },
97
+ * ]
98
+ *
99
+ * function StatusFilter() {
100
+ * const [value, setValue] = useState<Set<string>>(new Set())
101
+ *
102
+ * return (
103
+ * <Filter
104
+ * label="Status"
105
+ * value={value}
106
+ * onChange={setValue}
107
+ * renderControl={selectListFilter(statusItems, {})}
108
+ * />
109
+ * )
110
+ * }
111
+ * ```
112
+ * @example
113
+ * ```tsx
114
+ * // Grouped list with custom aria-label
115
+ * const departmentGroups = [
116
+ * {
117
+ * id: 'business',
118
+ * label: 'Business',
119
+ * children: [
120
+ * { id: 'sales', label: 'Sales' },
121
+ * { id: 'marketing', label: 'Marketing' },
122
+ * ],
123
+ * },
124
+ * {
125
+ * id: 'tech',
126
+ * label: 'Tech',
127
+ * children: [
128
+ * { id: 'engineering', label: 'Engineering' },
129
+ * { id: 'product', label: 'Product' },
130
+ * ],
131
+ * },
132
+ * ]
133
+ *
134
+ * function DepartmentFilter() {
135
+ * const [value, setValue] = useState<Set<string>>(new Set())
136
+ *
137
+ * return (
138
+ * <Filter
139
+ * label="Departments"
140
+ * value={value}
141
+ * onChange={setValue}
142
+ * renderControl={selectListFilter(departmentGroups, {
143
+ * 'aria-label': 'Select departments',
144
+ * })}
145
+ * />
146
+ * )
147
+ * }
148
+ * ```
149
+ * @remarks
150
+ * - The returned SelectList is configured with `selectionMode="multiple"` by default
151
+ * - Selected items are automatically sorted to the top of the list using `sortSelectedFirst`
152
+ * - The escape key behavior is set to `"none"` to prevent closing the filter popover accidentally
153
+ * - A maximum height of 300px is applied with scrolling enabled for long lists
154
+ * - Both flat lists (FilterItem[]) and grouped lists (FilterItemGroup[]) are supported
155
+ */
156
+ export declare function selectListFilter<TFilterType extends Selection = Selection, TItemType extends FilterItem | FilterItemGroup = FilterItem | FilterItemGroup>(items: Iterable<TItemType>, props: Omit<SelectListProps<TItemType>, 'items' | 'value' | 'onChange' | 'children'>): (value: TFilterType, onChange: FilterProps<TFilterType>["onChange"]) => import("react/jsx-runtime").JSX.Element;
157
+ /**
158
+ * Render the label of a filter that uses the default SelectList component.
159
+ * This function will extract all the labels of all the selected items, and
160
+ * create a comma-separated string from them.
161
+ * @param items the array of items used in the select list
162
+ * @return A curried function that flattens items into a comma-separated string
163
+ * @example
164
+ * ```tsx
165
+ * import { Filter, selectListFilter, selectListLabel } from '@payfit/unity-components'
166
+ * import { useState } from 'react'
167
+ *
168
+ * // Simple flat list
169
+ * const statusItems = [
170
+ * { id: 'active', label: 'Active' },
171
+ * { id: 'inactive', label: 'Inactive' },
172
+ * { id: 'pending', label: 'Pending' },
173
+ * ]
174
+ *
175
+ * function StatusFilter() {
176
+ * const [value, setValue] = useState<Set<string>>(new Set())
177
+ *
178
+ * return (
179
+ * <Filter
180
+ * label="Status"
181
+ * value={value}
182
+ * onChange={setValue}
183
+ * renderControl={selectListFilter(statusItems, {})}
184
+ * renderLabel={selectListLabel(items)}
185
+ * />
186
+ * )
187
+ * }
188
+ * ```
189
+ * @remarks
190
+ * - Both flat lists (FilterItem[]) and grouped lists (FilterItemGroup[]) are supported
191
+ */
192
+ export declare function selectListLabel(items: Array<FilterItem | FilterItemGroup>): (value: Selection) => string;
@@ -0,0 +1,45 @@
1
+ import { jsx as c } from "react/jsx-runtime";
2
+ import { SelectListOptGroup as u } from "../select-list/parts/SelectListOptGroup.js";
3
+ import { SelectListOption as a } from "../select-list/parts/SelectListOption.js";
4
+ import { SelectList as p } from "../select-list/SelectList.js";
5
+ function s(l) {
6
+ return "children" in l && l.children.length > 0;
7
+ }
8
+ function m(l, t) {
9
+ const n = (r) => /* @__PURE__ */ c(u, { items: r.children, label: r.label, children: (o) => /* @__PURE__ */ c(a, { id: o.id, textValue: o.label, children: o.label }) }), e = (r) => /* @__PURE__ */ c(a, { id: r.id, textValue: r.label, children: r.label });
10
+ return (r, o) => /* @__PURE__ */ c(
11
+ p,
12
+ {
13
+ ...t,
14
+ items: l,
15
+ value: r,
16
+ selectionMode: "multiple",
17
+ onChange: (i) => {
18
+ o(i);
19
+ },
20
+ escapeKeyBehavior: "none",
21
+ sortSelectedFirst: !0,
22
+ className: "uy:overflow-y-auto uy:scroll-pb-500",
23
+ children: (i) => s(i) ? n(i) : e(i)
24
+ }
25
+ );
26
+ }
27
+ function L(l) {
28
+ return (t) => {
29
+ if (t === "all")
30
+ return l.flatMap((e) => s(e) ? e.children : e).map((e) => e.label).join(", ");
31
+ const n = [];
32
+ for (const e of l) {
33
+ if (s(e)) {
34
+ n.push(...e.children.filter((r) => t.has(r.id)));
35
+ continue;
36
+ }
37
+ t.has(e.id) && n.push(e);
38
+ }
39
+ return n.map((e) => e.label).join(", ");
40
+ };
41
+ }
42
+ export {
43
+ m as selectListFilter,
44
+ L as selectListLabel
45
+ };