@payfit/unity-components 2.0.0 → 2.2.0
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.
- package/dist/esm/components/alert/Alert.js +41 -29
- package/dist/esm/components/alert/parts/AlertTitle.js +8 -8
- package/dist/esm/components/app-layout/AppLayout.d.ts +2 -0
- package/dist/esm/components/app-menu/parts/AppMenuFooter.js +23 -23
- package/dist/esm/components/app-menu/parts/AppMenuHeader.d.ts +1 -1
- package/dist/esm/components/app-menu/parts/AppMenuHeader.js +9 -9
- package/dist/esm/components/autocomplete/Autocomplete.d.ts +0 -9
- package/dist/esm/components/autocomplete/Autocomplete.js +54 -57
- package/dist/esm/components/autocomplete/parts/AutocompleteItem.js +8 -8
- package/dist/esm/components/avatar/Avatar.context.d.ts +2 -1
- package/dist/esm/components/avatar/Avatar.context.js +13 -11
- package/dist/esm/components/avatar/Avatar.d.ts +126 -0
- package/dist/esm/components/avatar/Avatar.js +34 -20
- package/dist/esm/components/avatar/Avatar.variants.d.ts +39 -0
- package/dist/esm/components/avatar/Avatar.variants.js +23 -5
- package/dist/esm/components/avatar/parts/AvatarFallback.d.ts +52 -0
- package/dist/esm/components/avatar/parts/AvatarFallback.js +26 -27
- package/dist/esm/components/avatar/parts/AvatarIcon.d.ts +31 -0
- package/dist/esm/components/avatar/parts/AvatarIcon.js +40 -0
- package/dist/esm/components/badge/Badge.js +1 -1
- package/dist/esm/components/breadcrumbs/Breadcrumbs.variant.js +1 -1
- package/dist/esm/components/button/Button.js +12 -11
- package/dist/esm/components/button/Button.variants.d.ts +1 -0
- package/dist/esm/components/button/Button.variants.js +22 -15
- package/dist/esm/components/card/Card.context.d.ts +5 -0
- package/dist/esm/components/card/Card.context.js +14 -0
- package/dist/esm/components/card/Card.d.ts +210 -0
- package/dist/esm/components/card/Card.js +93 -0
- package/dist/esm/components/card/parts/CardContent.d.ts +37 -0
- package/dist/esm/components/card/parts/CardContent.js +8 -0
- package/dist/esm/components/card/parts/CardTitle.d.ts +55 -0
- package/dist/esm/components/card/parts/CardTitle.js +33 -0
- package/dist/esm/components/checkbox/Checkbox.js +38 -30
- package/dist/esm/components/checkbox/Checkbox.variants.d.ts +9 -9
- package/dist/esm/components/checkbox/Checkbox.variants.js +23 -7
- package/dist/esm/components/checkbox/TanstackCheckbox.d.ts +28 -0
- package/dist/esm/components/checkbox/TanstackCheckbox.js +51 -0
- package/dist/esm/components/checkbox/parts/CheckboxIndicator.js +7 -7
- package/dist/esm/components/checkbox-field/CheckboxField.d.ts +2 -0
- package/dist/esm/components/checkbox-field/TanstackCheckboxField.d.ts +14 -0
- package/dist/esm/components/checkbox-field/TanstackCheckboxField.js +40 -0
- package/dist/esm/components/checkbox-group/TanstackCheckboxGroup.d.ts +4 -0
- package/dist/esm/components/checkbox-group/TanstackCheckboxGroup.js +37 -0
- package/dist/esm/components/checkbox-group-field/CheckboxGroupField.d.ts +2 -0
- package/dist/esm/components/checkbox-group-field/TanstackCheckGroupField.d.ts +72 -0
- package/dist/esm/components/checkbox-group-field/TanstackCheckGroupField.js +40 -0
- package/dist/esm/components/client-side-pagination/parts/PaginationNavButton.js +1 -1
- package/dist/esm/components/client-side-pagination/parts/RawPaginationLink.js +10 -10
- package/dist/esm/components/collapsible/parts/CollapsibleContent.js +5 -5
- package/dist/esm/components/collapsible/parts/CollapsibleTitle.js +8 -8
- package/dist/esm/components/data-table/DataTable.d.ts +109 -16
- package/dist/esm/components/data-table/DataTable.js +107 -93
- package/dist/esm/components/data-table/mocks/employee-data.d.ts +1 -0
- package/dist/esm/components/date-calendar/DateCalendar.js +1 -1
- package/dist/esm/components/date-calendar/parts/DateSegmentSelect.js +1 -1
- package/dist/esm/components/date-picker/DatePicker.d.ts +1 -1
- package/dist/esm/components/date-picker/DatePicker.js +59 -50
- package/dist/esm/components/date-picker/TanstackDatePicker.d.ts +22 -0
- package/dist/esm/components/date-picker/TanstackDatePicker.js +53 -0
- package/dist/esm/components/date-picker/parts/DateInput.js +4 -4
- package/dist/esm/components/date-picker-field/DatePickerField.d.ts +2 -0
- package/dist/esm/components/date-picker-field/TanstackDatePickerField.d.ts +71 -0
- package/dist/esm/components/date-picker-field/TanstackDatePickerField.js +41 -0
- package/dist/esm/components/definition-list/DefinitionList.context.d.ts +19 -0
- package/dist/esm/components/definition-list/DefinitionList.d.ts +24 -0
- package/dist/esm/components/definition-list/parts/DefinitionItem.d.ts +25 -0
- package/dist/esm/components/dialog/Dialog.d.ts +34 -22
- package/dist/esm/components/dialog/Dialog.js +90 -52
- package/dist/esm/components/dialog/parts/DialogActions.js +6 -6
- package/dist/esm/components/dialog/parts/DialogTitle.js +7 -4
- package/dist/esm/components/dialog/test-utils.d.ts +28 -0
- package/dist/esm/components/dialog/test-utils.js +78 -0
- package/dist/esm/components/error-state/ErrorState.js +7 -7
- package/dist/esm/components/filter/Filter.controls.d.ts +192 -0
- package/dist/esm/components/filter/Filter.controls.js +45 -0
- package/dist/esm/components/filter/Filter.d.ts +189 -0
- package/dist/esm/components/filter/Filter.js +147 -0
- package/dist/esm/components/filter/Filter.types.d.ts +121 -0
- package/dist/esm/components/filter/hooks/useFilterIds.d.ts +49 -0
- package/dist/esm/components/filter/hooks/useFilterIds.js +13 -0
- package/dist/esm/components/filter/hooks/useFilterState.d.ts +74 -0
- package/dist/esm/components/filter/hooks/useFilterState.js +23 -0
- package/dist/esm/components/filter/hooks/useFilterValue.d.ts +61 -0
- package/dist/esm/components/filter/hooks/useFilterValue.js +31 -0
- package/dist/esm/components/filter/parts/FilterButton.d.ts +75 -0
- package/dist/esm/components/filter/parts/FilterButton.js +55 -0
- package/dist/esm/components/filter/parts/FilterLabel.d.ts +96 -0
- package/dist/esm/components/filter/parts/FilterLabel.js +57 -0
- package/dist/esm/components/filter/parts/FilterPopover.d.ts +95 -0
- package/dist/esm/components/filter/parts/FilterPopover.js +79 -0
- package/dist/esm/components/filter/utils/value-formatters.d.ts +62 -0
- package/dist/esm/components/filter/utils/value-formatters.js +14 -0
- package/dist/esm/components/filter-toolbar/FilterToolbar.d.ts +110 -0
- package/dist/esm/components/filter-toolbar/FilterToolbar.js +172 -0
- package/dist/esm/components/filter-toolbar/FilterToolbar.types.d.ts +119 -0
- package/dist/esm/components/filter-toolbar/hooks/use-filter-toolbar-state.d.ts +96 -0
- package/dist/esm/components/filter-toolbar/hooks/use-filter-toolbar-state.js +132 -0
- package/dist/esm/components/filter-toolbar/parts/AddFilter.d.ts +63 -0
- package/dist/esm/components/filter-toolbar/parts/AddFilter.js +107 -0
- package/dist/esm/components/filter-toolbar/parts/AddFilterItem.d.ts +18 -0
- package/dist/esm/components/filter-toolbar/parts/AddFilterItem.js +18 -0
- package/dist/esm/components/filter-toolbar/utils/filter-adapters.d.ts +93 -0
- package/dist/esm/components/filter-toolbar/utils/filter-adapters.js +88 -0
- package/dist/esm/components/filter-toolbar/utils/normalize-filter-value.d.ts +24 -0
- package/dist/esm/components/filter-toolbar/utils/normalize-filter-value.js +19 -0
- package/dist/esm/components/form/Form.d.ts +2 -0
- package/dist/esm/components/form/TanstackForm.d.ts +24 -0
- package/dist/esm/components/form/TanstackForm.js +29 -0
- package/dist/esm/components/form-field/FormField.d.ts +2 -0
- package/dist/esm/components/form-field/TanstackFormField.context.d.ts +10 -0
- package/dist/esm/components/form-field/TanstackFormField.context.js +14 -0
- package/dist/esm/components/form-field/TanstackFormField.d.ts +49 -0
- package/dist/esm/components/form-field/TanstackFormField.js +46 -0
- package/dist/esm/components/form-field/parts/FormControl.d.ts +2 -0
- package/dist/esm/components/form-field/parts/FormFeedbackText.d.ts +2 -0
- package/dist/esm/components/form-field/parts/FormHelperText.d.ts +2 -0
- package/dist/esm/components/form-field/parts/FormLabel.d.ts +2 -0
- package/dist/esm/components/form-field/parts/RawFormContextualLink.d.ts +2 -0
- package/dist/esm/components/form-field/parts/TanstackFormFeedbackText.d.ts +12 -0
- package/dist/esm/components/form-field/parts/TanstackFormFeedbackText.js +32 -0
- package/dist/esm/components/form-field/parts/TanstackFormHelperText.d.ts +11 -0
- package/dist/esm/components/form-field/parts/TanstackFormHelperText.js +25 -0
- package/dist/esm/components/form-field/parts/TanstackFormLabel.d.ts +8 -0
- package/dist/esm/components/form-field/parts/TanstackFormLabel.js +26 -0
- package/dist/esm/components/form-field/parts/TanstackRawFormContextualLink.d.ts +26 -0
- package/dist/esm/components/form-field/parts/TanstackRawFormContextualLink.js +45 -0
- package/dist/esm/components/icon-button/CircularIconButton.d.ts +9 -9
- package/dist/esm/components/icon-button/CircularIconButton.js +53 -36
- package/dist/esm/components/icon-button/IconButton.variants.d.ts +1 -0
- package/dist/esm/components/icon-button/IconButton.variants.js +44 -28
- package/dist/esm/components/inline-field-group/InlineFieldGroup.context.d.ts +23 -0
- package/dist/esm/components/inline-field-group/InlineFieldGroup.context.js +6 -0
- package/dist/esm/components/inline-field-group/InlineFieldGroup.d.ts +119 -0
- package/dist/esm/components/inline-field-group/InlineFieldGroup.js +185 -0
- package/dist/esm/components/inline-field-group/hooks/useInlineFieldGroupMode.d.ts +46 -0
- package/dist/esm/components/inline-field-group/hooks/useInlineFieldGroupMode.js +27 -0
- package/dist/esm/components/inline-field-group/parts/InlineFieldGroupEditView.d.ts +64 -0
- package/dist/esm/components/inline-field-group/parts/InlineFieldGroupEditView.js +56 -0
- package/dist/esm/components/inline-field-group/parts/InlineFieldGroupHeader.d.ts +95 -0
- package/dist/esm/components/inline-field-group/parts/InlineFieldGroupHeader.js +106 -0
- package/dist/esm/components/inline-field-group/parts/InlineFieldGroupReadView.d.ts +56 -0
- package/dist/esm/components/inline-field-group/parts/InlineFieldGroupReadView.js +28 -0
- package/dist/esm/components/input/Input.js +36 -35
- package/dist/esm/components/input/TanstackInput.d.ts +22 -0
- package/dist/esm/components/input/TanstackInput.js +38 -0
- package/dist/esm/components/label/Label.js +12 -12
- package/dist/esm/components/link/RawLink.js +38 -31
- package/dist/esm/components/list-view/ListView.d.ts +56 -0
- package/dist/esm/components/list-view/ListView.fixtures.d.ts +20 -0
- package/dist/esm/components/list-view/ListView.js +44 -0
- package/dist/esm/components/list-view/parts/ListViewItemLabel.d.ts +34 -0
- package/dist/esm/components/list-view/parts/ListViewItemLabel.js +22 -0
- package/dist/esm/components/list-view/parts/ListViewItemText.d.ts +33 -0
- package/dist/esm/components/list-view/parts/ListViewItemText.js +22 -0
- package/dist/esm/components/list-view/parts/ListViewSection.d.ts +14 -0
- package/dist/esm/components/list-view/parts/ListViewSection.js +21 -0
- package/dist/esm/components/list-view/parts/RawListViewItem.d.ts +102 -0
- package/dist/esm/components/list-view/parts/RawListViewItem.js +80 -0
- package/dist/esm/components/multi-select/MultiSelect.d.ts +5 -7
- package/dist/esm/components/multi-select/MultiSelect.js +199 -176
- package/dist/esm/components/multi-select/MultiselectTypes.d.ts +114 -0
- package/dist/esm/components/multi-select/TanstackMultiSelect.d.ts +7 -0
- package/dist/esm/components/multi-select/TanstackMultiSelect.js +41 -0
- package/dist/esm/components/multi-select/parts/MultiSelectButton.d.ts +2 -0
- package/dist/esm/components/multi-select/parts/MultiSelectButton.js +62 -46
- package/dist/esm/components/multi-select/parts/MultiSelectPopover.js +15 -15
- package/dist/esm/components/multi-select-field/MultiSelectField.d.ts +45 -12
- package/dist/esm/components/multi-select-field/MultiSelectField.js +56 -66
- package/dist/esm/components/multi-select-field/TanstackMultiSelectField.d.ts +92 -0
- package/dist/esm/components/multi-select-field/TanstackMultiSelectField.js +48 -0
- package/dist/esm/components/multi-select-field/test-utils.d.ts +17 -0
- package/dist/esm/components/multi-select-field/test-utils.js +45 -0
- package/dist/esm/components/nav/parts/RawNavItem.js +6 -6
- package/dist/esm/components/navigation-card/NavigationCard.context.d.ts +31 -0
- package/dist/esm/components/navigation-card/NavigationCard.context.js +13 -0
- package/dist/esm/components/navigation-card/NavigationCard.d.ts +46 -0
- package/dist/esm/components/navigation-card/NavigationCard.js +62 -0
- package/dist/esm/components/navigation-card/NavigationCard.types.d.ts +37 -0
- package/dist/esm/components/navigation-card/NavigationCard.variants.d.ts +1147 -0
- package/dist/esm/components/navigation-card/NavigationCard.variants.js +164 -0
- package/dist/esm/components/navigation-card/parts/NavigationCardDescription.d.ts +39 -0
- package/dist/esm/components/navigation-card/parts/NavigationCardDescription.js +22 -0
- package/dist/esm/components/navigation-card/parts/NavigationCardGroup.d.ts +146 -0
- package/dist/esm/components/navigation-card/parts/NavigationCardGroup.js +93 -0
- package/dist/esm/components/navigation-card/parts/NavigationCardLabel.d.ts +32 -0
- package/dist/esm/components/navigation-card/parts/NavigationCardLabel.js +24 -0
- package/dist/esm/components/number-field/NumberField.d.ts +2 -0
- package/dist/esm/components/number-field/TanstackNumberField.d.ts +74 -0
- package/dist/esm/components/number-field/TanstackNumberField.js +44 -0
- package/dist/esm/components/number-input/NumberInput.js +31 -29
- package/dist/esm/components/number-input/TanstackNumberInput.d.ts +58 -0
- package/dist/esm/components/number-input/TanstackNumberInput.js +38 -0
- package/dist/esm/components/page/Page.js +12 -11
- package/dist/esm/components/pagination/parts/RawPaginationLink.js +22 -22
- package/dist/esm/components/pagination/parts/RawPaginationNext.js +13 -13
- package/dist/esm/components/pagination/parts/RawPaginationPrevious.js +10 -10
- package/dist/esm/components/payfit-brand/PayFitBrand.d.ts +4 -0
- package/dist/esm/components/payfit-brand/PayFitBrand.js +30 -22
- package/dist/esm/components/payfit-brand/PayFitPreprod.js +25 -25
- package/dist/esm/components/phone-number/PhoneNumberInput.d.ts +67 -0
- package/dist/esm/components/phone-number/PhoneNumberInput.js +322 -0
- package/dist/esm/components/phone-number/TanstackPhoneNumberInput.d.ts +64 -0
- package/dist/esm/components/phone-number/TanstackPhoneNumberInput.js +33 -0
- package/dist/esm/components/phone-number/parts/PhoneNumberItem.d.ts +42 -0
- package/dist/esm/components/phone-number/parts/PhoneNumberItem.js +68 -0
- package/dist/esm/components/phone-number/unknownFlag.svg.js +4 -0
- package/dist/esm/components/phone-number-field/TanstackPhoneNumberField.d.ts +15 -0
- package/dist/esm/components/phone-number-field/TanstackPhoneNumberField.js +32 -0
- package/dist/esm/components/pill/Pill.d.ts +2 -2
- package/dist/esm/components/pill/Pill.js +8 -8
- package/dist/esm/components/popover/Popover.js +6 -6
- package/dist/esm/components/promo-dialog/PromoDialog.d.ts +149 -0
- package/dist/esm/components/promo-dialog/PromoDialog.js +219 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogActions.d.ts +44 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogActions.js +29 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogContent.d.ts +43 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogContent.js +20 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogHero.d.ts +47 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogHero.js +25 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogSubtitle.d.ts +53 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogSubtitle.js +21 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogTitle.d.ts +6 -0
- package/dist/esm/components/promo-dialog/parts/PromoDialogTitle.js +18 -0
- package/dist/esm/components/radio-button-group/TanstackRadioButtonGroup.d.ts +13 -0
- package/dist/esm/components/radio-button-group/TanstackRadioButtonGroup.js +43 -0
- package/dist/esm/components/radio-button-group/parts/RadioButton.d.ts +29 -11
- package/dist/esm/components/radio-button-group/parts/RadioButton.js +53 -51
- package/dist/esm/components/radio-button-group-field/RadioButtonGroupField.d.ts +2 -0
- package/dist/esm/components/radio-button-group-field/TanstackRadioButtonGroupField.d.ts +13 -0
- package/dist/esm/components/radio-button-group-field/TanstackRadioButtonGroupField.js +38 -0
- package/dist/esm/components/search/Search.js +46 -46
- package/dist/esm/components/segmented-button-group/parts/ToggleButton.js +5 -5
- package/dist/esm/components/select/Select.d.ts +5 -4
- package/dist/esm/components/select/Select.js +53 -45
- package/dist/esm/components/select/TanstackSelect.d.ts +80 -0
- package/dist/esm/components/select/TanstackSelect.js +34 -0
- package/dist/esm/components/select/parts/SearchInput.d.ts +4 -1
- package/dist/esm/components/select/parts/SearchInput.js +49 -31
- package/dist/esm/components/select/parts/SelectButton.js +19 -17
- package/dist/esm/components/select-field/SelectField.d.ts +2 -0
- package/dist/esm/components/select-field/SelectField.js +8 -9
- package/dist/esm/components/select-field/TanstackSelectField.d.ts +124 -0
- package/dist/esm/components/select-field/TanstackSelectField.js +44 -0
- package/dist/esm/components/select-list/SelectList.d.ts +95 -0
- package/dist/esm/components/select-list/SelectList.js +79 -0
- package/dist/esm/components/select-list/SelectList.types.d.ts +29 -0
- package/dist/esm/components/select-list/constants.d.ts +36 -0
- package/dist/esm/components/select-list/constants.js +29 -0
- package/dist/esm/components/select-list/helpers.d.ts +42 -0
- package/dist/esm/components/select-list/helpers.js +48 -0
- package/dist/esm/components/select-list/hooks/useControlledSelection.d.ts +23 -0
- package/dist/esm/components/select-list/hooks/useControlledSelection.js +16 -0
- package/dist/esm/components/select-list/hooks/useSelectedFirstSorting.d.ts +23 -0
- package/dist/esm/components/select-list/hooks/useSelectedFirstSorting.js +31 -0
- package/dist/esm/components/select-list/parts/SelectListEmptyState.d.ts +8 -0
- package/dist/esm/components/select-list/parts/SelectListEmptyState.js +25 -0
- package/dist/esm/components/select-list/parts/SelectListOptGroup.d.ts +118 -0
- package/dist/esm/components/select-list/parts/SelectListOptGroup.js +28 -0
- package/dist/esm/components/select-list/parts/SelectListOption.d.ts +24 -0
- package/dist/esm/components/select-list/parts/SelectListOption.js +72 -0
- package/dist/esm/components/select-list/parts/SelectListSearchInput.d.ts +2 -0
- package/dist/esm/components/select-list/parts/SelectListSearchInput.js +43 -0
- package/dist/esm/components/select-list/parts/SelectedItemsSection.d.ts +54 -0
- package/dist/esm/components/select-list/parts/SelectedItemsSection.js +35 -0
- package/dist/esm/components/select-list/utils/partition.d.ts +13 -0
- package/dist/esm/components/select-list/utils/partition.js +9 -0
- package/dist/esm/components/selectable-button-group/SelectableButtonGroup.context.d.ts +1 -5
- package/dist/esm/components/selectable-button-group/SelectableButtonGroup.d.ts +6 -1
- package/dist/esm/components/selectable-button-group/SelectableButtonGroup.js +23 -23
- package/dist/esm/components/selectable-button-group/TanstackSelectableButtonGroup.d.ts +27 -0
- package/dist/esm/components/selectable-button-group/TanstackSelectableButtonGroup.js +34 -0
- package/dist/esm/components/selectable-button-group/parts/SelectableButton.d.ts +1 -16
- package/dist/esm/components/selectable-button-group/parts/SelectableButton.js +56 -57
- package/dist/esm/components/selectable-button-group-field/SelectableButtonGroupField.d.ts +2 -0
- package/dist/esm/components/selectable-button-group-field/TanstackSelectableButtonGroupField.d.ts +81 -0
- package/dist/esm/components/selectable-button-group-field/TanstackSelectableButtonGroupField.js +47 -0
- package/dist/esm/components/selectable-card/internals/Description.js +1 -1
- package/dist/esm/components/selectable-card/selectable-card-checkbox-group/SelectableCardCheckboxGroup.js +1 -1
- package/dist/esm/components/selectable-card/selectable-card-checkbox-group/TanstackSelectableCardCheckboxGroup.d.ts +26 -0
- package/dist/esm/components/selectable-card/selectable-card-checkbox-group/TanstackSelectableCardCheckboxGroup.js +32 -0
- package/dist/esm/components/selectable-card/selectable-card-checkbox-group/parts/SelectableCardCheckbox.js +24 -24
- package/dist/esm/components/selectable-card/selectable-card-radio-group/SelectableCardRadioGroup.d.ts +2 -0
- package/dist/esm/components/selectable-card/selectable-card-radio-group/SelectableCardRadioGroup.js +12 -14
- package/dist/esm/components/selectable-card/selectable-card-radio-group/TanstackSelectableCardRadioGroup.d.ts +28 -0
- package/dist/esm/components/selectable-card/selectable-card-radio-group/TanstackSelectableCardRadioGroup.js +32 -0
- package/dist/esm/components/selectable-card/selectable-card-radio-group/parts/RadioIndicator.js +14 -13
- package/dist/esm/components/selectable-card/selectable-card-radio-group/parts/SelectableCardRadio.js +27 -25
- package/dist/esm/components/selectable-card/selectableCard.variant.js +5 -5
- package/dist/esm/components/selectable-card-checkbox-group-field/SelectableCardCheckboxGroupField.d.ts +2 -0
- package/dist/esm/components/selectable-card-checkbox-group-field/TanstackSelectableCardCheckboxGroupField.d.ts +10 -0
- package/dist/esm/components/selectable-card-checkbox-group-field/TanstackSelectableCardCheckboxGroupField.js +38 -0
- package/dist/esm/components/selectable-card-radio-group-field/SelectableCardRadioGroupField.d.ts +2 -0
- package/dist/esm/components/selectable-card-radio-group-field/TanstackSelectableCardRadioGroupField.d.ts +10 -0
- package/dist/esm/components/selectable-card-radio-group-field/TanstackSelectableCardRadioGroupField.js +38 -0
- package/dist/esm/components/side-panel/parts/SidePanelFooter.js +19 -10
- package/dist/esm/components/table/Table.context.d.ts +5 -0
- package/dist/esm/components/table/Table.context.js +14 -13
- package/dist/esm/components/table/Table.d.ts +93 -0
- package/dist/esm/components/table/Table.js +135 -107
- package/dist/esm/components/table/parts/TableBody.js +83 -21
- package/dist/esm/components/table/parts/TableEmptyState.js +6 -6
- package/dist/esm/components/table/parts/TableHeader.js +1 -1
- package/dist/esm/components/table/parts/TablePagination.js +1 -1
- package/dist/esm/components/table/parts/TableRow.js +1 -0
- package/dist/esm/components/tabs/Tabs.variant.d.ts +0 -6
- package/dist/esm/components/tabs/Tabs.variant.js +11 -12
- package/dist/esm/components/task-menu/parts/RawSubTask.js +26 -26
- package/dist/esm/components/task-menu/parts/RawTask.js +32 -28
- package/dist/esm/components/task-menu/parts/TaskGroup.js +30 -26
- package/dist/esm/components/task-menu/parts/task.variants.js +4 -2
- package/dist/esm/components/text/Text.d.ts +11 -1
- package/dist/esm/components/text/Text.js +41 -31
- package/dist/esm/components/text/Text.variants.d.ts +12 -0
- package/dist/esm/components/text/Text.variants.js +4 -0
- package/dist/esm/components/text-area/TanstackTextArea.d.ts +21 -0
- package/dist/esm/components/text-area/TanstackTextArea.js +35 -0
- package/dist/esm/components/text-area/TextArea.js +31 -29
- package/dist/esm/components/text-field/TanstackTextField.d.ts +79 -0
- package/dist/esm/components/text-field/TanstackTextField.js +60 -0
- package/dist/esm/components/text-field/TextField.d.ts +2 -0
- package/dist/esm/components/toast/UnityToast.js +5 -5
- package/dist/esm/components/toast/test-utils.d.ts +36 -0
- package/dist/esm/components/toast/test-utils.js +118 -0
- package/dist/esm/components/toggle-switch/TanstackToggleSwitch.d.ts +46 -0
- package/dist/esm/components/toggle-switch/TanstackToggleSwitch.js +25 -0
- package/dist/esm/components/toggle-switch/ToggleSwitch.d.ts +21 -9
- package/dist/esm/components/toggle-switch/ToggleSwitch.js +71 -32
- package/dist/esm/components/toggle-switch-field/TanstackToggleSwitchField.d.ts +11 -0
- package/dist/esm/components/toggle-switch-field/TanstackToggleSwitchField.js +34 -0
- package/dist/esm/components/toggle-switch-field/ToggleSwitchField.d.ts +2 -0
- package/dist/esm/components/toggle-switch-group/TanstackToggleSwitchGroup.d.ts +57 -0
- package/dist/esm/components/toggle-switch-group/TanstackToggleSwitchGroup.js +23 -0
- package/dist/esm/components/toggle-switch-group/ToggleSwitchGroup.js +1 -1
- package/dist/esm/components/toggle-switch-group-field/TanstackToggleSwitchGroupField.d.ts +19 -0
- package/dist/esm/components/toggle-switch-group-field/TanstackToggleSwitchGroupField.js +50 -0
- package/dist/esm/components/toggle-switch-group-field/ToggleSwitchGroupField.d.ts +2 -0
- package/dist/esm/docs/{table → examples/data}/mocks/employee-columns.d.ts +1 -1
- package/dist/esm/hooks/tanstack-form-context.d.ts +1 -0
- package/dist/esm/hooks/tanstack-form-context.js +8 -0
- package/dist/esm/hooks/use-form.d.ts +2 -0
- package/dist/esm/hooks/use-has-scroll.d.ts +71 -0
- package/dist/esm/hooks/use-has-scroll.js +75 -0
- package/dist/esm/hooks/use-tanstack-form.d.ts +393 -0
- package/dist/esm/hooks/use-tanstack-form.js +232 -0
- package/dist/esm/index.d.ts +45 -20
- package/dist/esm/index.js +472 -407
- package/dist/esm/index.storybook-testing.d.ts +3 -0
- package/dist/esm/integrations/tanstack-router/components/form-contextual-link/FormContextualLink.d.ts +6 -1
- package/dist/esm/integrations/tanstack-router/components/form-contextual-link/TanstackFormContextualLink.d.ts +43 -0
- package/dist/esm/integrations/tanstack-router/components/list-view/ListView.d.ts +34 -0
- package/dist/esm/integrations/tanstack-router/components/list-view/ListView.js +25 -0
- package/dist/esm/integrations/tanstack-router/components/list-view/parts/ListViewItem.d.ts +51 -0
- package/dist/esm/integrations/tanstack-router/components/list-view/parts/ListViewItem.js +32 -0
- package/dist/esm/integrations/tanstack-router/components/navigation-card/NavigationCard.d.ts +73 -0
- package/dist/esm/integrations/tanstack-router/components/navigation-card/NavigationCard.js +37 -0
- package/dist/esm/integrations/tanstack-router/index.d.ts +3 -0
- package/dist/esm/integrations/tanstack-router/utils/decorators.d.ts +1 -1
- package/dist/esm/integrations/tanstack-router.js +32 -26
- package/dist/esm/mocks/employees.d.ts +1 -5
- package/dist/esm/storybook-testing.js +8 -2
- package/dist/esm/storybook-utilities/previewTransform.d.ts +1 -0
- package/dist/esm/utils/scroll-detection.d.ts +77 -0
- package/dist/esm/utils/scroll-detection.js +33 -0
- package/dist/esm/utils/spacing.d.ts +63 -0
- package/dist/esm/utils/spacing.js +15 -0
- package/i18n/en-GB.json +27 -8
- package/i18n/es-ES.json +29 -10
- package/i18n/fr-FR.json +30 -11
- package/package.json +41 -42
- package/dist/esm/components/multi-select/Multiselect.types.d.ts +0 -109
- package/dist/esm/integrations/react-router/v5/UnityReactRouterV5Provider.d.ts +0 -6
- package/dist/esm/integrations/react-router/v5/UnityReactRouterV5Provider.js +0 -28
- package/dist/esm/integrations/react-router/v5/index.d.ts +0 -1
- package/dist/esm/integrations/react-router/v5.js +0 -4
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { UseComboboxFilterProps } from './hooks/use-combobox-filter.js';
|
|
2
|
+
type Key = string | number;
|
|
3
|
+
/**
|
|
4
|
+
* Common props shared by all MultiSelect variants.
|
|
5
|
+
*/
|
|
6
|
+
export interface MultiSelectBaseProps {
|
|
7
|
+
/** The ID of the element */
|
|
8
|
+
id?: string;
|
|
9
|
+
/** Default content when no value is selected */
|
|
10
|
+
placeholder?: string;
|
|
11
|
+
/** Whether the select is searchable and shows a search input on top of the options */
|
|
12
|
+
isSearchable?: boolean;
|
|
13
|
+
/** Whether the select is disabled */
|
|
14
|
+
isDisabled?: boolean;
|
|
15
|
+
/** Whether the select is invalid */
|
|
16
|
+
isInvalid?: boolean;
|
|
17
|
+
/** Whether the select is read only */
|
|
18
|
+
isReadOnly?: boolean;
|
|
19
|
+
/** Whether the select is in a loading state */
|
|
20
|
+
isLoading?: boolean;
|
|
21
|
+
/** Callback when the clear button is pressed */
|
|
22
|
+
onClearButtonPress?: () => void;
|
|
23
|
+
/** Maximum number of items to show in the select button before showing a counter badge */
|
|
24
|
+
maxVisibleItems?: number;
|
|
25
|
+
/** Callback when the select is focused */
|
|
26
|
+
onFocus?: () => void;
|
|
27
|
+
/** Callback when the select is blurred */
|
|
28
|
+
onBlur?: () => void;
|
|
29
|
+
/** The ID of the element that labels this select when no visible label is provided */
|
|
30
|
+
'aria-labelledby'?: string;
|
|
31
|
+
/** The ID of the element that labels this select when no visible label is provided */
|
|
32
|
+
'aria-label'?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Props for flat (non-grouped) dynamic items MultiSelect.
|
|
36
|
+
* @template TItems The type of set of items.
|
|
37
|
+
*/
|
|
38
|
+
export interface FlatSelectProps<TItems extends Set<unknown>> extends MultiSelectBaseProps {
|
|
39
|
+
/** The items to display in the select */
|
|
40
|
+
items: TItems;
|
|
41
|
+
/** Function to get the value from an item, defaults to String(item) */ getItemValue?: (item: TItems extends Set<infer U> ? U : never) => Key;
|
|
42
|
+
/** The currently selected values (controlled mode) */
|
|
43
|
+
value?: Set<Key>;
|
|
44
|
+
/** The default selected values (uncontrolled mode) */
|
|
45
|
+
defaultValue?: Set<Key>;
|
|
46
|
+
/** Callback when the selection changes */
|
|
47
|
+
onChange?: (value: Set<Key>) => void;
|
|
48
|
+
/** Function to render the selected value(s) in the button */
|
|
49
|
+
renderValue?: (value: Set<TItems extends Set<infer U> ? U : never>) => string;
|
|
50
|
+
/** Children must be a render function that returns Option components */ children: (item: TItems extends Set<infer U> ? U : never) => React.JSX.Element;
|
|
51
|
+
/** Options for filtering the items */
|
|
52
|
+
searchOptions?: UseComboboxFilterProps<TItems extends Set<infer U> ? U : never>['searchOptions'];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Props for grouped dynamic items MultiSelect.
|
|
56
|
+
* @template TItems The type of map from group key to array of items.
|
|
57
|
+
*/
|
|
58
|
+
export interface GroupedSelectProps<TItems extends Map<string, unknown[]>> extends MultiSelectBaseProps {
|
|
59
|
+
/** The items to display in the select, grouped by category */
|
|
60
|
+
items: TItems;
|
|
61
|
+
/** Function to get the value from an item, defaults to String(item) */
|
|
62
|
+
getItemValue?: (item: TItems extends Map<string, Array<infer U>> ? U : never) => Key;
|
|
63
|
+
/** The currently selected values (controlled mode) */
|
|
64
|
+
value?: Set<Key>;
|
|
65
|
+
/** The default selected values (uncontrolled mode) */
|
|
66
|
+
defaultValue?: Set<Key>;
|
|
67
|
+
/** Callback when the selection changes */
|
|
68
|
+
onChange?: (value: Set<Key>) => void;
|
|
69
|
+
/** Function to render the selected value(s) in the button */
|
|
70
|
+
renderValue?: (value: Set<TItems extends Map<string, Array<infer U>> ? U : never>) => string;
|
|
71
|
+
/** Children must be a render function that returns OptGroup components */
|
|
72
|
+
children: (groupKey: string, items: TItems extends Map<string, Array<infer U>> ? U[] : never) => React.JSX.Element;
|
|
73
|
+
/** Options for filtering the items */
|
|
74
|
+
searchOptions?: UseComboboxFilterProps<TItems extends Map<string, Array<infer U>> ? U : never>['searchOptions'];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Props for static MultiSelect API (all items are defined via React children).
|
|
78
|
+
*/
|
|
79
|
+
export interface StaticItemsProps<TItem = Key> extends MultiSelectBaseProps {
|
|
80
|
+
/** The items to display in the select (for dynamic API) */
|
|
81
|
+
items?: never;
|
|
82
|
+
/** Function to get the value from an item, defaults to String(item) */
|
|
83
|
+
getItemValue?: never;
|
|
84
|
+
/** The currently selected values (controlled mode) */
|
|
85
|
+
value?: Set<TItem>;
|
|
86
|
+
/** The default selected values (uncontrolled mode) */
|
|
87
|
+
defaultValue?: Set<TItem>;
|
|
88
|
+
/** Callback when the selection changes */
|
|
89
|
+
onChange?: (value: Set<TItem>) => void;
|
|
90
|
+
/** Function to render the selected value(s) in the button */
|
|
91
|
+
renderValue?: (value: Set<TItem>) => string;
|
|
92
|
+
/** Children must be Option components */
|
|
93
|
+
children: React.ReactNode;
|
|
94
|
+
/** Options for filtering the items */
|
|
95
|
+
searchOptions?: UseComboboxFilterProps<TItem>['searchOptions'];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Helper type to simplify usage for dynamic MultiSelect props.
|
|
99
|
+
* Picks flat or grouped variant depending on items type.
|
|
100
|
+
*/
|
|
101
|
+
export type DynamicMultiSelectProps<TItems = Set<unknown> | Map<string, unknown[]>> = TItems extends Set<unknown> ? FlatSelectProps<TItems> : TItems extends Map<string, unknown[]> ? GroupedSelectProps<TItems> : never;
|
|
102
|
+
/**
|
|
103
|
+
* Top-level MultiSelect props type, picks static or dynamic variant as appropriate.
|
|
104
|
+
*/
|
|
105
|
+
export type MultiSelectProps<TItems = Set<unknown> | Map<string, unknown[]> | undefined> = TItems extends undefined ? StaticItemsProps : DynamicMultiSelectProps<TItems>;
|
|
106
|
+
/**
|
|
107
|
+
* MultiSelect component type signature.
|
|
108
|
+
*/
|
|
109
|
+
export type MultiSelectComponent = <TItems = undefined>(props: MultiSelectProps<TItems> & {
|
|
110
|
+
ref?: React.ForwardedRef<HTMLButtonElement>;
|
|
111
|
+
} & {
|
|
112
|
+
displayName?: string;
|
|
113
|
+
}) => React.JSX.Element;
|
|
114
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MultiSelectComponent, MultiSelectProps } from './MultiselectTypes.js';
|
|
2
|
+
export type TanstackMultiSelectProps<TItems = undefined> = Omit<MultiSelectProps<TItems>, 'value' | 'defaultValue' | 'onChange' | 'onBlur' | 'isInvalid'> & {
|
|
3
|
+
children?: MultiSelectProps<TItems>['children'];
|
|
4
|
+
};
|
|
5
|
+
export declare const TanstackMultiSelect: MultiSelectComponent & {
|
|
6
|
+
displayName: string;
|
|
7
|
+
};
|
|
@@ -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
|
|
3
|
-
import { useSelectContext as
|
|
4
|
-
import { uyTv as
|
|
5
|
-
import { useId as
|
|
6
|
-
import { useIntl as
|
|
7
|
-
import { Badge as
|
|
8
|
-
import { CircularIconButton as
|
|
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
|
|
11
|
-
import { MultiSelectContext as
|
|
12
|
-
const
|
|
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-
|
|
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
|
|
65
|
-
isDisabled:
|
|
76
|
+
function J({
|
|
77
|
+
isDisabled: n,
|
|
66
78
|
isReadOnly: t,
|
|
67
79
|
isLoading: c,
|
|
68
|
-
isInvalid:
|
|
69
|
-
placeholder:
|
|
80
|
+
isInvalid: r,
|
|
81
|
+
placeholder: s,
|
|
70
82
|
selectedItems: x,
|
|
71
83
|
renderValue: d,
|
|
72
84
|
onClearButtonPress: g,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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: !!
|
|
92
|
+
isInvalid: !!r,
|
|
79
93
|
isEmpty: l.size === 0
|
|
80
94
|
}), y = Math.max(
|
|
81
95
|
o.length - a,
|
|
82
96
|
0
|
|
83
|
-
),
|
|
84
|
-
if (o.length === 0) return
|
|
85
|
-
const
|
|
86
|
-
return d(
|
|
87
|
-
}, [o, a, d,
|
|
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
|
-
...
|
|
92
|
-
ref:
|
|
105
|
+
...S,
|
|
106
|
+
ref: v,
|
|
93
107
|
className: M(),
|
|
94
|
-
disabled:
|
|
95
|
-
"aria-invalid":
|
|
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:
|
|
101
|
-
/* @__PURE__ */ i("div", { className:
|
|
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
|
-
|
|
119
|
+
F,
|
|
104
120
|
{
|
|
105
121
|
color: "inherit",
|
|
106
122
|
size: "small",
|
|
107
|
-
label:
|
|
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
|
-
|
|
129
|
+
r && /* @__PURE__ */ e(
|
|
114
130
|
b,
|
|
115
131
|
{
|
|
116
132
|
src: "WarningCircleOutlined",
|
|
117
133
|
color: "content.form.invalid",
|
|
118
|
-
alt:
|
|
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(
|
|
140
|
+
y > 0 && /* @__PURE__ */ i(W, { variant: "numeric", children: [
|
|
125
141
|
"+",
|
|
126
142
|
y
|
|
127
143
|
] }),
|
|
128
|
-
|
|
129
|
-
|
|
144
|
+
O && /* @__PURE__ */ e(
|
|
145
|
+
q,
|
|
130
146
|
{
|
|
131
|
-
title:
|
|
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:
|
|
148
|
-
src:
|
|
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 =
|
|
172
|
+
const p = D(k(J));
|
|
157
173
|
p.displayName = "MultiselectButton";
|
|
158
|
-
const
|
|
174
|
+
const ue = p;
|
|
159
175
|
export {
|
|
160
|
-
|
|
176
|
+
ue as MultiSelectButton
|
|
161
177
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as
|
|
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:
|
|
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
|
-
...
|
|
22
|
+
...s
|
|
23
23
|
}) {
|
|
24
|
-
const i = f(w), { base:
|
|
25
|
-
return /* @__PURE__ */
|
|
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:
|
|
31
|
+
className: l(),
|
|
32
32
|
onClose: () => d?.(),
|
|
33
33
|
...p,
|
|
34
|
-
children: i.isSearchable ? /* @__PURE__ */
|
|
35
|
-
/* @__PURE__ */
|
|
36
|
-
/* @__PURE__ */
|
|
37
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
54
|
+
/* @__PURE__ */ o("hr", { className: c() })
|
|
55
55
|
] }),
|
|
56
|
-
/* @__PURE__ */
|
|
57
|
-
] }) : /* @__PURE__ */
|
|
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/
|
|
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<
|
|
21
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
displayName
|
|
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
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import { uyTv as
|
|
4
|
-
import { useFormContext as
|
|
5
|
-
import { FormField as
|
|
6
|
-
import { FormControl as
|
|
7
|
-
import { FormFeedbackText as
|
|
8
|
-
import { FormHelperText as
|
|
9
|
-
import { FormLabel as
|
|
10
|
-
import { MultiSelect as
|
|
11
|
-
const
|
|
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
|
|
15
|
-
const { control:
|
|
16
|
-
name:
|
|
17
|
-
label:
|
|
18
|
-
helperText:
|
|
19
|
-
feedbackText:
|
|
20
|
-
contextualLink:
|
|
21
|
-
isRequired:
|
|
22
|
-
isInvalid:
|
|
23
|
-
isLoading:
|
|
24
|
-
isDisabled:
|
|
25
|
-
isReadOnly:
|
|
26
|
-
requiredVariant:
|
|
27
|
-
children:
|
|
28
|
-
onClearButtonPress:
|
|
29
|
-
...
|
|
30
|
-
} = e,
|
|
31
|
-
isRequired:
|
|
32
|
-
isInvalid:
|
|
33
|
-
isLoading:
|
|
34
|
-
isDisabled:
|
|
35
|
-
isReadOnly:
|
|
36
|
-
}, V =
|
|
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
|
-
|
|
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:
|
|
44
|
-
isReadOnly:
|
|
45
|
-
isLoading:
|
|
46
|
-
renderValue: e.renderValue
|
|
43
|
+
isDisabled: i,
|
|
44
|
+
isReadOnly: n,
|
|
45
|
+
isLoading: o,
|
|
46
|
+
...e.renderValue && { renderValue: e.renderValue }
|
|
47
47
|
};
|
|
48
|
-
return /* @__PURE__ */
|
|
49
|
-
|
|
48
|
+
return /* @__PURE__ */ y(
|
|
49
|
+
T,
|
|
50
50
|
{
|
|
51
|
-
control:
|
|
52
|
-
name:
|
|
53
|
-
className:
|
|
54
|
-
...
|
|
51
|
+
control: m,
|
|
52
|
+
name: l,
|
|
53
|
+
className: g(),
|
|
54
|
+
...S,
|
|
55
55
|
children: [
|
|
56
|
-
/* @__PURE__ */
|
|
57
|
-
|
|
58
|
-
/* @__PURE__ */
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
65
|
+
const q = (
|
|
66
|
+
// @ts-expect-error - forwardRef struggles with generic components
|
|
67
|
+
C(j)
|
|
68
|
+
);
|
|
69
|
+
q.displayName = "MultiSelectField";
|
|
80
70
|
export {
|
|
81
|
-
|
|
71
|
+
q as MultiSelectField
|
|
82
72
|
};
|