@eos-ui/vue 0.1.1 → 0.2.1
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/THIRD_PARTY.md +1 -1
- package/dist/component-names.js +1 -1
- package/dist/component-names.js.map +1 -1
- package/dist/components/Actions/EActions.js.map +1 -1
- package/dist/components/Actions/EActions.vue.d.ts +3 -1
- package/dist/components/Actions/EActions.vue_vue_type_script_setup_true_lang.js +12 -3
- package/dist/components/Actions/EActions.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/AppHeader/EAppHeader.js.map +1 -1
- package/dist/components/AppHeader/EAppHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/AppShell/EAppShell.js.map +1 -1
- package/dist/components/AppShell/EAppShell.vue.d.ts +2 -2
- package/dist/components/AppShell/EAppShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Avatar/EAvatar.js.map +1 -1
- package/dist/components/Avatar/EAvatar.vue.d.ts +4 -4
- package/dist/components/Avatar/EAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Breadcrumb/EBreadcrumb.js.map +1 -1
- package/dist/components/Breadcrumb/EBreadcrumb.vue.d.ts +2 -2
- package/dist/components/Breadcrumb/EBreadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Button/EButton.js.map +1 -1
- package/dist/components/Button/EButton.vue.d.ts +5 -3
- package/dist/components/Button/EButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Calendar/ECalendar.js.map +1 -1
- package/dist/components/Calendar/ECalendar.vue.d.ts +12 -9
- package/dist/components/Calendar/ECalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Checkbox/ECheckbox.js.map +1 -1
- package/dist/components/Checkbox/ECheckbox.vue.d.ts +6 -3
- package/dist/components/Checkbox/ECheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/CodeBlock/ECodeBlock.js.map +1 -1
- package/dist/components/CodeBlock/ECodeBlock.vue.d.ts +2 -2
- package/dist/components/CodeBlock/ECodeBlock.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ColorField/EColorField.js.map +1 -1
- package/dist/components/ColorField/EColorField.vue.d.ts +5 -3
- package/dist/components/ColorField/EColorField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Combobox/ECombobox.js.map +1 -1
- package/dist/components/Combobox/ECombobox.vue.d.ts +7 -5
- package/dist/components/Combobox/ECombobox.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/Combobox/ECombobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Combobox/EComboboxBase.js.map +1 -1
- package/dist/components/Combobox/EComboboxBase.vue.d.ts +6 -14
- package/dist/components/Combobox/EComboboxBase.vue_vue_type_script_setup_true_lang.js +9 -8
- package/dist/components/Combobox/EComboboxBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Combobox/EComboboxOption.js.map +1 -1
- package/dist/components/Combobox/EComboboxOption.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/Combobox/EComboboxOption.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Combobox/{EHighlight.js → matchHighlight.js} +3 -3
- package/dist/components/Combobox/matchHighlight.js.map +1 -0
- package/dist/components/Combobox/types.d.ts +13 -8
- package/dist/components/CurrencyField/ECurrencyField.js.map +1 -1
- package/dist/components/CurrencyField/ECurrencyField.vue.d.ts +8 -6
- package/dist/components/CurrencyField/ECurrencyField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/DataGrid/EDataGrid.js.map +1 -1
- package/dist/components/DataGrid/EDataGrid.vue.d.ts +20 -15
- package/dist/components/DataGrid/EDataGrid.vue_vue_type_script_setup_true_lang.js +213 -213
- package/dist/components/DataGrid/EDataGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/DatePicker/EDatePicker.js.map +1 -1
- package/dist/components/DatePicker/EDatePicker.vue.d.ts +9 -6
- package/dist/components/DatePicker/EDatePicker.vue_vue_type_script_setup_true_lang.js +10 -10
- package/dist/components/DatePicker/EDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Definition/EDefinition.js +8 -0
- package/dist/components/Definition/EDefinition.js.map +1 -0
- package/dist/components/{Popover/EPopover.vue.d.ts → Definition/EDefinition.vue.d.ts} +2 -1
- package/dist/components/{Popover/EPopover.vue_vue_type_script_setup_true_lang.js → Definition/EDefinition.vue_vue_type_script_setup_true_lang.js} +4 -4
- package/dist/components/Definition/EDefinition.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/Definition/index.d.ts +1 -0
- package/dist/components/DescriptionList/EDescriptionList.js.map +1 -1
- package/dist/components/DescriptionList/EDescriptionList.vue.d.ts +32 -5
- package/dist/components/DescriptionList/EDescriptionList.vue_vue_type_script_setup_true_lang.js +70 -8
- package/dist/components/DescriptionList/EDescriptionList.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Dialog/DialogFrame.js.map +1 -1
- package/dist/components/Dialog/DialogFrame.vue.d.ts +1 -0
- package/dist/components/Dialog/DialogFrame.vue_vue_type_script_setup_true_lang.js +19 -18
- package/dist/components/Dialog/DialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Dialog/EDialog.js.map +1 -1
- package/dist/components/Dialog/EDialog.vue.d.ts +4 -1
- package/dist/components/Dialog/EDialog.vue_vue_type_script_setup_true_lang.js +3 -0
- package/dist/components/Dialog/EDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Disclosure/EDisclosure.js.map +1 -1
- package/dist/components/Disclosure/EDisclosure.vue.d.ts +6 -9
- package/dist/components/Disclosure/EDisclosure.vue_vue_type_script_setup_true_lang.js +14 -19
- package/dist/components/Disclosure/EDisclosure.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Drawer/EDrawer.js.map +1 -1
- package/dist/components/Drawer/EDrawer.vue.d.ts +4 -1
- package/dist/components/Drawer/EDrawer.vue_vue_type_script_setup_true_lang.js +3 -0
- package/dist/components/Drawer/EDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/EmptyState/EEmptyState.js.map +1 -1
- package/dist/components/EmptyState/EEmptyState.vue.d.ts +1 -1
- package/dist/components/EmptyState/EEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ExpandableRow/EExpandableRow.js +8 -0
- package/dist/components/ExpandableRow/EExpandableRow.js.map +1 -0
- package/dist/components/{ButtonGroup/EButtonGroup.vue.d.ts → ExpandableRow/EExpandableRow.vue.d.ts} +12 -4
- package/dist/components/ExpandableRow/EExpandableRow.vue_vue_type_script_setup_true_lang.js +40 -0
- package/dist/components/ExpandableRow/EExpandableRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/ExpandableRow/index.d.ts +1 -0
- package/dist/components/Field/EField.js.map +1 -1
- package/dist/components/Field/EField.vue.d.ts +1 -1
- package/dist/components/Field/EField.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/Field/EField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Field/labelProps.d.ts +2 -2
- package/dist/components/Fieldset/EFieldset.js.map +1 -1
- package/dist/components/Fieldset/EFieldset.vue.d.ts +5 -3
- package/dist/components/Fieldset/EFieldset.vue_vue_type_script_setup_true_lang.js +54 -35
- package/dist/components/Fieldset/EFieldset.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Grid/EGrid.js.map +1 -1
- package/dist/components/Grid/EGrid.vue.d.ts +5 -2
- package/dist/components/Grid/EGrid.vue_vue_type_script_setup_true_lang.js +15 -11
- package/dist/components/Grid/EGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Heading/EHeading.js.map +1 -1
- package/dist/components/Heading/EHeading.vue.d.ts +1 -1
- package/dist/components/Heading/EHeading.vue_vue_type_script_setup_true_lang.js +10 -10
- package/dist/components/Heading/EHeading.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Highlight/EHighlight.js.map +1 -1
- package/dist/components/Highlight/EHighlight.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/IconButton/EIconButton.js.map +1 -1
- package/dist/components/IconButton/EIconButton.vue.d.ts +1 -0
- package/dist/components/IconButton/EIconButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Inline/EInline.js.map +1 -1
- package/dist/components/Inline/EInline.vue.d.ts +3 -3
- package/dist/components/Inline/EInline.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Kbd/EKbd.js.map +1 -1
- package/dist/components/Kbd/EKbd.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Link/ELink.js.map +1 -1
- package/dist/components/Link/ELink.vue.d.ts +2 -2
- package/dist/components/Link/ELink.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Menu/EMenu.js.map +1 -1
- package/dist/components/Menu/EMenu.vue.d.ts +4 -3
- package/dist/components/Menu/EMenu.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/Menu/EMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/NavList/ENavList.js.map +1 -1
- package/dist/components/NavList/ENavList.vue.d.ts +7 -9
- package/dist/components/NavList/ENavList.vue_vue_type_script_setup_true_lang.js +2 -3
- package/dist/components/NavList/ENavList.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/{Tabs → NavList}/LinkNav.js +1 -1
- package/dist/components/NavList/LinkNav.js.map +1 -0
- package/dist/components/{Tabs → NavList}/LinkNav.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/NavList/LinkNav.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/Notice/ENotice.js.map +1 -1
- package/dist/components/Notice/ENotice.vue.d.ts +2 -2
- package/dist/components/Notice/ENotice.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/NumberField/ENumberField.js.map +1 -1
- package/dist/components/NumberField/ENumberField.vue.d.ts +5 -3
- package/dist/components/NumberField/ENumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/OtpField/EOtpField.js.map +1 -1
- package/dist/components/OtpField/EOtpField.vue.d.ts +10 -8
- package/dist/components/OtpField/EOtpField.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/OtpField/EOtpField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/PageHeader/EPageHeader.js.map +1 -1
- package/dist/components/PageHeader/EPageHeader.vue.d.ts +1 -1
- package/dist/components/PageHeader/EPageHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Pagination/EPagination.js.map +1 -1
- package/dist/components/Pagination/EPagination.vue.d.ts +1 -0
- package/dist/components/Pagination/EPagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/PasswordField/EPasswordField.js.map +1 -1
- package/dist/components/PasswordField/EPasswordField.vue.d.ts +14 -10
- package/dist/components/PasswordField/EPasswordField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/PhoneField/EPhoneField.js.map +1 -1
- package/dist/components/PhoneField/EPhoneField.vue.d.ts +6 -4
- package/dist/components/PhoneField/EPhoneField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Progress/EProgress.js.map +1 -1
- package/dist/components/Progress/EProgress.vue.d.ts +5 -5
- package/dist/components/Progress/EProgress.vue_vue_type_script_setup_true_lang.js +20 -14
- package/dist/components/Progress/EProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/RadioGroup/ERadioGroup.js.map +1 -1
- package/dist/components/RadioGroup/ERadioGroup.vue.d.ts +8 -4
- package/dist/components/RadioGroup/ERadioGroup.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/RadioGroup/ERadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/RangePicker/ERangePicker.js.map +1 -1
- package/dist/components/RangePicker/ERangePicker.vue.d.ts +12 -8
- package/dist/components/RangePicker/ERangePicker.vue_vue_type_script_setup_true_lang.js +65 -65
- package/dist/components/RangePicker/ERangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/SearchBar/ESearchBar.js.map +1 -1
- package/dist/components/SearchBar/ESearchBar.vue.d.ts +8 -7
- package/dist/components/SearchBar/ESearchBar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/SearchBar/ESearchBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/SearchResults/ESearchResults.js.map +1 -1
- package/dist/components/SearchResults/ESearchResults.vue.d.ts +3 -3
- package/dist/components/SearchResults/ESearchResults.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/SearchResults/ESearchResults.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Segmented/ESegmented.js.map +1 -1
- package/dist/components/Segmented/ESegmented.vue.d.ts +10 -6
- package/dist/components/Segmented/ESegmented.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Select/ESelect.js.map +1 -1
- package/dist/components/Select/ESelect.vue.d.ts +9 -6
- package/dist/components/Select/ESelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Select/ESelectControl.vue.d.ts +2 -2
- package/dist/components/Select/ESelectControl.vue_vue_type_script_setup_true_lang.js +6 -6
- package/dist/components/Select/options.d.ts +1 -1
- package/dist/components/Select/options.js.map +1 -1
- package/dist/components/SignatureField/ESignatureField.js.map +1 -1
- package/dist/components/SignatureField/ESignatureField.vue.d.ts +14 -10
- package/dist/components/SignatureField/ESignatureField.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/SignatureField/ESignatureField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/SignaturePad/ESignaturePad.js.map +1 -1
- package/dist/components/SignaturePad/ESignaturePad.vue.d.ts +3 -1
- package/dist/components/SignaturePad/ESignaturePad.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Skeleton/ESkeleton.js.map +1 -1
- package/dist/components/Skeleton/ESkeleton.vue.d.ts +3 -3
- package/dist/components/Skeleton/ESkeleton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Stack/EStack.js.map +1 -1
- package/dist/components/Stack/EStack.vue.d.ts +2 -2
- package/dist/components/Stack/EStack.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Stamp/EStamp.js.map +1 -1
- package/dist/components/Stamp/EStamp.vue.d.ts +18 -12
- package/dist/components/Stamp/EStamp.vue_vue_type_script_setup_true_lang.js +27 -40
- package/dist/components/Stamp/EStamp.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Stepper/EStepper.js.map +1 -1
- package/dist/components/Stepper/EStepper.vue.d.ts +2 -2
- package/dist/components/Stepper/EStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Surface/ESurface.js.map +1 -1
- package/dist/components/Surface/ESurface.vue.d.ts +5 -5
- package/dist/components/Surface/ESurface.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/Surface/ESurface.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Switch/ESwitch.js.map +1 -1
- package/dist/components/Switch/ESwitch.vue.d.ts +3 -1
- package/dist/components/Switch/ESwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Tabs/ETabs.js.map +1 -1
- package/dist/components/Tabs/ETabs.vue.d.ts +10 -32
- package/dist/components/Tabs/ETabs.vue_vue_type_script_setup_true_lang.js +21 -50
- package/dist/components/Tabs/ETabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Tabs/index.d.ts +1 -1
- package/dist/components/Text/EText.js.map +1 -1
- package/dist/components/Text/EText.vue.d.ts +4 -3
- package/dist/components/Text/EText.vue_vue_type_script_setup_true_lang.js +7 -2
- package/dist/components/Text/EText.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/TextField/ETextField.js.map +1 -1
- package/dist/components/TextField/ETextField.vue.d.ts +8 -6
- package/dist/components/TextField/ETextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Textarea/ETextarea.js.map +1 -1
- package/dist/components/Textarea/ETextarea.vue.d.ts +4 -2
- package/dist/components/Textarea/ETextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Toast/EToast.js.map +1 -1
- package/dist/components/Toast/EToast.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/Toast/EToast.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ToastProvider/EToastProvider.js.map +1 -1
- package/dist/components/ToastProvider/EToastProvider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Tooltip/ETooltip.js.map +1 -1
- package/dist/components/Tooltip/ETooltip.vue.d.ts +1 -0
- package/dist/components/Tooltip/ETooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/Upload/EUpload.js.map +1 -1
- package/dist/components/Upload/EUpload.vue.d.ts +5 -3
- package/dist/components/Upload/EUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/fonts.css +1 -1
- package/dist/index.d.ts +2 -25
- package/dist/index.js +71 -94
- package/dist/messages.d.ts +0 -13
- package/dist/messages.js +0 -13
- package/dist/messages.js.map +1 -1
- package/dist/style.css +2668 -3128
- package/package.json +4 -2
- package/dist/components/Accordion/EAccordion.js +0 -8
- package/dist/components/Accordion/EAccordion.js.map +0 -1
- package/dist/components/Accordion/EAccordion.vue.d.ts +0 -32
- package/dist/components/Accordion/EAccordion.vue_vue_type_script_setup_true_lang.js +0 -35
- package/dist/components/Accordion/EAccordion.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/Accordion/index.d.ts +0 -2
- package/dist/components/AddressField/EAddressField.js +0 -8
- package/dist/components/AddressField/EAddressField.js.map +0 -1
- package/dist/components/AddressField/EAddressField.vue.d.ts +0 -39
- package/dist/components/AddressField/EAddressField.vue_vue_type_script_setup_true_lang.js +0 -119
- package/dist/components/AddressField/EAddressField.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/AddressField/index.d.ts +0 -2
- package/dist/components/AddressField/usStates.d.ts +0 -5
- package/dist/components/AddressField/usStates.js +0 -211
- package/dist/components/AddressField/usStates.js.map +0 -1
- package/dist/components/Amount/EAmount.js +0 -8
- package/dist/components/Amount/EAmount.js.map +0 -1
- package/dist/components/Amount/EAmount.vue.d.ts +0 -21
- package/dist/components/Amount/EAmount.vue_vue_type_script_setup_true_lang.js +0 -38
- package/dist/components/Amount/EAmount.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/Amount/index.d.ts +0 -2
- package/dist/components/Autocomplete/EAutocomplete.js +0 -7
- package/dist/components/Autocomplete/EAutocomplete.js.map +0 -1
- package/dist/components/Autocomplete/EAutocomplete.vue.d.ts +0 -44
- package/dist/components/Autocomplete/EAutocomplete.vue_vue_type_script_setup_true_lang.js +0 -58
- package/dist/components/Autocomplete/EAutocomplete.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/Autocomplete/index.d.ts +0 -1
- package/dist/components/BackLink/EBackLink.js +0 -8
- package/dist/components/BackLink/EBackLink.js.map +0 -1
- package/dist/components/BackLink/EBackLink.vue.d.ts +0 -23
- package/dist/components/BackLink/EBackLink.vue_vue_type_script_setup_true_lang.js +0 -27
- package/dist/components/BackLink/EBackLink.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/BackLink/index.d.ts +0 -1
- package/dist/components/BookingCard/EBookingCard.js +0 -8
- package/dist/components/BookingCard/EBookingCard.js.map +0 -1
- package/dist/components/BookingCard/EBookingCard.vue.d.ts +0 -46
- package/dist/components/BookingCard/EBookingCard.vue_vue_type_script_setup_true_lang.js +0 -86
- package/dist/components/BookingCard/EBookingCard.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/BookingCard/index.d.ts +0 -2
- package/dist/components/ButtonGroup/EButtonGroup.js +0 -8
- package/dist/components/ButtonGroup/EButtonGroup.js.map +0 -1
- package/dist/components/ButtonGroup/EButtonGroup.vue_vue_type_script_setup_true_lang.js +0 -18
- package/dist/components/ButtonGroup/EButtonGroup.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/ButtonGroup/index.d.ts +0 -1
- package/dist/components/CardField/ECardField.js +0 -8
- package/dist/components/CardField/ECardField.js.map +0 -1
- package/dist/components/CardField/ECardField.vue.d.ts +0 -31
- package/dist/components/CardField/ECardField.vue_vue_type_script_setup_true_lang.js +0 -65
- package/dist/components/CardField/ECardField.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/CardField/index.d.ts +0 -1
- package/dist/components/Chip/EChip.js +0 -8
- package/dist/components/Chip/EChip.js.map +0 -1
- package/dist/components/Chip/EChip.vue.d.ts +0 -22
- package/dist/components/Chip/EChip.vue_vue_type_script_setup_true_lang.js +0 -18
- package/dist/components/Chip/EChip.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/Chip/index.d.ts +0 -2
- package/dist/components/Combobox/EHighlight.js.map +0 -1
- package/dist/components/DetailRow/EDetailRow.js +0 -8
- package/dist/components/DetailRow/EDetailRow.js.map +0 -1
- package/dist/components/DetailRow/EDetailRow.vue.d.ts +0 -30
- package/dist/components/DetailRow/EDetailRow.vue_vue_type_script_setup_true_lang.js +0 -53
- package/dist/components/DetailRow/EDetailRow.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/DetailRow/index.d.ts +0 -1
- package/dist/components/ErrorSummary/EErrorSummary.js +0 -8
- package/dist/components/ErrorSummary/EErrorSummary.js.map +0 -1
- package/dist/components/ErrorSummary/EErrorSummary.vue.d.ts +0 -30
- package/dist/components/ErrorSummary/EErrorSummary.vue_vue_type_script_setup_true_lang.js +0 -52
- package/dist/components/ErrorSummary/EErrorSummary.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/ErrorSummary/index.d.ts +0 -2
- package/dist/components/FormSection/EFormSection.js +0 -8
- package/dist/components/FormSection/EFormSection.js.map +0 -1
- package/dist/components/FormSection/EFormSection.vue.d.ts +0 -28
- package/dist/components/FormSection/EFormSection.vue_vue_type_script_setup_true_lang.js +0 -38
- package/dist/components/FormSection/EFormSection.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/FormSection/index.d.ts +0 -1
- package/dist/components/ItemList/EItemList.js +0 -8
- package/dist/components/ItemList/EItemList.js.map +0 -1
- package/dist/components/ItemList/EItemList.vue.d.ts +0 -13
- package/dist/components/ItemList/EItemList.vue_vue_type_script_setup_true_lang.js +0 -17
- package/dist/components/ItemList/EItemList.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/ItemList/context.d.ts +0 -3
- package/dist/components/ItemList/context.js +0 -6
- package/dist/components/ItemList/context.js.map +0 -1
- package/dist/components/ItemList/index.d.ts +0 -1
- package/dist/components/ItemRow/EItemRow.js +0 -8
- package/dist/components/ItemRow/EItemRow.js.map +0 -1
- package/dist/components/ItemRow/EItemRow.vue.d.ts +0 -29
- package/dist/components/ItemRow/EItemRow.vue_vue_type_script_setup_true_lang.js +0 -54
- package/dist/components/ItemRow/EItemRow.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/ItemRow/index.d.ts +0 -1
- package/dist/components/LinkCard/ELinkCard.js +0 -8
- package/dist/components/LinkCard/ELinkCard.js.map +0 -1
- package/dist/components/LinkCard/ELinkCard.vue.d.ts +0 -39
- package/dist/components/LinkCard/ELinkCard.vue_vue_type_script_setup_true_lang.js +0 -61
- package/dist/components/LinkCard/ELinkCard.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/LinkCard/index.d.ts +0 -1
- package/dist/components/LoadingBar/ELoadingBar.js +0 -8
- package/dist/components/LoadingBar/ELoadingBar.js.map +0 -1
- package/dist/components/LoadingBar/ELoadingBar.vue.d.ts +0 -7
- package/dist/components/LoadingBar/ELoadingBar.vue_vue_type_script_setup_true_lang.js +0 -21
- package/dist/components/LoadingBar/ELoadingBar.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/LoadingBar/index.d.ts +0 -1
- package/dist/components/MetaList/EMetaList.js +0 -8
- package/dist/components/MetaList/EMetaList.js.map +0 -1
- package/dist/components/MetaList/EMetaList.vue.d.ts +0 -15
- package/dist/components/MetaList/EMetaList.vue_vue_type_script_setup_true_lang.js +0 -19
- package/dist/components/MetaList/EMetaList.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/MetaList/index.d.ts +0 -2
- package/dist/components/MultiSelect/EMultiSelect.js +0 -7
- package/dist/components/MultiSelect/EMultiSelect.js.map +0 -1
- package/dist/components/MultiSelect/EMultiSelect.vue.d.ts +0 -44
- package/dist/components/MultiSelect/EMultiSelect.vue_vue_type_script_setup_true_lang.js +0 -58
- package/dist/components/MultiSelect/EMultiSelect.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/MultiSelect/index.d.ts +0 -1
- package/dist/components/Panel/EPanel.js +0 -8
- package/dist/components/Panel/EPanel.js.map +0 -1
- package/dist/components/Panel/EPanel.vue.d.ts +0 -25
- package/dist/components/Panel/EPanel.vue_vue_type_script_setup_true_lang.js +0 -38
- package/dist/components/Panel/EPanel.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/Panel/index.d.ts +0 -1
- package/dist/components/Popover/EPopover.js +0 -8
- package/dist/components/Popover/EPopover.js.map +0 -1
- package/dist/components/Popover/EPopover.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/Popover/index.d.ts +0 -1
- package/dist/components/SlotPicker/ESlotPicker.js +0 -8
- package/dist/components/SlotPicker/ESlotPicker.js.map +0 -1
- package/dist/components/SlotPicker/ESlotPicker.vue.d.ts +0 -55
- package/dist/components/SlotPicker/ESlotPicker.vue_vue_type_script_setup_true_lang.js +0 -82
- package/dist/components/SlotPicker/ESlotPicker.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/SlotPicker/index.d.ts +0 -2
- package/dist/components/StatementCard/EStatementCard.js +0 -8
- package/dist/components/StatementCard/EStatementCard.js.map +0 -1
- package/dist/components/StatementCard/EStatementCard.vue.d.ts +0 -20
- package/dist/components/StatementCard/EStatementCard.vue_vue_type_script_setup_true_lang.js +0 -96
- package/dist/components/StatementCard/EStatementCard.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/StatementCard/index.d.ts +0 -2
- package/dist/components/StatementCard/types.d.ts +0 -37
- package/dist/components/StatementRow/EStatementRow.js +0 -8
- package/dist/components/StatementRow/EStatementRow.js.map +0 -1
- package/dist/components/StatementRow/EStatementRow.vue.d.ts +0 -14
- package/dist/components/StatementRow/EStatementRow.vue_vue_type_script_setup_true_lang.js +0 -96
- package/dist/components/StatementRow/EStatementRow.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/StatementRow/index.d.ts +0 -1
- package/dist/components/Tabs/LinkNav.js.map +0 -1
- package/dist/components/Tabs/LinkNav.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/Timeline/ETimeline.js +0 -8
- package/dist/components/Timeline/ETimeline.js.map +0 -1
- package/dist/components/Timeline/ETimeline.vue.d.ts +0 -15
- package/dist/components/Timeline/ETimeline.vue_vue_type_script_setup_true_lang.js +0 -43
- package/dist/components/Timeline/ETimeline.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/Timeline/index.d.ts +0 -2
- package/dist/components/Toggle/EToggle.js +0 -8
- package/dist/components/Toggle/EToggle.js.map +0 -1
- package/dist/components/Toggle/EToggle.vue.d.ts +0 -27
- package/dist/components/Toggle/EToggle.vue_vue_type_script_setup_true_lang.js +0 -40
- package/dist/components/Toggle/EToggle.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/Toggle/index.d.ts +0 -1
- /package/dist/components/Combobox/{EHighlight.d.ts → matchHighlight.d.ts} +0 -0
- /package/dist/components/{Tabs → NavList}/LinkNav.vue.d.ts +0 -0
|
@@ -8,6 +8,8 @@ var c = /*@__PURE__*/ n({
|
|
|
8
8
|
ariaLabel: {},
|
|
9
9
|
label: {},
|
|
10
10
|
bare: { type: Boolean },
|
|
11
|
+
multiple: { type: Boolean },
|
|
12
|
+
freeform: { type: Boolean },
|
|
11
13
|
options: {},
|
|
12
14
|
placeholder: {},
|
|
13
15
|
hint: {},
|
|
@@ -25,7 +27,7 @@ var c = /*@__PURE__*/ n({
|
|
|
25
27
|
filter: {},
|
|
26
28
|
id: {}
|
|
27
29
|
}, {
|
|
28
|
-
modelValue: {
|
|
30
|
+
modelValue: {},
|
|
29
31
|
modelModifiers: {},
|
|
30
32
|
open: {
|
|
31
33
|
type: Boolean,
|
|
@@ -47,7 +49,6 @@ var c = /*@__PURE__*/ n({
|
|
|
47
49
|
"onUpdate:modelValue": r[0] ||= (e) => l.value = e,
|
|
48
50
|
open: u.value,
|
|
49
51
|
"onUpdate:open": r[1] ||= (e) => u.value = e,
|
|
50
|
-
mode: "single",
|
|
51
52
|
onInputChange: r[2] ||= (e) => n.$emit("inputChange", e)
|
|
52
53
|
}), null, 16, ["modelValue", "open"]));
|
|
53
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECombobox.vue_vue_type_script_setup_true_lang.js","names":["$emit","_useModel","_openBlock","_createBlock","EComboboxBase","_mergeProps","EComboboxBase_default","ECombobox_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"open\"","\"openModifiers\"","__expose","props","__props","model","useModel","open","base","ref","openBlock","createBlock","mergeProps","_cache","$event","_ctx","text"],"sources":["../../../src/components/Combobox/ECombobox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport EComboboxBase from \"./EComboboxBase.vue\";\nimport type { EComboboxProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<EComboboxProps>(), { clearable: true });\n\ndefineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\
|
|
1
|
+
{"version":3,"file":"ECombobox.vue_vue_type_script_setup_true_lang.js","names":["$emit","_useModel","_openBlock","_createBlock","EComboboxBase","_mergeProps","EComboboxBase_default","ECombobox_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"open\"","\"openModifiers\"","__expose","props","__props","model","useModel","open","base","ref","openBlock","createBlock","mergeProps","_cache","$event","_ctx","text"],"sources":["../../../src/components/Combobox/ECombobox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport EComboboxBase from \"./EComboboxBase.vue\";\nimport type { EComboboxProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<EComboboxProps>(), { clearable: true });\n\ndefineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\n/** The `value` of the chosen option, empty for nothing; with `multiple` the chosen values in the order chosen (replaced, not mutated); with `freeform` the typed text, updated on every key. @default \"\" or [] */\nconst model = defineModel<string | string[]>();\n\n/** Whether the list is open. Setting it moves no focus; a disabled field never opens. */\nconst open = defineModel<boolean>(\"open\", { default: false });\n\nconst base = ref<InstanceType<typeof EComboboxBase> | null>(null);\ndefineExpose({\n input: () => base.value?.input ?? null,\n focus: () => base.value?.focus(),\n});\n</script>\n\n<template>\n <EComboboxBase\n ref=\"base\"\n v-bind=\"props\"\n v-model=\"model\"\n v-model:open=\"open\"\n @input-change=\"(text: string) => $emit('inputChange', text)\"\n />\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKA,IAAMa,IAAQC,GAQRC,IAAQd,EAA8Ba,GAAA,YAAC,GAGvCG,IAAOhB,EAAoBa,GAAC,MAA0B,GAEtDI,IAAOC,EAA+C,IAAI;E,OAChEP,EAAa;GACX,aAAaM,EAAK,OAAO,SAAS;GAClC,aAAaA,EAAK,OAAO,MAAM;EACjC,CAAC,I,UAIChB,EAAA,GAAAC,EAMEC,GANFC,EAME;GALI,SAAA;GAAJ,KAAIa;EACI,GAAAL,GAAK;GACJ,YAAAE,EAAA;GAAA,uBAAA,AAAAQ,EAAA,QAAA,MAAA,EAAK,QAAAC;GACN,MAAMP,EAAA;GAAA,iBAAA,AAAAM,EAAA,QAAA,MAAA,EAAI,QAAAC;GACjB,eAAY,AAAAD,EAAA,QAAG,MAAiBvB,EAAAA,MAAK,eAAgB0B,CAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EComboboxBase.js","names":["_sfc_main","EComboboxBase_vue_vue_type_script_setup_true_lang_default","EComboboxBase_default"],"sources":["../../../src/components/Combobox/EComboboxBase.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, nextTick, onMounted, ref, watch, type FunctionalComponent } from \"vue\";\nimport {\n ComboboxAnchor,\n ComboboxContent,\n ComboboxInput,\n ComboboxPortal,\n ComboboxRoot,\n ComboboxTrigger,\n ComboboxViewport,\n} from \"reka-ui\";\nimport EField from \"../Field/EField.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport ESpinner from \"../Spinner/ESpinner.vue\";\nimport EComboboxOption from \"./EComboboxOption.vue\";\nimport { normalizeOptions, sectionOptions } from \"../Select/options.js\";\nimport type { EComboboxProps } from \"./types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\nimport \"./combo.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<EComboboxProps & { mode: \"single\" | \"free\" | \"multiple\" }>(), {\n clearable: true,\n});\n\nconst emit = defineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\nconst model = defineModel<string | string[]>();\n\nconst t = useMessages();\nconst portal = usePortalTarget();\nconst attrs = useFieldAttrs();\nconst groupId = useUid();\nconst bareId = useUid(() => props.id);\n\nconst Bare: FunctionalComponent = (_, { slots }) =>\n h(\"div\", attrs.wrapper(), slots.default?.({ id: bareId.value, ariaInvalid: undefined, ariaDescribedby: undefined }));\nconst frame = computed(() =>\n props.bare\n ? {}\n : {\n id: props.id,\n label: props.label,\n hideLabel: props.hideLabel,\n hint: props.hint,\n error: props.error,\n required: props.required,\n optional: props.optional,\n },\n);\nconst listName = computed(() => (props.bare ? (props.ariaLabel ?? props.label) : props.label));\n\nconst multiple = computed(() => props.mode === \"multiple\");\nconst free = computed(() => props.mode === \"free\");\nconst all = computed(() => normalizeOptions(props.options));\nconst values = computed<string[]>(() => (multiple.value && Array.isArray(model.value) ? model.value : []));\nconst single = computed(() => (typeof model.value === \"string\" ? model.value : \"\"));\nconst rootValue = computed(() => (multiple.value ? values.value : single.value));\n\nfunction labelOf(v: string): string {\n return all.value.find((o) => o.value === v)?.label ?? (free.value ? v : \"\");\n}\nconst resting = () => (multiple.value ? \"\" : labelOf(single.value));\n\nconst text = ref(resting());\nconst typing = ref(false);\nconst wantOpen = defineModel<boolean>(\"open\", { default: false });\nconst anchor = ref<{ $el: HTMLElement } | null>(null);\nconst query = computed(() => (typing.value ? text.value.trim().toLowerCase() : \"\"));\n\nconst shown = computed(() => {\n const q = query.value;\n if (props.filter) return all.value.filter((o) => props.filter!(o, q));\n return all.value.filter(\n (o) => !q || o.label.toLowerCase().includes(q) || (o.description ?? \"\").toLowerCase().includes(q),\n );\n});\nconst sections = computed(() => sectionOptions(shown.value));\nconst hasList = computed(() => shown.value.length > 0 || !!props.loading || !free.value);\nconst open = computed(() => wantOpen.value && hasList.value && !props.disabled);\nconst announce = computed(() =>\n open.value && !shown.value.length ? (props.loading ? t(\"searching\") : props.emptyText || t(\"noMatches\")) : \"\",\n);\nconst hasValue = computed(() => (multiple.value ? values.value.length > 0 : !!text.value));\n\nwatch(rootValue, () => {\n const rest = resting();\n if (rest !== text.value) {\n text.value = rest;\n typing.value = false;\n }\n});\nwatch(all, () => {\n if (!typing.value && !open.value) text.value = resting();\n});\n\nconst listId = ref<string | undefined>();\nconst content = ref<{ $el: HTMLElement } | null>(null);\nonMounted(() => {\n if (!open.value) return;\n let tries = 0;\n const read = () => {\n listId.value = content.value?.$el?.id || undefined;\n if (!listId.value && tries++ < 10) requestAnimationFrame(read);\n };\n void nextTick(read);\n});\n\nconst inputEl = () => anchor.value?.$el?.querySelector(\"input\") ?? null;\nconst focusInput = () => inputEl()?.focus();\n\nfunction isSelected(value: string): boolean {\n return multiple.value ? values.value.includes(value) : free.value ? single.value === value : single.value === value;\n}\nconst itemValue = (o: { value: string; label: string }) => (free.value ? o.label : o.value);\n\nfunction onPick(v: unknown) {\n typing.value = false;\n if (multiple.value) {\n model.value = Array.isArray(v) ? (v as string[]) : [];\n text.value = \"\";\n emit(\"inputChange\", \"\");\n return;\n }\n const next = typeof v === \"string\" ? v : \"\";\n model.value = next;\n text.value = free.value ? next : labelOf(next);\n emit(\"inputChange\", text.value);\n}\n\nfunction onInput(e: Event) {\n const v = (e.target as HTMLInputElement).value;\n text.value = v;\n typing.value = true;\n wantOpen.value = true;\n emit(\"inputChange\", v);\n if (free.value) model.value = v;\n}\n\nfunction remove(v: string) {\n model.value = values.value.filter((x) => x !== v);\n}\n\nfunction clear() {\n model.value = multiple.value ? [] : \"\";\n text.value = \"\";\n typing.value = false;\n emit(\"inputChange\", \"\");\n focusInput();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === \"Escape\" && !open.value && text.value) {\n e.preventDefault();\n clear();\n } else if (e.key === \"Backspace\" && multiple.value && !text.value && values.value.length) {\n remove(values.value[values.value.length - 1]!);\n }\n}\n\nfunction keepCaretKeys(e: KeyboardEvent) {\n if (e.key === \"Home\" || e.key === \"End\") e.stopImmediatePropagation();\n}\n\nfunction onBlur(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n if (next && (anchor.value?.$el?.contains(next) || next.closest?.(\".e-popover\"))) return;\n wantOpen.value = false;\n typing.value = false;\n if (!free.value) text.value = resting();\n}\n\nfunction onWrapDown(e: MouseEvent) {\n if (e.target === e.currentTarget && !props.disabled) {\n e.preventDefault();\n focusInput();\n }\n}\n\ntype FieldSlot = { id: string; ariaInvalid: \"true\" | undefined; ariaDescribedby: string | undefined };\nfunction inputBind(field: FieldSlot) {\n return {\n id: field.id,\n required: props.required && !(multiple.value && values.value.length) ? true : undefined,\n placeholder: multiple.value && values.value.length ? \"\" : props.placeholder,\n \"aria-invalid\": field.ariaInvalid,\n \"aria-label\": props.bare ? listName.value : undefined,\n autocomplete: \"off\",\n ...(listId.value ? { \"aria-controls\": listId.value } : {}),\n ...(shown.value.length ? {} : { \"aria-activedescendant\": undefined }),\n ...attrs.input(field.ariaDescribedby),\n };\n}\n\ndefineExpose({\n input: computed(() => inputEl()),\n focus: focusInput,\n});\n</script>\n\n<template>\n <component :is=\"bare ? Bare : EField\" v-bind=\"{ ...attrs.wrapper(), ...frame }\">\n <template #default=\"field\">\n <ComboboxRoot\n class=\"e-combo-root\"\n :model-value=\"rootValue\"\n :multiple=\"multiple\"\n :open=\"open\"\n :disabled=\"disabled\"\n ignore-filter\n @update:model-value=\"onPick\"\n @update:open=\"wantOpen = $event\"\n >\n <ComboboxAnchor\n ref=\"anchor\"\n class=\"e-input-wrap e-combo\"\n :class=\"{ 'e-combo--multi': multiple }\"\n :data-invalid=\"error && !bare ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n @mousedown=\"onWrapDown\"\n @focusout=\"onBlur\"\n >\n <div class=\"e-combo-main\">\n <template v-if=\"multiple\">\n <span v-for=\"v in values\" :key=\"v\" class=\"e-tag\">\n {{ labelOf(v) }}\n <button\n type=\"button\"\n class=\"e-tag-x\"\n :aria-label=\"t('removeItem', { label: labelOf(v) })\"\n :disabled=\"disabled\"\n @click=\"remove(v)\"\n >\n <EIcon name=\"x\" small />\n </button>\n </span>\n </template>\n <ComboboxInput\n class=\"e-input e-combo-input\"\n :model-value=\"text\"\n :display-value=\"(v: unknown) => (typeof v === 'string' ? (free ? v : labelOf(v)) : '')\"\n :disabled=\"disabled\"\n v-bind=\"inputBind(field)\"\n @update:model-value=\"text = $event\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n @keydown.capture=\"keepCaretKeys\"\n />\n </div>\n <template v-if=\"name\">\n <input v-for=\"(v, k) in multiple ? values : [single]\" :key=\"k\" type=\"hidden\" :name=\"name\" :value=\"v\" />\n </template>\n <div class=\"e-combo-tail\">\n <button\n v-if=\"hasValue && clearable && !disabled\"\n type=\"button\"\n class=\"e-combo-btn\"\n :aria-label=\"t('clear')\"\n @mousedown.prevent\n @click=\"clear\"\n >\n <EIcon name=\"x\" />\n </button>\n <ComboboxTrigger\n v-if=\"!free\"\n class=\"e-combo-btn\"\n :aria-label=\"t('showOptions')\"\n :disabled=\"disabled\"\n @mousedown.prevent\n >\n <EIcon name=\"chevron-down\" bold />\n </ComboboxTrigger>\n </div>\n </ComboboxAnchor>\n <span class=\"e-sr\" role=\"status\">{{ announce }}</span>\n <ComboboxPortal :to=\"portal\">\n <ComboboxContent\n ref=\"content\"\n position=\"popper\"\n align=\"start\"\n :side-offset=\"6\"\n :collision-padding=\"8\"\n class=\"e-popover e-listpanel e-root\"\n :aria-label=\"listName\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <ComboboxViewport>\n <template v-if=\"shown.length\">\n <template v-for=\"(section, i) in sections\" :key=\"i\">\n <div v-if=\"section.group\" class=\"e-opt-set\" role=\"group\" :aria-labelledby=\"`${groupId}-g${i}`\">\n <div :id=\"`${groupId}-g${i}`\" class=\"e-opt-group\">{{ section.group }}</div>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </div>\n <template v-else>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </template>\n </template>\n </template>\n <div v-else class=\"e-opt-status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <ESpinner v-if=\"loading\" :label=\"t('searching')\" />\n <template v-else>{{ emptyText || t(\"noMatches\") }}</template>\n </div>\n </ComboboxViewport>\n </ComboboxContent>\n </ComboboxPortal>\n </ComboboxRoot>\n </template>\n </component>\n</template>\n\n<style>\n@layer e.controls {\n .e-combo-main {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n align-items: center;\n align-self: stretch;\n gap: var(--e-space-1);\n min-width: 0;\n }\n\n .e-combo-tail {\n display: flex;\n flex: none;\n align-items: center;\n align-self: center;\n }\n\n .e-combo--multi {\n padding: 3px var(--e-space-1) 3px var(--e-space-2);\n gap: var(--e-space-1);\n }\n\n .e-combo--multi .e-input {\n height: calc(var(--e-control-height) - 9px);\n align-self: center;\n padding-inline: var(--e-space-2);\n }\n\n .e-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: 32px;\n padding: 0 var(--e-space-1) 0 var(--e-space-3);\n border-radius: var(--e-radius-pill);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 1px var(--e-primary);\n color: var(--e-ink);\n font: 500 var(--e-text-sm)/1 var(--e-font-sans);\n }\n\n .e-tag-x::after {\n content: \"\";\n position: absolute;\n inset: -10px;\n }\n\n .e-tag-x {\n position: relative;\n display: inline-grid;\n place-items: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: transparent;\n color: var(--e-primary);\n cursor: pointer;\n }\n\n .e-tag-x:hover {\n background: var(--e-wash-hover);\n box-shadow: inset 0 0 0 1px var(--e-primary);\n }\n\n .e-tag-x:active {\n background: var(--e-wash-press);\n }\n\n .e-tag-x:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: 1px;\n }\n}\n</style>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"EComboboxBase.js","names":["_sfc_main","EComboboxBase_vue_vue_type_script_setup_true_lang_default","EComboboxBase_default"],"sources":["../../../src/components/Combobox/EComboboxBase.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, nextTick, onMounted, ref, watch, type FunctionalComponent } from \"vue\";\nimport {\n ComboboxAnchor,\n ComboboxContent,\n ComboboxInput,\n ComboboxPortal,\n ComboboxRoot,\n ComboboxTrigger,\n ComboboxViewport,\n} from \"reka-ui\";\nimport EField from \"../Field/EField.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport ESpinner from \"../Spinner/ESpinner.vue\";\nimport EComboboxOption from \"./EComboboxOption.vue\";\nimport { normalizeOptions, sectionOptions } from \"../Select/options.js\";\nimport type { EComboboxProps } from \"./types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\nimport \"./combo.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<EComboboxProps>(), {\n clearable: true,\n});\n\nconst emit = defineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\nconst model = defineModel<string | string[]>();\n\nconst t = useMessages();\nconst portal = usePortalTarget();\nconst attrs = useFieldAttrs();\nconst groupId = useUid();\nconst bareId = useUid(() => props.id);\n\nconst Bare: FunctionalComponent = (_, { slots }) =>\n h(\"div\", attrs.wrapper(), slots.default?.({ id: bareId.value, ariaInvalid: undefined, ariaDescribedby: undefined }));\nconst frame = computed(() =>\n props.bare\n ? {}\n : {\n id: props.id,\n label: props.label,\n hideLabel: props.hideLabel,\n hint: props.hint,\n error: props.error,\n required: props.required,\n optional: props.optional,\n },\n);\nconst listName = computed(() => (props.bare ? (props.ariaLabel ?? props.label) : props.label));\n\nconst multiple = computed(() => props.multiple);\n// Free text is for one value; with `multiple` it is ignored.\nconst free = computed(() => props.freeform && !props.multiple);\nconst all = computed(() => normalizeOptions(props.options));\nconst values = computed<string[]>(() => (multiple.value && Array.isArray(model.value) ? model.value : []));\nconst single = computed(() => (typeof model.value === \"string\" ? model.value : \"\"));\nconst rootValue = computed(() => (multiple.value ? values.value : single.value));\n\nfunction labelOf(v: string): string {\n return all.value.find((o) => o.value === v)?.label ?? (free.value ? v : \"\");\n}\nconst resting = () => (multiple.value ? \"\" : labelOf(single.value));\n\nconst text = ref(resting());\nconst typing = ref(false);\nconst wantOpen = defineModel<boolean>(\"open\", { default: false });\nconst anchor = ref<{ $el: HTMLElement } | null>(null);\nconst query = computed(() => (typing.value ? text.value.trim().toLowerCase() : \"\"));\n\nconst shown = computed(() => {\n const q = query.value;\n if (props.filter) return all.value.filter((o) => props.filter!(o, q));\n return all.value.filter(\n (o) => !q || o.label.toLowerCase().includes(q) || (o.description ?? \"\").toLowerCase().includes(q),\n );\n});\nconst sections = computed(() => sectionOptions(shown.value));\nconst hasList = computed(() => shown.value.length > 0 || !!props.loading || !free.value);\nconst open = computed(() => wantOpen.value && hasList.value && !props.disabled);\nconst announce = computed(() =>\n open.value && !shown.value.length ? (props.loading ? t(\"searching\") : props.emptyText || t(\"noMatches\")) : \"\",\n);\nconst hasValue = computed(() => (multiple.value ? values.value.length > 0 : !!text.value));\n\nwatch(rootValue, () => {\n const rest = resting();\n if (rest !== text.value) {\n text.value = rest;\n typing.value = false;\n }\n});\nwatch(all, () => {\n if (!typing.value && !open.value) text.value = resting();\n});\n\nconst listId = ref<string | undefined>();\nconst content = ref<{ $el: HTMLElement } | null>(null);\nonMounted(() => {\n if (!open.value) return;\n let tries = 0;\n const read = () => {\n listId.value = content.value?.$el?.id || undefined;\n if (!listId.value && tries++ < 10) requestAnimationFrame(read);\n };\n void nextTick(read);\n});\n\nconst inputEl = () => anchor.value?.$el?.querySelector(\"input\") ?? null;\nconst focusInput = () => inputEl()?.focus();\n\nfunction isSelected(value: string): boolean {\n return multiple.value ? values.value.includes(value) : free.value ? single.value === value : single.value === value;\n}\nconst itemValue = (o: { value: string; label: string }) => (free.value ? o.label : o.value);\n\nfunction onPick(v: unknown) {\n typing.value = false;\n if (multiple.value) {\n model.value = Array.isArray(v) ? (v as string[]) : [];\n text.value = \"\";\n emit(\"inputChange\", \"\");\n return;\n }\n const next = typeof v === \"string\" ? v : \"\";\n model.value = next;\n text.value = free.value ? next : labelOf(next);\n emit(\"inputChange\", text.value);\n}\n\nfunction onInput(e: Event) {\n const v = (e.target as HTMLInputElement).value;\n text.value = v;\n typing.value = true;\n wantOpen.value = true;\n emit(\"inputChange\", v);\n if (free.value) model.value = v;\n}\n\nfunction remove(v: string) {\n model.value = values.value.filter((x) => x !== v);\n}\n\nfunction clear() {\n model.value = multiple.value ? [] : \"\";\n text.value = \"\";\n typing.value = false;\n emit(\"inputChange\", \"\");\n focusInput();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === \"Escape\" && !open.value && text.value) {\n e.preventDefault();\n clear();\n } else if (e.key === \"Backspace\" && multiple.value && !text.value && values.value.length) {\n remove(values.value[values.value.length - 1]!);\n }\n}\n\nfunction keepCaretKeys(e: KeyboardEvent) {\n if (e.key === \"Home\" || e.key === \"End\") e.stopImmediatePropagation();\n}\n\nfunction onBlur(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n if (next && (anchor.value?.$el?.contains(next) || next.closest?.(\".e-popover\"))) return;\n wantOpen.value = false;\n typing.value = false;\n if (!free.value) text.value = resting();\n}\n\nfunction onWrapDown(e: MouseEvent) {\n if (e.target === e.currentTarget && !props.disabled) {\n e.preventDefault();\n focusInput();\n }\n}\n\ntype FieldSlot = { id: string; ariaInvalid: \"true\" | undefined; ariaDescribedby: string | undefined };\nfunction inputBind(field: FieldSlot) {\n return {\n id: field.id,\n required: props.required && !(multiple.value && values.value.length) ? true : undefined,\n placeholder: multiple.value && values.value.length ? \"\" : props.placeholder,\n \"aria-invalid\": field.ariaInvalid,\n \"aria-label\": props.bare ? listName.value : undefined,\n autocomplete: \"off\",\n ...(listId.value ? { \"aria-controls\": listId.value } : {}),\n ...(shown.value.length ? {} : { \"aria-activedescendant\": undefined }),\n ...attrs.input(field.ariaDescribedby),\n };\n}\n\ndefineExpose({\n input: computed(() => inputEl()),\n focus: focusInput,\n});\n</script>\n\n<template>\n <component :is=\"bare ? Bare : EField\" v-bind=\"{ ...attrs.wrapper(), ...frame }\">\n <template #default=\"field\">\n <ComboboxRoot\n class=\"e-combo-root\"\n :model-value=\"rootValue\"\n :multiple=\"multiple\"\n :open=\"open\"\n :disabled=\"disabled\"\n ignore-filter\n @update:model-value=\"onPick\"\n @update:open=\"wantOpen = $event\"\n >\n <ComboboxAnchor\n ref=\"anchor\"\n class=\"e-input-wrap e-combo\"\n :class=\"{ 'e-combo--multi': multiple }\"\n :data-invalid=\"error && !bare ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n @mousedown=\"onWrapDown\"\n @focusout=\"onBlur\"\n >\n <div class=\"e-combo-main\">\n <template v-if=\"multiple\">\n <span v-for=\"v in values\" :key=\"v\" class=\"e-tag\">\n {{ labelOf(v) }}\n <button\n type=\"button\"\n class=\"e-tag-x\"\n :aria-label=\"t('removeItem', { label: labelOf(v) })\"\n :disabled=\"disabled\"\n @click=\"remove(v)\"\n >\n <EIcon name=\"x\" small />\n </button>\n </span>\n </template>\n <ComboboxInput\n class=\"e-input e-combo-input\"\n :model-value=\"text\"\n :display-value=\"(v: unknown) => (typeof v === 'string' ? (free ? v : labelOf(v)) : '')\"\n :disabled=\"disabled\"\n v-bind=\"inputBind(field)\"\n @update:model-value=\"text = $event\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n @keydown.capture=\"keepCaretKeys\"\n />\n </div>\n <template v-if=\"name\">\n <input v-for=\"(v, k) in multiple ? values : [single]\" :key=\"k\" type=\"hidden\" :name=\"name\" :value=\"v\" />\n </template>\n <div class=\"e-combo-tail\">\n <button\n v-if=\"hasValue && clearable && !disabled\"\n type=\"button\"\n class=\"e-combo-btn\"\n :aria-label=\"t('clear')\"\n @mousedown.prevent\n @click=\"clear\"\n >\n <EIcon name=\"x\" />\n </button>\n <ComboboxTrigger\n v-if=\"!free\"\n class=\"e-combo-btn\"\n :aria-label=\"t('showOptions')\"\n :disabled=\"disabled\"\n @mousedown.prevent\n >\n <EIcon name=\"chevron-down\" bold />\n </ComboboxTrigger>\n </div>\n </ComboboxAnchor>\n <span class=\"e-sr\" role=\"status\">{{ announce }}</span>\n <ComboboxPortal :to=\"portal\">\n <ComboboxContent\n ref=\"content\"\n position=\"popper\"\n align=\"start\"\n :side-offset=\"6\"\n :collision-padding=\"8\"\n class=\"e-popover e-listpanel e-root\"\n :aria-label=\"listName\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <ComboboxViewport>\n <template v-if=\"shown.length\">\n <template v-for=\"(section, i) in sections\" :key=\"i\">\n <div v-if=\"section.group\" class=\"e-opt-set\" role=\"group\" :aria-labelledby=\"`${groupId}-g${i}`\">\n <div :id=\"`${groupId}-g${i}`\" class=\"e-opt-group\">{{ section.group }}</div>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </div>\n <template v-else>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </template>\n </template>\n </template>\n <div v-else class=\"e-opt-status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <ESpinner v-if=\"loading\" :label=\"t('searching')\" />\n <template v-else>{{ emptyText || t(\"noMatches\") }}</template>\n </div>\n </ComboboxViewport>\n </ComboboxContent>\n </ComboboxPortal>\n </ComboboxRoot>\n </template>\n </component>\n</template>\n\n<style>\n@layer e.controls {\n .e-combo-main {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n align-items: center;\n align-self: stretch;\n gap: var(--e-space-1);\n min-width: 0;\n }\n\n .e-combo-tail {\n display: flex;\n flex: none;\n align-items: center;\n align-self: center;\n }\n\n .e-combo--multi {\n padding: 3px var(--e-space-1) 3px var(--e-space-2);\n gap: var(--e-space-1);\n }\n\n .e-combo--multi .e-input {\n height: calc(var(--e-control-height) - 9px);\n align-self: center;\n padding-inline: var(--e-space-2);\n }\n\n .e-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: var(--e-space-8);\n padding: 0 var(--e-space-1) 0 var(--e-space-3);\n border-radius: var(--e-radius-pill);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n color: var(--e-ink);\n font: 500 var(--e-text-sm)/1 var(--e-font-sans);\n }\n\n .e-tag-x::after {\n content: \"\";\n position: absolute;\n inset: calc((var(--e-tap) - var(--e-space-6)) / -2);\n }\n\n .e-tag-x {\n position: relative;\n display: inline-grid;\n place-items: center;\n width: var(--e-space-6);\n height: var(--e-space-6);\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: transparent;\n color: var(--e-primary);\n cursor: pointer;\n }\n\n .e-tag-x:hover {\n background: var(--e-wash-hover);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n }\n\n .e-tag-x:active {\n background: var(--e-wash-press);\n }\n\n .e-tag-x:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n }\n\n @media (forced-colors: active) {\n .e-tag {\n outline: var(--e-stroke-card) solid CanvasText;\n }\n }\n}\n</style>\n"],"mappings":""}
|
|
@@ -8,43 +8,35 @@ declare const __VLS_export: import('vue').DefineComponent<({
|
|
|
8
8
|
} & {
|
|
9
9
|
label: string;
|
|
10
10
|
bare?: boolean;
|
|
11
|
-
} & import('./types.js').EComboboxFields & {
|
|
12
|
-
mode: "single" | "free" | "multiple";
|
|
13
|
-
} & __VLS_ModelProps) | ({
|
|
11
|
+
} & import('./types.js').EComboboxFields & __VLS_ModelProps) | ({
|
|
14
12
|
hideLabel?: boolean;
|
|
15
13
|
ariaLabel?: string;
|
|
16
14
|
} & {
|
|
17
15
|
label?: string;
|
|
18
16
|
bare: true;
|
|
19
|
-
} & import('./types.js').EComboboxFields & {
|
|
20
|
-
mode: "single" | "free" | "multiple";
|
|
21
|
-
} & __VLS_ModelProps), {
|
|
17
|
+
} & import('./types.js').EComboboxFields & __VLS_ModelProps), {
|
|
22
18
|
input: import('vue').ComputedRef<HTMLInputElement | null>;
|
|
23
19
|
focus: () => void | undefined;
|
|
24
20
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
25
|
-
"update:open": (value: boolean) => any;
|
|
26
21
|
"update:modelValue": (value: string | string[] | undefined) => any;
|
|
27
22
|
inputChange: (text: string) => any;
|
|
23
|
+
"update:open": (value: boolean) => any;
|
|
28
24
|
}, string, import('vue').PublicProps, Readonly<({
|
|
29
25
|
hideLabel?: boolean;
|
|
30
26
|
ariaLabel?: string;
|
|
31
27
|
} & {
|
|
32
28
|
label: string;
|
|
33
29
|
bare?: boolean;
|
|
34
|
-
} & import('./types.js').EComboboxFields & {
|
|
35
|
-
mode: "single" | "free" | "multiple";
|
|
36
|
-
} & __VLS_ModelProps) | ({
|
|
30
|
+
} & import('./types.js').EComboboxFields & __VLS_ModelProps) | ({
|
|
37
31
|
hideLabel?: boolean;
|
|
38
32
|
ariaLabel?: string;
|
|
39
33
|
} & {
|
|
40
34
|
label?: string;
|
|
41
35
|
bare: true;
|
|
42
|
-
} & import('./types.js').EComboboxFields & {
|
|
43
|
-
mode: "single" | "free" | "multiple";
|
|
44
|
-
} & __VLS_ModelProps)> & Readonly<{
|
|
45
|
-
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
36
|
+
} & import('./types.js').EComboboxFields & __VLS_ModelProps)> & Readonly<{
|
|
46
37
|
"onUpdate:modelValue"?: ((value: string | string[] | undefined) => any) | undefined;
|
|
47
38
|
onInputChange?: ((text: string) => any) | undefined;
|
|
39
|
+
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
48
40
|
}>, {
|
|
49
41
|
clearable: boolean;
|
|
50
42
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
@@ -5,10 +5,10 @@ import { useUid as n } from "../../composables/useUid.js";
|
|
|
5
5
|
import r from "../Icon/EIcon.js";
|
|
6
6
|
import te from "../Field/EField.js";
|
|
7
7
|
/* empty css */
|
|
8
|
-
import
|
|
9
|
-
/* empty css */
|
|
10
|
-
import ie from "../Spinner/ESpinner.js";
|
|
8
|
+
import ne from "../Spinner/ESpinner.js";
|
|
11
9
|
import i from "./EComboboxOption.js";
|
|
10
|
+
import { normalizeOptions as re, sectionOptions as ie } from "../Select/options.js";
|
|
11
|
+
/* empty css */
|
|
12
12
|
/* empty css */
|
|
13
13
|
import { Fragment as a, computed as o, createBlock as s, createCommentVNode as c, createElementBlock as l, createElementVNode as u, createTextVNode as d, createVNode as f, defineComponent as p, guardReactiveProps as ae, h as oe, mergeModels as m, mergeProps as se, nextTick as ce, normalizeClass as le, normalizeProps as ue, onMounted as de, openBlock as h, ref as g, renderList as _, resolveDynamicComponent as fe, toDisplayString as v, unref as y, useModel as b, watch as x, withCtx as S, withModifiers as C } from "vue";
|
|
14
14
|
import { ComboboxAnchor as pe, ComboboxContent as me, ComboboxInput as he, ComboboxPortal as ge, ComboboxRoot as _e, ComboboxTrigger as ve, ComboboxViewport as ye } from "reka-ui";
|
|
@@ -34,6 +34,8 @@ var be = { class: "e-combo-main" }, xe = [
|
|
|
34
34
|
ariaLabel: {},
|
|
35
35
|
label: {},
|
|
36
36
|
bare: { type: Boolean },
|
|
37
|
+
multiple: { type: Boolean },
|
|
38
|
+
freeform: { type: Boolean },
|
|
37
39
|
options: {},
|
|
38
40
|
placeholder: {},
|
|
39
41
|
hint: {},
|
|
@@ -49,8 +51,7 @@ var be = { class: "e-combo-main" }, xe = [
|
|
|
49
51
|
default: !0
|
|
50
52
|
},
|
|
51
53
|
filter: {},
|
|
52
|
-
id: {}
|
|
53
|
-
mode: {}
|
|
54
|
+
id: {}
|
|
54
55
|
}, {
|
|
55
56
|
modelValue: {},
|
|
56
57
|
modelModifiers: {},
|
|
@@ -74,14 +75,14 @@ var be = { class: "e-combo-main" }, xe = [
|
|
|
74
75
|
error: T.error,
|
|
75
76
|
required: T.required,
|
|
76
77
|
optional: T.optional
|
|
77
|
-
}), j = o(() => T.bare ? T.ariaLabel ?? T.label : T.label), M = o(() => T.
|
|
78
|
+
}), j = o(() => T.bare ? T.ariaLabel ?? T.label : T.label), M = o(() => T.multiple), N = o(() => T.freeform && !T.multiple), P = o(() => re(T.options)), F = o(() => M.value && Array.isArray(D.value) ? D.value : []), I = o(() => typeof D.value == "string" ? D.value : ""), L = o(() => M.value ? F.value : I.value);
|
|
78
79
|
function R(e) {
|
|
79
80
|
return P.value.find((t) => t.value === e)?.label ?? (N.value ? e : "");
|
|
80
81
|
}
|
|
81
82
|
let z = () => M.value ? "" : R(I.value), B = g(z()), V = g(!1), H = b(p, "open"), U = g(null), W = o(() => V.value ? B.value.trim().toLowerCase() : ""), G = o(() => {
|
|
82
83
|
let e = W.value;
|
|
83
84
|
return T.filter ? P.value.filter((t) => T.filter(t, e)) : P.value.filter((t) => !e || t.label.toLowerCase().includes(e) || (t.description ?? "").toLowerCase().includes(e));
|
|
84
|
-
}), Ne = o(() =>
|
|
85
|
+
}), Ne = o(() => ie(G.value)), Pe = o(() => G.value.length > 0 || !!T.loading || !N.value), K = o(() => H.value && Pe.value && !T.disabled), Fe = o(() => K.value && !G.value.length ? T.loading ? O("searching") : T.emptyText || O("noMatches") : ""), Ie = o(() => M.value ? F.value.length > 0 : !!B.value);
|
|
85
86
|
x(L, () => {
|
|
86
87
|
let e = z();
|
|
87
88
|
e !== B.value && (B.value = e, V.value = !1);
|
|
@@ -277,7 +278,7 @@ var be = { class: "e-combo-main" }, xe = [
|
|
|
277
278
|
"value",
|
|
278
279
|
"selected",
|
|
279
280
|
"query"
|
|
280
|
-
]))), 128))], 64))), 128)) : (h(), l("div", Oe, [p.loading ? (h(), s(
|
|
281
|
+
]))), 128))], 64))), 128)) : (h(), l("div", Oe, [p.loading ? (h(), s(ne, {
|
|
281
282
|
key: 0,
|
|
282
283
|
label: y(O)("searching")
|
|
283
284
|
}, null, 8, ["label"])) : (h(), l(a, { key: 1 }, [d(v(p.emptyText || y(O)("noMatches")), 1)], 64))]))]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EComboboxBase.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_resolveDynamicComponent","EField","_normalizeProps","_guardReactiveProps","_unref","_withCtx","_createVNode","_normalizeClass","_createElementVNode","_createElementBlock","_Fragment","_renderList","_createTextVNode","_toDisplayString","EIcon","_createCommentVNode","_mergeProps","_withModifiers","EComboboxOption","ESpinner","EIcon_default","EField_default","ESpinner_default","EComboboxOption_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","EComboboxBase_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"open\"","\"openModifiers\"","__expose","__emit","props","__props","emit","model","useModel","t","useMessages","portal","usePortalTarget","attrs","useFieldAttrs","groupId","useUid","bareId","Bare","h","slots","frame","computed","listName","multiple","free","all","normalizeOptions","values","single","rootValue","labelOf","o","v","resting","text","ref","typing","wantOpen","anchor","query","shown","q","sections","sectionOptions","hasList","open","announce","hasValue","watch","rest","listId","content","tries","read","inputEl","focusInput","isSelected","value","itemValue","onPick","next","onInput","remove","x","clear","onKeydown","keepCaretKeys","onBlur","onWrapDown","inputBind","field","openBlock","createBlock","resolveDynamicComponent","normalizeProps","guardReactiveProps","unref","withCtx","createVNode","ComboboxRoot","_cache","$event","ComboboxAnchor","normalizeClass","createElementVNode","createElementBlock","Fragment","renderList","createTextVNode","toDisplayString","createCommentVNode","ComboboxInput","mergeProps","k","withModifiers","ComboboxTrigger","ComboboxPortal","ComboboxContent","ComboboxViewport","i","section"],"sources":["../../../src/components/Combobox/EComboboxBase.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, nextTick, onMounted, ref, watch, type FunctionalComponent } from \"vue\";\nimport {\n ComboboxAnchor,\n ComboboxContent,\n ComboboxInput,\n ComboboxPortal,\n ComboboxRoot,\n ComboboxTrigger,\n ComboboxViewport,\n} from \"reka-ui\";\nimport EField from \"../Field/EField.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport ESpinner from \"../Spinner/ESpinner.vue\";\nimport EComboboxOption from \"./EComboboxOption.vue\";\nimport { normalizeOptions, sectionOptions } from \"../Select/options.js\";\nimport type { EComboboxProps } from \"./types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\nimport \"./combo.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<EComboboxProps & { mode: \"single\" | \"free\" | \"multiple\" }>(), {\n clearable: true,\n});\n\nconst emit = defineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\nconst model = defineModel<string | string[]>();\n\nconst t = useMessages();\nconst portal = usePortalTarget();\nconst attrs = useFieldAttrs();\nconst groupId = useUid();\nconst bareId = useUid(() => props.id);\n\nconst Bare: FunctionalComponent = (_, { slots }) =>\n h(\"div\", attrs.wrapper(), slots.default?.({ id: bareId.value, ariaInvalid: undefined, ariaDescribedby: undefined }));\nconst frame = computed(() =>\n props.bare\n ? {}\n : {\n id: props.id,\n label: props.label,\n hideLabel: props.hideLabel,\n hint: props.hint,\n error: props.error,\n required: props.required,\n optional: props.optional,\n },\n);\nconst listName = computed(() => (props.bare ? (props.ariaLabel ?? props.label) : props.label));\n\nconst multiple = computed(() => props.mode === \"multiple\");\nconst free = computed(() => props.mode === \"free\");\nconst all = computed(() => normalizeOptions(props.options));\nconst values = computed<string[]>(() => (multiple.value && Array.isArray(model.value) ? model.value : []));\nconst single = computed(() => (typeof model.value === \"string\" ? model.value : \"\"));\nconst rootValue = computed(() => (multiple.value ? values.value : single.value));\n\nfunction labelOf(v: string): string {\n return all.value.find((o) => o.value === v)?.label ?? (free.value ? v : \"\");\n}\nconst resting = () => (multiple.value ? \"\" : labelOf(single.value));\n\nconst text = ref(resting());\nconst typing = ref(false);\nconst wantOpen = defineModel<boolean>(\"open\", { default: false });\nconst anchor = ref<{ $el: HTMLElement } | null>(null);\nconst query = computed(() => (typing.value ? text.value.trim().toLowerCase() : \"\"));\n\nconst shown = computed(() => {\n const q = query.value;\n if (props.filter) return all.value.filter((o) => props.filter!(o, q));\n return all.value.filter(\n (o) => !q || o.label.toLowerCase().includes(q) || (o.description ?? \"\").toLowerCase().includes(q),\n );\n});\nconst sections = computed(() => sectionOptions(shown.value));\nconst hasList = computed(() => shown.value.length > 0 || !!props.loading || !free.value);\nconst open = computed(() => wantOpen.value && hasList.value && !props.disabled);\nconst announce = computed(() =>\n open.value && !shown.value.length ? (props.loading ? t(\"searching\") : props.emptyText || t(\"noMatches\")) : \"\",\n);\nconst hasValue = computed(() => (multiple.value ? values.value.length > 0 : !!text.value));\n\nwatch(rootValue, () => {\n const rest = resting();\n if (rest !== text.value) {\n text.value = rest;\n typing.value = false;\n }\n});\nwatch(all, () => {\n if (!typing.value && !open.value) text.value = resting();\n});\n\nconst listId = ref<string | undefined>();\nconst content = ref<{ $el: HTMLElement } | null>(null);\nonMounted(() => {\n if (!open.value) return;\n let tries = 0;\n const read = () => {\n listId.value = content.value?.$el?.id || undefined;\n if (!listId.value && tries++ < 10) requestAnimationFrame(read);\n };\n void nextTick(read);\n});\n\nconst inputEl = () => anchor.value?.$el?.querySelector(\"input\") ?? null;\nconst focusInput = () => inputEl()?.focus();\n\nfunction isSelected(value: string): boolean {\n return multiple.value ? values.value.includes(value) : free.value ? single.value === value : single.value === value;\n}\nconst itemValue = (o: { value: string; label: string }) => (free.value ? o.label : o.value);\n\nfunction onPick(v: unknown) {\n typing.value = false;\n if (multiple.value) {\n model.value = Array.isArray(v) ? (v as string[]) : [];\n text.value = \"\";\n emit(\"inputChange\", \"\");\n return;\n }\n const next = typeof v === \"string\" ? v : \"\";\n model.value = next;\n text.value = free.value ? next : labelOf(next);\n emit(\"inputChange\", text.value);\n}\n\nfunction onInput(e: Event) {\n const v = (e.target as HTMLInputElement).value;\n text.value = v;\n typing.value = true;\n wantOpen.value = true;\n emit(\"inputChange\", v);\n if (free.value) model.value = v;\n}\n\nfunction remove(v: string) {\n model.value = values.value.filter((x) => x !== v);\n}\n\nfunction clear() {\n model.value = multiple.value ? [] : \"\";\n text.value = \"\";\n typing.value = false;\n emit(\"inputChange\", \"\");\n focusInput();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === \"Escape\" && !open.value && text.value) {\n e.preventDefault();\n clear();\n } else if (e.key === \"Backspace\" && multiple.value && !text.value && values.value.length) {\n remove(values.value[values.value.length - 1]!);\n }\n}\n\nfunction keepCaretKeys(e: KeyboardEvent) {\n if (e.key === \"Home\" || e.key === \"End\") e.stopImmediatePropagation();\n}\n\nfunction onBlur(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n if (next && (anchor.value?.$el?.contains(next) || next.closest?.(\".e-popover\"))) return;\n wantOpen.value = false;\n typing.value = false;\n if (!free.value) text.value = resting();\n}\n\nfunction onWrapDown(e: MouseEvent) {\n if (e.target === e.currentTarget && !props.disabled) {\n e.preventDefault();\n focusInput();\n }\n}\n\ntype FieldSlot = { id: string; ariaInvalid: \"true\" | undefined; ariaDescribedby: string | undefined };\nfunction inputBind(field: FieldSlot) {\n return {\n id: field.id,\n required: props.required && !(multiple.value && values.value.length) ? true : undefined,\n placeholder: multiple.value && values.value.length ? \"\" : props.placeholder,\n \"aria-invalid\": field.ariaInvalid,\n \"aria-label\": props.bare ? listName.value : undefined,\n autocomplete: \"off\",\n ...(listId.value ? { \"aria-controls\": listId.value } : {}),\n ...(shown.value.length ? {} : { \"aria-activedescendant\": undefined }),\n ...attrs.input(field.ariaDescribedby),\n };\n}\n\ndefineExpose({\n input: computed(() => inputEl()),\n focus: focusInput,\n});\n</script>\n\n<template>\n <component :is=\"bare ? Bare : EField\" v-bind=\"{ ...attrs.wrapper(), ...frame }\">\n <template #default=\"field\">\n <ComboboxRoot\n class=\"e-combo-root\"\n :model-value=\"rootValue\"\n :multiple=\"multiple\"\n :open=\"open\"\n :disabled=\"disabled\"\n ignore-filter\n @update:model-value=\"onPick\"\n @update:open=\"wantOpen = $event\"\n >\n <ComboboxAnchor\n ref=\"anchor\"\n class=\"e-input-wrap e-combo\"\n :class=\"{ 'e-combo--multi': multiple }\"\n :data-invalid=\"error && !bare ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n @mousedown=\"onWrapDown\"\n @focusout=\"onBlur\"\n >\n <div class=\"e-combo-main\">\n <template v-if=\"multiple\">\n <span v-for=\"v in values\" :key=\"v\" class=\"e-tag\">\n {{ labelOf(v) }}\n <button\n type=\"button\"\n class=\"e-tag-x\"\n :aria-label=\"t('removeItem', { label: labelOf(v) })\"\n :disabled=\"disabled\"\n @click=\"remove(v)\"\n >\n <EIcon name=\"x\" small />\n </button>\n </span>\n </template>\n <ComboboxInput\n class=\"e-input e-combo-input\"\n :model-value=\"text\"\n :display-value=\"(v: unknown) => (typeof v === 'string' ? (free ? v : labelOf(v)) : '')\"\n :disabled=\"disabled\"\n v-bind=\"inputBind(field)\"\n @update:model-value=\"text = $event\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n @keydown.capture=\"keepCaretKeys\"\n />\n </div>\n <template v-if=\"name\">\n <input v-for=\"(v, k) in multiple ? values : [single]\" :key=\"k\" type=\"hidden\" :name=\"name\" :value=\"v\" />\n </template>\n <div class=\"e-combo-tail\">\n <button\n v-if=\"hasValue && clearable && !disabled\"\n type=\"button\"\n class=\"e-combo-btn\"\n :aria-label=\"t('clear')\"\n @mousedown.prevent\n @click=\"clear\"\n >\n <EIcon name=\"x\" />\n </button>\n <ComboboxTrigger\n v-if=\"!free\"\n class=\"e-combo-btn\"\n :aria-label=\"t('showOptions')\"\n :disabled=\"disabled\"\n @mousedown.prevent\n >\n <EIcon name=\"chevron-down\" bold />\n </ComboboxTrigger>\n </div>\n </ComboboxAnchor>\n <span class=\"e-sr\" role=\"status\">{{ announce }}</span>\n <ComboboxPortal :to=\"portal\">\n <ComboboxContent\n ref=\"content\"\n position=\"popper\"\n align=\"start\"\n :side-offset=\"6\"\n :collision-padding=\"8\"\n class=\"e-popover e-listpanel e-root\"\n :aria-label=\"listName\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <ComboboxViewport>\n <template v-if=\"shown.length\">\n <template v-for=\"(section, i) in sections\" :key=\"i\">\n <div v-if=\"section.group\" class=\"e-opt-set\" role=\"group\" :aria-labelledby=\"`${groupId}-g${i}`\">\n <div :id=\"`${groupId}-g${i}`\" class=\"e-opt-group\">{{ section.group }}</div>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </div>\n <template v-else>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </template>\n </template>\n </template>\n <div v-else class=\"e-opt-status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <ESpinner v-if=\"loading\" :label=\"t('searching')\" />\n <template v-else>{{ emptyText || t(\"noMatches\") }}</template>\n </div>\n </ComboboxViewport>\n </ComboboxContent>\n </ComboboxPortal>\n </ComboboxRoot>\n </template>\n </component>\n</template>\n\n<style>\n@layer e.controls {\n .e-combo-main {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n align-items: center;\n align-self: stretch;\n gap: var(--e-space-1);\n min-width: 0;\n }\n\n .e-combo-tail {\n display: flex;\n flex: none;\n align-items: center;\n align-self: center;\n }\n\n .e-combo--multi {\n padding: 3px var(--e-space-1) 3px var(--e-space-2);\n gap: var(--e-space-1);\n }\n\n .e-combo--multi .e-input {\n height: calc(var(--e-control-height) - 9px);\n align-self: center;\n padding-inline: var(--e-space-2);\n }\n\n .e-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: 32px;\n padding: 0 var(--e-space-1) 0 var(--e-space-3);\n border-radius: var(--e-radius-pill);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 1px var(--e-primary);\n color: var(--e-ink);\n font: 500 var(--e-text-sm)/1 var(--e-font-sans);\n }\n\n .e-tag-x::after {\n content: \"\";\n position: absolute;\n inset: -10px;\n }\n\n .e-tag-x {\n position: relative;\n display: inline-grid;\n place-items: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: transparent;\n color: var(--e-primary);\n cursor: pointer;\n }\n\n .e-tag-x:hover {\n background: var(--e-wash-hover);\n box-shadow: inset 0 0 0 1px var(--e-primary);\n }\n\n .e-tag-x:active {\n background: var(--e-wash-press);\n }\n\n .e-tag-x:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: 1px;\n }\n}\n</style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EComboboxBase.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_resolveDynamicComponent","EField","_normalizeProps","_guardReactiveProps","_unref","_withCtx","_createVNode","_normalizeClass","_createElementVNode","_createElementBlock","_Fragment","_renderList","_createTextVNode","_toDisplayString","EIcon","_createCommentVNode","_mergeProps","_withModifiers","EComboboxOption","ESpinner","EIcon_default","EField_default","ESpinner_default","EComboboxOption_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","EComboboxBase_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"open\"","\"openModifiers\"","__expose","__emit","props","__props","emit","model","useModel","t","useMessages","portal","usePortalTarget","attrs","useFieldAttrs","groupId","useUid","bareId","Bare","h","slots","frame","computed","listName","multiple","free","all","normalizeOptions","values","single","rootValue","labelOf","o","v","resting","text","ref","typing","wantOpen","anchor","query","shown","q","sections","sectionOptions","hasList","open","announce","hasValue","watch","rest","listId","content","tries","read","inputEl","focusInput","isSelected","value","itemValue","onPick","next","onInput","remove","x","clear","onKeydown","keepCaretKeys","onBlur","onWrapDown","inputBind","field","openBlock","createBlock","resolveDynamicComponent","normalizeProps","guardReactiveProps","unref","withCtx","createVNode","ComboboxRoot","_cache","$event","ComboboxAnchor","normalizeClass","createElementVNode","createElementBlock","Fragment","renderList","createTextVNode","toDisplayString","createCommentVNode","ComboboxInput","mergeProps","k","withModifiers","ComboboxTrigger","ComboboxPortal","ComboboxContent","ComboboxViewport","i","section"],"sources":["../../../src/components/Combobox/EComboboxBase.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, nextTick, onMounted, ref, watch, type FunctionalComponent } from \"vue\";\nimport {\n ComboboxAnchor,\n ComboboxContent,\n ComboboxInput,\n ComboboxPortal,\n ComboboxRoot,\n ComboboxTrigger,\n ComboboxViewport,\n} from \"reka-ui\";\nimport EField from \"../Field/EField.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport ESpinner from \"../Spinner/ESpinner.vue\";\nimport EComboboxOption from \"./EComboboxOption.vue\";\nimport { normalizeOptions, sectionOptions } from \"../Select/options.js\";\nimport type { EComboboxProps } from \"./types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\nimport \"./combo.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<EComboboxProps>(), {\n clearable: true,\n});\n\nconst emit = defineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\nconst model = defineModel<string | string[]>();\n\nconst t = useMessages();\nconst portal = usePortalTarget();\nconst attrs = useFieldAttrs();\nconst groupId = useUid();\nconst bareId = useUid(() => props.id);\n\nconst Bare: FunctionalComponent = (_, { slots }) =>\n h(\"div\", attrs.wrapper(), slots.default?.({ id: bareId.value, ariaInvalid: undefined, ariaDescribedby: undefined }));\nconst frame = computed(() =>\n props.bare\n ? {}\n : {\n id: props.id,\n label: props.label,\n hideLabel: props.hideLabel,\n hint: props.hint,\n error: props.error,\n required: props.required,\n optional: props.optional,\n },\n);\nconst listName = computed(() => (props.bare ? (props.ariaLabel ?? props.label) : props.label));\n\nconst multiple = computed(() => props.multiple);\n// Free text is for one value; with `multiple` it is ignored.\nconst free = computed(() => props.freeform && !props.multiple);\nconst all = computed(() => normalizeOptions(props.options));\nconst values = computed<string[]>(() => (multiple.value && Array.isArray(model.value) ? model.value : []));\nconst single = computed(() => (typeof model.value === \"string\" ? model.value : \"\"));\nconst rootValue = computed(() => (multiple.value ? values.value : single.value));\n\nfunction labelOf(v: string): string {\n return all.value.find((o) => o.value === v)?.label ?? (free.value ? v : \"\");\n}\nconst resting = () => (multiple.value ? \"\" : labelOf(single.value));\n\nconst text = ref(resting());\nconst typing = ref(false);\nconst wantOpen = defineModel<boolean>(\"open\", { default: false });\nconst anchor = ref<{ $el: HTMLElement } | null>(null);\nconst query = computed(() => (typing.value ? text.value.trim().toLowerCase() : \"\"));\n\nconst shown = computed(() => {\n const q = query.value;\n if (props.filter) return all.value.filter((o) => props.filter!(o, q));\n return all.value.filter(\n (o) => !q || o.label.toLowerCase().includes(q) || (o.description ?? \"\").toLowerCase().includes(q),\n );\n});\nconst sections = computed(() => sectionOptions(shown.value));\nconst hasList = computed(() => shown.value.length > 0 || !!props.loading || !free.value);\nconst open = computed(() => wantOpen.value && hasList.value && !props.disabled);\nconst announce = computed(() =>\n open.value && !shown.value.length ? (props.loading ? t(\"searching\") : props.emptyText || t(\"noMatches\")) : \"\",\n);\nconst hasValue = computed(() => (multiple.value ? values.value.length > 0 : !!text.value));\n\nwatch(rootValue, () => {\n const rest = resting();\n if (rest !== text.value) {\n text.value = rest;\n typing.value = false;\n }\n});\nwatch(all, () => {\n if (!typing.value && !open.value) text.value = resting();\n});\n\nconst listId = ref<string | undefined>();\nconst content = ref<{ $el: HTMLElement } | null>(null);\nonMounted(() => {\n if (!open.value) return;\n let tries = 0;\n const read = () => {\n listId.value = content.value?.$el?.id || undefined;\n if (!listId.value && tries++ < 10) requestAnimationFrame(read);\n };\n void nextTick(read);\n});\n\nconst inputEl = () => anchor.value?.$el?.querySelector(\"input\") ?? null;\nconst focusInput = () => inputEl()?.focus();\n\nfunction isSelected(value: string): boolean {\n return multiple.value ? values.value.includes(value) : free.value ? single.value === value : single.value === value;\n}\nconst itemValue = (o: { value: string; label: string }) => (free.value ? o.label : o.value);\n\nfunction onPick(v: unknown) {\n typing.value = false;\n if (multiple.value) {\n model.value = Array.isArray(v) ? (v as string[]) : [];\n text.value = \"\";\n emit(\"inputChange\", \"\");\n return;\n }\n const next = typeof v === \"string\" ? v : \"\";\n model.value = next;\n text.value = free.value ? next : labelOf(next);\n emit(\"inputChange\", text.value);\n}\n\nfunction onInput(e: Event) {\n const v = (e.target as HTMLInputElement).value;\n text.value = v;\n typing.value = true;\n wantOpen.value = true;\n emit(\"inputChange\", v);\n if (free.value) model.value = v;\n}\n\nfunction remove(v: string) {\n model.value = values.value.filter((x) => x !== v);\n}\n\nfunction clear() {\n model.value = multiple.value ? [] : \"\";\n text.value = \"\";\n typing.value = false;\n emit(\"inputChange\", \"\");\n focusInput();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === \"Escape\" && !open.value && text.value) {\n e.preventDefault();\n clear();\n } else if (e.key === \"Backspace\" && multiple.value && !text.value && values.value.length) {\n remove(values.value[values.value.length - 1]!);\n }\n}\n\nfunction keepCaretKeys(e: KeyboardEvent) {\n if (e.key === \"Home\" || e.key === \"End\") e.stopImmediatePropagation();\n}\n\nfunction onBlur(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n if (next && (anchor.value?.$el?.contains(next) || next.closest?.(\".e-popover\"))) return;\n wantOpen.value = false;\n typing.value = false;\n if (!free.value) text.value = resting();\n}\n\nfunction onWrapDown(e: MouseEvent) {\n if (e.target === e.currentTarget && !props.disabled) {\n e.preventDefault();\n focusInput();\n }\n}\n\ntype FieldSlot = { id: string; ariaInvalid: \"true\" | undefined; ariaDescribedby: string | undefined };\nfunction inputBind(field: FieldSlot) {\n return {\n id: field.id,\n required: props.required && !(multiple.value && values.value.length) ? true : undefined,\n placeholder: multiple.value && values.value.length ? \"\" : props.placeholder,\n \"aria-invalid\": field.ariaInvalid,\n \"aria-label\": props.bare ? listName.value : undefined,\n autocomplete: \"off\",\n ...(listId.value ? { \"aria-controls\": listId.value } : {}),\n ...(shown.value.length ? {} : { \"aria-activedescendant\": undefined }),\n ...attrs.input(field.ariaDescribedby),\n };\n}\n\ndefineExpose({\n input: computed(() => inputEl()),\n focus: focusInput,\n});\n</script>\n\n<template>\n <component :is=\"bare ? Bare : EField\" v-bind=\"{ ...attrs.wrapper(), ...frame }\">\n <template #default=\"field\">\n <ComboboxRoot\n class=\"e-combo-root\"\n :model-value=\"rootValue\"\n :multiple=\"multiple\"\n :open=\"open\"\n :disabled=\"disabled\"\n ignore-filter\n @update:model-value=\"onPick\"\n @update:open=\"wantOpen = $event\"\n >\n <ComboboxAnchor\n ref=\"anchor\"\n class=\"e-input-wrap e-combo\"\n :class=\"{ 'e-combo--multi': multiple }\"\n :data-invalid=\"error && !bare ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n @mousedown=\"onWrapDown\"\n @focusout=\"onBlur\"\n >\n <div class=\"e-combo-main\">\n <template v-if=\"multiple\">\n <span v-for=\"v in values\" :key=\"v\" class=\"e-tag\">\n {{ labelOf(v) }}\n <button\n type=\"button\"\n class=\"e-tag-x\"\n :aria-label=\"t('removeItem', { label: labelOf(v) })\"\n :disabled=\"disabled\"\n @click=\"remove(v)\"\n >\n <EIcon name=\"x\" small />\n </button>\n </span>\n </template>\n <ComboboxInput\n class=\"e-input e-combo-input\"\n :model-value=\"text\"\n :display-value=\"(v: unknown) => (typeof v === 'string' ? (free ? v : labelOf(v)) : '')\"\n :disabled=\"disabled\"\n v-bind=\"inputBind(field)\"\n @update:model-value=\"text = $event\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n @keydown.capture=\"keepCaretKeys\"\n />\n </div>\n <template v-if=\"name\">\n <input v-for=\"(v, k) in multiple ? values : [single]\" :key=\"k\" type=\"hidden\" :name=\"name\" :value=\"v\" />\n </template>\n <div class=\"e-combo-tail\">\n <button\n v-if=\"hasValue && clearable && !disabled\"\n type=\"button\"\n class=\"e-combo-btn\"\n :aria-label=\"t('clear')\"\n @mousedown.prevent\n @click=\"clear\"\n >\n <EIcon name=\"x\" />\n </button>\n <ComboboxTrigger\n v-if=\"!free\"\n class=\"e-combo-btn\"\n :aria-label=\"t('showOptions')\"\n :disabled=\"disabled\"\n @mousedown.prevent\n >\n <EIcon name=\"chevron-down\" bold />\n </ComboboxTrigger>\n </div>\n </ComboboxAnchor>\n <span class=\"e-sr\" role=\"status\">{{ announce }}</span>\n <ComboboxPortal :to=\"portal\">\n <ComboboxContent\n ref=\"content\"\n position=\"popper\"\n align=\"start\"\n :side-offset=\"6\"\n :collision-padding=\"8\"\n class=\"e-popover e-listpanel e-root\"\n :aria-label=\"listName\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <ComboboxViewport>\n <template v-if=\"shown.length\">\n <template v-for=\"(section, i) in sections\" :key=\"i\">\n <div v-if=\"section.group\" class=\"e-opt-set\" role=\"group\" :aria-labelledby=\"`${groupId}-g${i}`\">\n <div :id=\"`${groupId}-g${i}`\" class=\"e-opt-group\">{{ section.group }}</div>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </div>\n <template v-else>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </template>\n </template>\n </template>\n <div v-else class=\"e-opt-status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <ESpinner v-if=\"loading\" :label=\"t('searching')\" />\n <template v-else>{{ emptyText || t(\"noMatches\") }}</template>\n </div>\n </ComboboxViewport>\n </ComboboxContent>\n </ComboboxPortal>\n </ComboboxRoot>\n </template>\n </component>\n</template>\n\n<style>\n@layer e.controls {\n .e-combo-main {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n align-items: center;\n align-self: stretch;\n gap: var(--e-space-1);\n min-width: 0;\n }\n\n .e-combo-tail {\n display: flex;\n flex: none;\n align-items: center;\n align-self: center;\n }\n\n .e-combo--multi {\n padding: 3px var(--e-space-1) 3px var(--e-space-2);\n gap: var(--e-space-1);\n }\n\n .e-combo--multi .e-input {\n height: calc(var(--e-control-height) - 9px);\n align-self: center;\n padding-inline: var(--e-space-2);\n }\n\n .e-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: var(--e-space-8);\n padding: 0 var(--e-space-1) 0 var(--e-space-3);\n border-radius: var(--e-radius-pill);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n color: var(--e-ink);\n font: 500 var(--e-text-sm)/1 var(--e-font-sans);\n }\n\n .e-tag-x::after {\n content: \"\";\n position: absolute;\n inset: calc((var(--e-tap) - var(--e-space-6)) / -2);\n }\n\n .e-tag-x {\n position: relative;\n display: inline-grid;\n place-items: center;\n width: var(--e-space-6);\n height: var(--e-space-6);\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: transparent;\n color: var(--e-primary);\n cursor: pointer;\n }\n\n .e-tag-x:hover {\n background: var(--e-wash-hover);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n }\n\n .e-tag-x:active {\n background: var(--e-wash-press);\n }\n\n .e-tag-x:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n }\n\n @media (forced-colors: active) {\n .e-tag {\n outline: var(--e-stroke-card) solid CanvasText;\n }\n }\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EComboboxOption.js","names":["_sfc_main","EComboboxOption_vue_vue_type_script_setup_true_lang_default","EComboboxOption_default"],"sources":["../../../src/components/Combobox/EComboboxOption.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ComboboxItem } from \"reka-ui\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport
|
|
1
|
+
{"version":3,"file":"EComboboxOption.js","names":["_sfc_main","EComboboxOption_vue_vue_type_script_setup_true_lang_default","EComboboxOption_default"],"sources":["../../../src/components/Combobox/EComboboxOption.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ComboboxItem } from \"reka-ui\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport EMatchHighlight from \"./matchHighlight.js\";\nimport type { EOption } from \"../Select/options.js\";\n\ndefineProps<{\n /** The option to show. */\n option: EOption;\n /** What the item carries as its value. */\n value: string;\n /** Whether it is chosen: bold, with a check. */\n selected: boolean;\n /** The lower-case text people typed; the first match in the label and description is marked. */\n query: string;\n}>();\n</script>\n\n<template>\n <ComboboxItem\n :value=\"value\"\n :disabled=\"option.disabled\"\n class=\"e-opt\"\n :class=\"{ 'e-opt--selected': selected, 'e-opt--disabled': option.disabled }\"\n @mousedown.prevent\n >\n <EIcon v-if=\"option.icon\" :name=\"option.icon\" />\n <span class=\"e-opt-text\">\n <span class=\"e-opt-label\"><EMatchHighlight :text=\"option.label\" :query=\"query\" /></span>\n <span v-if=\"option.description\" class=\"e-opt-desc\">\n <EMatchHighlight :text=\"option.description\" :query=\"query\" />\n </span>\n </span>\n <EIcon v-if=\"selected\" name=\"check\" bold />\n </ComboboxItem>\n</template>\n"],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import e from "../Icon/EIcon.js";
|
|
2
|
-
import t from "./
|
|
2
|
+
import t from "./matchHighlight.js";
|
|
3
3
|
import { createBlock as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, createVNode as o, defineComponent as s, normalizeClass as c, openBlock as l, unref as u, withCtx as d, withModifiers as f } from "vue";
|
|
4
4
|
import { ComboboxItem as p } from "reka-ui";
|
|
5
5
|
//#region src/components/Combobox/EComboboxOption.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EComboboxOption.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_unref","_normalizeClass","_withModifiers","_withCtx","EIcon","_createCommentVNode","_createElementVNode","_createVNode","
|
|
1
|
+
{"version":3,"file":"EComboboxOption.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_unref","_normalizeClass","_withModifiers","_withCtx","EIcon","_createCommentVNode","_createElementVNode","_createVNode","EMatchHighlight","_createElementBlock","EIcon_default","matchHighlight_default","_hoisted_1","_hoisted_2","_hoisted_3","EComboboxOption_vue_vue_type_script_setup_true_lang_default","openBlock","createBlock","unref","ComboboxItem","__props","normalizeClass","_cache","withModifiers","withCtx","createCommentVNode","createElementVNode","createVNode","createElementBlock"],"sources":["../../../src/components/Combobox/EComboboxOption.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ComboboxItem } from \"reka-ui\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport EMatchHighlight from \"./matchHighlight.js\";\nimport type { EOption } from \"../Select/options.js\";\n\ndefineProps<{\n /** The option to show. */\n option: EOption;\n /** What the item carries as its value. */\n value: string;\n /** Whether it is chosen: bold, with a check. */\n selected: boolean;\n /** The lower-case text people typed; the first match in the label and description is marked. */\n query: string;\n}>();\n</script>\n\n<template>\n <ComboboxItem\n :value=\"value\"\n :disabled=\"option.disabled\"\n class=\"e-opt\"\n :class=\"{ 'e-opt--selected': selected, 'e-opt--disabled': option.disabled }\"\n @mousedown.prevent\n >\n <EIcon v-if=\"option.icon\" :name=\"option.icon\" />\n <span class=\"e-opt-text\">\n <span class=\"e-opt-label\"><EMatchHighlight :text=\"option.label\" :query=\"query\" /></span>\n <span v-if=\"option.description\" class=\"e-opt-desc\">\n <EMatchHighlight :text=\"option.description\" :query=\"query\" />\n </span>\n </span>\n <EIcon v-if=\"selected\" name=\"check\" bold />\n </ComboboxItem>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;E,kBAmBEA,EAAA,GAAAC,EAeeC,EAAAmB,CAAA,GAAA;GAdZ,OAAOC,EAAA;GACP,UAAUA,EAAA,OAAO;GAClB,OAAKnB,EAAA,CAAC,SAAO;IAAA,mBACgBmB,EAAA;IAAQ,mBAAqBA,EAAA,OAAO;GAAQ,CAAA,CAAA;GACxE,aAAS,AAAAE,EAAA,OAAApB,QAAV,CAAA,GAAkB,CAAA,SAAA,CAAA;;GAElB,SAAAC,QAAgD;IAAnCiB,EAAA,OAAO,QAApBtB,EAAA,GAAAC,EAAgDK,GAAA;;KAArB,MAAMgB,EAAA,OAAO;;IACxCd,EAKO,QALPM,GAKO,CAJLN,EAAwF,QAAxFO,GAAwF,CAA9DN,EAAuDP,EAAAQ,CAAA,GAAA;KAArC,MAAMY,EAAA,OAAO;KAAQ,OAAOA,EAAA;I,kCAC5DA,EAAA,OAAO,eAAnBtB,EAAA,GAAAW,EAEO,QAFPK,GAEO,CADLP,EAA6DP,EAAAQ,CAAA,GAAA;KAA3C,MAAMY,EAAA,OAAO;KAAc,OAAOA,EAAA;;IAG3CA,EAAA,YAAbtB,EAAA,GAAAC,EAA2CK,GAAA;;KAApB,MAAK;KAAQ,MAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent as e, h as t } from "vue";
|
|
2
|
-
//#region src/components/Combobox/
|
|
2
|
+
//#region src/components/Combobox/matchHighlight.ts
|
|
3
3
|
var n = e({
|
|
4
|
-
name: "
|
|
4
|
+
name: "EMatchHighlight",
|
|
5
5
|
props: {
|
|
6
6
|
text: {
|
|
7
7
|
type: String,
|
|
@@ -26,4 +26,4 @@ var n = e({
|
|
|
26
26
|
//#endregion
|
|
27
27
|
export { n as default };
|
|
28
28
|
|
|
29
|
-
//# sourceMappingURL=
|
|
29
|
+
//# sourceMappingURL=matchHighlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchHighlight.js","names":["matchHighlight_default","defineComponent","i","props","h"],"sources":["../../../src/components/Combobox/matchHighlight.ts"],"sourcesContent":["import { defineComponent, h } from \"vue\";\n\nexport default defineComponent({\n name: \"EMatchHighlight\",\n props: {\n text: { type: String, required: true },\n query: { type: String, required: true },\n },\n setup(props) {\n return () => {\n const i = props.query ? props.text.toLowerCase().indexOf(props.query) : -1;\n if (i < 0) return props.text;\n return [\n props.text.slice(0, i),\n h(\"mark\", props.text.slice(i, i + props.query.length)),\n props.text.slice(i + props.query.length),\n ];\n };\n },\n});\n"],"mappings":";;AAEA,IAAAA,IAAeC,EAAgB;CAC7B,MAAM;CACN,OAAO;EACL,MAAM;GAAE,MAAM;GAAQ,UAAU;EAAK;EACrC,OAAO;GAAE,MAAM;GAAQ,UAAU;EAAK;CACxC;CACA,MAAM,GAAO;EACX,aAAa;GACX,IAAMC,IAAIC,EAAM,QAAQA,EAAM,KAAK,YAAY,CAAC,CAAC,QAAQA,EAAM,KAAK,IAAI;GAExE,OADID,IAAI,IAAUC,EAAM,OACjB;IACLA,EAAM,KAAK,MAAM,GAAGD,CAAC;IACrBE,EAAE,QAAQD,EAAM,KAAK,MAAMD,GAAGA,IAAIC,EAAM,MAAM,MAAM,CAAC;IACrDA,EAAM,KAAK,MAAMD,IAAIC,EAAM,MAAM,MAAM;GACzC;EACF;CACF;AACF,CAAC"}
|
|
@@ -1,31 +1,36 @@
|
|
|
1
1
|
import { EOption, EOptionInput } from '../Select/options.js';
|
|
2
2
|
import { ELabelProps } from '../Field/labelProps.js';
|
|
3
|
-
/** What ECombobox
|
|
3
|
+
/** What ECombobox takes besides its `v-model`. */
|
|
4
4
|
export type EComboboxProps = ELabelProps & EComboboxFields;
|
|
5
5
|
export interface EComboboxFields {
|
|
6
|
-
/**
|
|
6
|
+
/** Choose several: `v-model` is a `string[]`, shown as removable tags. The list stays open while choosing, `placeholder` shows only while nothing is chosen, and `name` submits one hidden input per value. */
|
|
7
|
+
multiple?: boolean;
|
|
8
|
+
/** Accept any typed text, not only an option: `v-model` is the text and options are suggestions, and choosing one puts its `label` in the field. No Show options button, and the list stays closed when nothing matches. Ignored with `multiple`. */
|
|
9
|
+
freeform?: boolean;
|
|
10
|
+
/** Strings, or `{ value, label, description, icon, group, disabled }` as in `ESelect`. A value is never an empty string. */
|
|
7
11
|
options: readonly EOptionInput[];
|
|
8
12
|
/** An example, never the label. */
|
|
9
13
|
placeholder?: string;
|
|
10
14
|
/** Help that stays under the field. */
|
|
11
15
|
hint?: string;
|
|
12
|
-
/** What to fix. Replaces the hint, marks the input invalid and is announced. */
|
|
16
|
+
/** What to fix. Replaces the hint, marks the input `aria-invalid` and is announced. */
|
|
13
17
|
error?: string;
|
|
14
|
-
/**
|
|
18
|
+
/** The `required` attribute and a word beside the label. A chosen value satisfies it. */
|
|
15
19
|
required?: boolean;
|
|
16
20
|
/** A word beside the label. Flag whichever is rarer. */
|
|
17
21
|
optional?: boolean;
|
|
22
|
+
/** Disables the field; a disabled field never opens. */
|
|
18
23
|
disabled?: boolean;
|
|
19
|
-
/** Submits the value with a form (hidden inputs carry it, one per chosen value). */
|
|
24
|
+
/** Submits the value with a form, through a hidden input (hidden inputs carry it, one per chosen value). */
|
|
20
25
|
name?: string;
|
|
21
26
|
/** Show the Searching spinner in the list instead of the options, while a server answers. */
|
|
22
27
|
loading?: boolean;
|
|
23
|
-
/** What the list says when nothing matches.
|
|
28
|
+
/** What the list says when nothing matches. @default "No matches" */
|
|
24
29
|
emptyText?: string;
|
|
25
30
|
/** The clear button, shown when there is something to clear. On by default. */
|
|
26
31
|
clearable?: boolean;
|
|
27
|
-
/** Replaces the default match (the typed text appears in the label or description). `query` is trimmed and lower case. */
|
|
32
|
+
/** Replaces the default match (the typed text appears in the label or description). `query` is trimmed and lower case. Return `true` when the server filters. @default label or description contains query */
|
|
28
33
|
filter?: (option: EOption, query: string) => boolean;
|
|
29
|
-
/** The id of the input; the label points at it.
|
|
34
|
+
/** The id of the input; the label points at it. @default generated */
|
|
30
35
|
id?: string;
|
|
31
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECurrencyField.js","names":["_sfc_main","ECurrencyField_vue_vue_type_script_setup_true_lang_default","ECurrencyField_default"],"sources":["../../../src/components/CurrencyField/ECurrencyField.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport ENumberField from \"../NumberField/ENumberField.vue\";\nimport { useConfig } from \"../../config.js\";\nimport \"../../styles/base.css\";\n\nconst props = defineProps<{\n /** The visible label, a mono kicker above the field. The symbol is decoration, so say what the amount is for. */\n label: string;\n /** Keep the label for screen readers and remove it from the page. */\n hideLabel?: boolean;\n /** ISO 4217 code
|
|
1
|
+
{"version":3,"file":"ECurrencyField.js","names":["_sfc_main","ECurrencyField_vue_vue_type_script_setup_true_lang_default","ECurrencyField_default"],"sources":["../../../src/components/CurrencyField/ECurrencyField.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport ENumberField from \"../NumberField/ENumberField.vue\";\nimport { useConfig } from \"../../config.js\";\nimport \"../../styles/base.css\";\n\nconst props = defineProps<{\n /** The visible label, a mono kicker above the field. The symbol is decoration, so say what the amount is for. */\n label: string;\n /** Keep the label for screen readers and remove it from the page. */\n hideLabel?: boolean;\n /** ISO 4217 code. An unknown code falls back to the configured currency's symbol. @default configured currency */\n currency?: string;\n /** BCP 47 tag used for the symbol. @default configured locale */\n locale?: string;\n /** The lowest value, so no negatives by default. @default 0 */\n min?: number;\n /** The highest value. */\n max?: number;\n /** The size of one step of the buttons and arrow keys. Decimals shown follow the step. @default 0.01 */\n step?: number;\n /** Replaces the currency symbol before the value. */\n prefix?: string;\n /** A unit after the value. */\n suffix?: string;\n /** The name submitted with a form (the number, or empty). */\n name?: string;\n /** Help that stays under the field. */\n hint?: string;\n /** What to fix. Replaces the hint, marks the field invalid and is announced. */\n error?: string;\n /** The `required` attribute and a word beside the label. */\n required?: boolean;\n /** A word beside the label. Flag whichever is rarer. */\n optional?: boolean;\n /** Disables the field and its buttons. */\n disabled?: boolean;\n /** The id of the input; the label points at it. @default generated */\n id?: string;\n}>();\n\n/** The amount; round to the cent in code. */\nconst model = defineModel<number | null>({ default: null });\n\nconst config = useConfig();\nconst field = ref<InstanceType<typeof ENumberField> | null>(null);\n\nfunction symbolOf(locale: string, currency: string): string | undefined {\n try {\n const parts = new Intl.NumberFormat(locale, { style: \"currency\", currency }).formatToParts(0);\n return parts.find((p) => p.type === \"currency\")?.value;\n } catch {\n return undefined;\n }\n}\n\nconst symbol = computed(\n () =>\n symbolOf(props.locale || config.locale, props.currency || config.currency) ??\n symbolOf(config.locale, config.currency) ??\n config.currency,\n);\n\ndefineExpose({\n input: computed(() => field.value?.input ?? null),\n focus: () => field.value?.focus(),\n});\n</script>\n\n<template>\n <ENumberField\n :id=\"id\"\n ref=\"field\"\n v-model=\"model\"\n class=\"e-currency\"\n :label=\"label\"\n :hide-label=\"hideLabel\"\n :min=\"min ?? 0\"\n :max=\"max\"\n :step=\"step ?? 0.01\"\n :prefix=\"prefix ?? symbol\"\n :suffix=\"suffix\"\n :name=\"name\"\n :hint=\"hint\"\n :error=\"error\"\n :required=\"required\"\n :optional=\"optional\"\n :disabled=\"disabled\"\n />\n</template>\n\n<style>\n@layer e.composites {\n .e-currency .e-input {\n font-variant-numeric: tabular-nums;\n }\n}\n</style>\n"],"mappings":""}
|
|
@@ -3,15 +3,15 @@ type __VLS_Props = {
|
|
|
3
3
|
label: string;
|
|
4
4
|
/** Keep the label for screen readers and remove it from the page. */
|
|
5
5
|
hideLabel?: boolean;
|
|
6
|
-
/** ISO 4217 code
|
|
6
|
+
/** ISO 4217 code. An unknown code falls back to the configured currency's symbol. @default configured currency */
|
|
7
7
|
currency?: string;
|
|
8
|
-
/** BCP 47 tag for the symbol.
|
|
8
|
+
/** BCP 47 tag used for the symbol. @default configured locale */
|
|
9
9
|
locale?: string;
|
|
10
|
-
/** The lowest value
|
|
10
|
+
/** The lowest value, so no negatives by default. @default 0 */
|
|
11
11
|
min?: number;
|
|
12
12
|
/** The highest value. */
|
|
13
13
|
max?: number;
|
|
14
|
-
/**
|
|
14
|
+
/** The size of one step of the buttons and arrow keys. Decimals shown follow the step. @default 0.01 */
|
|
15
15
|
step?: number;
|
|
16
16
|
/** Replaces the currency symbol before the value. */
|
|
17
17
|
prefix?: string;
|
|
@@ -23,15 +23,17 @@ type __VLS_Props = {
|
|
|
23
23
|
hint?: string;
|
|
24
24
|
/** What to fix. Replaces the hint, marks the field invalid and is announced. */
|
|
25
25
|
error?: string;
|
|
26
|
-
/**
|
|
26
|
+
/** The `required` attribute and a word beside the label. */
|
|
27
27
|
required?: boolean;
|
|
28
28
|
/** A word beside the label. Flag whichever is rarer. */
|
|
29
29
|
optional?: boolean;
|
|
30
|
+
/** Disables the field and its buttons. */
|
|
30
31
|
disabled?: boolean;
|
|
31
|
-
/** The id of the input; the label points at it.
|
|
32
|
+
/** The id of the input; the label points at it. @default generated */
|
|
32
33
|
id?: string;
|
|
33
34
|
};
|
|
34
35
|
type __VLS_ModelProps = {
|
|
36
|
+
/** The amount; round to the cent in code. */
|
|
35
37
|
modelValue?: number | null;
|
|
36
38
|
};
|
|
37
39
|
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
package/dist/components/CurrencyField/ECurrencyField.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECurrencyField.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","ENumberField","ENumberField_default","ECurrencyField_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","__expose","props","__props","model","useModel","config","useConfig","field","ref","symbolOf","locale","p","symbol","computed","openBlock","createBlock","_cache","$event"],"sources":["../../../src/components/CurrencyField/ECurrencyField.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport ENumberField from \"../NumberField/ENumberField.vue\";\nimport { useConfig } from \"../../config.js\";\nimport \"../../styles/base.css\";\n\nconst props = defineProps<{\n /** The visible label, a mono kicker above the field. The symbol is decoration, so say what the amount is for. */\n label: string;\n /** Keep the label for screen readers and remove it from the page. */\n hideLabel?: boolean;\n /** ISO 4217 code
|
|
1
|
+
{"version":3,"file":"ECurrencyField.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","ENumberField","ENumberField_default","ECurrencyField_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","__expose","props","__props","model","useModel","config","useConfig","field","ref","symbolOf","locale","p","symbol","computed","openBlock","createBlock","_cache","$event"],"sources":["../../../src/components/CurrencyField/ECurrencyField.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport ENumberField from \"../NumberField/ENumberField.vue\";\nimport { useConfig } from \"../../config.js\";\nimport \"../../styles/base.css\";\n\nconst props = defineProps<{\n /** The visible label, a mono kicker above the field. The symbol is decoration, so say what the amount is for. */\n label: string;\n /** Keep the label for screen readers and remove it from the page. */\n hideLabel?: boolean;\n /** ISO 4217 code. An unknown code falls back to the configured currency's symbol. @default configured currency */\n currency?: string;\n /** BCP 47 tag used for the symbol. @default configured locale */\n locale?: string;\n /** The lowest value, so no negatives by default. @default 0 */\n min?: number;\n /** The highest value. */\n max?: number;\n /** The size of one step of the buttons and arrow keys. Decimals shown follow the step. @default 0.01 */\n step?: number;\n /** Replaces the currency symbol before the value. */\n prefix?: string;\n /** A unit after the value. */\n suffix?: string;\n /** The name submitted with a form (the number, or empty). */\n name?: string;\n /** Help that stays under the field. */\n hint?: string;\n /** What to fix. Replaces the hint, marks the field invalid and is announced. */\n error?: string;\n /** The `required` attribute and a word beside the label. */\n required?: boolean;\n /** A word beside the label. Flag whichever is rarer. */\n optional?: boolean;\n /** Disables the field and its buttons. */\n disabled?: boolean;\n /** The id of the input; the label points at it. @default generated */\n id?: string;\n}>();\n\n/** The amount; round to the cent in code. */\nconst model = defineModel<number | null>({ default: null });\n\nconst config = useConfig();\nconst field = ref<InstanceType<typeof ENumberField> | null>(null);\n\nfunction symbolOf(locale: string, currency: string): string | undefined {\n try {\n const parts = new Intl.NumberFormat(locale, { style: \"currency\", currency }).formatToParts(0);\n return parts.find((p) => p.type === \"currency\")?.value;\n } catch {\n return undefined;\n }\n}\n\nconst symbol = computed(\n () =>\n symbolOf(props.locale || config.locale, props.currency || config.currency) ??\n symbolOf(config.locale, config.currency) ??\n config.currency,\n);\n\ndefineExpose({\n input: computed(() => field.value?.input ?? null),\n focus: () => field.value?.focus(),\n});\n</script>\n\n<template>\n <ENumberField\n :id=\"id\"\n ref=\"field\"\n v-model=\"model\"\n class=\"e-currency\"\n :label=\"label\"\n :hide-label=\"hideLabel\"\n :min=\"min ?? 0\"\n :max=\"max\"\n :step=\"step ?? 0.01\"\n :prefix=\"prefix ?? symbol\"\n :suffix=\"suffix\"\n :name=\"name\"\n :hint=\"hint\"\n :error=\"error\"\n :required=\"required\"\n :optional=\"optional\"\n :disabled=\"disabled\"\n />\n</template>\n\n<style>\n@layer e.composites {\n .e-currency .e-input {\n font-variant-numeric: tabular-nums;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMA,IAAMS,IAAQC,GAoCRC,IAAQX,EAA0BU,GAAA,YAAkB,GAEpDG,IAASC,EAAU,GACnBC,IAAQC,EAA8C,IAAI;EAEhE,SAASC,EAAS,GAAgB,GAAsC;GACtE,IAAI;IAEF,OADc,IAAI,KAAK,aAAaC,GAAQ;KAAE,OAAO;KAAY;IAAS,CAAC,CAAC,CAAC,cAAc,CACpF,CAAA,CAAM,MAAM,MAAMC,EAAE,SAAS,UAAU,CAAC,EAAE;GACnD,QAAQ;IACN;GACF;EACF;EAEA,IAAMC,IAASC,QAEXJ,EAASR,EAAM,UAAUI,EAAO,QAAQJ,EAAM,YAAYI,EAAO,QAAQ,KACzEI,EAASJ,EAAO,QAAQA,EAAO,QAAQ,KACvCA,EAAO,QACX;E,OAEAL,EAAa;GACX,OAAOa,QAAeN,EAAM,OAAO,SAAS,IAAI;GAChD,aAAaA,EAAM,OAAO,MAAM;EAClC,CAAC,I,UAICd,EAAA,GAAAC,EAkBEC,GAAA;GAjBC,IAAIO,EAAA;GACD,SAAA;GAAJ,KAAIK;GACK,YAAAJ,EAAA;GAAA,uBAAA,AAAAa,EAAA,QAAA,MAAA,EAAK,QAAAC;GACd,OAAM;GACL,OAAOf,EAAA;GACP,cAAYA,EAAA;GACZ,KAAKA,EAAA,OAAG;GACR,KAAKA,EAAA;GACL,MAAMA,EAAA,QAAI;GACV,QAAQA,EAAA,UAAUU,EAAA;GAClB,QAAQV,EAAA;GACR,MAAMA,EAAA;GACN,MAAMA,EAAA;GACN,OAAOA,EAAA;GACP,UAAUA,EAAA;GACV,UAAUA,EAAA;GACV,UAAUA,EAAA"}
|