@central-design-system/components 4.0.0-alpha.3 → 4.0.0-alpha.5
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/CHANGELOG.md +6 -0
- package/MIGRATION.md +15 -43
- package/dist/browser/chunks/cdsLegacy-VUz8RzDN.js +120 -0
- package/dist/browser/chunks/useIcons.component-Df4MSurB.js +102 -0
- package/dist/browser/entry.js +34490 -0
- package/dist/browser/iconsets/carbon.js +155 -0
- package/dist/browser/iconsets/cds.js +149 -0
- package/dist/browser/iconsets/cdsLegacy.js +6 -0
- package/dist/browser/iconsets/lucide.js +156 -0
- package/dist/browser/iconsets/mdi.js +154 -0
- package/dist/browser/iconsets/phosphor.js +155 -0
- package/dist/browser/iconsets/remix.js +155 -0
- package/dist/cds.d.ts +119065 -0
- package/dist/cjs/entry.js +10 -10
- package/dist/es/entry.css +0 -18
- package/dist/es/entry.js +132 -122
- package/dist/es/entry.js.map +1 -1
- package/dist/es/src/cds.js +5 -5
- package/dist/es/src/components/CdsApp/CdsApp.css +0 -18
- package/dist/es/src/components/CdsApp/CdsApp.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsApp/api/CdsApp.props.js +2 -1
- package/dist/es/src/components/CdsApp/api/CdsApp.props.js.map +1 -1
- package/dist/es/src/components/CdsAutocomplete/CdsAutocomplete.css +0 -18
- package/dist/es/src/components/CdsAutocomplete/CdsAutocomplete.vue_vue_type_script_setup_true_lang.js +20 -5
- package/dist/es/src/components/CdsAutocomplete/CdsAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsAutocomplete/api/CdsAutocomplete.props.js +9 -2
- package/dist/es/src/components/CdsAutocomplete/api/CdsAutocomplete.props.js.map +1 -1
- package/dist/es/src/components/CdsAvatar/CdsAvatar.css +0 -18
- package/dist/es/src/components/CdsAvatar/CdsAvatar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsAvatar/api/CdsAvatar.props.js +21 -6
- package/dist/es/src/components/CdsAvatar/api/CdsAvatar.props.js.map +1 -1
- package/dist/es/src/components/CdsBadge/CdsBadge.css +0 -18
- package/dist/es/src/components/CdsBadge/CdsBadge.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsBadge/api/CdsBadge.props.js +38 -10
- package/dist/es/src/components/CdsBadge/api/CdsBadge.props.js.map +1 -1
- package/dist/es/src/components/CdsBreadcrumbs/CdsBreadcrumbs.css +0 -18
- package/dist/es/src/components/CdsBreadcrumbs/api/CdsBreadcrumbs.props.js +32 -8
- package/dist/es/src/components/CdsBreadcrumbs/api/CdsBreadcrumbs.props.js.map +1 -1
- package/dist/es/src/components/CdsButton/CdsButton.css +0 -18
- package/dist/es/src/components/CdsButton/CdsButton.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/src/components/CdsButton/CdsButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsButton/api/CdsButton.props.js +29 -8
- package/dist/es/src/components/CdsButton/api/CdsButton.props.js.map +1 -1
- package/dist/es/src/components/CdsButtonGroup/CdsButtonGroup.css +0 -18
- package/dist/es/src/components/CdsButtonGroup/CdsButtonGroup.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsButtonGroup/api/CdsButtonGroup.props.js +5 -2
- package/dist/es/src/components/CdsButtonGroup/api/CdsButtonGroup.props.js.map +1 -1
- package/dist/es/src/components/CdsButtonToggle/CdsButtonToggle.css +0 -18
- package/dist/es/src/components/CdsButtonToggle/CdsButtonToggle.vue_vue_type_script_setup_true_lang.js +20 -5
- package/dist/es/src/components/CdsButtonToggle/CdsButtonToggle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsCard/CdsCard.css +0 -18
- package/dist/es/src/components/CdsCard/CdsCard.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsCard/CdsCardGroup.vue_vue_type_script_setup_true_lang.js +21 -6
- package/dist/es/src/components/CdsCard/CdsCardGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsCard/api/CdsCard.props.js +85 -21
- package/dist/es/src/components/CdsCard/api/CdsCard.props.js.map +1 -1
- package/dist/es/src/components/CdsCarousel/CdsCarousel.css +0 -18
- package/dist/es/src/components/CdsCarousel/api/CdsCarousel.props.js +36 -9
- package/dist/es/src/components/CdsCarousel/api/CdsCarousel.props.js.map +1 -1
- package/dist/es/src/components/CdsCheckbox/CdsCheckbox.css +0 -18
- package/dist/es/src/components/CdsCheckboxButton/CdsCheckboxButton.css +0 -18
- package/dist/es/src/components/CdsCheckboxButton/api/CdsCheckboxButton.props.js +8 -2
- package/dist/es/src/components/CdsCheckboxButton/api/CdsCheckboxButton.props.js.map +1 -1
- package/dist/es/src/components/CdsCombobox/CdsCombobox.css +0 -18
- package/dist/es/src/components/CdsCombobox/CdsCombobox.vue_vue_type_script_setup_true_lang.js +24 -6
- package/dist/es/src/components/CdsCombobox/CdsCombobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsCombobox/api/CdsCombobox.props.js +13 -3
- package/dist/es/src/components/CdsCombobox/api/CdsCombobox.props.js.map +1 -1
- package/dist/es/src/components/CdsCounter/CdsCounter.css +0 -18
- package/dist/es/src/components/CdsCounter/api/CdsCounter.props.js +12 -3
- package/dist/es/src/components/CdsCounter/api/CdsCounter.props.js.map +1 -1
- package/dist/es/src/components/CdsDateInput/CdsDateInput.css +0 -18
- package/dist/es/src/components/CdsDateInput/CdsDateInput.vue_vue_type_script_setup_true_lang.js +8 -0
- package/dist/es/src/components/CdsDateInput/CdsDateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsDateInput/api/CdsDateInput.props.js +31 -7
- package/dist/es/src/components/CdsDateInput/api/CdsDateInput.props.js.map +1 -1
- package/dist/es/src/components/CdsDatePicker/CdsDatePicker.css +0 -18
- package/dist/es/src/components/CdsDatePicker/CdsDatePicker.vue_vue_type_script_setup_true_lang.js +21 -1
- package/dist/es/src/components/CdsDatePicker/CdsDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsDatePicker/api/CdsDatePicker.props.js +65 -16
- package/dist/es/src/components/CdsDatePicker/api/CdsDatePicker.props.js.map +1 -1
- package/dist/es/src/components/CdsDefaultsProvider/api/CdsDefaultsProvider.props.js +5 -0
- package/dist/es/src/components/CdsDefaultsProvider/api/CdsDefaultsProvider.props.js.map +1 -1
- package/dist/es/src/components/CdsDescription/CdsDescription.css +0 -18
- package/dist/es/src/components/CdsDivider/CdsDivider.css +0 -18
- package/dist/es/src/components/CdsDivider/CdsDivider.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsDivider/CdsDivider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsDivider/api/CdsDivider.props.js +33 -8
- package/dist/es/src/components/CdsDivider/api/CdsDivider.props.js.map +1 -1
- package/dist/es/src/components/CdsDrawer/CdsDrawer.css +0 -18
- package/dist/es/src/components/CdsDrawer/CdsDrawer.vue_vue_type_script_setup_true_lang.js +6 -2
- package/dist/es/src/components/CdsDrawer/CdsDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsDrawer/api/CdsDrawer.props.js +33 -9
- package/dist/es/src/components/CdsDrawer/api/CdsDrawer.props.js.map +1 -1
- package/dist/es/src/components/CdsEmptyState/CdsEmptyState.css +0 -18
- package/dist/es/src/components/CdsEmptyState/CdsEmptyState.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/src/components/CdsEmptyState/api/CdsEmptyState.props.js +34 -9
- package/dist/es/src/components/CdsEmptyState/api/CdsEmptyState.props.js.map +1 -1
- package/dist/es/src/components/CdsExpandablePanel/CdsExpandablePanel.vue_vue_type_script_setup_true_lang.js +16 -4
- package/dist/es/src/components/CdsExpandablePanel/CdsExpandablePanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsExpandablePanel/CdsExpandablePanelTitle.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/es/src/components/CdsExpandablePanel/CdsExpandablePanelTitle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsExpandablePanel/CdsExpandablePanels.css +0 -18
- package/dist/es/src/components/CdsExpandablePanel/CdsExpandablePanels.vue_vue_type_script_setup_true_lang.js +9 -3
- package/dist/es/src/components/CdsExpandablePanel/CdsExpandablePanels.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsExpandablePanel/api/CdsExpandablePanel.props.js +39 -10
- package/dist/es/src/components/CdsExpandablePanel/api/CdsExpandablePanel.props.js.map +1 -1
- package/dist/es/src/components/CdsField/CdsField.css +0 -18
- package/dist/es/src/components/CdsField/CdsField.vue_vue_type_script_setup_true_lang.js +14 -4
- package/dist/es/src/components/CdsField/CdsField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsField/api/CdsField.props.js +57 -15
- package/dist/es/src/components/CdsField/api/CdsField.props.js.map +1 -1
- package/dist/es/src/components/CdsField/composables/useAutocomplete.js +1 -0
- package/dist/es/src/components/CdsField/composables/useAutocomplete.js.map +1 -1
- package/dist/es/src/components/CdsFileInput/CdsFileInput.css +0 -18
- package/dist/es/src/components/CdsFileInput/api/CdsFileInput.props.js +40 -10
- package/dist/es/src/components/CdsFileInput/api/CdsFileInput.props.js.map +1 -1
- package/dist/es/src/components/CdsFileInput/composables/useFileFilter.js +4 -1
- package/dist/es/src/components/CdsFileInput/composables/useFileFilter.js.map +1 -1
- package/dist/es/src/components/CdsFileUpload/CdsFileUpload.css +0 -18
- package/dist/es/src/components/CdsFileUpload/CdsFileUpload.vue_vue_type_script_setup_true_lang.js +4 -0
- package/dist/es/src/components/CdsFileUpload/CdsFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsFileUpload/api/CdsFileUpload.props.js +85 -21
- package/dist/es/src/components/CdsFileUpload/api/CdsFileUpload.props.js.map +1 -1
- package/dist/es/src/components/CdsFooter/CdsFooter.css +0 -18
- package/dist/es/src/components/CdsFooter/CdsFooter.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/src/components/CdsFooter/api/CdsFooter.props.js +1 -1
- package/dist/es/src/components/CdsForm/CdsForm.css +0 -18
- package/dist/es/src/components/CdsForm/api/CdsForm.props.js +8 -2
- package/dist/es/src/components/CdsForm/api/CdsForm.props.js.map +1 -1
- package/dist/es/src/components/CdsFunctionalButton/CdsFunctionalButton.css +0 -18
- package/dist/es/src/components/CdsFunctionalButton/api/CdsFunctionalButton.props.js +5 -2
- package/dist/es/src/components/CdsFunctionalButton/api/CdsFunctionalButton.props.js.map +1 -1
- package/dist/es/src/components/CdsGrid/CdsCol.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsGrid/api/CdsGrid.props.js +40 -10
- package/dist/es/src/components/CdsGrid/api/CdsGrid.props.js.map +1 -1
- package/dist/es/src/components/CdsGrid/components/CSSGrid.css +0 -18
- package/dist/es/src/components/CdsGrid/components/FlexGrid.css +0 -18
- package/dist/es/src/components/CdsHeader/CdsHeader.css +0 -18
- package/dist/es/src/components/CdsHeader/CdsHeader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsHeader/api/CdsHeader.props.js +1 -1
- package/dist/es/src/components/CdsHighlight/CdsHighlight.css +0 -18
- package/dist/es/src/components/CdsHighlight/api/CdsHighlight.props.js +32 -8
- package/dist/es/src/components/CdsHighlight/api/CdsHighlight.props.js.map +1 -1
- package/dist/es/src/components/CdsIcon/CdsIcon.css +0 -18
- package/dist/es/src/components/CdsIcon/CdsIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsIcon/api/CdsIcon.props.js +18 -5
- package/dist/es/src/components/CdsIcon/api/CdsIcon.props.js.map +1 -1
- package/dist/es/src/components/CdsImage/CdsImage.css +0 -18
- package/dist/es/src/components/CdsImage/CdsImage.vue_vue_type_script_setup_true_lang.js +21 -1
- package/dist/es/src/components/CdsImage/CdsImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsImage/api/CdsImage.props.js +65 -17
- package/dist/es/src/components/CdsImage/api/CdsImage.props.js.map +1 -1
- package/dist/es/src/components/CdsInput/CdsInput.css +0 -18
- package/dist/es/src/components/CdsInput/CdsInput.vue_vue_type_script_setup_true_lang.js +45 -12
- package/dist/es/src/components/CdsInput/CdsInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsInput/api/CdsInput.props.js +49 -13
- package/dist/es/src/components/CdsInput/api/CdsInput.props.js.map +1 -1
- package/dist/es/src/components/CdsLabel/CdsLabel.css +0 -18
- package/dist/es/src/components/CdsLabel/api/CdsLabel.props.js +4 -0
- package/dist/es/src/components/CdsLabel/api/CdsLabel.props.js.map +1 -1
- package/dist/es/src/components/CdsLayout/CdsLayout.css +0 -18
- package/dist/es/src/components/CdsLayout/CdsLayout.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/src/components/CdsLayout/api/CdsLayout.props.js +6 -2
- package/dist/es/src/components/CdsLayout/api/CdsLayout.props.js.map +1 -1
- package/dist/es/src/components/CdsLink/CdsLink.css +0 -18
- package/dist/es/src/components/CdsLink/CdsLink.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsLink/api/CdsLink.props.js +5 -2
- package/dist/es/src/components/CdsLink/api/CdsLink.props.js.map +1 -1
- package/dist/es/src/components/CdsList/CdsList.css +0 -18
- package/dist/es/src/components/CdsList/CdsList.vue_vue_type_script_setup_true_lang.js +25 -7
- package/dist/es/src/components/CdsList/CdsList.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsList/CdsListGroup.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/src/components/CdsList/CdsListGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsList/CdsListItem.css +0 -18
- package/dist/es/src/components/CdsList/CdsListItem.vue_vue_type_script_setup_true_lang.js +29 -8
- package/dist/es/src/components/CdsList/CdsListItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsList/CdsListItemAction.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/es/src/components/CdsList/CdsListItemAction.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsList/CdsListItemDivider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsList/CdsListItemMedia.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/es/src/components/CdsList/CdsListItemMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsList/CdsListSubheader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsList/api/CdsList.props.js +145 -37
- package/dist/es/src/components/CdsList/api/CdsList.props.js.map +1 -1
- package/dist/es/src/components/CdsList/components/ListChildren.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/es/src/components/CdsList/components/ListChildren.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsList/components/ListGroupActivator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsList/index.js +5 -2
- package/dist/es/src/components/CdsList/index.js.map +1 -1
- package/dist/es/src/components/CdsLoader/CdsLoader.css +0 -18
- package/dist/es/src/components/CdsLoader/CdsLoader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsLoader/api/CdsLoader.props.js +12 -3
- package/dist/es/src/components/CdsLoader/api/CdsLoader.props.js.map +1 -1
- package/dist/es/src/components/CdsMain/CdsMain.css +0 -18
- package/dist/es/src/components/CdsMenu/CdsMenu.css +0 -18
- package/dist/es/src/components/CdsMenu/api/CdsMenu.props.js +8 -2
- package/dist/es/src/components/CdsMenu/api/CdsMenu.props.js.map +1 -1
- package/dist/es/src/components/CdsMessages/CdsMessages.css +0 -18
- package/dist/es/src/components/CdsMessages/api/CdsMessages.props.js +12 -3
- package/dist/es/src/components/CdsMessages/api/CdsMessages.props.js.map +1 -1
- package/dist/es/src/components/CdsModal/CdsModal.css +0 -18
- package/dist/es/src/components/CdsModal/api/CdsModal.props.js +8 -2
- package/dist/es/src/components/CdsModal/api/CdsModal.props.js.map +1 -1
- package/dist/es/src/components/CdsNotification/CdsNotification.css +0 -18
- package/dist/es/src/components/CdsNotification/CdsNotification.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsNotification/api/CdsNotification.props.js +29 -8
- package/dist/es/src/components/CdsNotification/api/CdsNotification.props.js.map +1 -1
- package/dist/es/src/components/CdsNotificationAlert/CdsNotificationAlert.css +0 -18
- package/dist/es/src/components/CdsNotificationAlert/api/CdsNotificationAlert.props.js +28 -7
- package/dist/es/src/components/CdsNotificationAlert/api/CdsNotificationAlert.props.js.map +1 -1
- package/dist/es/src/components/CdsOtpInput/CdsOtpInput.css +0 -18
- package/dist/es/src/components/CdsOtpInput/CdsOtpInput.vue_vue_type_script_setup_true_lang.js +21 -6
- package/dist/es/src/components/CdsOtpInput/CdsOtpInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsOtpInput/api/CdsOtpInput.props.js +53 -14
- package/dist/es/src/components/CdsOtpInput/api/CdsOtpInput.props.js.map +1 -1
- package/dist/es/src/components/CdsOverlay/CdsOverlay.css +0 -18
- package/dist/es/src/components/CdsOverlay/CdsOverlay.vue_vue_type_script_setup_true_lang.js +45 -12
- package/dist/es/src/components/CdsOverlay/CdsOverlay.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsOverlay/api/CdsOverlay.props.js +37 -9
- package/dist/es/src/components/CdsOverlay/api/CdsOverlay.props.js.map +1 -1
- package/dist/es/src/components/CdsOverlay/composables/useActivator.js +25 -6
- package/dist/es/src/components/CdsOverlay/composables/useActivator.js.map +1 -1
- package/dist/es/src/components/CdsOverlay/composables/useLocationStrategies.js +18 -4
- package/dist/es/src/components/CdsOverlay/composables/useLocationStrategies.js.map +1 -1
- package/dist/es/src/components/CdsOverlay/composables/useScrollStrategies.js +4 -1
- package/dist/es/src/components/CdsOverlay/composables/useScrollStrategies.js.map +1 -1
- package/dist/es/src/components/CdsPage/CdsPage.css +0 -18
- package/dist/es/src/components/CdsPage/CdsPage.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsPage/api/CdsPage.props.js +5 -1
- package/dist/es/src/components/CdsPage/api/CdsPage.props.js.map +1 -1
- package/dist/es/src/components/CdsPagination/CdsPagination.css +0 -18
- package/dist/es/src/components/CdsPagination/CdsPagination.vue_vue_type_script_setup_true_lang.js +18 -2
- package/dist/es/src/components/CdsPagination/CdsPagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsPagination/api/CdsPagination.props.js +85 -22
- package/dist/es/src/components/CdsPagination/api/CdsPagination.props.js.map +1 -1
- package/dist/es/src/components/CdsProgressBar/CdsProgressBar.css +0 -18
- package/dist/es/src/components/CdsProgressBar/CdsProgressBar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsProgressBar/api/CdsProgressBar.props.js +65 -17
- package/dist/es/src/components/CdsProgressBar/api/CdsProgressBar.props.js.map +1 -1
- package/dist/es/src/components/CdsProgressBar/composables/useChunk.js +4 -0
- package/dist/es/src/components/CdsProgressBar/composables/useChunk.js.map +1 -1
- package/dist/es/src/components/CdsProgressCircle/CdsProgressCircle.css +0 -18
- package/dist/es/src/components/CdsProgressCircle/CdsProgressCircle.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsProgressCircle/api/CdsProgressCircle.props.js +29 -8
- package/dist/es/src/components/CdsProgressCircle/api/CdsProgressCircle.props.js.map +1 -1
- package/dist/es/src/components/CdsRadio/CdsRadio.css +0 -18
- package/dist/es/src/components/CdsRadioGroup/CdsRadioGroup.css +0 -18
- package/dist/es/src/components/CdsRadioGroup/api/CdsRadioGroup.props.js +16 -4
- package/dist/es/src/components/CdsRadioGroup/api/CdsRadioGroup.props.js.map +1 -1
- package/dist/es/src/components/CdsResponsive/CdsResponsive.css +0 -18
- package/dist/es/src/components/CdsResponsive/api/CdsResponsive.props.js +12 -3
- package/dist/es/src/components/CdsResponsive/api/CdsResponsive.props.js.map +1 -1
- package/dist/es/src/components/CdsSelect/CdsSelect.css +0 -18
- package/dist/es/src/components/CdsSelect/CdsSelect.vue_vue_type_script_setup_true_lang.js +16 -4
- package/dist/es/src/components/CdsSelect/CdsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsSelect/api/CdsSelect.props.js +4 -1
- package/dist/es/src/components/CdsSelect/api/CdsSelect.props.js.map +1 -1
- package/dist/es/src/components/CdsSelect/composables/useMenuActivator.js +8 -2
- package/dist/es/src/components/CdsSelect/composables/useMenuActivator.js.map +1 -1
- package/dist/es/src/components/CdsSelect/composables/useSelect.js +69 -17
- package/dist/es/src/components/CdsSelect/composables/useSelect.js.map +1 -1
- package/dist/es/src/components/CdsSelectionControl/CdsSelectionControl.css +0 -18
- package/dist/es/src/components/CdsSelectionControl/CdsSelectionControl.vue_vue_type_script_setup_true_lang.js +8 -0
- package/dist/es/src/components/CdsSelectionControl/CdsSelectionControl.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsSelectionControl/api/CdsSelectionControl.props.js +12 -3
- package/dist/es/src/components/CdsSelectionControl/api/CdsSelectionControl.props.js.map +1 -1
- package/dist/es/src/components/CdsSelectionControlGroup/CdsSelectionControlGroup.css +0 -18
- package/dist/es/src/components/CdsSelectionControlGroup/api/CdsSelectionControlGroup.props.js +44 -11
- package/dist/es/src/components/CdsSelectionControlGroup/api/CdsSelectionControlGroup.props.js.map +1 -1
- package/dist/es/src/components/CdsSkeletonLoader/CdsSkeletonLoader.css +0 -18
- package/dist/es/src/components/CdsSkeletonLoader/CdsSkeletonLoader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsSkeletonLoader/api/CdsSkeletonLoader.props.js +17 -5
- package/dist/es/src/components/CdsSkeletonLoader/api/CdsSkeletonLoader.props.js.map +1 -1
- package/dist/es/src/components/CdsSkeletonLoader/api/CdsSkeletonLoader.types.js.map +1 -1
- package/dist/es/src/components/CdsSlideGroup/CdsSlideGroup.css +0 -18
- package/dist/es/src/components/CdsSlideGroup/CdsSlideGroup.vue_vue_type_script_setup_true_lang.js +25 -7
- package/dist/es/src/components/CdsSlideGroup/CdsSlideGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsSlideGroup/api/CdsSlideGroup.props.js +26 -7
- package/dist/es/src/components/CdsSlideGroup/api/CdsSlideGroup.props.js.map +1 -1
- package/dist/es/src/components/CdsSlideView/CdsSlideView.css +0 -18
- package/dist/es/src/components/CdsSlideView/CdsSlideView.vue_vue_type_script_setup_true_lang.js +4 -0
- package/dist/es/src/components/CdsSlideView/CdsSlideView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsSlideView/CdsSlideViewItem.vue_vue_type_script_setup_true_lang.js +5 -1
- package/dist/es/src/components/CdsSlideView/CdsSlideViewItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsSlideView/api/CdsSlideView.props.js +45 -1
- package/dist/es/src/components/CdsSlideView/api/CdsSlideView.props.js.map +1 -1
- package/dist/es/src/components/CdsStages/CdsStages.css +0 -18
- package/dist/es/src/components/CdsStages/CdsStages.vue_vue_type_script_setup_true_lang.js +9 -1
- package/dist/es/src/components/CdsStages/CdsStages.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsStages/api/CdsStages.props.js +9 -3
- package/dist/es/src/components/CdsStages/api/CdsStages.props.js.map +1 -1
- package/dist/es/src/components/CdsStatus/CdsStatus.css +0 -18
- package/dist/es/src/components/CdsStatus/CdsStatus.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsStatus/api/CdsStatus.props.js +5 -2
- package/dist/es/src/components/CdsStatus/api/CdsStatus.props.js.map +1 -1
- package/dist/es/src/components/CdsSteps/CdsSteps.css +0 -18
- package/dist/es/src/components/CdsSteps/CdsSteps.vue_vue_type_script_setup_true_lang.js +8 -0
- package/dist/es/src/components/CdsSteps/CdsSteps.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsSteps/api/CdsSteps.props.js +45 -12
- package/dist/es/src/components/CdsSteps/api/CdsSteps.props.js.map +1 -1
- package/dist/es/src/components/CdsSurface/CdsSurface.css +0 -18
- package/dist/es/src/components/CdsSurface/CdsSurface.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsSurface/api/CdsSurface.props.js +5 -2
- package/dist/es/src/components/CdsSurface/api/CdsSurface.props.js.map +1 -1
- package/dist/es/src/components/CdsTable/CdsTable.css +0 -18
- package/dist/es/src/components/CdsTable/CdsTable.vue_vue_type_script_setup_true_lang.js +4 -0
- package/dist/es/src/components/CdsTable/CdsTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsTable/api/CdsTable.props.js +1 -1
- package/dist/es/src/components/CdsTable/components/TableProvider.js +2 -2
- package/dist/es/src/components/CdsTable/composable/table.js +47 -0
- package/dist/es/src/components/CdsTable/composable/table.js.map +1 -1
- package/dist/es/src/components/CdsTabs/CdsTabs.css +0 -18
- package/dist/es/src/components/CdsTabs/api/CdsTabs.props.js +56 -0
- package/dist/es/src/components/CdsTabs/api/CdsTabs.props.js.map +1 -1
- package/dist/es/src/components/CdsTag/CdsTag.css +0 -18
- package/dist/es/src/components/CdsTag/CdsTag.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsTag/api/CdsTag.props.js +72 -18
- package/dist/es/src/components/CdsTag/api/CdsTag.props.js.map +1 -1
- package/dist/es/src/components/CdsTagGroup/CdsTagGroup.css +0 -18
- package/dist/es/src/components/CdsTagGroup/CdsTagGroup.vue_vue_type_script_setup_true_lang.js +21 -6
- package/dist/es/src/components/CdsTagGroup/CdsTagGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsTagGroup/api/CdsTagGroup.props.js +12 -4
- package/dist/es/src/components/CdsTagGroup/api/CdsTagGroup.props.js.map +1 -1
- package/dist/es/src/components/CdsTextArea/CdsTextArea.css +0 -18
- package/dist/es/src/components/CdsTextArea/api/CdsTextArea.props.js +52 -13
- package/dist/es/src/components/CdsTextArea/api/CdsTextArea.props.js.map +1 -1
- package/dist/es/src/components/CdsTextInput/CdsTextInput.css +0 -18
- package/dist/es/src/components/CdsTextInput/api/CdsTextInput.props.js +40 -10
- package/dist/es/src/components/CdsTextInput/api/CdsTextInput.props.js.map +1 -1
- package/dist/es/src/components/CdsTimePicker/CdsTimePicker.css +0 -18
- package/dist/es/src/components/CdsTimePicker/CdsTimePicker.vue_vue_type_script_setup_true_lang.js +25 -1
- package/dist/es/src/components/CdsTimePicker/CdsTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsTimePicker/api/CdsTimePicker.props.js +33 -9
- package/dist/es/src/components/CdsTimePicker/api/CdsTimePicker.props.js.map +1 -1
- package/dist/es/src/components/CdsToast/CdsToast.css +0 -18
- package/dist/es/src/components/CdsToast/CdsToast.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsToast/api/CdsToast.props.js +48 -12
- package/dist/es/src/components/CdsToast/api/CdsToast.props.js.map +1 -1
- package/dist/es/src/components/CdsToastQueue/CdsToastQueue.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/src/components/CdsToastQueue/CdsToastQueue.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsToastQueue/api/CdsToastQueue.props.js +28 -7
- package/dist/es/src/components/CdsToastQueue/api/CdsToastQueue.props.js.map +1 -1
- package/dist/es/src/components/CdsToggle/CdsToggle.css +0 -18
- package/dist/es/src/components/CdsToggle/api/CdsToggle.props.js +12 -3
- package/dist/es/src/components/CdsToggle/api/CdsToggle.props.js.map +1 -1
- package/dist/es/src/components/CdsToolbar/CdsToolbar.css +0 -18
- package/dist/es/src/components/CdsToolbar/CdsToolbar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsToolbar/api/CdsToolbar.props.js +21 -6
- package/dist/es/src/components/CdsToolbar/api/CdsToolbar.props.js.map +1 -1
- package/dist/es/src/components/CdsTooltip/CdsTooltip.css +0 -18
- package/dist/es/src/components/CdsTooltip/api/CdsTooltip.props.js +20 -5
- package/dist/es/src/components/CdsTooltip/api/CdsTooltip.props.js.map +1 -1
- package/dist/es/src/components/CdsTree/CdsTree.css +0 -18
- package/dist/es/src/components/CdsTree/CdsTree.vue_vue_type_script_setup_true_lang.js +17 -1
- package/dist/es/src/components/CdsTree/CdsTree.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsTree/api/CdsTree.props.js +1 -1
- package/dist/es/src/components/CdsTree/composable/tree.js +28 -0
- package/dist/es/src/components/CdsTree/composable/tree.js.map +1 -1
- package/dist/es/src/components/CdsTree/composable/treeNode.js +68 -2
- package/dist/es/src/components/CdsTree/composable/treeNode.js.map +1 -1
- package/dist/es/src/components/CdsUploader/CdsUploader.css +0 -18
- package/dist/es/src/components/CdsUploader/CdsUploader.vue_vue_type_script_setup_true_lang.js +9 -1
- package/dist/es/src/components/CdsUploader/CdsUploader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsUploader/composables/useUpload.js +104 -26
- package/dist/es/src/components/CdsUploader/composables/useUpload.js.map +1 -1
- package/dist/es/src/components/CdsVirtualScroll/CdsVirtualScroll.css +0 -18
- package/dist/es/src/components/CdsVirtualScroll/CdsVirtualScroll.vue_vue_type_script_setup_true_lang.js +8 -0
- package/dist/es/src/components/CdsVirtualScroll/CdsVirtualScroll.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/es/src/components/CdsVirtualScroll/api/CdsVirtualScroll.props.js +12 -3
- package/dist/es/src/components/CdsVirtualScroll/api/CdsVirtualScroll.props.js.map +1 -1
- package/dist/es/src/components/index.js +2 -1
- package/dist/es/src/components/index.js.map +1 -1
- package/dist/es/src/composables/useAppearance/useAppearance.js +4 -1
- package/dist/es/src/composables/useAppearance/useAppearance.js.map +1 -1
- package/dist/es/src/composables/useColor/useColor.js +20 -5
- package/dist/es/src/composables/useColor/useColor.js.map +1 -1
- package/dist/es/src/composables/useDatetime/useDatetime.js +3 -0
- package/dist/es/src/composables/useDatetime/useDatetime.js.map +1 -1
- package/dist/es/src/composables/useDelay/useDelay.js +8 -2
- package/dist/es/src/composables/useDelay/useDelay.js.map +1 -1
- package/dist/es/src/composables/useDimensions/useDimensions.js +24 -6
- package/dist/es/src/composables/useDimensions/useDimensions.js.map +1 -1
- package/dist/es/src/composables/useDirection/useDirection.js +4 -1
- package/dist/es/src/composables/useDirection/useDirection.js.map +1 -1
- package/dist/es/src/composables/useDisabled/index.js +1 -1
- package/dist/es/src/composables/useDisabled/index.js.map +1 -1
- package/dist/es/src/composables/useDisabled/useDisabled.js +4 -1
- package/dist/es/src/composables/useDisabled/useDisabled.js.map +1 -1
- package/dist/es/src/composables/useDisplay/useDisplay.js +2 -0
- package/dist/es/src/composables/useDisplay/useDisplay.js.map +1 -1
- package/dist/es/src/composables/useFilter/useFilter.js +20 -0
- package/dist/es/src/composables/useFilter/useFilter.js.map +1 -1
- package/dist/es/src/composables/useFocus/useFocus.js +12 -3
- package/dist/es/src/composables/useFocus/useFocus.js.map +1 -1
- package/dist/es/src/composables/useFocus/useFocusTrap.js +8 -2
- package/dist/es/src/composables/useFocus/useFocusTrap.js.map +1 -1
- package/dist/es/src/composables/useForm/useForm.js +45 -0
- package/dist/es/src/composables/useForm/useForm.js.map +1 -1
- package/dist/es/src/composables/useGroup/useGroup.js +24 -6
- package/dist/es/src/composables/useGroup/useGroup.js.map +1 -1
- package/dist/es/src/composables/useGroup/useGroupItem.js +8 -2
- package/dist/es/src/composables/useGroup/useGroupItem.js.map +1 -1
- package/dist/es/src/composables/useHydration/useHydration.js +1 -1
- package/dist/es/src/composables/useItems/useItems.js +32 -8
- package/dist/es/src/composables/useItems/useItems.js.map +1 -1
- package/dist/es/src/composables/useLayout/context.js.map +1 -1
- package/dist/es/src/composables/useLayout/useLayout.js +25 -7
- package/dist/es/src/composables/useLayout/useLayout.js.map +1 -1
- package/dist/es/src/composables/useLazy/useLazy.js +1 -0
- package/dist/es/src/composables/useLazy/useLazy.js.map +1 -1
- package/dist/es/src/composables/useLoader/index.js +1 -1
- package/dist/es/src/composables/useLoader/index.js.map +1 -1
- package/dist/es/src/composables/useLoader/useLoader.js +4 -1
- package/dist/es/src/composables/useLoader/useLoader.js.map +1 -1
- package/dist/es/src/composables/useLocation/index.js +1 -1
- package/dist/es/src/composables/useLocation/index.js.map +1 -1
- package/dist/es/src/composables/useLocation/useLocation.js +4 -1
- package/dist/es/src/composables/useLocation/useLocation.js.map +1 -1
- package/dist/es/src/composables/useNested/useNested.js +44 -11
- package/dist/es/src/composables/useNested/useNested.js.map +1 -1
- package/dist/es/src/composables/usePosition/usePosition.js +4 -0
- package/dist/es/src/composables/usePosition/usePosition.js.map +1 -1
- package/dist/es/src/composables/useReadonly/useReadonly.js +4 -1
- package/dist/es/src/composables/useReadonly/useReadonly.js.map +1 -1
- package/dist/es/src/composables/useReveal/useReveal.js +4 -1
- package/dist/es/src/composables/useReveal/useReveal.js.map +1 -1
- package/dist/es/src/composables/useRouter/index.js +1 -1
- package/dist/es/src/composables/useRouter/index.js.map +1 -1
- package/dist/es/src/composables/useRouter/useRouter.js +16 -4
- package/dist/es/src/composables/useRouter/useRouter.js.map +1 -1
- package/dist/es/src/composables/useSize/useSize.js +4 -1
- package/dist/es/src/composables/useSize/useSize.js.map +1 -1
- package/dist/es/src/composables/useStatus/useStatus.js +4 -1
- package/dist/es/src/composables/useStatus/useStatus.js.map +1 -1
- package/dist/es/src/composables/useText/useText.js +8 -2
- package/dist/es/src/composables/useText/useText.js.map +1 -1
- package/dist/es/src/composables/useTheme/internal/useTheme.constants.js +13 -2
- package/dist/es/src/composables/useTheme/internal/useTheme.constants.js.map +1 -1
- package/dist/es/src/composables/useTheme/useTheme.js +4 -1
- package/dist/es/src/composables/useTheme/useTheme.js.map +1 -1
- package/dist/es/src/composables/useTransition/useTransition.js +4 -1
- package/dist/es/src/composables/useTransition/useTransition.js.map +1 -1
- package/dist/es/src/composables/useValidation/useValidation.js +26 -6
- package/dist/es/src/composables/useValidation/useValidation.js.map +1 -1
- package/dist/es/src/composables/useVirtual/useVirtual.js +13 -4
- package/dist/es/src/composables/useVirtual/useVirtual.js.map +1 -1
- package/dist/es/src/core/defineComponent.js +4 -1
- package/dist/es/src/core/defineComponent.js.map +1 -1
- package/dist/es/src/core/useDefaults.js +3 -1
- package/dist/es/src/locales/adapters/cdsLocaleAdapter.js +2 -1
- package/dist/es/src/locales/adapters/cdsLocaleAdapter.js.map +1 -1
- package/dist/es/src/locales/en.js +70 -0
- package/dist/es/src/locales/en.js.map +1 -0
- package/dist/es/src/locales/index.js +18 -0
- package/dist/es/src/locales/index.js.map +1 -0
- package/dist/es/src/themes/index.js +4 -0
- package/dist/es/src/themes/index.js.map +1 -1
- package/dist/es/src/themes/lumaDark.js +24 -0
- package/dist/es/src/themes/lumaDark.js.map +1 -0
- package/dist/es/src/themes/lumaLight.js +20 -0
- package/dist/es/src/themes/lumaLight.js.map +1 -0
- package/dist/es/src/utils/date/date.js +4 -4
- package/dist/es/src/utils/date/date.js.map +1 -1
- package/dist/esm-node/entry.css +0 -18
- package/dist/esm-node/entry.mjs +132 -122
- package/dist/esm-node/src/assets/icons/cdsLegacy.mjs +1 -1
- package/dist/esm-node/src/cds.mjs +6 -6
- package/dist/esm-node/src/components/CdsApp/CdsApp.css +0 -18
- package/dist/esm-node/src/components/CdsApp/CdsApp.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsApp/api/CdsApp.props.mjs +2 -1
- package/dist/esm-node/src/components/CdsAutocomplete/CdsAutocomplete.css +0 -18
- package/dist/esm-node/src/components/CdsAutocomplete/CdsAutocomplete.vue_vue_type_script_setup_true_lang.mjs +23 -8
- package/dist/esm-node/src/components/CdsAutocomplete/api/CdsAutocomplete.props.mjs +10 -3
- package/dist/esm-node/src/components/CdsAvatar/CdsAvatar.css +0 -18
- package/dist/esm-node/src/components/CdsAvatar/CdsAvatar.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsAvatar/api/CdsAvatar.props.mjs +21 -6
- package/dist/esm-node/src/components/CdsBadge/CdsBadge.css +0 -18
- package/dist/esm-node/src/components/CdsBadge/CdsBadge.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsBadge/api/CdsBadge.props.mjs +39 -11
- package/dist/esm-node/src/components/CdsBreadcrumbs/CdsBreadcrumbs.css +0 -18
- package/dist/esm-node/src/components/CdsBreadcrumbs/CdsBreadcrumbs.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsBreadcrumbs/CdsBreadcrumbsDivider.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsBreadcrumbs/CdsBreadcrumbsItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsBreadcrumbs/api/CdsBreadcrumbs.props.mjs +33 -9
- package/dist/esm-node/src/components/CdsButton/CdsButton.css +0 -18
- package/dist/esm-node/src/components/CdsButton/CdsButton.vue_vue_type_script_setup_true_lang.mjs +6 -3
- package/dist/esm-node/src/components/CdsButton/api/CdsButton.props.mjs +30 -9
- package/dist/esm-node/src/components/CdsButtonGroup/CdsButtonGroup.css +0 -18
- package/dist/esm-node/src/components/CdsButtonGroup/CdsButtonGroup.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsButtonGroup/api/CdsButtonGroup.props.mjs +6 -3
- package/dist/esm-node/src/components/CdsButtonToggle/CdsButtonToggle.css +0 -18
- package/dist/esm-node/src/components/CdsButtonToggle/CdsButtonToggle.vue_vue_type_script_setup_true_lang.mjs +21 -6
- package/dist/esm-node/src/components/CdsButtonToggle/api/CdsButtonToggle.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsCard/CdsCard.css +0 -18
- package/dist/esm-node/src/components/CdsCard/CdsCard.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsCard/CdsCardActions.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsCard/CdsCardDivider.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsCard/CdsCardGroup.vue_vue_type_script_setup_true_lang.mjs +22 -7
- package/dist/esm-node/src/components/CdsCard/CdsCardItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsCard/CdsCardSubtitle.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsCard/CdsCardText.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsCard/CdsCardTitle.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsCard/api/CdsCard.props.mjs +85 -21
- package/dist/esm-node/src/components/CdsCarousel/CdsCarousel.css +0 -18
- package/dist/esm-node/src/components/CdsCarousel/CdsCarousel.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsCarousel/CdsCarouselItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsCarousel/api/CdsCarousel.props.mjs +36 -9
- package/dist/esm-node/src/components/CdsCheckbox/CdsCheckbox.css +0 -18
- package/dist/esm-node/src/components/CdsCheckbox/CdsCheckbox.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsCheckbox/api/CdsCheckbox.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsCheckboxButton/CdsCheckboxButton.css +0 -18
- package/dist/esm-node/src/components/CdsCheckboxButton/CdsCheckboxButton.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsCheckboxButton/api/CdsCheckboxButton.props.mjs +8 -2
- package/dist/esm-node/src/components/CdsCombobox/CdsCombobox.css +0 -18
- package/dist/esm-node/src/components/CdsCombobox/CdsCombobox.vue_vue_type_script_setup_true_lang.mjs +27 -9
- package/dist/esm-node/src/components/CdsCombobox/api/CdsCombobox.props.mjs +14 -4
- package/dist/esm-node/src/components/CdsCounter/CdsCounter.css +0 -18
- package/dist/esm-node/src/components/CdsCounter/CdsCounter.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsCounter/api/CdsCounter.props.mjs +12 -3
- package/dist/esm-node/src/components/CdsDateInput/CdsDateInput.css +0 -18
- package/dist/esm-node/src/components/CdsDateInput/CdsDateInput.vue_vue_type_script_setup_true_lang.mjs +11 -3
- package/dist/esm-node/src/components/CdsDateInput/api/CdsDateInput.props.mjs +32 -8
- package/dist/esm-node/src/components/CdsDatePicker/CdsDatePicker.css +0 -18
- package/dist/esm-node/src/components/CdsDatePicker/CdsDatePicker.vue_vue_type_script_setup_true_lang.mjs +23 -3
- package/dist/esm-node/src/components/CdsDatePicker/api/CdsDatePicker.props.mjs +65 -16
- package/dist/esm-node/src/components/CdsDatePicker/composables/useCalendar.mjs +3 -3
- package/dist/esm-node/src/components/CdsDefaultsProvider/api/CdsDefaultsProvider.props.mjs +5 -0
- package/dist/esm-node/src/components/CdsDescription/CdsDescription.css +0 -18
- package/dist/esm-node/src/components/CdsDescription/CdsDescription.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsDivider/CdsDivider.css +0 -18
- package/dist/esm-node/src/components/CdsDivider/CdsDivider.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsDivider/api/CdsDivider.props.mjs +33 -8
- package/dist/esm-node/src/components/CdsDrawer/CdsDrawer.css +0 -18
- package/dist/esm-node/src/components/CdsDrawer/CdsDrawer.vue_vue_type_script_setup_true_lang.mjs +8 -4
- package/dist/esm-node/src/components/CdsDrawer/api/CdsDrawer.props.mjs +34 -10
- package/dist/esm-node/src/components/CdsEmptyState/CdsEmptyState.css +0 -18
- package/dist/esm-node/src/components/CdsEmptyState/CdsEmptyState.vue_vue_type_script_setup_true_lang.mjs +5 -5
- package/dist/esm-node/src/components/CdsEmptyState/api/CdsEmptyState.props.mjs +35 -10
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanel.vue_vue_type_script_setup_true_lang.mjs +17 -5
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanelContent.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanelTitle.vue_vue_type_script_setup_true_lang.mjs +9 -3
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanels.css +0 -18
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanels.vue_vue_type_script_setup_true_lang.mjs +11 -5
- package/dist/esm-node/src/components/CdsExpandablePanel/api/CdsExpandablePanel.props.mjs +40 -11
- package/dist/esm-node/src/components/CdsField/CdsField.css +0 -18
- package/dist/esm-node/src/components/CdsField/CdsField.vue_vue_type_script_setup_true_lang.mjs +15 -5
- package/dist/esm-node/src/components/CdsField/api/CdsField.props.mjs +58 -16
- package/dist/esm-node/src/components/CdsField/composables/useAutocomplete.mjs +1 -0
- package/dist/esm-node/src/components/CdsFileInput/CdsFileInput.css +0 -18
- package/dist/esm-node/src/components/CdsFileInput/CdsFileInput.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsFileInput/api/CdsFileInput.props.mjs +41 -11
- package/dist/esm-node/src/components/CdsFileInput/composables/useFileFilter.mjs +4 -1
- package/dist/esm-node/src/components/CdsFileUpload/CdsFileUpload.css +0 -18
- package/dist/esm-node/src/components/CdsFileUpload/CdsFileUpload.vue_vue_type_script_setup_true_lang.mjs +6 -2
- package/dist/esm-node/src/components/CdsFileUpload/CdsFileUploadDropzone.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsFileUpload/CdsFileUploadItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsFileUpload/CdsFileUploadList.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsFileUpload/api/CdsFileUpload.props.mjs +86 -22
- package/dist/esm-node/src/components/CdsFooter/CdsFooter.css +0 -18
- package/dist/esm-node/src/components/CdsFooter/CdsFooter.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsFooter/api/CdsFooter.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsForm/CdsForm.css +0 -18
- package/dist/esm-node/src/components/CdsForm/CdsForm.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsForm/api/CdsForm.props.mjs +8 -2
- package/dist/esm-node/src/components/CdsFunctionalButton/CdsFunctionalButton.css +0 -18
- package/dist/esm-node/src/components/CdsFunctionalButton/api/CdsFunctionalButton.props.mjs +6 -3
- package/dist/esm-node/src/components/CdsGrid/CdsCol.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsGrid/CdsRow.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsGrid/api/CdsGrid.props.mjs +41 -11
- package/dist/esm-node/src/components/CdsGrid/components/CSSGrid.css +0 -18
- package/dist/esm-node/src/components/CdsGrid/components/CSSGrid.mjs +1 -1
- package/dist/esm-node/src/components/CdsGrid/components/FlexGrid.css +0 -18
- package/dist/esm-node/src/components/CdsGrid/components/FlexGrid.mjs +1 -1
- package/dist/esm-node/src/components/CdsHeader/CdsHeader.css +0 -18
- package/dist/esm-node/src/components/CdsHeader/CdsHeader.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsHeader/api/CdsHeader.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsHighlight/CdsHighlight.css +0 -18
- package/dist/esm-node/src/components/CdsHighlight/CdsHighlight.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsHighlight/api/CdsHighlight.props.mjs +32 -8
- package/dist/esm-node/src/components/CdsHighlight/utils/toHighlight.mjs +1 -1
- package/dist/esm-node/src/components/CdsIcon/CdsIcon.css +0 -18
- package/dist/esm-node/src/components/CdsIcon/CdsIcon.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsIcon/api/CdsIcon.props.mjs +18 -5
- package/dist/esm-node/src/components/CdsImage/CdsImage.css +0 -18
- package/dist/esm-node/src/components/CdsImage/CdsImage.vue_vue_type_script_setup_true_lang.mjs +24 -4
- package/dist/esm-node/src/components/CdsImage/api/CdsImage.props.mjs +65 -17
- package/dist/esm-node/src/components/CdsInput/CdsInput.css +0 -18
- package/dist/esm-node/src/components/CdsInput/CdsInput.vue_vue_type_script_setup_true_lang.mjs +46 -13
- package/dist/esm-node/src/components/CdsInput/CdsInputIcon.mjs +1 -1
- package/dist/esm-node/src/components/CdsInput/api/CdsInput.props.mjs +50 -14
- package/dist/esm-node/src/components/CdsLabel/CdsLabel.css +0 -18
- package/dist/esm-node/src/components/CdsLabel/CdsLabel.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsLabel/api/CdsLabel.props.mjs +5 -1
- package/dist/esm-node/src/components/CdsLayout/CdsLayout.css +0 -18
- package/dist/esm-node/src/components/CdsLayout/CdsLayout.vue_vue_type_script_setup_true_lang.mjs +5 -5
- package/dist/esm-node/src/components/CdsLayout/api/CdsLayout.props.mjs +6 -2
- package/dist/esm-node/src/components/CdsLayout/internal/LayoutResizeObserver.mjs +1 -1
- package/dist/esm-node/src/components/CdsLayout/internal/LayoutScrollObserver.mjs +2 -2
- package/dist/esm-node/src/components/CdsLink/CdsLink.css +0 -18
- package/dist/esm-node/src/components/CdsLink/CdsLink.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsLink/api/CdsLink.props.mjs +5 -2
- package/dist/esm-node/src/components/CdsList/CdsList.css +0 -18
- package/dist/esm-node/src/components/CdsList/CdsList.vue_vue_type_script_setup_true_lang.mjs +27 -9
- package/dist/esm-node/src/components/CdsList/CdsListGroup.vue_vue_type_script_setup_true_lang.mjs +5 -2
- package/dist/esm-node/src/components/CdsList/CdsListItem.css +0 -18
- package/dist/esm-node/src/components/CdsList/CdsListItem.vue_vue_type_script_setup_true_lang.mjs +31 -10
- package/dist/esm-node/src/components/CdsList/CdsListItemAction.vue_vue_type_script_setup_true_lang.mjs +9 -3
- package/dist/esm-node/src/components/CdsList/CdsListItemDivider.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsList/CdsListItemMedia.vue_vue_type_script_setup_true_lang.mjs +9 -3
- package/dist/esm-node/src/components/CdsList/CdsListSubheader.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsList/api/CdsList.props.mjs +146 -38
- package/dist/esm-node/src/components/CdsList/components/ListChildren.vue_vue_type_script_setup_true_lang.mjs +8 -2
- package/dist/esm-node/src/components/CdsList/composables/useList.mjs +1 -1
- package/dist/esm-node/src/components/CdsList/index.mjs +5 -2
- package/dist/esm-node/src/components/CdsLoader/CdsLoader.css +0 -18
- package/dist/esm-node/src/components/CdsLoader/CdsLoader.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsLoader/api/CdsLoader.props.mjs +12 -3
- package/dist/esm-node/src/components/CdsMain/CdsMain.css +0 -18
- package/dist/esm-node/src/components/CdsMain/CdsMain.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsMenu/CdsMenu.css +0 -18
- package/dist/esm-node/src/components/CdsMenu/CdsMenu.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsMenu/api/CdsMenu.props.mjs +9 -3
- package/dist/esm-node/src/components/CdsMessages/CdsMessages.css +0 -18
- package/dist/esm-node/src/components/CdsMessages/CdsMessages.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsMessages/api/CdsMessages.props.mjs +12 -3
- package/dist/esm-node/src/components/CdsModal/CdsModal.css +0 -18
- package/dist/esm-node/src/components/CdsModal/CdsModal.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsModal/api/CdsModal.props.mjs +8 -2
- package/dist/esm-node/src/components/CdsNotification/CdsNotification.css +0 -18
- package/dist/esm-node/src/components/CdsNotification/CdsNotification.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsNotification/api/CdsNotification.props.mjs +30 -9
- package/dist/esm-node/src/components/CdsNotificationAlert/CdsNotificationAlert.css +0 -18
- package/dist/esm-node/src/components/CdsNotificationAlert/CdsNotificationAlert.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsNotificationAlert/api/CdsNotificationAlert.props.mjs +29 -8
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpField.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpGroup.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpInput.css +0 -18
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpInput.vue_vue_type_script_setup_true_lang.mjs +23 -8
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpSeparator.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsOtpInput/api/CdsOtpInput.props.mjs +53 -14
- package/dist/esm-node/src/components/CdsOverlay/CdsOverlay.css +0 -18
- package/dist/esm-node/src/components/CdsOverlay/CdsOverlay.vue_vue_type_script_setup_true_lang.mjs +50 -17
- package/dist/esm-node/src/components/CdsOverlay/api/CdsOverlay.props.mjs +37 -9
- package/dist/esm-node/src/components/CdsOverlay/components/Scrim.mjs +1 -1
- package/dist/esm-node/src/components/CdsOverlay/composables/useActivator.mjs +27 -8
- package/dist/esm-node/src/components/CdsOverlay/composables/useLocationStrategies.mjs +21 -7
- package/dist/esm-node/src/components/CdsOverlay/composables/useScrollStrategies.mjs +7 -4
- package/dist/esm-node/src/components/CdsPage/CdsPage.css +0 -18
- package/dist/esm-node/src/components/CdsPage/CdsPage.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsPage/api/CdsPage.props.mjs +5 -1
- package/dist/esm-node/src/components/CdsPagination/CdsPagination.css +0 -18
- package/dist/esm-node/src/components/CdsPagination/CdsPagination.vue_vue_type_script_setup_true_lang.mjs +20 -4
- package/dist/esm-node/src/components/CdsPagination/api/CdsPagination.props.mjs +85 -22
- package/dist/esm-node/src/components/CdsProgressBar/CdsProgressBar.css +0 -18
- package/dist/esm-node/src/components/CdsProgressBar/CdsProgressBar.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsProgressBar/api/CdsProgressBar.props.mjs +65 -17
- package/dist/esm-node/src/components/CdsProgressBar/composables/useChunk.mjs +5 -1
- package/dist/esm-node/src/components/CdsProgressCircle/CdsProgressCircle.css +0 -18
- package/dist/esm-node/src/components/CdsProgressCircle/CdsProgressCircle.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsProgressCircle/api/CdsProgressCircle.props.mjs +29 -8
- package/dist/esm-node/src/components/CdsRadio/CdsRadio.css +0 -18
- package/dist/esm-node/src/components/CdsRadio/CdsRadio.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsRadioGroup/CdsRadioGroup.css +0 -18
- package/dist/esm-node/src/components/CdsRadioGroup/CdsRadioGroup.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsRadioGroup/api/CdsRadioGroup.props.mjs +17 -5
- package/dist/esm-node/src/components/CdsResponsive/CdsResponsive.css +0 -18
- package/dist/esm-node/src/components/CdsResponsive/CdsResponsive.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsResponsive/api/CdsResponsive.props.mjs +12 -3
- package/dist/esm-node/src/components/CdsResponsive/composables/useAspectStyles.mjs +1 -1
- package/dist/esm-node/src/components/CdsSelect/CdsSelect.css +0 -18
- package/dist/esm-node/src/components/CdsSelect/CdsSelect.vue_vue_type_script_setup_true_lang.mjs +19 -7
- package/dist/esm-node/src/components/CdsSelect/api/CdsSelect.props.mjs +5 -2
- package/dist/esm-node/src/components/CdsSelect/composables/useMenuActivator.mjs +8 -2
- package/dist/esm-node/src/components/CdsSelect/composables/useSelect.mjs +69 -17
- package/dist/esm-node/src/components/CdsSelectionControl/CdsSelectionControl.css +0 -18
- package/dist/esm-node/src/components/CdsSelectionControl/CdsSelectionControl.vue_vue_type_script_setup_true_lang.mjs +10 -2
- package/dist/esm-node/src/components/CdsSelectionControl/api/CdsSelectionControl.props.mjs +13 -4
- package/dist/esm-node/src/components/CdsSelectionControl/composables/useSelectionControl.mjs +1 -1
- package/dist/esm-node/src/components/CdsSelectionControlGroup/CdsSelectionControlGroup.css +0 -18
- package/dist/esm-node/src/components/CdsSelectionControlGroup/CdsSelectionControlGroup.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSelectionControlGroup/api/CdsSelectionControlGroup.props.mjs +45 -12
- package/dist/esm-node/src/components/CdsSkeletonLoader/CdsSkeletonLoader.css +0 -18
- package/dist/esm-node/src/components/CdsSkeletonLoader/CdsSkeletonLoader.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsSkeletonLoader/api/CdsSkeletonLoader.props.mjs +17 -5
- package/dist/esm-node/src/components/CdsSlideGroup/CdsSlideGroup.css +0 -18
- package/dist/esm-node/src/components/CdsSlideGroup/CdsSlideGroup.vue_vue_type_script_setup_true_lang.mjs +28 -10
- package/dist/esm-node/src/components/CdsSlideGroup/api/CdsSlideGroup.props.mjs +26 -7
- package/dist/esm-node/src/components/CdsSlideView/CdsSlideView.css +0 -18
- package/dist/esm-node/src/components/CdsSlideView/CdsSlideView.vue_vue_type_script_setup_true_lang.mjs +8 -4
- package/dist/esm-node/src/components/CdsSlideView/CdsSlideViewItem.vue_vue_type_script_setup_true_lang.mjs +7 -3
- package/dist/esm-node/src/components/CdsSlideView/api/CdsSlideView.props.mjs +45 -1
- package/dist/esm-node/src/components/CdsStages/CdsStages.css +0 -18
- package/dist/esm-node/src/components/CdsStages/CdsStages.vue_vue_type_script_setup_true_lang.mjs +10 -2
- package/dist/esm-node/src/components/CdsStages/api/CdsStages.props.mjs +9 -3
- package/dist/esm-node/src/components/CdsStatus/CdsStatus.css +0 -18
- package/dist/esm-node/src/components/CdsStatus/CdsStatus.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsStatus/api/CdsStatus.props.mjs +5 -2
- package/dist/esm-node/src/components/CdsSteps/CdsSteps.css +0 -18
- package/dist/esm-node/src/components/CdsSteps/CdsSteps.vue_vue_type_script_setup_true_lang.mjs +10 -2
- package/dist/esm-node/src/components/CdsSteps/CdsStepsActions.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSteps/CdsStepsItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSteps/CdsStepsView.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSteps/CdsStepsViewItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSteps/api/CdsSteps.props.mjs +46 -13
- package/dist/esm-node/src/components/CdsSurface/CdsSurface.css +0 -18
- package/dist/esm-node/src/components/CdsSurface/CdsSurface.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsSurface/api/CdsSurface.props.mjs +5 -2
- package/dist/esm-node/src/components/CdsTable/CdsTable.css +0 -18
- package/dist/esm-node/src/components/CdsTable/CdsTable.vue_vue_type_script_setup_true_lang.mjs +4 -0
- package/dist/esm-node/src/components/CdsTable/api/CdsTable.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/Body/BodyRow.mjs +2 -2
- package/dist/esm-node/src/components/CdsTable/components/Cell/Cell.mjs +6 -6
- package/dist/esm-node/src/components/CdsTable/components/Drag/ColumnDragHandle.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/Drag/RowDragHandle.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/Filter/FilterDropdown.mjs +3 -3
- package/dist/esm-node/src/components/CdsTable/components/FixedHolder/FixedHolder.mjs +2 -2
- package/dist/esm-node/src/components/CdsTable/components/Header/DragHandle.mjs +4 -4
- package/dist/esm-node/src/components/CdsTable/components/Header/Header.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/Header/HeaderRow.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/ResizeObserver/ResizeObserver.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/StickyScrollbar/StickyScrollbar.mjs +3 -3
- package/dist/esm-node/src/components/CdsTable/components/Table/InternalTable.mjs +4 -4
- package/dist/esm-node/src/components/CdsTable/components/TableProvider.mjs +6 -6
- package/dist/esm-node/src/components/CdsTable/composable/columns.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/composable/filter.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/composable/frame.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/composable/pagination.mjs +2 -2
- package/dist/esm-node/src/components/CdsTable/composable/scroll.mjs +3 -3
- package/dist/esm-node/src/components/CdsTable/composable/selection.mjs +2 -2
- package/dist/esm-node/src/components/CdsTable/composable/sorter.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/composable/sticky.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/composable/table.mjs +47 -0
- package/dist/esm-node/src/components/CdsTable/context/sticky.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/utils/column.mjs +1 -1
- package/dist/esm-node/src/components/CdsTabs/CdsTab.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsTabs/CdsTabs.css +0 -18
- package/dist/esm-node/src/components/CdsTabs/CdsTabs.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsTabs/CdsTabsView.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsTabs/CdsTabsViewItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsTabs/api/CdsTabs.props.mjs +57 -1
- package/dist/esm-node/src/components/CdsTag/CdsTag.css +0 -18
- package/dist/esm-node/src/components/CdsTag/CdsTag.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsTag/api/CdsTag.props.mjs +73 -19
- package/dist/esm-node/src/components/CdsTagGroup/CdsTagGroup.css +0 -18
- package/dist/esm-node/src/components/CdsTagGroup/CdsTagGroup.vue_vue_type_script_setup_true_lang.mjs +22 -7
- package/dist/esm-node/src/components/CdsTagGroup/api/CdsTagGroup.props.mjs +13 -5
- package/dist/esm-node/src/components/CdsTextArea/CdsTextArea.css +0 -18
- package/dist/esm-node/src/components/CdsTextArea/CdsTextArea.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsTextArea/api/CdsTextArea.props.mjs +53 -14
- package/dist/esm-node/src/components/CdsTextInput/CdsTextInput.css +0 -18
- package/dist/esm-node/src/components/CdsTextInput/CdsTextInput.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsTextInput/api/CdsTextInput.props.mjs +41 -11
- package/dist/esm-node/src/components/CdsTimePicker/CdsTimePicker.css +0 -18
- package/dist/esm-node/src/components/CdsTimePicker/CdsTimePicker.vue_vue_type_script_setup_true_lang.mjs +27 -3
- package/dist/esm-node/src/components/CdsTimePicker/api/CdsTimePicker.props.mjs +33 -9
- package/dist/esm-node/src/components/CdsTimePicker/composables/useTime.mjs +1 -1
- package/dist/esm-node/src/components/CdsToast/CdsToast.css +0 -18
- package/dist/esm-node/src/components/CdsToast/CdsToast.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsToast/api/CdsToast.props.mjs +49 -13
- package/dist/esm-node/src/components/CdsToastQueue/CdsToastQueue.vue_vue_type_script_setup_true_lang.mjs +5 -2
- package/dist/esm-node/src/components/CdsToastQueue/api/CdsToastQueue.props.mjs +29 -8
- package/dist/esm-node/src/components/CdsToastQueue/composables/useDocumentVisibility.mjs +1 -1
- package/dist/esm-node/src/components/CdsToggle/CdsToggle.css +0 -18
- package/dist/esm-node/src/components/CdsToggle/CdsToggle.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsToggle/api/CdsToggle.props.mjs +13 -4
- package/dist/esm-node/src/components/CdsToolbar/CdsToolbar.css +0 -18
- package/dist/esm-node/src/components/CdsToolbar/CdsToolbar.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsToolbar/CdsToolbarTitle.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsToolbar/api/CdsToolbar.props.mjs +22 -7
- package/dist/esm-node/src/components/CdsTooltip/CdsTooltip.css +0 -18
- package/dist/esm-node/src/components/CdsTooltip/CdsTooltip.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsTooltip/api/CdsTooltip.props.mjs +21 -6
- package/dist/esm-node/src/components/CdsTree/CdsTree.css +0 -18
- package/dist/esm-node/src/components/CdsTree/CdsTree.vue_vue_type_script_setup_true_lang.mjs +19 -3
- package/dist/esm-node/src/components/CdsTree/CdsTreeDirectory.vue_vue_type_script_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsTree/CdsTreeNode.vue_vue_type_script_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsTree/api/CdsTree.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/DropIndicator.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/NodeList.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/SwitcherIcon.mjs +2 -2
- package/dist/esm-node/src/components/CdsTree/components/TreeProvider.mjs +4 -4
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/Filler.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/Item.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/ResizeObserver.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/ScrollBar.mjs +2 -2
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/VirtualList.mjs +2 -2
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/features/useFrameWheel.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/features/useHeights.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/features/useMobileTouchMove.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/composable/tree.mjs +28 -0
- package/dist/esm-node/src/components/CdsTree/composable/treeNode.mjs +68 -2
- package/dist/esm-node/src/components/CdsTree/utils/data.mjs +3 -3
- package/dist/esm-node/src/components/CdsUploader/CdsUploader.css +0 -18
- package/dist/esm-node/src/components/CdsUploader/CdsUploader.vue_vue_type_script_setup_true_lang.mjs +10 -2
- package/dist/esm-node/src/components/CdsUploader/components/AjaxUploader.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsUploader/composables/useUpload.mjs +104 -26
- package/dist/esm-node/src/components/CdsVirtualScroll/CdsVirtualScroll.css +0 -18
- package/dist/esm-node/src/components/CdsVirtualScroll/CdsVirtualScroll.vue_vue_type_script_setup_true_lang.mjs +12 -4
- package/dist/esm-node/src/components/CdsVirtualScroll/CdsVirtualScrollItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsVirtualScroll/api/CdsVirtualScroll.props.mjs +12 -3
- package/dist/esm-node/src/components/index.mjs +2 -1
- package/dist/esm-node/src/composables/useAppearance/useAppearance.mjs +4 -1
- package/dist/esm-node/src/composables/useColor/useColor.mjs +21 -6
- package/dist/esm-node/src/composables/useDatetime/useDatetime.mjs +5 -2
- package/dist/esm-node/src/composables/useDelay/useDelay.mjs +8 -2
- package/dist/esm-node/src/composables/useDimensions/useDimensions.mjs +25 -7
- package/dist/esm-node/src/composables/useDirection/useDirection.mjs +4 -1
- package/dist/esm-node/src/composables/useDisabled/useDisabled.mjs +4 -1
- package/dist/esm-node/src/composables/useDisplay/internal/useDisplay.helpers.mjs +1 -1
- package/dist/esm-node/src/composables/useDisplay/useDisplay.mjs +3 -1
- package/dist/esm-node/src/composables/useFilter/useFilter.mjs +21 -1
- package/dist/esm-node/src/composables/useFocus/useFocus.mjs +13 -4
- package/dist/esm-node/src/composables/useFocus/useFocusGroup.mjs +1 -1
- package/dist/esm-node/src/composables/useFocus/useFocusTrap.mjs +10 -4
- package/dist/esm-node/src/composables/useForm/useForm.mjs +46 -1
- package/dist/esm-node/src/composables/useGoTo/useGoTo.mjs +3 -3
- package/dist/esm-node/src/composables/useGroup/useGroup.mjs +25 -7
- package/dist/esm-node/src/composables/useGroup/useGroupItem.mjs +8 -2
- package/dist/esm-node/src/composables/useHydration/useHydration.mjs +2 -2
- package/dist/esm-node/src/composables/useIcons/useIcons.mjs +1 -1
- package/dist/esm-node/src/composables/useItems/useItems.mjs +33 -9
- package/dist/esm-node/src/composables/useLayout/useLayout.mjs +26 -8
- package/dist/esm-node/src/composables/useLazy/useLazy.mjs +1 -0
- package/dist/esm-node/src/composables/useLoader/useLoader.mjs +4 -1
- package/dist/esm-node/src/composables/useLocation/useLocation.mjs +5 -2
- package/dist/esm-node/src/composables/useNested/strategies/activeStrategies.mjs +1 -1
- package/dist/esm-node/src/composables/useNested/useNested.mjs +46 -13
- package/dist/esm-node/src/composables/usePosition/usePosition.mjs +4 -0
- package/dist/esm-node/src/composables/useReadonly/useReadonly.mjs +4 -1
- package/dist/esm-node/src/composables/useResizeObserver/useResizeObserver.mjs +1 -1
- package/dist/esm-node/src/composables/useReveal/useReveal.mjs +4 -1
- package/dist/esm-node/src/composables/useRouter/useRouter.mjs +17 -5
- package/dist/esm-node/src/composables/useSize/useSize.mjs +5 -2
- package/dist/esm-node/src/composables/useStatus/useStatus.mjs +4 -1
- package/dist/esm-node/src/composables/useTeleport/useTeleport.mjs +2 -2
- package/dist/esm-node/src/composables/useText/useText.mjs +8 -2
- package/dist/esm-node/src/composables/useTheme/internal/useTheme.constants.mjs +13 -2
- package/dist/esm-node/src/composables/useTheme/internal/useTheme.utils.mjs +2 -2
- package/dist/esm-node/src/composables/useTheme/useTheme.mjs +6 -3
- package/dist/esm-node/src/composables/useTransition/useTransition.mjs +5 -2
- package/dist/esm-node/src/composables/useValidation/useValidation.mjs +27 -7
- package/dist/esm-node/src/composables/useVirtual/useVirtual.mjs +14 -5
- package/dist/esm-node/src/core/defineComponent.mjs +6 -3
- package/dist/esm-node/src/core/getCurrentInstance.mjs +1 -1
- package/dist/esm-node/src/core/useDefaults.mjs +4 -2
- package/dist/esm-node/src/core/useProxyModel.mjs +1 -1
- package/dist/esm-node/src/hooks/createContext/index.mjs +1 -1
- package/dist/esm-node/src/hooks/createObserver/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useBreakpoints/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useEventListener/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useHydration/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useIntersectionObserver/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useResizeObserver/index.mjs +1 -1
- package/dist/esm-node/src/icons.mjs +2 -2
- package/dist/esm-node/src/locales/adapters/cdsLocaleAdapter.mjs +3 -2
- package/dist/esm-node/src/locales/en.mjs +70 -0
- package/dist/esm-node/src/locales/index.mjs +18 -0
- package/dist/esm-node/src/themes/index.mjs +4 -0
- package/dist/esm-node/src/themes/lumaDark.mjs +24 -0
- package/dist/esm-node/src/themes/lumaLight.mjs +20 -0
- package/dist/esm-node/src/transitions/collapseTransition.mjs +1 -1
- package/dist/esm-node/src/transitions/createTransition.mjs +1 -1
- package/dist/esm-node/src/transitions/modalTransition.mjs +1 -1
- package/dist/esm-node/src/utils/colorsUtils/utils.mjs +2 -2
- package/dist/esm-node/src/utils/date/date.mjs +4 -4
- package/dist/esm-node/src/utils/dom/classNames.mjs +1 -1
- package/dist/esm-node/src/utils/dom/console.mjs +1 -1
- package/dist/esm-node/src/utils/dom/dom.mjs +1 -1
- package/dist/iife/entry.js +11 -11
- package/dist/styles/common.css +1 -1
- package/dist/styles/core.css +1 -1
- package/dist/styles/tailwind.css +1 -1
- package/dist/styles.css +2 -2
- package/dist/types/components/CdsApp/api/CdsApp.types.d.ts +4 -1
- package/dist/types/components/CdsAutocomplete/CdsAutocomplete.vue.d.ts +59 -20
- package/dist/types/components/CdsAutocomplete/api/CdsAutocomplete.types.d.ts +60 -15
- package/dist/types/components/CdsAutocomplete/index.d.ts +57 -30
- package/dist/types/components/CdsAvatar/api/CdsAvatar.types.d.ts +8 -2
- package/dist/types/components/CdsBadge/api/CdsBadge.types.d.ts +8 -2
- package/dist/types/components/CdsBreadcrumbs/api/CdsBreadcrumbs.types.d.ts +28 -7
- package/dist/types/components/CdsButton/CdsButton.vue.d.ts +4 -1
- package/dist/types/components/CdsButton/api/CdsButton.types.d.ts +20 -5
- package/dist/types/components/CdsButtonGroup/api/CdsButtonGroup.types.d.ts +4 -1
- package/dist/types/components/CdsButtonToggle/CdsButtonToggle.vue.d.ts +20 -5
- package/dist/types/components/CdsButtonToggle/api/CdsButtonToggle.types.d.ts +8 -2
- package/dist/types/components/CdsCard/CdsCardGroup.vue.d.ts +20 -5
- package/dist/types/components/CdsCard/api/CdsCard.types.d.ts +68 -17
- package/dist/types/components/CdsCarousel/api/CdsCarousel.types.d.ts +12 -3
- package/dist/types/components/CdsCheckbox/api/CdsCheckbox.types.d.ts +8 -2
- package/dist/types/components/CdsCheckboxButton/api/CdsCheckboxButton.types.d.ts +8 -0
- package/dist/types/components/CdsCombobox/CdsCombobox.vue.d.ts +67 -22
- package/dist/types/components/CdsCombobox/api/CdsCombobox.types.d.ts +60 -15
- package/dist/types/components/CdsCombobox/index.d.ts +57 -30
- package/dist/types/components/CdsCounter/api/CdsCounter.types.d.ts +4 -0
- package/dist/types/components/CdsDateInput/CdsDateInput.vue.d.ts +35 -10
- package/dist/types/components/CdsDateInput/api/CdsDateInput.types.d.ts +44 -11
- package/dist/types/components/CdsDateInput/index.d.ts +57 -30
- package/dist/types/components/CdsDatePicker/CdsDatePicker.vue.d.ts +20 -0
- package/dist/types/components/CdsDatePicker/api/CdsDatePicker.types.d.ts +28 -7
- package/dist/types/components/CdsDefaultsProvider/api/CdsDefaultsProvider.types.d.ts +1 -0
- package/dist/types/components/CdsDescription/api/CdsDescription.types.d.ts +4 -0
- package/dist/types/components/CdsDivider/CdsDivider.vue.d.ts +4 -0
- package/dist/types/components/CdsDrawer/CdsDrawer.vue.d.ts +4 -0
- package/dist/types/components/CdsDrawer/api/CdsDrawer.types.d.ts +24 -6
- package/dist/types/components/CdsEmptyState/api/CdsEmptyState.types.d.ts +36 -9
- package/dist/types/components/CdsExpandablePanel/CdsExpandablePanel.vue.d.ts +16 -4
- package/dist/types/components/CdsExpandablePanel/CdsExpandablePanelTitle.vue.d.ts +8 -2
- package/dist/types/components/CdsExpandablePanel/CdsExpandablePanels.vue.d.ts +8 -2
- package/dist/types/components/CdsExpandablePanel/api/CdsExpandablePanel.types.d.ts +56 -14
- package/dist/types/components/CdsField/CdsField.vue.d.ts +18 -2
- package/dist/types/components/CdsField/api/CdsField.types.d.ts +33 -7
- package/dist/types/components/CdsField/index.d.ts +5 -0
- package/dist/types/components/CdsFileInput/CdsFileInput.vue.d.ts +5 -2
- package/dist/types/components/CdsFileInput/api/CdsFileInput.types.d.ts +28 -7
- package/dist/types/components/CdsFileInput/index.d.ts +15 -6
- package/dist/types/components/CdsFileUpload/CdsFileUpload.vue.d.ts +8 -0
- package/dist/types/components/CdsFileUpload/api/CdsFileUpload.types.d.ts +116 -29
- package/dist/types/components/CdsFooter/api/CdsFooter.types.d.ts +12 -3
- package/dist/types/components/CdsForm/api/CdsForm.types.d.ts +20 -5
- package/dist/types/components/CdsFunctionalButton/api/CdsFunctionalButton.types.d.ts +8 -2
- package/dist/types/components/CdsGrid/api/CdsGrid.types.d.ts +12 -0
- package/dist/types/components/CdsHeader/api/CdsHeader.types.d.ts +12 -3
- package/dist/types/components/CdsIcon/api/CdsIcon.types.d.ts +4 -1
- package/dist/types/components/CdsImage/CdsImage.vue.d.ts +20 -0
- package/dist/types/components/CdsImage/api/CdsImage.props.d.ts +4 -1
- package/dist/types/components/CdsImage/api/CdsImage.types.d.ts +28 -7
- package/dist/types/components/CdsInput/CdsInput.vue.d.ts +44 -11
- package/dist/types/components/CdsInput/api/CdsInput.types.d.ts +36 -9
- package/dist/types/components/CdsLabel/api/CdsLabel.types.d.ts +4 -0
- package/dist/types/components/CdsLayout/api/CdsLayout.types.d.ts +16 -4
- package/dist/types/components/CdsLink/api/CdsLink.types.d.ts +8 -2
- package/dist/types/components/CdsList/CdsList.vue.d.ts +24 -6
- package/dist/types/components/CdsList/CdsListGroup.vue.d.ts +4 -1
- package/dist/types/components/CdsList/CdsListItem.vue.d.ts +28 -7
- package/dist/types/components/CdsList/CdsListItemAction.vue.d.ts +20 -5
- package/dist/types/components/CdsList/CdsListItemDivider.vue.d.ts +4 -0
- package/dist/types/components/CdsList/CdsListItemMedia.vue.d.ts +20 -5
- package/dist/types/components/CdsList/CdsListSubheader.vue.d.ts +4 -1
- package/dist/types/components/CdsList/api/CdsList.types.d.ts +84 -21
- package/dist/types/components/CdsList/components/ListChildren.vue.d.ts +16 -4
- package/dist/types/components/CdsList/components/ListGroupActivator.vue.d.ts +4 -1
- package/dist/types/components/CdsList/index.d.ts +76 -0
- package/dist/types/components/CdsMain/api/CdsMain.types.d.ts +4 -1
- package/dist/types/components/CdsMenu/api/CdsMenu.types.d.ts +12 -0
- package/dist/types/components/CdsMessages/api/CdsMessages.types.d.ts +8 -0
- package/dist/types/components/CdsModal/api/CdsModal.types.d.ts +12 -3
- package/dist/types/components/CdsNotification/api/CdsNotification.types.d.ts +36 -9
- package/dist/types/components/CdsNotificationAlert/api/CdsNotificationAlert.types.d.ts +40 -10
- package/dist/types/components/CdsOtpInput/CdsOtpInput.vue.d.ts +20 -5
- package/dist/types/components/CdsOtpInput/api/CdsOtpInput.types.d.ts +36 -9
- package/dist/types/components/CdsOverlay/CdsOverlay.vue.d.ts +44 -11
- package/dist/types/components/CdsOverlay/api/CdsOverlay.types.d.ts +28 -3
- package/dist/types/components/CdsPage/api/CdsPage.types.d.ts +4 -1
- package/dist/types/components/CdsPagination/CdsPagination.vue.d.ts +16 -0
- package/dist/types/components/CdsPagination/api/CdsPagination.types.d.ts +44 -11
- package/dist/types/components/CdsProgressBar/api/CdsProgressBar.types.d.ts +8 -0
- package/dist/types/components/CdsProgressCircle/api/CdsProgressCircle.types.d.ts +4 -1
- package/dist/types/components/CdsRadioGroup/api/CdsRadioGroup.types.d.ts +8 -2
- package/dist/types/components/CdsResponsive/api/CdsResponsive.types.d.ts +8 -2
- package/dist/types/components/CdsSelect/CdsSelect.vue.d.ts +51 -18
- package/dist/types/components/CdsSelect/api/CdsSelect.types.d.ts +60 -15
- package/dist/types/components/CdsSelect/index.d.ts +57 -30
- package/dist/types/components/CdsSelectionControl/CdsSelectionControl.vue.d.ts +8 -0
- package/dist/types/components/CdsSelectionControl/api/CdsSelectionControl.types.d.ts +12 -3
- package/dist/types/components/CdsSelectionControlGroup/api/CdsSelectionControlGroup.types.d.ts +8 -0
- package/dist/types/components/CdsSkeletonLoader/api/CdsSkeletonLoader.types.d.ts +4 -1
- package/dist/types/components/CdsSlideGroup/CdsSlideGroup.vue.d.ts +24 -6
- package/dist/types/components/CdsSlideGroup/api/CdsSlideGroup.types.d.ts +20 -5
- package/dist/types/components/CdsSlideView/CdsSlideView.vue.d.ts +4 -0
- package/dist/types/components/CdsSlideView/CdsSlideViewItem.vue.d.ts +4 -0
- package/dist/types/components/CdsSlideView/api/CdsSlideView.types.d.ts +31 -0
- package/dist/types/components/CdsStages/CdsStages.vue.d.ts +8 -0
- package/dist/types/components/CdsStatus/api/CdsStatus.types.d.ts +4 -1
- package/dist/types/components/CdsSteps/CdsSteps.vue.d.ts +8 -0
- package/dist/types/components/CdsSteps/api/CdsSteps.types.d.ts +72 -18
- package/dist/types/components/CdsSurface/api/CdsSurface.types.d.ts +4 -1
- package/dist/types/components/CdsTable/CdsTable.vue.d.ts +4 -0
- package/dist/types/components/CdsTable/api/CdsTable.types.d.ts +96 -24
- package/dist/types/components/CdsTabs/api/CdsTabs.types.d.ts +32 -0
- package/dist/types/components/CdsTag/api/CdsTag.types.d.ts +64 -16
- package/dist/types/components/CdsTagGroup/CdsTagGroup.vue.d.ts +20 -5
- package/dist/types/components/CdsTagGroup/api/CdsTagGroup.types.d.ts +8 -2
- package/dist/types/components/CdsTextArea/CdsTextArea.vue.d.ts +5 -2
- package/dist/types/components/CdsTextArea/api/CdsTextArea.types.d.ts +24 -6
- package/dist/types/components/CdsTextArea/index.d.ts +15 -6
- package/dist/types/components/CdsTextInput/CdsTextInput.vue.d.ts +7 -4
- package/dist/types/components/CdsTextInput/api/CdsTextInput.types.d.ts +44 -11
- package/dist/types/components/CdsTextInput/index.d.ts +20 -11
- package/dist/types/components/CdsTimePicker/CdsTimePicker.vue.d.ts +24 -0
- package/dist/types/components/CdsTimePicker/api/CdsTimePicker.types.d.ts +4 -1
- package/dist/types/components/CdsToast/api/CdsToast.types.d.ts +40 -10
- package/dist/types/components/CdsToastQueue/CdsToastQueue.vue.d.ts +4 -1
- package/dist/types/components/CdsToastQueue/api/CdsToastQueue.types.d.ts +20 -5
- package/dist/types/components/CdsToggle/api/CdsToggle.types.d.ts +28 -7
- package/dist/types/components/CdsToolbar/api/CdsToolbar.types.d.ts +8 -2
- package/dist/types/components/CdsTooltip/api/CdsTooltip.types.d.ts +4 -0
- package/dist/types/components/CdsTree/CdsTree.vue.d.ts +16 -0
- package/dist/types/components/CdsTree/api/CdsTree.types.d.ts +84 -21
- package/dist/types/components/CdsUploader/CdsUploader.vue.d.ts +8 -0
- package/dist/types/components/CdsUploader/api/CdsUploader.types.d.ts +68 -17
- package/dist/types/components/CdsVirtualScroll/CdsVirtualScroll.vue.d.ts +8 -0
- package/dist/types/components/CdsVirtualScroll/api/CdsVirtualScroll.types.d.ts +20 -5
- package/dist/types/composables/useForm/useForm.d.ts +33 -0
- package/dist/types/composables/useLayout/context.d.ts +61 -0
- package/dist/types/composables/useNested/useNested.d.ts +8 -2
- package/dist/types/composables/useTheme/internal/useTheme.constants.d.ts +1 -1
- package/dist/types/entry.d.ts +135 -126
- package/dist/types/locales/index.d.ts +1 -0
- package/dist/types/themes/index.d.ts +4 -0
- package/dist/types/themes/lumaDark.d.ts +190 -0
- package/dist/types/themes/lumaLight.d.ts +190 -0
- package/dist/types/utils/date/date.d.ts +1 -1
- package/llms/llms-components.txt +8861 -10675
- package/llms/llms-full.txt +11347 -11488
- package/llms/llms-guides.txt +1942 -483
- package/llms/llms-migration.txt +19 -47
- package/llms/llms-tokens.txt +285 -43
- package/llms/llms.txt +110 -109
- package/package.json +30 -10
- package/src/components/CdsApp/CdsApp.scss +43 -0
- package/src/components/CdsApp/styles/_CdsApp.variables.scss +2 -0
- package/src/components/CdsAutocomplete/CdsAutocomplete.scss +158 -0
- package/src/components/CdsAutocomplete/styles/_CdsAutocomplete.variables.scss +9 -0
- package/src/components/CdsAvatar/CdsAvatar.scss +42 -0
- package/src/components/CdsAvatar/styles/_CdsAvatar.variables.scss +22 -0
- package/src/components/CdsBadge/CdsBadge.scss +69 -0
- package/src/components/CdsBadge/styles/_CdsBadge.variables.scss +22 -0
- package/src/components/CdsBreadcrumbs/CdsBreadcrumbs.scss +49 -0
- package/src/components/CdsBreadcrumbs/styles/_CdsBreadcrumbs.variables.scss +14 -0
- package/src/components/CdsButton/CdsButton.scss +138 -0
- package/src/components/CdsButton/styles/_CdsButton.mixins.scss +76 -0
- package/src/components/CdsButton/styles/_CdsButton.variables.scss +180 -0
- package/src/components/CdsButtonGroup/CdsButtonGroup.scss +62 -0
- package/src/components/CdsButtonGroup/styles/_CdsButtonGroup.variables.scss +7 -0
- package/src/components/CdsButtonToggle/CdsButtonToggle.scss +19 -0
- package/src/components/CdsButtonToggle/styles/_CdsButtonToggle.variables.scss +3 -0
- package/src/components/CdsCard/CdsCard.scss +194 -0
- package/src/components/CdsCard/styles/CdsCard.variables.scss +36 -0
- package/src/components/CdsCarousel/CdsCarousel.scss +76 -0
- package/src/components/CdsCarousel/styles/_CdsCarousel.variables.scss +7 -0
- package/src/components/CdsCheckbox/CdsCheckbox.scss +20 -0
- package/src/components/CdsCheckbox/styles/_CdsCheckbox.mixins.scss +24 -0
- package/src/components/CdsCheckbox/styles/_CdsCheckbox.variables.scss +8 -0
- package/src/components/CdsCheckboxButton/CdsCheckboxButton.scss +78 -0
- package/src/components/CdsCheckboxButton/styles/_CdsCheckboxButton.variables.scss +46 -0
- package/src/components/CdsCombobox/CdsCombobox.scss +158 -0
- package/src/components/CdsCombobox/styles/_CdsCombobox.variables.scss +9 -0
- package/src/components/CdsCounter/CdsCounter.scss +11 -0
- package/src/components/CdsCounter/styles/_CdsCounter.variables.scss +1 -0
- package/src/components/CdsDateInput/CdsDateInput.scss +28 -0
- package/src/components/CdsDateInput/styles/_CdsDateInput.variables.scss +6 -0
- package/src/components/CdsDatePicker/CdsDatePicker.scss +574 -0
- package/src/components/CdsDatePicker/styles/_CdsDatePicker.variables.scss +56 -0
- package/src/components/CdsDescription/CdsDescription.scss +12 -0
- package/src/components/CdsDescription/styles/_CdsDescription.variables.scss +1 -0
- package/src/components/CdsDivider/CdsDivider.scss +83 -0
- package/src/components/CdsDivider/styles/_CdsDivider.variables.scss +28 -0
- package/src/components/CdsDrawer/CdsDrawer.scss +144 -0
- package/src/components/CdsDrawer/styles/_CdsDrawer.variables.scss +17 -0
- package/src/components/CdsEmptyState/CdsEmptyState.scss +103 -0
- package/src/components/CdsEmptyState/styles/_CdsEmptyState.variables.scss +15 -0
- package/src/components/CdsExpandablePanel/CdsExpandablePanel.scss +221 -0
- package/src/components/CdsExpandablePanel/styles/_CdsExpandablePanel.variables.scss +24 -0
- package/src/components/CdsField/CdsField.scss +209 -0
- package/src/components/CdsField/styles/_CdsField.mixins.scss +39 -0
- package/src/components/CdsField/styles/_CdsField.variables.scss +84 -0
- package/src/components/CdsFileInput/CdsFileInput.scss +40 -0
- package/src/components/CdsFileInput/styles/_CdsFileInput.variables.scss +5 -0
- package/src/components/CdsFileUpload/CdsFileUpload.scss +173 -0
- package/src/components/CdsFileUpload/styles/_CdsFileUpload.variables.scss +40 -0
- package/src/components/CdsFooter/CdsFooter.scss +36 -0
- package/src/components/CdsFooter/styles/_CdsFooter.variables.scss +4 -0
- package/src/components/CdsForm/CdsForm.scss +24 -0
- package/src/components/CdsForm/styles/_CdsForm.variables.scss +5 -0
- package/src/components/CdsFunctionalButton/CdsFunctionalButton.scss +49 -0
- package/src/components/CdsFunctionalButton/styles/_CdsFunctionalButton.variables.scss +25 -0
- package/src/components/CdsGrid/components/CSSGrid.scss +3 -0
- package/src/components/CdsGrid/components/FlexGrid.scss +3 -0
- package/src/components/CdsHeader/CdsHeader.scss +36 -0
- package/src/components/CdsHeader/styles/_CdsHeader.variables.scss +3 -0
- package/src/components/CdsHighlight/CdsHighlight.scss +16 -0
- package/src/components/CdsHighlight/styles/_CdsHighlight.variables.scss +8 -0
- package/src/components/CdsIcon/CdsIcon.scss +54 -0
- package/src/components/CdsIcon/styles/_CdsIcon.variables.scss +20 -0
- package/src/components/CdsImage/CdsImage.scss +62 -0
- package/src/components/CdsImage/styles/_CdsImage.variables.scss +4 -0
- package/src/components/CdsInput/CdsInput.scss +108 -0
- package/src/components/CdsInput/styles/_CdsInput.mixins.scss +54 -0
- package/src/components/CdsInput/styles/_CdsInput.variables.scss +98 -0
- package/src/components/CdsLabel/CdsLabel.scss +23 -0
- package/src/components/CdsLabel/styles/_CdsLabel.variables.scss +2 -0
- package/src/components/CdsLayout/CdsLayout.scss +61 -0
- package/src/components/CdsLayout/styles/_CdsLayout.variables.scss +2 -0
- package/src/components/CdsLink/CdsLink.scss +33 -0
- package/src/components/CdsLink/styles/_CdsLink.variables.scss +6 -0
- package/src/components/CdsList/CdsList.scss +104 -0
- package/src/components/CdsList/CdsListItem.scss +330 -0
- package/src/components/CdsList/styles/_CdsList.variables.scss +115 -0
- package/src/components/CdsLoader/CdsLoader.scss +78 -0
- package/src/components/CdsLoader/styles/_CdsLoader.mixins.scss +9 -0
- package/src/components/CdsLoader/styles/_CdsLoader.variables.scss +40 -0
- package/src/components/CdsMain/CdsMain.scss +7 -0
- package/src/components/CdsMenu/CdsMenu.scss +33 -0
- package/src/components/CdsMenu/styles/_CdsMenu.variables.scss +11 -0
- package/src/components/CdsMessages/CdsMessages.scss +20 -0
- package/src/components/CdsMessages/styles/_CdsMessages.variables.scss +5 -0
- package/src/components/CdsModal/CdsModal.scss +106 -0
- package/src/components/CdsModal/styles/_CdsModal.variables.scss +12 -0
- package/src/components/CdsNotification/CdsNotification.scss +99 -0
- package/src/components/CdsNotification/styles/_CdsNotification.variables.scss +13 -0
- package/src/components/CdsNotificationAlert/CdsNotificationAlert.scss +48 -0
- package/src/components/CdsNotificationAlert/styles/_CdsNotificationAlert.variables.scss +5 -0
- package/src/components/CdsOtpInput/CdsOtpInput.scss +192 -0
- package/src/components/CdsOtpInput/styles/_CdsOtpInput.variables.scss +31 -0
- package/src/components/CdsOverlay/CdsOverlay.scss +74 -0
- package/src/components/CdsOverlay/styles/_CdsOverlay.variables.scss +2 -0
- package/src/components/CdsPage/CdsPage.scss +9 -0
- package/src/components/CdsPagination/CdsPagination.scss +69 -0
- package/src/components/CdsPagination/styles/_CdsPagination.variables.scss +10 -0
- package/src/components/CdsProgressBar/CdsProgressBar.scss +285 -0
- package/src/components/CdsProgressBar/styles/_CdsProgressBar.variables.scss +23 -0
- package/src/components/CdsProgressCircle/CdsProgressCircle.scss +116 -0
- package/src/components/CdsProgressCircle/styles/_CdsProgressCircle.variables.scss +21 -0
- package/src/components/CdsRadio/CdsRadio.scss +42 -0
- package/src/components/CdsRadio/styles/_CdsRadio.variables.scss +26 -0
- package/src/components/CdsRadioGroup/CdsRadioGroup.scss +24 -0
- package/src/components/CdsRadioGroup/styles/_CdsRadioGroup.variables.scss +4 -0
- package/src/components/CdsResponsive/CdsResponsive.scss +33 -0
- package/src/components/CdsResponsive/styles/_CdsResponsive.variables.scss +3 -0
- package/src/components/CdsSelect/CdsSelect.scss +149 -0
- package/src/components/CdsSelect/styles/_CdsSelect.variables.scss +7 -0
- package/src/components/CdsSelectionControl/CdsSelectionControl.scss +104 -0
- package/src/components/CdsSelectionControlGroup/CdsSelectionControlGroup.scss +17 -0
- package/src/components/CdsSkeletonLoader/CdsSkeletonLoader.scss +292 -0
- package/src/components/CdsSkeletonLoader/styles/_CdsSkeletonLoader.variables.scss +52 -0
- package/src/components/CdsSlideGroup/CdsSlideGroup.scss +63 -0
- package/src/components/CdsSlideGroup/styles/_CdsSlideGroup.variables.scss +1 -0
- package/src/components/CdsSlideView/CdsSlideView.scss +183 -0
- package/src/components/CdsSlideView/styles/_CdsSlideView.variables.scss +4 -0
- package/src/components/CdsStages/CdsStages.scss +109 -0
- package/src/components/CdsStages/styles/_CdsStages.variables.scss +17 -0
- package/src/components/CdsStatus/CdsStatus.scss +49 -0
- package/src/components/CdsStatus/styles/_CdsStatus.variables.scss +7 -0
- package/src/components/CdsSteps/CdsSteps.scss +216 -0
- package/src/components/CdsSteps/styles/_CdsSteps.variables.scss +42 -0
- package/src/components/CdsSurface/CdsSurface.scss +16 -0
- package/src/components/CdsTable/CdsTable.scss +1140 -0
- package/src/components/CdsTable/styles/_CdsTable.mixins.scss +86 -0
- package/src/components/CdsTable/styles/_CdsTable.variables.scss +82 -0
- package/src/components/CdsTabs/CdsTabs.scss +94 -0
- package/src/components/CdsTabs/styles/_CdsTabs.variables.scss +30 -0
- package/src/components/CdsTag/CdsTag.scss +141 -0
- package/src/components/CdsTag/styles/_CdsTag.variables.scss +57 -0
- package/src/components/CdsTagGroup/CdsTagGroup.scss +32 -0
- package/src/components/CdsTagGroup/styles/_CdsTagGroup.variables.scss +8 -0
- package/src/components/CdsTextArea/CdsTextArea.scss +129 -0
- package/src/components/CdsTextArea/styles/_CdsTextArea.variables.scss +6 -0
- package/src/components/CdsTextInput/CdsTextInput.scss +84 -0
- package/src/components/CdsTextInput/styles/_CdsTextInput.variables.scss +7 -0
- package/src/components/CdsTimePicker/CdsTimePicker.scss +93 -0
- package/src/components/CdsTimePicker/styles/_CdsTimePicker.variables.scss +13 -0
- package/src/components/CdsToast/CdsToast.scss +207 -0
- package/src/components/CdsToast/styles/_CdsToast.variables.scss +16 -0
- package/src/components/CdsToggle/CdsToggle.scss +192 -0
- package/src/components/CdsToggle/styles/_CdsToggle.variables.scss +81 -0
- package/src/components/CdsToolbar/CdsToolbar.scss +72 -0
- package/src/components/CdsToolbar/styles/_CdsToolbar.variables.scss +3 -0
- package/src/components/CdsTooltip/CdsTooltip.scss +111 -0
- package/src/components/CdsTooltip/styles/_CdsTooltip.variables.scss +15 -0
- package/src/components/CdsTree/CdsTree.scss +290 -0
- package/src/components/CdsTree/styles/_CdsTree.variables.scss +29 -0
- package/src/components/CdsUploader/CdsUploader.scss +109 -0
- package/src/components/CdsUploader/styles/_CdsUploader.variables.scss +16 -0
- package/src/components/CdsVirtualScroll/CdsVirtualScroll.scss +16 -0
- package/src/components/CdsVirtualScroll/styles/_CdsVirtualScroll.variables.scss +3 -0
- package/src/styles/component-settings.scss +75 -0
- package/src/styles/generic/_fonts.scss +2 -2
- package/src/styles/settings/_index.scss +6 -0
- package/src/styles/tools/_absolute.sass +9 -0
- package/src/styles/tools/_border.sass +10 -0
- package/src/styles/tools/_motion.scss +11 -17
- package/src/styles/utilities/grid/_config.scss +0 -1
- package/src/themes/css/lumaDark.css +184 -0
- package/src/themes/css/lumaLight.css +184 -0
- package/src/themes/index.ts +4 -0
- package/src/themes/lumaDark.ts +21 -0
- package/src/themes/lumaLight.ts +17 -0
- package/dist/styles/breakpoints.css +0 -1
- package/dist/styles/index.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilter.js","sources":["../../../../../src/composables/useFilter/useFilter.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { getPropertyFromItem, wrapInArray } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n type MaybeRef,\n type PropType,\n type Ref,\n shallowRef,\n unref,\n watchEffect\n} from 'vue';\n\nimport type {\n FilterFunction,\n FilterKeyFunctions,\n FilterKeys,\n FilterMatch,\n FilterMatchArrayMultiple,\n FilterMode,\n FilterResult,\n InternalItem\n} from './internal/useFilter.types';\n\n/**\n * Factory for defining properties related to filtering mechanisms. This utility\n * enables the creation of reusable filter-related properties for components.\n *\n * @property {Function} customFilter\n * A custom filter function to be applied. The function determines how\n * filtering is performed.\n *\n * @property {Object} customKeyFilter\n * An object defining custom key-based filter mappings for more fine-grained\n * filtering configurations.\n *\n * @property {Array|String} filterKeys\n * Specifies the keys to be used during the filtering process. Can be provided\n * as an array or a single string.\n *\n * @property {String} filterMode\n * Defines the strategy used for filtering, such as matching conditions.\n * Defaults to 'intersection'.\n *\n * @property {Boolean} noFilter\n * A flag to disable filtering entirely when set to true.\n */\nexport const defineFilterProps = propsFactory(\n {\n customFilter: Function as PropType<FilterFunction>,\n customKeyFilter: Object as PropType<FilterKeyFunctions>,\n filterKeys: [Array, String] as PropType<FilterKeys>,\n filterMode: {\n type: String as PropType<FilterMode>,\n default: 'intersection'\n },\n noFilter: Boolean\n },\n 'filter'\n);\n\nexport interface FilterProps extends ExtractPublicPropTypes<ReturnType<typeof defineFilterProps>> {}\n\n/**\n * A function that filters a set of items based on a query and specified filtering options.\n *\n * @param {FilterProps} props - Settings and options specific to the filtering process, including custom behavior.\n * @param {MaybeRef<T[]>} items - The array of items to filter. Can be a reactive reference or value.\n * @param {Ref<string | undefined> | (() => string | undefined)} query - The search query, either as a reactive reference or callback function.\n * @param {Object} [options] - Optional configuration for advanced filtering.\n * @param {(item: T) => {} } [options.transform] - A function to transform items for filtering.\n * @param {MaybeRef<FilterKeyFunctions | undefined>} [options.customKeyFilter] - Custom key filtering logic to override default behavior.\n *\n * @return {Object} Returns an object containing the filtered items, map of matches, and a helper function:\n * - `filteredItems`: Reactive reference to the array of filtered items.\n * - `filteredMatches`: A reactive map of item keys to their matched filter results.\n * - `getMatches`: A function to retrieve match information for a specific item.\n */\nexport function useFilter<T extends InternalItem>(\n props: FilterProps,\n items: MaybeRef<T[]>,\n query: Ref<string | undefined> | (() => string | undefined),\n options?: {\n transform?: (item: T) => {};\n customKeyFilter?: MaybeRef<FilterKeyFunctions | undefined>;\n }\n) {\n const filteredItems = shallowRef<T[]>([]);\n const filteredMatches = shallowRef(new Map<unknown, Record<string, FilterMatchArrayMultiple | undefined>>());\n const transformedItems = computed(() =>\n options?.transform ? unref(items).map((item) => [item, options.transform!(item)] as const) : unref(items)\n );\n\n watchEffect(() => {\n const _query = typeof query === 'function' ? query() : unref(query);\n const strQuery = typeof _query !== 'string' && typeof _query !== 'number' ? '' : String(_query);\n\n const results = filterItems(transformedItems.value, strQuery, {\n customKeyFilter: {\n ...props.customKeyFilter,\n ...unref(options?.customKeyFilter)\n },\n default: props.customFilter,\n filterKeys: props.filterKeys,\n filterMode: props.filterMode,\n noFilter: props.noFilter\n });\n\n const originalItems = unref(items);\n\n const _filteredItems: (typeof filteredItems)['value'] = [];\n const _filteredMatches: (typeof filteredMatches)['value'] = new Map();\n results.forEach(({ index, matches }) => {\n const item = originalItems[index];\n _filteredItems.push(item);\n if (item.value !== undefined) {\n _filteredMatches.set(item.value, matches);\n }\n });\n filteredItems.value = _filteredItems;\n filteredMatches.value = _filteredMatches;\n });\n\n function getMatches(item: T) {\n return filteredMatches.value.get(item.value);\n }\n\n return { filteredItems, filteredMatches, getMatches };\n}\n\n/**\n * A default filter function used to search for a query within a given value and return the matching index ranges.\n *\n * This function performs a case-insensitive search by converting both the value and the query to lowercase.\n * If the query is not found within the value, it returns -1. If the query is empty, it returns 0. If matches are found,\n * it returns an array of index ranges, where each range is an immutable tuple indicating the start and end index\n * of a match within the value.\n *\n * @param {string | null | undefined} value - The value to search within. If null or undefined, the function returns -1.\n * @param {string | null | undefined} query - The query string to search for. If null, undefined, or empty, specific return values are applied.\n * @param {any} item - A contextual item associated with the search (unused in this function).\n * @returns {number | Array<readonly [number, number]>} - Returns:\n * - -1 if the `value` or `query` is null or undefined, or if the `query` is not found.\n * - 0 if the `query` is an empty string.\n * - An array of immutable index ranges indicating the positions of matches in the `value`, if the `query` is found.\n */\nexport const defaultFilter: FilterFunction = (value, query, _item) => {\n if (value == null || query == null) return -1;\n if (!query.length) return 0;\n\n value = value.toString().toLocaleLowerCase();\n query = query.toString().toLocaleLowerCase();\n\n const result = [];\n let idx = value.indexOf(query);\n while (~idx) {\n result.push([idx, idx + query.length] as const);\n\n idx = value.indexOf(query, idx + query.length);\n }\n\n return result.length ? result : -1;\n};\n\n/**\n * Filters the provided list of items based on the given query and options.\n *\n * @param {Array<readonly [InternalItem, {}] | InternalItem>} items - The list of items to filter.\n * Items can either be an array of `InternalItem` objects or an array of tuples containing an\n * `InternalItem` and its transformed representation.\n * @param {string} query - The query string used to filter the items.\n * @param {Object} [options] - Optional configuration for the filtering process.\n * @param {FilterKeyFunctions} [options.customKeyFilter] - An object containing custom filter functions for specific keys.\n * @param {FilterFunction} [options.default] - The default filter function to use if no custom filter is defined.\n * @param {FilterKeys} [options.filterKeys] - The keys in each item to compare to the query.\n * @param {FilterMode} [options.filterMode] - The filtering mode. Can be 'union', 'intersection', or 'every'.\n * @param {boolean} [options.noFilter] - If true, disables the filtering process and returns an empty result.\n *\n * @return {FilterResult[]} - An array of filtered items. Each item in the output contains the index of the item in the\n * original array and a record of matches based on the filtering criteria.\n */\nexport function filterItems(\n items: readonly (readonly [item: InternalItem, transformed: {}])[] | readonly InternalItem[],\n query: string,\n options?: {\n customKeyFilter?: FilterKeyFunctions;\n default?: FilterFunction;\n filterKeys?: FilterKeys;\n filterMode?: FilterMode;\n noFilter?: boolean;\n }\n) {\n const array: FilterResult[] = [];\n const filter = options?.default ?? defaultFilter;\n const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false;\n const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length;\n\n if (!items?.length) return array;\n\n let lookAheadItems: FilterResult[] = [];\n\n loop: for (let i = 0; i < items.length; i++) {\n const [item, transformed = item] = wrapInArray(items[i]) as readonly [InternalItem, {}];\n const customMatches: Record<string, FilterMatchArrayMultiple | undefined> = {};\n const defaultMatches: Record<string, FilterMatchArrayMultiple | undefined> = {};\n let match: FilterMatch = -1;\n\n if ((query || customFiltersLength > 0) && !options?.noFilter) {\n let hasOnlyCustomFilters = false;\n\n if (typeof item === 'object') {\n if (item.type === 'divider' || item.type === 'subheader') {\n if (lookAheadItems.at(-1)?.type !== 'divider' || item.type !== 'subheader') {\n lookAheadItems = [];\n }\n\n lookAheadItems.push({ index: i, matches: {}, type: item.type });\n continue;\n }\n\n const filterKeys = keys || Object.keys(transformed);\n hasOnlyCustomFilters = filterKeys.length === customFiltersLength;\n\n for (const key of filterKeys) {\n const value = getPropertyFromItem(transformed, key);\n const keyFilter = options?.customKeyFilter?.[key];\n\n match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);\n\n if (match !== -1 && match !== false) {\n if (keyFilter) customMatches[key] = normaliseMatch(match, query);\n else defaultMatches[key] = normaliseMatch(match, query);\n } else if (options?.filterMode === 'every') {\n continue loop;\n }\n }\n } else {\n match = filter(item, query, item);\n if (match !== -1 && match !== false) {\n defaultMatches.title = normaliseMatch(match, query);\n }\n }\n\n const defaultMatchesLength = Object.keys(defaultMatches).length;\n const customMatchesLength = Object.keys(customMatches).length;\n\n if (!defaultMatchesLength && !customMatchesLength) continue;\n\n if (options?.filterMode === 'union' && customMatchesLength !== customFiltersLength && !defaultMatchesLength)\n continue;\n\n if (\n options?.filterMode === 'intersection' &&\n (customMatchesLength !== customFiltersLength ||\n (!defaultMatchesLength && customFiltersLength > 0 && !hasOnlyCustomFilters))\n )\n continue;\n }\n\n if (lookAheadItems.length) {\n array.push(...lookAheadItems);\n lookAheadItems = [];\n }\n\n array.push({ index: i, matches: { ...defaultMatches, ...customMatches } });\n }\n\n return array;\n}\n\nfunction normaliseMatch(match: FilterMatch, query: string): FilterMatchArrayMultiple | undefined {\n if (match == null || typeof match === 'boolean' || match === -1) return;\n if (typeof match === 'number') return [[match, match + query.length]];\n if (Array.isArray(match[0])) return match as FilterMatchArrayMultiple;\n return [match] as FilterMatchArrayMultiple;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFilter.js","sources":["../../../../../src/composables/useFilter/useFilter.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { getPropertyFromItem, wrapInArray } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n type MaybeRef,\n type PropType,\n type Ref,\n shallowRef,\n unref,\n watchEffect\n} from 'vue';\n\nimport type {\n FilterFunction,\n FilterKeyFunctions,\n FilterKeys,\n FilterMatch,\n FilterMatchArrayMultiple,\n FilterMode,\n FilterResult,\n InternalItem\n} from './internal/useFilter.types';\n\n/**\n * Factory for defining properties related to filtering mechanisms. This utility\n * enables the creation of reusable filter-related properties for components.\n *\n * @property {Function} customFilter\n * A custom filter function to be applied. The function determines how\n * filtering is performed.\n *\n * @property {Object} customKeyFilter\n * An object defining custom key-based filter mappings for more fine-grained\n * filtering configurations.\n *\n * @property {Array|String} filterKeys\n * Specifies the keys to be used during the filtering process. Can be provided\n * as an array or a single string.\n *\n * @property {String} filterMode\n * Defines the strategy used for filtering, such as matching conditions.\n * Defaults to 'intersection'.\n *\n * @property {Boolean} noFilter\n * A flag to disable filtering entirely when set to true.\n */\nexport const defineFilterProps = propsFactory(\n {\n /**\n * Своя функция фильтрации значений. Получает значение, поисковый запрос и элемент, возвращает совпадение или `-1`\n * @en Your own value filtering function. Receives the value, the search query and the item, returns a match or `-1`\n */\n customFilter: Function as PropType<FilterFunction>,\n /**\n * Отдельные функции фильтрации для конкретных ключей элемента — объект вида `{ ключ: функция }`\n * @en Separate filtering functions for specific item keys — an object of the form `{ key: function }`\n */\n customKeyFilter: Object as PropType<FilterKeyFunctions>,\n /**\n * Ключи элемента, по которым идёт поиск. По умолчанию фильтрация идёт по заголовку элемента\n * @en Item keys the search runs over. By default filtering goes by the item title\n */\n filterKeys: [Array, String] as PropType<FilterKeys>,\n /**\n * Как объединяются результаты `customKeyFilter` и общей фильтрации: пересечением, объединением или заменой\n * @en How the results of `customKeyFilter` and of the general filtering are combined: by intersection, by union or by replacement\n */\n filterMode: {\n type: String as PropType<FilterMode>,\n default: 'intersection'\n },\n /**\n * Отключает встроенную фильтрацию — список показывается как есть, поиск обрабатывается снаружи\n * @en Turns off the built-in filtering — the list is shown as is, the search is handled outside\n */\n noFilter: Boolean\n },\n 'filter'\n);\n\nexport interface FilterProps extends ExtractPublicPropTypes<ReturnType<typeof defineFilterProps>> {}\n\n/**\n * A function that filters a set of items based on a query and specified filtering options.\n *\n * @param {FilterProps} props - Settings and options specific to the filtering process, including custom behavior.\n * @param {MaybeRef<T[]>} items - The array of items to filter. Can be a reactive reference or value.\n * @param {Ref<string | undefined> | (() => string | undefined)} query - The search query, either as a reactive reference or callback function.\n * @param {Object} [options] - Optional configuration for advanced filtering.\n * @param {(item: T) => {} } [options.transform] - A function to transform items for filtering.\n * @param {MaybeRef<FilterKeyFunctions | undefined>} [options.customKeyFilter] - Custom key filtering logic to override default behavior.\n *\n * @return {Object} Returns an object containing the filtered items, map of matches, and a helper function:\n * - `filteredItems`: Reactive reference to the array of filtered items.\n * - `filteredMatches`: A reactive map of item keys to their matched filter results.\n * - `getMatches`: A function to retrieve match information for a specific item.\n */\nexport function useFilter<T extends InternalItem>(\n props: FilterProps,\n items: MaybeRef<T[]>,\n query: Ref<string | undefined> | (() => string | undefined),\n options?: {\n transform?: (item: T) => {};\n customKeyFilter?: MaybeRef<FilterKeyFunctions | undefined>;\n }\n) {\n const filteredItems = shallowRef<T[]>([]);\n const filteredMatches = shallowRef(new Map<unknown, Record<string, FilterMatchArrayMultiple | undefined>>());\n const transformedItems = computed(() =>\n options?.transform ? unref(items).map((item) => [item, options.transform!(item)] as const) : unref(items)\n );\n\n watchEffect(() => {\n const _query = typeof query === 'function' ? query() : unref(query);\n const strQuery = typeof _query !== 'string' && typeof _query !== 'number' ? '' : String(_query);\n\n const results = filterItems(transformedItems.value, strQuery, {\n customKeyFilter: {\n ...props.customKeyFilter,\n ...unref(options?.customKeyFilter)\n },\n default: props.customFilter,\n filterKeys: props.filterKeys,\n filterMode: props.filterMode,\n noFilter: props.noFilter\n });\n\n const originalItems = unref(items);\n\n const _filteredItems: (typeof filteredItems)['value'] = [];\n const _filteredMatches: (typeof filteredMatches)['value'] = new Map();\n results.forEach(({ index, matches }) => {\n const item = originalItems[index];\n _filteredItems.push(item);\n if (item.value !== undefined) {\n _filteredMatches.set(item.value, matches);\n }\n });\n filteredItems.value = _filteredItems;\n filteredMatches.value = _filteredMatches;\n });\n\n function getMatches(item: T) {\n return filteredMatches.value.get(item.value);\n }\n\n return { filteredItems, filteredMatches, getMatches };\n}\n\n/**\n * A default filter function used to search for a query within a given value and return the matching index ranges.\n *\n * This function performs a case-insensitive search by converting both the value and the query to lowercase.\n * If the query is not found within the value, it returns -1. If the query is empty, it returns 0. If matches are found,\n * it returns an array of index ranges, where each range is an immutable tuple indicating the start and end index\n * of a match within the value.\n *\n * @param {string | null | undefined} value - The value to search within. If null or undefined, the function returns -1.\n * @param {string | null | undefined} query - The query string to search for. If null, undefined, or empty, specific return values are applied.\n * @param {any} item - A contextual item associated with the search (unused in this function).\n * @returns {number | Array<readonly [number, number]>} - Returns:\n * - -1 if the `value` or `query` is null or undefined, or if the `query` is not found.\n * - 0 if the `query` is an empty string.\n * - An array of immutable index ranges indicating the positions of matches in the `value`, if the `query` is found.\n */\nexport const defaultFilter: FilterFunction = (value, query, _item) => {\n if (value == null || query == null) return -1;\n if (!query.length) return 0;\n\n value = value.toString().toLocaleLowerCase();\n query = query.toString().toLocaleLowerCase();\n\n const result = [];\n let idx = value.indexOf(query);\n while (~idx) {\n result.push([idx, idx + query.length] as const);\n\n idx = value.indexOf(query, idx + query.length);\n }\n\n return result.length ? result : -1;\n};\n\n/**\n * Filters the provided list of items based on the given query and options.\n *\n * @param {Array<readonly [InternalItem, {}] | InternalItem>} items - The list of items to filter.\n * Items can either be an array of `InternalItem` objects or an array of tuples containing an\n * `InternalItem` and its transformed representation.\n * @param {string} query - The query string used to filter the items.\n * @param {Object} [options] - Optional configuration for the filtering process.\n * @param {FilterKeyFunctions} [options.customKeyFilter] - An object containing custom filter functions for specific keys.\n * @param {FilterFunction} [options.default] - The default filter function to use if no custom filter is defined.\n * @param {FilterKeys} [options.filterKeys] - The keys in each item to compare to the query.\n * @param {FilterMode} [options.filterMode] - The filtering mode. Can be 'union', 'intersection', or 'every'.\n * @param {boolean} [options.noFilter] - If true, disables the filtering process and returns an empty result.\n *\n * @return {FilterResult[]} - An array of filtered items. Each item in the output contains the index of the item in the\n * original array and a record of matches based on the filtering criteria.\n */\nexport function filterItems(\n items: readonly (readonly [item: InternalItem, transformed: {}])[] | readonly InternalItem[],\n query: string,\n options?: {\n customKeyFilter?: FilterKeyFunctions;\n default?: FilterFunction;\n filterKeys?: FilterKeys;\n filterMode?: FilterMode;\n noFilter?: boolean;\n }\n) {\n const array: FilterResult[] = [];\n const filter = options?.default ?? defaultFilter;\n const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false;\n const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length;\n\n if (!items?.length) return array;\n\n let lookAheadItems: FilterResult[] = [];\n\n loop: for (let i = 0; i < items.length; i++) {\n const [item, transformed = item] = wrapInArray(items[i]) as readonly [InternalItem, {}];\n const customMatches: Record<string, FilterMatchArrayMultiple | undefined> = {};\n const defaultMatches: Record<string, FilterMatchArrayMultiple | undefined> = {};\n let match: FilterMatch = -1;\n\n if ((query || customFiltersLength > 0) && !options?.noFilter) {\n let hasOnlyCustomFilters = false;\n\n if (typeof item === 'object') {\n if (item.type === 'divider' || item.type === 'subheader') {\n if (lookAheadItems.at(-1)?.type !== 'divider' || item.type !== 'subheader') {\n lookAheadItems = [];\n }\n\n lookAheadItems.push({ index: i, matches: {}, type: item.type });\n continue;\n }\n\n const filterKeys = keys || Object.keys(transformed);\n hasOnlyCustomFilters = filterKeys.length === customFiltersLength;\n\n for (const key of filterKeys) {\n const value = getPropertyFromItem(transformed, key);\n const keyFilter = options?.customKeyFilter?.[key];\n\n match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);\n\n if (match !== -1 && match !== false) {\n if (keyFilter) customMatches[key] = normaliseMatch(match, query);\n else defaultMatches[key] = normaliseMatch(match, query);\n } else if (options?.filterMode === 'every') {\n continue loop;\n }\n }\n } else {\n match = filter(item, query, item);\n if (match !== -1 && match !== false) {\n defaultMatches.title = normaliseMatch(match, query);\n }\n }\n\n const defaultMatchesLength = Object.keys(defaultMatches).length;\n const customMatchesLength = Object.keys(customMatches).length;\n\n if (!defaultMatchesLength && !customMatchesLength) continue;\n\n if (options?.filterMode === 'union' && customMatchesLength !== customFiltersLength && !defaultMatchesLength)\n continue;\n\n if (\n options?.filterMode === 'intersection' &&\n (customMatchesLength !== customFiltersLength ||\n (!defaultMatchesLength && customFiltersLength > 0 && !hasOnlyCustomFilters))\n )\n continue;\n }\n\n if (lookAheadItems.length) {\n array.push(...lookAheadItems);\n lookAheadItems = [];\n }\n\n array.push({ index: i, matches: { ...defaultMatches, ...customMatches } });\n }\n\n return array;\n}\n\nfunction normaliseMatch(match: FilterMatch, query: string): FilterMatchArrayMultiple | undefined {\n if (match == null || typeof match === 'boolean' || match === -1) return;\n if (typeof match === 'number') return [[match, match + query.length]];\n if (Array.isArray(match[0])) return match as FilterMatchArrayMultiple;\n return [match] as FilterMatchArrayMultiple;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,15 @@ import { E as EventProp } from "../../utils/helpers.js";
|
|
|
5
5
|
import { toRef, unref } from "vue";
|
|
6
6
|
const defineFocusProps = propsFactory(
|
|
7
7
|
{
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Управляет состоянием фокуса компонента. Когда `true`, компонент считается сфокусированным и может применять соответствующие стили или поведение.
|
|
10
|
+
* @en Controls the focus state of the component. When `true`, the component is considered focused and may apply the corresponding styles or behavior.
|
|
11
|
+
*/
|
|
9
12
|
focused: Boolean,
|
|
10
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Событие, которое срабатывает при изменении состояния фокуса компонента.
|
|
15
|
+
* @en Fires when the focus state of the component changes.
|
|
16
|
+
*/
|
|
11
17
|
"onUpdate:focused": EventProp()
|
|
12
18
|
},
|
|
13
19
|
"focus"
|
|
@@ -27,7 +33,10 @@ function useFocus(props, name = getCurrentInstanceName()) {
|
|
|
27
33
|
}
|
|
28
34
|
const defineAutofocusProps = propsFactory(
|
|
29
35
|
{
|
|
30
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Включает автофокус
|
|
38
|
+
* @en Enables autofocus
|
|
39
|
+
*/
|
|
31
40
|
autofocus: Boolean
|
|
32
41
|
},
|
|
33
42
|
"autofocus"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocus.js","sources":["../../../../../src/composables/useFocus/useFocus.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory, useProxyModel } from '@cds/core';\nimport { EventProp } from '@cds/utils';\nimport { type ExtractPublicPropTypes, toRef, unref } from 'vue';\n\nexport const defineFocusProps = propsFactory(\n {\n
|
|
1
|
+
{"version":3,"file":"useFocus.js","sources":["../../../../../src/composables/useFocus/useFocus.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory, useProxyModel } from '@cds/core';\nimport { EventProp } from '@cds/utils';\nimport { type ExtractPublicPropTypes, toRef, unref } from 'vue';\n\nexport const defineFocusProps = propsFactory(\n {\n /**\n * Управляет состоянием фокуса компонента. Когда `true`, компонент считается сфокусированным и может применять соответствующие стили или поведение.\n * @en Controls the focus state of the component. When `true`, the component is considered focused and may apply the corresponding styles or behavior.\n */\n focused: Boolean,\n /**\n * Событие, которое срабатывает при изменении состояния фокуса компонента.\n * @en Fires when the focus state of the component changes.\n */\n 'onUpdate:focused': EventProp<[boolean]>()\n },\n 'focus'\n);\n\nexport interface FocusProps extends ExtractPublicPropTypes<ReturnType<typeof defineFocusProps>> {}\n\n/**\n * A composable function that manages focus state and associated CSS class mappings\n * for a component. Provides methods to programmatically set focus or blur states.\n *\n * @param {FocusProps} props - The properties object that includes the reactive focus state model.\n * @param {string} [name=getCurrentInstanceName()] - The name of the current instance, used to generate class mappings.\n * @return {Object} An object containing:\n * - `focusClasses`: A reactive reference to the CSS classes based on the focus state.\n * - `isFocused`: A reactive model tracking the focus state.\n * - `focus`: A function to set the focus state to true.\n * - `blur`: A function to set the focus state to false.\n */\nexport function useFocus(props: FocusProps, name = getCurrentInstanceName()) {\n const isFocused = useProxyModel(props, 'focused');\n const focusClasses = toRef(() => ({\n [`${name}--focused`]: unref(isFocused)\n }));\n\n function focus() {\n isFocused.value = true;\n }\n\n function blur() {\n isFocused.value = false;\n }\n\n return { focusClasses, isFocused, focus, blur };\n}\n\nexport const defineAutofocusProps = propsFactory(\n {\n /**\n * Включает автофокус\n * @en Enables autofocus\n */\n autofocus: Boolean\n },\n 'autofocus'\n);\n\nexport interface AutofocusProps extends ExtractPublicPropTypes<ReturnType<typeof defineAutofocusProps>> {}\n\n/**\n * A custom hook that manages autofocus behavior for elements when they enter the viewport.\n *\n * @param {AutofocusProps} props - The properties to configure the autofocus behavior. The `autofocus` property determines\n * whether the autofocus functionality is enabled.\n * @return {Object} An object containing the `onIntersect` method, which handles intersection logic and applies focus to the target elements.\n */\nexport function useAutofocus(props: AutofocusProps) {\n function onIntersect(isIntersecting: boolean, entries: IntersectionObserverEntry[]) {\n if (!props.autofocus || !isIntersecting) return;\n\n const el = entries[0].target;\n const target = (el.matches('input,textarea') ? el : el.querySelector('input,textarea')) as HTMLElement | null;\n target?.focus();\n }\n\n return {\n onIntersect\n };\n}\n"],"names":[],"mappings":";;;;;AAIO,MAAM,mBAAmB;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKT,oBAAoB,UAAA;AAAA,EAAqB;AAAA,EAE3C;AACF;AAgBO,SAAS,SAAS,OAAmB,OAAO,0BAA0B;AAC3E,QAAM,YAAY,cAAc,OAAO,SAAS;AAChD,QAAM,eAAe,MAAM,OAAO;AAAA,IAChC,CAAC,GAAG,IAAI,WAAW,GAAG,MAAM,SAAS;AAAA,EAAA,EACrC;AAEF,WAAS,QAAQ;AACf,cAAU,QAAQ;AAAA,EACpB;AAEA,WAAS,OAAO;AACd,cAAU,QAAQ;AAAA,EACpB;AAEA,SAAO,EAAE,cAAc,WAAW,OAAO,KAAA;AAC3C;AAEO,MAAM,uBAAuB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,WAAW;AAAA,EAAA;AAAA,EAEb;AACF;AAWO,SAAS,aAAa,OAAuB;AAClD,WAAS,YAAY,gBAAyB,SAAsC;AAClF,QAAI,CAAC,MAAM,aAAa,CAAC,eAAgB;AAEzC,UAAM,KAAK,QAAQ,CAAC,EAAE;AACtB,UAAM,SAAU,GAAG,QAAQ,gBAAgB,IAAI,KAAK,GAAG,cAAc,gBAAgB;AACrF,qCAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL;AAAA,EAAA;AAEJ;"}
|
|
@@ -4,9 +4,15 @@ import { a as IN_BROWSER } from "../../utils/dom/globals.js";
|
|
|
4
4
|
import { toRef, watch, onScopeDispose, nextTick, toValue } from "vue";
|
|
5
5
|
const defineFocusTrapProps = propsFactory(
|
|
6
6
|
{
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Замыкает Tab-навигацию внутри контента: с последнего фокусируемого элемента фокус переходит на первый и наоборот.
|
|
9
|
+
* @en Traps Tab navigation inside the content: from the last focusable element the focus moves to the first one and back.
|
|
10
|
+
*/
|
|
8
11
|
retainFocus: Boolean,
|
|
9
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Возвращает фокус внутрь контента, если он ушёл за его пределы — например, по Tab с конца страницы. Клик мышью фокус не перехватывает.
|
|
14
|
+
* @en Returns the focus back into the content if it has left it — for example on Tab from the end of the page. A mouse click does not steal the focus.
|
|
15
|
+
*/
|
|
10
16
|
captureFocus: Boolean
|
|
11
17
|
},
|
|
12
18
|
"focus-trap"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusTrap.js","sources":["../../../../../src/composables/useFocus/useFocusTrap.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { focusableChildren, IN_BROWSER } from '@cds/utils';\nimport { type ExtractPublicPropTypes, nextTick, onScopeDispose, type Ref, toRef, toValue, watch } from 'vue';\n\nexport const defineFocusTrapProps = propsFactory(\n {\n /** Замыкает Tab-навигацию внутри контента: с последнего фокусируемого элемента фокус переходит на первый и наоборот. */\n retainFocus: Boolean,\n /** Возвращает фокус внутрь контента, если он ушёл за его пределы — например, по Tab с конца страницы. Клик мышью фокус не перехватывает. */\n captureFocus: Boolean\n },\n 'focus-trap'\n);\n\nexport interface FocusTrapProps extends ExtractPublicPropTypes<ReturnType<typeof defineFocusTrapProps>> {}\n\nconst registry = new Map<\n symbol,\n {\n isActive: Ref<boolean>;\n contentEl: Ref<HTMLElement | undefined>;\n }\n>();\nlet subscribers = 0;\n\n/**\n * Manages focus trapping within a specific DOM element. This method ensures that focus remains within the designated element\n * when active, preventing focus from escaping to other parts of the document.\n *\n * @param {FocusTrapProps} props - Configuration options for the focus trap behavior, such as whether to retain or capture focus.\n * @param {Object} options - Additional parameters for managing focus trap functionality.\n * @param {Ref<boolean>} options.isActive - A reactive reference indicating if the focus trap is currently active.\n * @param {Readonly<Ref<boolean>>} options.localTop - A reactive flag determining if the current trap context is at the local top.\n * @param {Readonly<Ref<HTMLElement | undefined>>} [options.activatorEl] - A reactive reference to the element that activates the focus trap. Optional.\n * @param {Readonly<Ref<HTMLElement | undefined>>} options.contentEl - A reactive reference to the primary content element to focus within.\n *\n * @return {void} This method does not return any value.\n */\nexport function useFocusTrap(\n props: FocusTrapProps,\n {\n isActive,\n localTop,\n contentEl\n }: {\n isActive: Ref<boolean>;\n localTop: Readonly<Ref<boolean>>;\n activatorEl?: Readonly<Ref<HTMLElement | undefined>>;\n contentEl: Readonly<Ref<HTMLElement | undefined>>;\n }\n) {\n const trapId = Symbol('trap');\n\n let focusTrapSuppressed = false;\n let focusTrapSuppressionTimeout = -1;\n\n async function onPointerdown() {\n focusTrapSuppressed = true;\n focusTrapSuppressionTimeout = window.setTimeout(() => {\n focusTrapSuppressed = false;\n }, 100);\n }\n\n async function captureOnFocus(e: FocusEvent) {\n const before = e.relatedTarget as HTMLElement | null;\n const after = e.target as HTMLElement | null;\n\n document.removeEventListener('pointerdown', onPointerdown);\n document.removeEventListener('keydown', captureOnKeydown);\n\n await nextTick();\n\n if (\n isActive.value &&\n !focusTrapSuppressed &&\n before !== after &&\n contentEl.value &&\n // We're the menu without open submenus or overlays\n toValue(localTop) &&\n // It isn't the document or the container body\n ![document, contentEl.value].includes(after!) &&\n // It isn't inside the container body\n !contentEl.value.contains(after)\n ) {\n const focusable = focusableChildren(contentEl.value);\n focusable[0]?.focus();\n }\n }\n\n function captureOnKeydown(e: KeyboardEvent) {\n if (e.key !== 'Tab') return;\n document.removeEventListener('keydown', captureOnKeydown);\n\n if (isActive.value && contentEl.value && e.target && !contentEl.value.contains(e.target as Element)) {\n const allFocusableElements = focusableChildren(document.documentElement);\n\n if (\n (e.shiftKey && e.target === allFocusableElements.at(0)) ||\n (!e.shiftKey && e.target === allFocusableElements.at(-1))\n ) {\n const focusable = focusableChildren(contentEl.value);\n if (focusable.length > 0) {\n e.preventDefault();\n focusable[0].focus();\n }\n }\n }\n }\n\n const shouldCapture = toRef(() => isActive.value && props.captureFocus);\n\n if (IN_BROWSER) {\n watch(\n () => props.retainFocus,\n (val) => {\n if (val) {\n registry.set(trapId, { isActive, contentEl });\n } else {\n registry.delete(trapId);\n }\n },\n { immediate: true }\n );\n\n watch(\n shouldCapture,\n (val) => {\n if (val) {\n document.addEventListener('pointerdown', onPointerdown);\n document.addEventListener('focusin', captureOnFocus, { once: true });\n document.addEventListener('keydown', captureOnKeydown);\n } else {\n document.removeEventListener('pointerdown', onPointerdown);\n document.removeEventListener('focusin', captureOnFocus);\n document.removeEventListener('keydown', captureOnKeydown);\n }\n },\n { immediate: true }\n );\n\n if (subscribers++ < 1) {\n document.addEventListener('keydown', onKeydown);\n }\n }\n\n onScopeDispose(() => {\n registry.delete(trapId);\n clearTimeout(focusTrapSuppressionTimeout);\n document.removeEventListener('pointerdown', onPointerdown);\n document.removeEventListener('focusin', captureOnFocus);\n document.removeEventListener('keydown', captureOnKeydown);\n\n if (--subscribers < 1) {\n document.removeEventListener('keydown', onKeydown);\n }\n });\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n const activeElement = document.activeElement as HTMLElement | null;\n if (e.key !== 'Tab' || !activeElement) return;\n\n const parentTraps = Array.from(registry.values())\n .filter(({ isActive, contentEl }) => isActive.value && contentEl.value?.contains(activeElement))\n .map((x) => x.contentEl.value);\n\n let closestTrap;\n let currentParent = activeElement.parentElement;\n while (currentParent) {\n if (parentTraps.includes(currentParent)) {\n closestTrap = currentParent;\n break;\n }\n currentParent = currentParent.parentElement;\n }\n\n if (!closestTrap) return;\n\n const focusable = focusableChildren(closestTrap)\n // excluding VListItems with tabindex=\"-2\"\n .filter((x) => x.tabIndex >= 0);\n\n if (!focusable.length) return;\n\n const active = document.activeElement as HTMLElement | null;\n if (focusable.length === 1 && focusable[0].classList.contains('v-list') && focusable[0].contains(active)) {\n e.preventDefault();\n return;\n }\n\n const firstElement = focusable[0];\n const lastElement = focusable[focusable.length - 1];\n\n if (\n e.shiftKey &&\n (active === firstElement || (firstElement.classList.contains('v-list') && firstElement.contains(active)))\n ) {\n e.preventDefault();\n lastElement.focus();\n }\n\n if (\n !e.shiftKey &&\n (active === lastElement || (lastElement.classList.contains('v-list') && lastElement.contains(active)))\n ) {\n e.preventDefault();\n firstElement.focus();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFocusTrap.js","sources":["../../../../../src/composables/useFocus/useFocusTrap.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { focusableChildren, IN_BROWSER } from '@cds/utils';\nimport { type ExtractPublicPropTypes, nextTick, onScopeDispose, type Ref, toRef, toValue, watch } from 'vue';\n\nexport const defineFocusTrapProps = propsFactory(\n {\n /**\n * Замыкает Tab-навигацию внутри контента: с последнего фокусируемого элемента фокус переходит на первый и наоборот.\n * @en Traps Tab navigation inside the content: from the last focusable element the focus moves to the first one and back.\n */\n retainFocus: Boolean,\n /**\n * Возвращает фокус внутрь контента, если он ушёл за его пределы — например, по Tab с конца страницы. Клик мышью фокус не перехватывает.\n * @en Returns the focus back into the content if it has left it — for example on Tab from the end of the page. A mouse click does not steal the focus.\n */\n captureFocus: Boolean\n },\n 'focus-trap'\n);\n\nexport interface FocusTrapProps extends ExtractPublicPropTypes<ReturnType<typeof defineFocusTrapProps>> {}\n\nconst registry = new Map<\n symbol,\n {\n isActive: Ref<boolean>;\n contentEl: Ref<HTMLElement | undefined>;\n }\n>();\nlet subscribers = 0;\n\n/**\n * Manages focus trapping within a specific DOM element. This method ensures that focus remains within the designated element\n * when active, preventing focus from escaping to other parts of the document.\n *\n * @param {FocusTrapProps} props - Configuration options for the focus trap behavior, such as whether to retain or capture focus.\n * @param {Object} options - Additional parameters for managing focus trap functionality.\n * @param {Ref<boolean>} options.isActive - A reactive reference indicating if the focus trap is currently active.\n * @param {Readonly<Ref<boolean>>} options.localTop - A reactive flag determining if the current trap context is at the local top.\n * @param {Readonly<Ref<HTMLElement | undefined>>} [options.activatorEl] - A reactive reference to the element that activates the focus trap. Optional.\n * @param {Readonly<Ref<HTMLElement | undefined>>} options.contentEl - A reactive reference to the primary content element to focus within.\n *\n * @return {void} This method does not return any value.\n */\nexport function useFocusTrap(\n props: FocusTrapProps,\n {\n isActive,\n localTop,\n contentEl\n }: {\n isActive: Ref<boolean>;\n localTop: Readonly<Ref<boolean>>;\n activatorEl?: Readonly<Ref<HTMLElement | undefined>>;\n contentEl: Readonly<Ref<HTMLElement | undefined>>;\n }\n) {\n const trapId = Symbol('trap');\n\n let focusTrapSuppressed = false;\n let focusTrapSuppressionTimeout = -1;\n\n async function onPointerdown() {\n focusTrapSuppressed = true;\n focusTrapSuppressionTimeout = window.setTimeout(() => {\n focusTrapSuppressed = false;\n }, 100);\n }\n\n async function captureOnFocus(e: FocusEvent) {\n const before = e.relatedTarget as HTMLElement | null;\n const after = e.target as HTMLElement | null;\n\n document.removeEventListener('pointerdown', onPointerdown);\n document.removeEventListener('keydown', captureOnKeydown);\n\n await nextTick();\n\n if (\n isActive.value &&\n !focusTrapSuppressed &&\n before !== after &&\n contentEl.value &&\n // We're the menu without open submenus or overlays\n toValue(localTop) &&\n // It isn't the document or the container body\n ![document, contentEl.value].includes(after!) &&\n // It isn't inside the container body\n !contentEl.value.contains(after)\n ) {\n const focusable = focusableChildren(contentEl.value);\n focusable[0]?.focus();\n }\n }\n\n function captureOnKeydown(e: KeyboardEvent) {\n if (e.key !== 'Tab') return;\n document.removeEventListener('keydown', captureOnKeydown);\n\n if (isActive.value && contentEl.value && e.target && !contentEl.value.contains(e.target as Element)) {\n const allFocusableElements = focusableChildren(document.documentElement);\n\n if (\n (e.shiftKey && e.target === allFocusableElements.at(0)) ||\n (!e.shiftKey && e.target === allFocusableElements.at(-1))\n ) {\n const focusable = focusableChildren(contentEl.value);\n if (focusable.length > 0) {\n e.preventDefault();\n focusable[0].focus();\n }\n }\n }\n }\n\n const shouldCapture = toRef(() => isActive.value && props.captureFocus);\n\n if (IN_BROWSER) {\n watch(\n () => props.retainFocus,\n (val) => {\n if (val) {\n registry.set(trapId, { isActive, contentEl });\n } else {\n registry.delete(trapId);\n }\n },\n { immediate: true }\n );\n\n watch(\n shouldCapture,\n (val) => {\n if (val) {\n document.addEventListener('pointerdown', onPointerdown);\n document.addEventListener('focusin', captureOnFocus, { once: true });\n document.addEventListener('keydown', captureOnKeydown);\n } else {\n document.removeEventListener('pointerdown', onPointerdown);\n document.removeEventListener('focusin', captureOnFocus);\n document.removeEventListener('keydown', captureOnKeydown);\n }\n },\n { immediate: true }\n );\n\n if (subscribers++ < 1) {\n document.addEventListener('keydown', onKeydown);\n }\n }\n\n onScopeDispose(() => {\n registry.delete(trapId);\n clearTimeout(focusTrapSuppressionTimeout);\n document.removeEventListener('pointerdown', onPointerdown);\n document.removeEventListener('focusin', captureOnFocus);\n document.removeEventListener('keydown', captureOnKeydown);\n\n if (--subscribers < 1) {\n document.removeEventListener('keydown', onKeydown);\n }\n });\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n const activeElement = document.activeElement as HTMLElement | null;\n if (e.key !== 'Tab' || !activeElement) return;\n\n const parentTraps = Array.from(registry.values())\n .filter(({ isActive, contentEl }) => isActive.value && contentEl.value?.contains(activeElement))\n .map((x) => x.contentEl.value);\n\n let closestTrap;\n let currentParent = activeElement.parentElement;\n while (currentParent) {\n if (parentTraps.includes(currentParent)) {\n closestTrap = currentParent;\n break;\n }\n currentParent = currentParent.parentElement;\n }\n\n if (!closestTrap) return;\n\n const focusable = focusableChildren(closestTrap)\n // excluding VListItems with tabindex=\"-2\"\n .filter((x) => x.tabIndex >= 0);\n\n if (!focusable.length) return;\n\n const active = document.activeElement as HTMLElement | null;\n if (focusable.length === 1 && focusable[0].classList.contains('v-list') && focusable[0].contains(active)) {\n e.preventDefault();\n return;\n }\n\n const firstElement = focusable[0];\n const lastElement = focusable[focusable.length - 1];\n\n if (\n e.shiftKey &&\n (active === firstElement || (firstElement.classList.contains('v-list') && firstElement.contains(active)))\n ) {\n e.preventDefault();\n lastElement.focus();\n }\n\n if (\n !e.shiftKey &&\n (active === lastElement || (lastElement.classList.contains('v-list') && lastElement.contains(active)))\n ) {\n e.preventDefault();\n firstElement.focus();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,23 @@ import { inject, computed, unref, toRef, shallowRef, ref, watch, provide, markRa
|
|
|
7
7
|
import { F as FormKey } from "./internal/useForm.constants.js";
|
|
8
8
|
const defineFormProps = propsFactory(
|
|
9
9
|
{
|
|
10
|
+
/**
|
|
11
|
+
* Останавливает валидацию на первом же невалидном поле — остальные поля не проверяются
|
|
12
|
+
* @en Stops the validation at the very first invalid field — the remaining fields are not checked
|
|
13
|
+
*/
|
|
10
14
|
firstFail: Boolean,
|
|
15
|
+
/**
|
|
16
|
+
* Итоговая валидность формы: `true` — все поля прошли проверку, `false` — есть ошибки, `null` — форма ещё не валидировалась
|
|
17
|
+
* @en Resulting validity of the form: `true` — every field passed the check, `false` — there are errors, `null` — the form has not been validated yet
|
|
18
|
+
*/
|
|
11
19
|
modelValue: {
|
|
12
20
|
type: Boolean,
|
|
13
21
|
default: null
|
|
14
22
|
},
|
|
23
|
+
/**
|
|
24
|
+
* Когда запускать валидацию полей формы: при вводе, потере фокуса или только вручную
|
|
25
|
+
* @en When to run the validation of the form fields: on input, on blur or manually only
|
|
26
|
+
*/
|
|
15
27
|
validateOn: {
|
|
16
28
|
type: String,
|
|
17
29
|
default: "input"
|
|
@@ -106,14 +118,47 @@ function createForm(props) {
|
|
|
106
118
|
validateOn: toRef(() => props.validateOn)
|
|
107
119
|
});
|
|
108
120
|
return {
|
|
121
|
+
/**
|
|
122
|
+
* Ошибки валидации полей формы: идентификатор поля и его сообщения об ошибках.
|
|
123
|
+
* @en Validation errors of the form fields: the identifier of a field and its error messages.
|
|
124
|
+
*/
|
|
109
125
|
errors,
|
|
126
|
+
/**
|
|
127
|
+
* Заблокированы ли все поля формы.
|
|
128
|
+
* @en Whether all the fields of the form are blocked.
|
|
129
|
+
*/
|
|
110
130
|
isDisabled,
|
|
131
|
+
/**
|
|
132
|
+
* Доступны ли поля формы только для чтения.
|
|
133
|
+
* @en Whether the fields of the form are read-only.
|
|
134
|
+
*/
|
|
111
135
|
isReadonly,
|
|
136
|
+
/**
|
|
137
|
+
* Идёт ли сейчас валидация формы.
|
|
138
|
+
* @en Whether the form is being validated right now.
|
|
139
|
+
*/
|
|
112
140
|
isValidating,
|
|
141
|
+
/**
|
|
142
|
+
* Валидность формы: `true` — все поля прошли проверку, `false` — есть ошибки, `null` — форма ещё не валидировалась.
|
|
143
|
+
* @en Validity of the form: `true` — every field passed the check, `false` — there are errors, `null` — the form has not been validated yet.
|
|
144
|
+
*/
|
|
113
145
|
isValid: model,
|
|
146
|
+
/**
|
|
147
|
+
* Зарегистрированные в форме поля с их состоянием валидации.
|
|
148
|
+
* @en The fields registered in the form together with their validation state.
|
|
149
|
+
*/
|
|
114
150
|
items,
|
|
151
|
+
/**
|
|
152
|
+
* Запускает валидацию всех полей формы и возвращает результат вместе со списком ошибок.
|
|
153
|
+
* @en Runs the validation of all the form fields and returns the result together with the list of errors.
|
|
154
|
+
*/
|
|
115
155
|
validate,
|
|
156
|
+
/** Сбрасывает значения всех полей формы и их валидацию. */
|
|
116
157
|
reset,
|
|
158
|
+
/**
|
|
159
|
+
* Сбрасывает только состояние валидации, сохраняя введённые значения.
|
|
160
|
+
* @en Resets the validation state only, keeping the entered values.
|
|
161
|
+
*/
|
|
117
162
|
resetValidation
|
|
118
163
|
};
|
|
119
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useForm.js","sources":["../../../../../src/composables/useForm/useForm.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { defineReadonlyProps } from '@cds/composables/useReadonly';\nimport type { ValidationProps } from '@cds/composables/useValidation';\nimport { propsFactory, useProxyModel } from '@cds/core';\nimport { warn } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n markRaw,\n type PropType,\n provide,\n ref,\n shallowRef,\n toRef,\n unref,\n watch\n} from 'vue';\n\nimport { FormKey } from './internal/useForm.constants';\nimport type { FieldValidationResult, FormField } from './internal/useForm.types';\n\nexport const defineFormProps = propsFactory(\n {\n firstFail: Boolean,\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null\n },\n validateOn: {\n type: String as PropType<ValidationProps['validateOn']>,\n default: 'input'\n },\n ...defineDisabledProps(),\n ...defineReadonlyProps()\n },\n 'form'\n);\n\nexport interface FormProps extends ExtractPublicPropTypes<ReturnType<typeof defineFormProps>> {}\n\nexport function createForm(props: FormProps) {\n const model = useProxyModel(props, 'modelValue');\n\n const isDisabled = toRef(() => props.disabled);\n const isReadonly = toRef(() => props.readonly);\n const isValidating = shallowRef(false);\n const items = ref<FormField[]>([]);\n const errors = ref<FieldValidationResult[]>([]);\n\n async function validate() {\n const results = [];\n let valid = true;\n\n errors.value = [];\n isValidating.value = true;\n\n for (const item of unref(items)) {\n const itemErrorMessages = await item.validate();\n\n if (itemErrorMessages.length > 0) {\n valid = false;\n\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages\n });\n }\n\n if (!valid && props.firstFail) break;\n }\n\n errors.value = results;\n isValidating.value = false;\n\n return { valid, errors: unref(errors) };\n }\n\n function reset() {\n unref(items).forEach((item) => item.reset());\n }\n\n function resetValidation() {\n unref(items).forEach((item) => item.resetValidation());\n }\n\n watch(\n items,\n () => {\n let valid = 0;\n let invalid = 0;\n const results = [];\n\n for (const item of unref(items)) {\n if (item.isValid === false) {\n invalid++;\n results.push({\n id: item.id,\n errorMessages: item.errorMessages\n });\n } else if (item.isValid === true) valid++;\n }\n\n errors.value = results;\n model.value = invalid > 0 ? false : valid === unref(items).length ? true : null;\n },\n { deep: true, flush: 'post' }\n );\n\n provide(FormKey, {\n register: ({ id, vm, validate, reset, resetValidation }) => {\n if (unref(items).some((item) => item.id === id)) {\n warn('useForm', `Duplicate input name \"${id}\"`);\n }\n\n items.value.push({\n id,\n validate,\n reset,\n resetValidation,\n vm: markRaw(vm),\n isValid: null,\n errorMessages: []\n });\n },\n unregister: (id) => {\n items.value = unref(items).filter((item) => item.id !== id);\n },\n update: (id, isValid, errorMessages) => {\n const found = unref(items).find((item) => item.id === id);\n\n if (!found) return;\n\n found.isValid = isValid;\n found.errorMessages = errorMessages;\n },\n isDisabled,\n isReadonly,\n isValidating,\n isValid: model,\n items,\n validateOn: toRef(() => props.validateOn)\n });\n\n return {\n errors,\n isDisabled,\n isReadonly,\n isValidating,\n isValid: model,\n items,\n validate,\n reset,\n resetValidation\n };\n}\n\nexport function useForm(props?: { readonly?: boolean | null; disabled?: boolean | null }) {\n const form = inject(FormKey, null);\n return {\n ...form,\n isReadonly: computed(() => !!(props?.readonly ?? unref(form?.isReadonly))),\n isDisabled: computed(() => !!(props?.disabled ?? unref(form?.isDisabled)))\n };\n}\n"],"names":["validate","reset","resetValidation"],"mappings":";;;;;;;AAsBO,MAAM,kBAAkB;AAAA,EAC7B;AAAA,
|
|
1
|
+
{"version":3,"file":"useForm.js","sources":["../../../../../src/composables/useForm/useForm.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { defineReadonlyProps } from '@cds/composables/useReadonly';\nimport type { ValidationProps } from '@cds/composables/useValidation';\nimport { propsFactory, useProxyModel } from '@cds/core';\nimport { warn } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n markRaw,\n type PropType,\n provide,\n ref,\n shallowRef,\n toRef,\n unref,\n watch\n} from 'vue';\n\nimport { FormKey } from './internal/useForm.constants';\nimport type { FieldValidationResult, FormField } from './internal/useForm.types';\n\nexport const defineFormProps = propsFactory(\n {\n /**\n * Останавливает валидацию на первом же невалидном поле — остальные поля не проверяются\n * @en Stops the validation at the very first invalid field — the remaining fields are not checked\n */\n firstFail: Boolean,\n /**\n * Итоговая валидность формы: `true` — все поля прошли проверку, `false` — есть ошибки, `null` — форма ещё не валидировалась\n * @en Resulting validity of the form: `true` — every field passed the check, `false` — there are errors, `null` — the form has not been validated yet\n */\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null\n },\n /**\n * Когда запускать валидацию полей формы: при вводе, потере фокуса или только вручную\n * @en When to run the validation of the form fields: on input, on blur or manually only\n */\n validateOn: {\n type: String as PropType<ValidationProps['validateOn']>,\n default: 'input'\n },\n ...defineDisabledProps(),\n ...defineReadonlyProps()\n },\n 'form'\n);\n\nexport interface FormProps extends ExtractPublicPropTypes<ReturnType<typeof defineFormProps>> {}\n\nexport function createForm(props: FormProps) {\n const model = useProxyModel(props, 'modelValue');\n\n const isDisabled = toRef(() => props.disabled);\n const isReadonly = toRef(() => props.readonly);\n const isValidating = shallowRef(false);\n const items = ref<FormField[]>([]);\n const errors = ref<FieldValidationResult[]>([]);\n\n async function validate() {\n const results = [];\n let valid = true;\n\n errors.value = [];\n isValidating.value = true;\n\n for (const item of unref(items)) {\n const itemErrorMessages = await item.validate();\n\n if (itemErrorMessages.length > 0) {\n valid = false;\n\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages\n });\n }\n\n if (!valid && props.firstFail) break;\n }\n\n errors.value = results;\n isValidating.value = false;\n\n return { valid, errors: unref(errors) };\n }\n\n function reset() {\n unref(items).forEach((item) => item.reset());\n }\n\n function resetValidation() {\n unref(items).forEach((item) => item.resetValidation());\n }\n\n watch(\n items,\n () => {\n let valid = 0;\n let invalid = 0;\n const results = [];\n\n for (const item of unref(items)) {\n if (item.isValid === false) {\n invalid++;\n results.push({\n id: item.id,\n errorMessages: item.errorMessages\n });\n } else if (item.isValid === true) valid++;\n }\n\n errors.value = results;\n model.value = invalid > 0 ? false : valid === unref(items).length ? true : null;\n },\n { deep: true, flush: 'post' }\n );\n\n provide(FormKey, {\n register: ({ id, vm, validate, reset, resetValidation }) => {\n if (unref(items).some((item) => item.id === id)) {\n warn('useForm', `Duplicate input name \"${id}\"`);\n }\n\n items.value.push({\n id,\n validate,\n reset,\n resetValidation,\n vm: markRaw(vm),\n isValid: null,\n errorMessages: []\n });\n },\n unregister: (id) => {\n items.value = unref(items).filter((item) => item.id !== id);\n },\n update: (id, isValid, errorMessages) => {\n const found = unref(items).find((item) => item.id === id);\n\n if (!found) return;\n\n found.isValid = isValid;\n found.errorMessages = errorMessages;\n },\n isDisabled,\n isReadonly,\n isValidating,\n isValid: model,\n items,\n validateOn: toRef(() => props.validateOn)\n });\n\n return {\n /**\n * Ошибки валидации полей формы: идентификатор поля и его сообщения об ошибках.\n * @en Validation errors of the form fields: the identifier of a field and its error messages.\n */\n errors,\n /**\n * Заблокированы ли все поля формы.\n * @en Whether all the fields of the form are blocked.\n */\n isDisabled,\n /**\n * Доступны ли поля формы только для чтения.\n * @en Whether the fields of the form are read-only.\n */\n isReadonly,\n /**\n * Идёт ли сейчас валидация формы.\n * @en Whether the form is being validated right now.\n */\n isValidating,\n /**\n * Валидность формы: `true` — все поля прошли проверку, `false` — есть ошибки, `null` — форма ещё не валидировалась.\n * @en Validity of the form: `true` — every field passed the check, `false` — there are errors, `null` — the form has not been validated yet.\n */\n isValid: model,\n /**\n * Зарегистрированные в форме поля с их состоянием валидации.\n * @en The fields registered in the form together with their validation state.\n */\n items,\n /**\n * Запускает валидацию всех полей формы и возвращает результат вместе со списком ошибок.\n * @en Runs the validation of all the form fields and returns the result together with the list of errors.\n */\n validate,\n /** Сбрасывает значения всех полей формы и их валидацию. */\n reset,\n /**\n * Сбрасывает только состояние валидации, сохраняя введённые значения.\n * @en Resets the validation state only, keeping the entered values.\n */\n resetValidation\n };\n}\n\nexport function useForm(props?: { readonly?: boolean | null; disabled?: boolean | null }) {\n const form = inject(FormKey, null);\n return {\n ...form,\n isReadonly: computed(() => !!(props?.readonly ?? unref(form?.isReadonly))),\n isDisabled: computed(() => !!(props?.disabled ?? unref(form?.isDisabled)))\n };\n}\n"],"names":["validate","reset","resetValidation"],"mappings":"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"}
|
|
@@ -7,20 +7,38 @@ import { w as warn } from "../../utils/dom/console.js";
|
|
|
7
7
|
import { reactive, onMounted, onBeforeUnmount, onUpdated, unref, toRef, provide } from "vue";
|
|
8
8
|
const defineGroupProps = propsFactory(
|
|
9
9
|
{
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Значение выбранных элементов группы
|
|
12
|
+
* @en Value of the selected items of the group
|
|
13
|
+
*/
|
|
11
14
|
modelValue: {
|
|
12
15
|
type: null,
|
|
13
16
|
default: void 0
|
|
14
17
|
},
|
|
15
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Разрешить множественный выбор
|
|
20
|
+
* @en Allows selecting several items at once
|
|
21
|
+
*/
|
|
16
22
|
multiple: Boolean,
|
|
17
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Обязательный выбор хотя бы одного элемента
|
|
25
|
+
* @en Requires at least one item to stay selected
|
|
26
|
+
*/
|
|
18
27
|
required: [Boolean, String],
|
|
19
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Обязательный выбор хотя бы одного элемента
|
|
30
|
+
* @en Requires at least one item to stay selected
|
|
31
|
+
*/
|
|
20
32
|
mandatory: [Boolean, String],
|
|
21
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Максимальное количество выбираемых элементов
|
|
35
|
+
* @en Maximum number of items that can be selected
|
|
36
|
+
*/
|
|
22
37
|
max: Number,
|
|
23
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* CSS класс для выбранного состояния
|
|
40
|
+
* @en CSS class applied in the selected state
|
|
41
|
+
*/
|
|
24
42
|
selectedClass: String,
|
|
25
43
|
...defineDisabledProps()
|
|
26
44
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGroup.js","sources":["../../../../../src/composables/useGroup/useGroup.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { getCurrentInstance, propsFactory, useProxyModel } from '@cds/core';\nimport { deepEqual, type EventProp, findChildrenWithProvide, warn, wrapInArray } from '@cds/utils';\nimport {\n type ComponentInternalInstance,\n type ExtractPublicPropTypes,\n type InjectionKey,\n onBeforeUnmount,\n onMounted,\n onUpdated,\n type PropType,\n provide,\n reactive,\n type Ref,\n toRef,\n unref,\n type UnwrapRef\n} from 'vue';\n\nimport type { GroupItem } from './useGroupItem';\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void;\n unregister: (id: string) => void;\n select: (id: string, value: boolean) => void;\n selected: Ref<Readonly<string[]>>;\n isSelected: (id: string) => boolean;\n selectedClass: Ref<string | undefined>;\n items: Readonly<\n Ref<\n {\n id: string;\n value: unknown;\n disabled: boolean | undefined;\n }[]\n >\n >;\n disabled: Ref<boolean | null | undefined>;\n getItemIndex: (value: unknown) => number;\n prev: () => void;\n next: () => void;\n}\n\nexport const defineGroupProps = propsFactory(\n {\n /** Значение выбранных элементов группы */\n modelValue: {\n type: null,\n default: undefined\n },\n /** Разрешить множественный выбор */\n multiple: Boolean,\n /** Обязательный выбор хотя бы одного элемента */\n required: [Boolean, String] as PropType<boolean | 'force'>,\n /** Обязательный выбор хотя бы одного элемента */\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n /** Максимальное количество выбираемых элементов */\n max: Number,\n /** CSS класс для выбранного состояния */\n selectedClass: String,\n\n ...defineDisabledProps()\n },\n 'group'\n);\nexport interface GroupProps extends ExtractPublicPropTypes<ReturnType<typeof defineGroupProps>> {\n 'onUpdate:modelValue'?: EventProp<[unknown]> | undefined;\n}\n\n/**\n * Provides group management functionality, including item registration, selection, and navigation.\n *\n * @param {GroupProps} props - The props object for configuring the group behavior. It includes options like `modelValue`, `multiple`, `mandatory`, and others.\n * @param {InjectionKey<GroupProvide>} injectKey - The injection key used to provide the group state to child components.\n * @return {GroupProvide} An object containing methods and properties for managing the group state. This includes methods for registering/unregistering items, selecting/deselecting items, navigating through items, and querying item states.\n */\nexport function useGroup(props: GroupProps, injectKey: InjectionKey<GroupProvide>) {\n let isUnmounted = false;\n const items = reactive<GroupItem[]>([]);\n const groupVm = getCurrentInstance('useGroup');\n\n const selected = useProxyModel(\n props,\n 'modelValue',\n [],\n (value) => {\n if (value === undefined) return [];\n return getIds(items, value === null ? [null] : wrapInArray(value));\n },\n (value) => {\n const arr = getValues(items, value);\n return props.multiple ? arr : arr[0];\n }\n );\n\n onMounted(() => {\n forceMandatoryValue();\n });\n\n onBeforeUnmount(() => {\n isUnmounted = true;\n });\n\n onUpdated(() => {\n for (let i = 0; i < items.length; i++) {\n if (items[i].useIndexAsValue) {\n items[i].value = i;\n }\n }\n });\n\n function register(item: GroupItem, vm: ComponentInternalInstance) {\n const unwrapped = item as unknown as UnwrapRef<GroupItem>;\n\n const key = Symbol.for(`${injectKey.description}:id`);\n const children = findChildrenWithProvide(key, groupVm?.vnode);\n const index = children.indexOf(vm);\n\n if (unref(unwrapped.value) === undefined) {\n unwrapped.value = index;\n unwrapped.useIndexAsValue = true;\n }\n\n if (index > -1) {\n items.splice(index, 0, unwrapped);\n } else {\n items.push(unwrapped);\n }\n }\n\n function unregister(id: string) {\n if (isUnmounted) return;\n\n forceMandatoryValue();\n\n const index = items.findIndex((item) => item.id === id);\n items.splice(index, 1);\n }\n\n function forceMandatoryValue() {\n const item = items.find((item) => !item.disabled);\n const forceMandatory = props.mandatory === 'force' || props.required === 'force';\n\n if (item && forceMandatory && !unref(selected).length) {\n selected.value = [item.id];\n }\n }\n\n function select(id: string, value?: boolean) {\n const item = items.find((item) => item.id === id);\n const isMandatory = props.mandatory || props.required;\n\n if (value && item?.disabled) return;\n\n if (props.multiple) {\n const internalValue = unref(selected).slice();\n const index = internalValue.findIndex((v) => v === id);\n const isSelected = ~index;\n\n value = value ?? !isSelected;\n\n if (isSelected && isMandatory && internalValue.length <= 1) return;\n if (!isSelected && props.max != null && internalValue.length + 1 > props.max) return;\n\n if (index < 0 && value) internalValue.push(id);\n else if (index >= 0 && !value) internalValue.splice(index, 1);\n\n selected.value = internalValue;\n } else {\n const isSelected = selected.value.includes(id);\n if (isMandatory && isSelected) return;\n if (!isSelected && !value) return;\n\n selected.value = (value ?? !isSelected) ? [id] : [];\n }\n }\n\n function step(offset: number) {\n if (props.multiple) warn('useGroup', 'This method is not supported when using \"multiple\" prop');\n\n if (!unref(selected).length) {\n const item = items.find((item) => !item.disabled);\n item && (selected.value = [item.id]);\n } else {\n const currentId = unref(selected)[0];\n const currentIndex = items.findIndex((i) => i.id === currentId);\n\n let newIndex = (currentIndex + offset) % items.length;\n let newItem = items[newIndex];\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length;\n newItem = items[newIndex];\n }\n\n if (newItem.disabled) return;\n\n selected.value = [items[newIndex].id];\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(() => props.disabled),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: string) => selected.value.includes(id),\n selectedClass: toRef(() => props.selectedClass),\n items: toRef(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value)\n };\n\n provide(injectKey, state);\n\n return state;\n}\n\nfunction getItemIndex(items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value]);\n\n if (!ids.length) return -1;\n\n return items.findIndex((item) => item.id === ids[0]);\n}\n\nfunction getIds(items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: string[] = [];\n\n modelValue.forEach((value) => {\n const item = items.find((item) => deepEqual(value, item.value));\n const itemByIndex = items[value];\n\n if (item?.value !== undefined) {\n ids.push(item.id);\n } else if (itemByIndex?.useIndexAsValue) {\n ids.push(itemByIndex.id);\n }\n });\n\n return ids;\n}\n\nfunction getValues(items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = [];\n\n ids.forEach((id) => {\n const itemIndex = items.findIndex((item) => item.id === id);\n if (~itemIndex) {\n const item = items[itemIndex];\n values.push(item.value !== undefined ? item.value : itemIndex);\n }\n });\n\n return values;\n}\n"],"names":["item"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useGroup.js","sources":["../../../../../src/composables/useGroup/useGroup.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { getCurrentInstance, propsFactory, useProxyModel } from '@cds/core';\nimport { deepEqual, type EventProp, findChildrenWithProvide, warn, wrapInArray } from '@cds/utils';\nimport {\n type ComponentInternalInstance,\n type ExtractPublicPropTypes,\n type InjectionKey,\n onBeforeUnmount,\n onMounted,\n onUpdated,\n type PropType,\n provide,\n reactive,\n type Ref,\n toRef,\n unref,\n type UnwrapRef\n} from 'vue';\n\nimport type { GroupItem } from './useGroupItem';\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void;\n unregister: (id: string) => void;\n select: (id: string, value: boolean) => void;\n selected: Ref<Readonly<string[]>>;\n isSelected: (id: string) => boolean;\n selectedClass: Ref<string | undefined>;\n items: Readonly<\n Ref<\n {\n id: string;\n value: unknown;\n disabled: boolean | undefined;\n }[]\n >\n >;\n disabled: Ref<boolean | null | undefined>;\n getItemIndex: (value: unknown) => number;\n prev: () => void;\n next: () => void;\n}\n\nexport const defineGroupProps = propsFactory(\n {\n /**\n * Значение выбранных элементов группы\n * @en Value of the selected items of the group\n */\n modelValue: {\n type: null,\n default: undefined\n },\n /**\n * Разрешить множественный выбор\n * @en Allows selecting several items at once\n */\n multiple: Boolean,\n /**\n * Обязательный выбор хотя бы одного элемента\n * @en Requires at least one item to stay selected\n */\n required: [Boolean, String] as PropType<boolean | 'force'>,\n /**\n * Обязательный выбор хотя бы одного элемента\n * @en Requires at least one item to stay selected\n */\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n /**\n * Максимальное количество выбираемых элементов\n * @en Maximum number of items that can be selected\n */\n max: Number,\n /**\n * CSS класс для выбранного состояния\n * @en CSS class applied in the selected state\n */\n selectedClass: String,\n\n ...defineDisabledProps()\n },\n 'group'\n);\nexport interface GroupProps extends ExtractPublicPropTypes<ReturnType<typeof defineGroupProps>> {\n 'onUpdate:modelValue'?: EventProp<[unknown]> | undefined;\n}\n\n/**\n * Provides group management functionality, including item registration, selection, and navigation.\n *\n * @param {GroupProps} props - The props object for configuring the group behavior. It includes options like `modelValue`, `multiple`, `mandatory`, and others.\n * @param {InjectionKey<GroupProvide>} injectKey - The injection key used to provide the group state to child components.\n * @return {GroupProvide} An object containing methods and properties for managing the group state. This includes methods for registering/unregistering items, selecting/deselecting items, navigating through items, and querying item states.\n */\nexport function useGroup(props: GroupProps, injectKey: InjectionKey<GroupProvide>) {\n let isUnmounted = false;\n const items = reactive<GroupItem[]>([]);\n const groupVm = getCurrentInstance('useGroup');\n\n const selected = useProxyModel(\n props,\n 'modelValue',\n [],\n (value) => {\n if (value === undefined) return [];\n return getIds(items, value === null ? [null] : wrapInArray(value));\n },\n (value) => {\n const arr = getValues(items, value);\n return props.multiple ? arr : arr[0];\n }\n );\n\n onMounted(() => {\n forceMandatoryValue();\n });\n\n onBeforeUnmount(() => {\n isUnmounted = true;\n });\n\n onUpdated(() => {\n for (let i = 0; i < items.length; i++) {\n if (items[i].useIndexAsValue) {\n items[i].value = i;\n }\n }\n });\n\n function register(item: GroupItem, vm: ComponentInternalInstance) {\n const unwrapped = item as unknown as UnwrapRef<GroupItem>;\n\n const key = Symbol.for(`${injectKey.description}:id`);\n const children = findChildrenWithProvide(key, groupVm?.vnode);\n const index = children.indexOf(vm);\n\n if (unref(unwrapped.value) === undefined) {\n unwrapped.value = index;\n unwrapped.useIndexAsValue = true;\n }\n\n if (index > -1) {\n items.splice(index, 0, unwrapped);\n } else {\n items.push(unwrapped);\n }\n }\n\n function unregister(id: string) {\n if (isUnmounted) return;\n\n forceMandatoryValue();\n\n const index = items.findIndex((item) => item.id === id);\n items.splice(index, 1);\n }\n\n function forceMandatoryValue() {\n const item = items.find((item) => !item.disabled);\n const forceMandatory = props.mandatory === 'force' || props.required === 'force';\n\n if (item && forceMandatory && !unref(selected).length) {\n selected.value = [item.id];\n }\n }\n\n function select(id: string, value?: boolean) {\n const item = items.find((item) => item.id === id);\n const isMandatory = props.mandatory || props.required;\n\n if (value && item?.disabled) return;\n\n if (props.multiple) {\n const internalValue = unref(selected).slice();\n const index = internalValue.findIndex((v) => v === id);\n const isSelected = ~index;\n\n value = value ?? !isSelected;\n\n if (isSelected && isMandatory && internalValue.length <= 1) return;\n if (!isSelected && props.max != null && internalValue.length + 1 > props.max) return;\n\n if (index < 0 && value) internalValue.push(id);\n else if (index >= 0 && !value) internalValue.splice(index, 1);\n\n selected.value = internalValue;\n } else {\n const isSelected = selected.value.includes(id);\n if (isMandatory && isSelected) return;\n if (!isSelected && !value) return;\n\n selected.value = (value ?? !isSelected) ? [id] : [];\n }\n }\n\n function step(offset: number) {\n if (props.multiple) warn('useGroup', 'This method is not supported when using \"multiple\" prop');\n\n if (!unref(selected).length) {\n const item = items.find((item) => !item.disabled);\n item && (selected.value = [item.id]);\n } else {\n const currentId = unref(selected)[0];\n const currentIndex = items.findIndex((i) => i.id === currentId);\n\n let newIndex = (currentIndex + offset) % items.length;\n let newItem = items[newIndex];\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length;\n newItem = items[newIndex];\n }\n\n if (newItem.disabled) return;\n\n selected.value = [items[newIndex].id];\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(() => props.disabled),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: string) => selected.value.includes(id),\n selectedClass: toRef(() => props.selectedClass),\n items: toRef(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value)\n };\n\n provide(injectKey, state);\n\n return state;\n}\n\nfunction getItemIndex(items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value]);\n\n if (!ids.length) return -1;\n\n return items.findIndex((item) => item.id === ids[0]);\n}\n\nfunction getIds(items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: string[] = [];\n\n modelValue.forEach((value) => {\n const item = items.find((item) => deepEqual(value, item.value));\n const itemByIndex = items[value];\n\n if (item?.value !== undefined) {\n ids.push(item.id);\n } else if (itemByIndex?.useIndexAsValue) {\n ids.push(itemByIndex.id);\n }\n });\n\n return ids;\n}\n\nfunction getValues(items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = [];\n\n ids.forEach((id) => {\n const itemIndex = items.findIndex((item) => item.id === id);\n if (~itemIndex) {\n const item = items[itemIndex];\n values.push(item.value !== undefined ? item.value : itemIndex);\n }\n });\n\n return values;\n}\n"],"names":["item"],"mappings":";;;;;;;AA2CO,MAAM,mBAAmB;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,UAAU,CAAC,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAK1B,WAAW,CAAC,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAK3B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,eAAe;AAAA,IAEf,GAAG,oBAAA;AAAA,EAAoB;AAAA,EAEzB;AACF;AAYO,SAAS,SAAS,OAAmB,WAAuC;AACjF,MAAI,cAAc;AAClB,QAAM,QAAQ,SAAsB,EAAE;AACtC,QAAM,UAAU,mBAAmB,UAAU;AAE7C,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA,CAAA;AAAA,IACA,CAAC,UAAU;AACT,UAAI,UAAU,OAAW,QAAO,CAAA;AAChC,aAAO,OAAO,OAAO,UAAU,OAAO,CAAC,IAAI,IAAI,YAAY,KAAK,CAAC;AAAA,IACnE;AAAA,IACA,CAAC,UAAU;AACT,YAAM,MAAM,UAAU,OAAO,KAAK;AAClC,aAAO,MAAM,WAAW,MAAM,IAAI,CAAC;AAAA,IACrC;AAAA,EAAA;AAGF,YAAU,MAAM;AACd,wBAAA;AAAA,EACF,CAAC;AAED,kBAAgB,MAAM;AACpB,kBAAc;AAAA,EAChB,CAAC;AAED,YAAU,MAAM;AACd,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAI,MAAM,CAAC,EAAE,iBAAiB;AAC5B,cAAM,CAAC,EAAE,QAAQ;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AAED,WAAS,SAAS,MAAiB,IAA+B;AAChE,UAAM,YAAY;AAElB,UAAM,MAAM,OAAO,IAAI,GAAG,UAAU,WAAW,KAAK;AACpD,UAAM,WAAW,wBAAwB,KAAK,mCAAS,KAAK;AAC5D,UAAM,QAAQ,SAAS,QAAQ,EAAE;AAEjC,QAAI,MAAM,UAAU,KAAK,MAAM,QAAW;AACxC,gBAAU,QAAQ;AAClB,gBAAU,kBAAkB;AAAA,IAC9B;AAEA,QAAI,QAAQ,IAAI;AACd,YAAM,OAAO,OAAO,GAAG,SAAS;AAAA,IAClC,OAAO;AACL,YAAM,KAAK,SAAS;AAAA,IACtB;AAAA,EACF;AAEA,WAAS,WAAW,IAAY;AAC9B,QAAI,YAAa;AAEjB,wBAAA;AAEA,UAAM,QAAQ,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,EAAE;AACtD,UAAM,OAAO,OAAO,CAAC;AAAA,EACvB;AAEA,WAAS,sBAAsB;AAC7B,UAAM,OAAO,MAAM,KAAK,CAACA,UAAS,CAACA,MAAK,QAAQ;AAChD,UAAM,iBAAiB,MAAM,cAAc,WAAW,MAAM,aAAa;AAEzE,QAAI,QAAQ,kBAAkB,CAAC,MAAM,QAAQ,EAAE,QAAQ;AACrD,eAAS,QAAQ,CAAC,KAAK,EAAE;AAAA,IAC3B;AAAA,EACF;AAEA,WAAS,OAAO,IAAY,OAAiB;AAC3C,UAAM,OAAO,MAAM,KAAK,CAACA,UAASA,MAAK,OAAO,EAAE;AAChD,UAAM,cAAc,MAAM,aAAa,MAAM;AAE7C,QAAI,UAAS,6BAAM,UAAU;AAE7B,QAAI,MAAM,UAAU;AAClB,YAAM,gBAAgB,MAAM,QAAQ,EAAE,MAAA;AACtC,YAAM,QAAQ,cAAc,UAAU,CAAC,MAAM,MAAM,EAAE;AACrD,YAAM,aAAa,CAAC;AAEpB,cAAQ,SAAS,CAAC;AAElB,UAAI,cAAc,eAAe,cAAc,UAAU,EAAG;AAC5D,UAAI,CAAC,cAAc,MAAM,OAAO,QAAQ,cAAc,SAAS,IAAI,MAAM,IAAK;AAE9E,UAAI,QAAQ,KAAK,MAAO,eAAc,KAAK,EAAE;AAAA,eACpC,SAAS,KAAK,CAAC,MAAO,eAAc,OAAO,OAAO,CAAC;AAE5D,eAAS,QAAQ;AAAA,IACnB,OAAO;AACL,YAAM,aAAa,SAAS,MAAM,SAAS,EAAE;AAC7C,UAAI,eAAe,WAAY;AAC/B,UAAI,CAAC,cAAc,CAAC,MAAO;AAE3B,eAAS,QAAS,SAAS,CAAC,aAAc,CAAC,EAAE,IAAI,CAAA;AAAA,IACnD;AAAA,EACF;AAEA,WAAS,KAAK,QAAgB;AAC5B,QAAI,MAAM,SAAU,MAAK,YAAY,yDAAyD;AAE9F,QAAI,CAAC,MAAM,QAAQ,EAAE,QAAQ;AAC3B,YAAM,OAAO,MAAM,KAAK,CAACA,UAAS,CAACA,MAAK,QAAQ;AAChD,eAAS,SAAS,QAAQ,CAAC,KAAK,EAAE;AAAA,IACpC,OAAO;AACL,YAAM,YAAY,MAAM,QAAQ,EAAE,CAAC;AACnC,YAAM,eAAe,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,SAAS;AAE9D,UAAI,YAAY,eAAe,UAAU,MAAM;AAC/C,UAAI,UAAU,MAAM,QAAQ;AAE5B,aAAO,QAAQ,YAAY,aAAa,cAAc;AACpD,oBAAY,WAAW,UAAU,MAAM;AACvC,kBAAU,MAAM,QAAQ;AAAA,MAC1B;AAEA,UAAI,QAAQ,SAAU;AAEtB,eAAS,QAAQ,CAAC,MAAM,QAAQ,EAAE,EAAE;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,QAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,MAAM,MAAM,MAAM,QAAQ;AAAA,IACpC,MAAM,MAAM,KAAK,MAAM,SAAS,CAAC;AAAA,IACjC,MAAM,MAAM,KAAK,CAAC;AAAA,IAClB,YAAY,CAAC,OAAe,SAAS,MAAM,SAAS,EAAE;AAAA,IACtD,eAAe,MAAM,MAAM,MAAM,aAAa;AAAA,IAC9C,OAAO,MAAM,MAAM,KAAK;AAAA,IACxB,cAAc,CAAC,UAAmB,aAAa,OAAO,KAAK;AAAA,EAAA;AAG7D,UAAQ,WAAW,KAAK;AAExB,SAAO;AACT;AAEA,SAAS,aAAa,OAA+B,OAAgB;AACnE,QAAM,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC;AAEjC,MAAI,CAAC,IAAI,OAAQ,QAAO;AAExB,SAAO,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC;AACrD;AAEA,SAAS,OAAO,OAA+B,YAAmB;AAChE,QAAM,MAAgB,CAAA;AAEtB,aAAW,QAAQ,CAAC,UAAU;AAC5B,UAAM,OAAO,MAAM,KAAK,CAACA,UAAS,UAAU,OAAOA,MAAK,KAAK,CAAC;AAC9D,UAAM,cAAc,MAAM,KAAK;AAE/B,SAAI,6BAAM,WAAU,QAAW;AAC7B,UAAI,KAAK,KAAK,EAAE;AAAA,IAClB,WAAW,2CAAa,iBAAiB;AACvC,UAAI,KAAK,YAAY,EAAE;AAAA,IACzB;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,UAAU,OAA+B,KAAY;AAC5D,QAAM,SAAoB,CAAA;AAE1B,MAAI,QAAQ,CAAC,OAAO;AAClB,UAAM,YAAY,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,EAAE;AAC1D,QAAI,CAAC,WAAW;AACd,YAAM,OAAO,MAAM,SAAS;AAC5B,aAAO,KAAK,KAAK,UAAU,SAAY,KAAK,QAAQ,SAAS;AAAA,IAC/D;AAAA,EACF,CAAC;AAED,SAAO;AACT;"}
|
|
@@ -4,9 +4,15 @@ import { p as propsFactory } from "../../core/propsFactory.js";
|
|
|
4
4
|
import { useId, provide, inject, toRef, computed, unref, onBeforeUnmount, watch } from "vue";
|
|
5
5
|
const defineGroupItemProps = propsFactory(
|
|
6
6
|
{
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Значение компонента в группе
|
|
9
|
+
* @en Value of the component within the group
|
|
10
|
+
*/
|
|
8
11
|
value: null,
|
|
9
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* CSS класс для выбранного состояния
|
|
14
|
+
* @en CSS class applied in the selected state
|
|
15
|
+
*/
|
|
10
16
|
selectedClass: String,
|
|
11
17
|
...defineDisabledProps()
|
|
12
18
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGroupItem.js","sources":["../../../../../src/composables/useGroup/useGroupItem.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { getCurrentInstance, propsFactory } from '@cds/core';\nimport type { EventProp } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n type InjectionKey,\n onBeforeUnmount,\n provide,\n type Ref,\n toRef,\n unref,\n useId,\n watch\n} from 'vue';\n\nimport type { GroupProvide } from './useGroup';\n\nexport interface GroupItem {\n id: string;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n useIndexAsValue?: boolean;\n}\n\nexport interface GroupItemProvide {\n id: string;\n isSelected: Ref<boolean>;\n isFirst: Ref<boolean>;\n isLast: Ref<boolean>;\n toggle: () => void;\n select: (value: boolean) => void;\n selectedClass: Ref<(string | undefined)[] | false>;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n group: GroupProvide;\n register: () => void;\n unregister: () => void;\n}\n\nexport const defineGroupItemProps = propsFactory(\n {\n
|
|
1
|
+
{"version":3,"file":"useGroupItem.js","sources":["../../../../../src/composables/useGroup/useGroupItem.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { getCurrentInstance, propsFactory } from '@cds/core';\nimport type { EventProp } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n type InjectionKey,\n onBeforeUnmount,\n provide,\n type Ref,\n toRef,\n unref,\n useId,\n watch\n} from 'vue';\n\nimport type { GroupProvide } from './useGroup';\n\nexport interface GroupItem {\n id: string;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n useIndexAsValue?: boolean;\n}\n\nexport interface GroupItemProvide {\n id: string;\n isSelected: Ref<boolean>;\n isFirst: Ref<boolean>;\n isLast: Ref<boolean>;\n toggle: () => void;\n select: (value: boolean) => void;\n selectedClass: Ref<(string | undefined)[] | false>;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n group: GroupProvide;\n register: () => void;\n unregister: () => void;\n}\n\nexport const defineGroupItemProps = propsFactory(\n {\n /**\n * Значение компонента в группе\n * @en Value of the component within the group\n */\n value: null,\n /**\n * CSS класс для выбранного состояния\n * @en CSS class applied in the selected state\n */\n selectedClass: String,\n ...defineDisabledProps()\n },\n 'group-item'\n);\nexport interface GroupItemProps extends ExtractPublicPropTypes<ReturnType<typeof defineGroupItemProps>> {\n 'onGroup:selected'?: EventProp<[{ value: boolean }]> | undefined;\n}\n\n/**\n * Provides logic for managing group items within a group context.\n *\n * @param {GroupItemProps} props - The properties of the group item to be used.\n * @param {InjectionKey<GroupProvide>} injectKey - The injection key used to access the group context.\n * @param {true} [required] - A flag indicating if the group context is required.\n * @return {GroupItemProvide} The group item instance with its associated behavior and properties.\n */\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true\n): GroupItemProvide;\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false\n): GroupItemProvide | null;\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem');\n\n if (!vm) {\n throw new Error(`[CDS] useGroupItem must be used inside a setup function.`);\n }\n\n const id = useId();\n\n provide(Symbol.for(`${injectKey.description}:id`), id);\n\n const group = inject(injectKey, null);\n\n if (!group) {\n if (!required) return group;\n\n throw new Error(`[CDS] Could not find useGroup injection with symbol ${injectKey.description}`);\n }\n\n const value = toRef(() => props.value);\n const disabled = computed(() => !!(unref(group.disabled) || props.disabled));\n\n function register() {\n group?.register({ id, value, disabled }, vm);\n }\n\n function unregister() {\n group?.unregister(id);\n }\n\n register();\n onBeforeUnmount(() => unregister());\n\n const isSelected = computed(() => {\n return group.isSelected(id);\n });\n const isFirst = computed(() => {\n return unref(group.items)[0].id === id;\n });\n const isLast = computed(() => {\n return unref(group.items)[unref(group.items).length - 1].id === id;\n });\n\n const selectedClass = computed(() => unref(isSelected) && [unref(group.selectedClass), props.selectedClass]);\n\n watch(\n isSelected,\n (value) => {\n vm.emit('group:selected', { value });\n },\n { flush: 'sync' }\n );\n\n return {\n id,\n isSelected,\n isFirst,\n isLast,\n selectedClass,\n value,\n disabled,\n group,\n register,\n unregister,\n toggle: () => group.select(id, !unref(isSelected)),\n select: (value: boolean) => group.select(id, value)\n };\n}\n"],"names":["value"],"mappings":";;;;AAyCO,MAAM,uBAAuB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP,eAAe;AAAA,IACf,GAAG,oBAAA;AAAA,EAAoB;AAAA,EAEzB;AACF;AAuBO,SAAS,aACd,OACA,WACA,WAAW,MACc;AACzB,QAAM,KAAK,mBAAmB,cAAc;AAE5C,MAAI,CAAC,IAAI;AACP,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AAEA,QAAM,KAAK,MAAA;AAEX,UAAQ,OAAO,IAAI,GAAG,UAAU,WAAW,KAAK,GAAG,EAAE;AAErD,QAAM,QAAQ,OAAO,WAAW,IAAI;AAEpC,MAAI,CAAC,OAAO;AACV,QAAI,CAAC,SAAU,QAAO;AAEtB,UAAM,IAAI,MAAM,uDAAuD,UAAU,WAAW,EAAE;AAAA,EAChG;AAEA,QAAM,QAAQ,MAAM,MAAM,MAAM,KAAK;AACrC,QAAM,WAAW,SAAS,MAAM,CAAC,EAAE,MAAM,MAAM,QAAQ,KAAK,MAAM,SAAS;AAE3E,WAAS,WAAW;AAClB,mCAAO,SAAS,EAAE,IAAI,OAAO,SAAA,GAAY;AAAA,EAC3C;AAEA,WAAS,aAAa;AACpB,mCAAO,WAAW;AAAA,EACpB;AAEA,WAAA;AACA,kBAAgB,MAAM,YAAY;AAElC,QAAM,aAAa,SAAS,MAAM;AAChC,WAAO,MAAM,WAAW,EAAE;AAAA,EAC5B,CAAC;AACD,QAAM,UAAU,SAAS,MAAM;AAC7B,WAAO,MAAM,MAAM,KAAK,EAAE,CAAC,EAAE,OAAO;AAAA,EACtC,CAAC;AACD,QAAM,SAAS,SAAS,MAAM;AAC5B,WAAO,MAAM,MAAM,KAAK,EAAE,MAAM,MAAM,KAAK,EAAE,SAAS,CAAC,EAAE,OAAO;AAAA,EAClE,CAAC;AAED,QAAM,gBAAgB,SAAS,MAAM,MAAM,UAAU,KAAK,CAAC,MAAM,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC;AAE3G;AAAA,IACE;AAAA,IACA,CAACA,WAAU;AACT,SAAG,KAAK,kBAAkB,EAAE,OAAAA,QAAO;AAAA,IACrC;AAAA,IACA,EAAE,OAAO,OAAA;AAAA,EAAO;AAGlB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,MAAM,MAAM,OAAO,IAAI,CAAC,MAAM,UAAU,CAAC;AAAA,IACjD,QAAQ,CAACA,WAAmB,MAAM,OAAO,IAAIA,MAAK;AAAA,EAAA;AAEtD;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { u as useDisplay } from "../useDisplay/useDisplay.js";
|
|
2
1
|
import { a as IN_BROWSER } from "../../utils/dom/globals.js";
|
|
3
2
|
import { shallowRef, onMounted } from "vue";
|
|
3
|
+
import { u as useDisplay } from "../useDisplay/useDisplay.js";
|
|
4
4
|
function useHydration() {
|
|
5
5
|
if (!IN_BROWSER) return shallowRef(false);
|
|
6
6
|
const { ssr } = useDisplay();
|
|
@@ -3,39 +3,63 @@ import { W as isPrimitive, a7 as pick, x as deepEqual, M as getPropertyFromItem,
|
|
|
3
3
|
import { computed, shallowRef, watchEffect } from "vue";
|
|
4
4
|
const defineItemsProps = propsFactory(
|
|
5
5
|
{
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Массив элементов для отображения
|
|
8
|
+
* @en Array of items to display
|
|
9
|
+
*/
|
|
7
10
|
items: {
|
|
8
11
|
type: Array,
|
|
9
12
|
default: () => []
|
|
10
13
|
},
|
|
11
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Свойство объекта, используемое как заголовок элемента, либо функция для его получения
|
|
16
|
+
* @en Object field used as the item title, or a function that returns it
|
|
17
|
+
*/
|
|
12
18
|
itemTitle: {
|
|
13
19
|
type: [String, Array, Function],
|
|
14
20
|
default: "title"
|
|
15
21
|
},
|
|
16
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Свойство объекта, используемое как значение элемента, либо функция для его получения
|
|
24
|
+
* @en Object field used as the item value, or a function that returns it
|
|
25
|
+
*/
|
|
17
26
|
itemValue: {
|
|
18
27
|
type: [String, Array, Function],
|
|
19
28
|
default: "value"
|
|
20
29
|
},
|
|
21
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Свойство объекта, содержащее дочерние элементы, либо функция для их получения
|
|
32
|
+
* @en Object field that holds the child items, or a function that returns them
|
|
33
|
+
*/
|
|
22
34
|
itemChildren: {
|
|
23
35
|
type: [Boolean, String, Array, Function],
|
|
24
36
|
default: "children"
|
|
25
37
|
},
|
|
26
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Свойство объекта, содержащее пропсы для элемента, либо функция для их получения
|
|
40
|
+
* @en Object field that holds the props of the item, or a function that returns them
|
|
41
|
+
*/
|
|
27
42
|
itemProps: {
|
|
28
43
|
type: [Boolean, String, Array, Function],
|
|
29
44
|
default: "props"
|
|
30
45
|
},
|
|
31
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Свойство объекта, определяющее тип элемента (`item`, `divider`, `subheader`), либо функция для его получения
|
|
48
|
+
* @en Object field that defines the item type (`item`, `divider`, `subheader`), or a function that returns it
|
|
49
|
+
*/
|
|
32
50
|
itemType: {
|
|
33
51
|
type: [Boolean, String, Array, Function],
|
|
34
52
|
default: "type"
|
|
35
53
|
},
|
|
36
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Возвращать в значении модели объект вместо массива
|
|
56
|
+
* @en Return an object in the model value instead of an array
|
|
57
|
+
*/
|
|
37
58
|
returnObject: Boolean,
|
|
38
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Функция сравнения значений элементов для определения выбранного состояния
|
|
61
|
+
* @en Function that compares item values to determine the selected state
|
|
62
|
+
*/
|
|
39
63
|
valueComparator: Function
|
|
40
64
|
},
|
|
41
65
|
"list-items"
|