@central-design-system/components 4.0.0-alpha.4 → 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 +5 -0
- package/MIGRATION.md +14 -42
- package/dist/browser/entry.js +4917 -2238
- package/dist/browser/iconsets/cdsLegacy.js +1 -1
- package/dist/cds.d.ts +119065 -0
- package/dist/cjs/entry.js +9 -9
- package/dist/es/entry.css +0 -18
- package/dist/es/entry.js +3 -2
- package/dist/es/entry.js.map +1 -1
- package/dist/es/src/cds.js +1 -1
- package/dist/es/src/components/CdsApp/CdsApp.css +0 -18
- package/dist/es/src/components/CdsApp/api/CdsApp.props.js +1 -0
- 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/api/CdsAvatar.props.js +20 -5
- 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/api/CdsBadge.props.js +37 -9
- 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 +4 -1
- 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 +28 -7
- 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/api/CdsButtonGroup.props.js +4 -1
- 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/CdsCardGroup.vue_vue_type_script_setup_true_lang.js +20 -5
- 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 +84 -20
- 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 +20 -0
- 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 +64 -15
- 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.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 +4 -0
- 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 +32 -8
- 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/api/CdsEmptyState.props.js +33 -8
- 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 +8 -2
- 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 +38 -9
- 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 +13 -3
- 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 +56 -14
- 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/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 +4 -1
- package/dist/es/src/components/CdsFunctionalButton/api/CdsFunctionalButton.props.js.map +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/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/api/CdsIcon.props.js +17 -4
- 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 +20 -0
- 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 +64 -16
- 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 +44 -11
- 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 +48 -12
- 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/api/CdsLayout.props.js +5 -1
- 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/api/CdsLink.props.js +4 -1
- 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 +5 -2
- 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 +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.constants.js +4 -4
- package/dist/es/src/components/CdsList/api/CdsList.props.js +147 -39
- 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/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/api/CdsNotification.props.js +28 -7
- 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 +20 -5
- 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 +52 -13
- 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 +44 -11
- 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 +36 -8
- 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/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 +16 -0
- 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 +84 -21
- 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/api/CdsProgressBar.props.js +64 -16
- 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/api/CdsProgressCircle.props.js +28 -7
- 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/api/CdsSkeletonLoader.props.js +16 -4
- 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 +24 -6
- 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 +25 -6
- 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 +44 -0
- 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 +8 -0
- 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 +8 -2
- 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/api/CdsStatus.props.js +4 -1
- 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 +44 -11
- 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/api/CdsSurface.props.js +4 -1
- 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/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/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 +20 -5
- 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 +11 -3
- 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 +24 -0
- 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 +32 -8
- 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/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/api/CdsToolbar.props.js +20 -5
- 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 +16 -0
- package/dist/es/src/components/CdsTree/CdsTree.vue_vue_type_script_setup_true_lang.js.map +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 +8 -0
- 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/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/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 +24 -6
- 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/useLoader.js +4 -1
- package/dist/es/src/composables/useLoader/useLoader.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/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/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 +12 -3
- 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/themes/lumaDark.js +8 -4
- package/dist/es/src/themes/lumaDark.js.map +1 -1
- 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 +3 -2
- package/dist/esm-node/src/cds.mjs +1 -1
- package/dist/esm-node/src/components/CdsApp/CdsApp.css +0 -18
- package/dist/esm-node/src/components/CdsApp/api/CdsApp.props.mjs +1 -0
- 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 +20 -5
- package/dist/esm-node/src/components/CdsAutocomplete/api/CdsAutocomplete.props.mjs +9 -2
- package/dist/esm-node/src/components/CdsAvatar/CdsAvatar.css +0 -18
- package/dist/esm-node/src/components/CdsAvatar/api/CdsAvatar.props.mjs +20 -5
- package/dist/esm-node/src/components/CdsBadge/CdsBadge.css +0 -18
- package/dist/esm-node/src/components/CdsBadge/api/CdsBadge.props.mjs +37 -9
- package/dist/esm-node/src/components/CdsBreadcrumbs/CdsBreadcrumbs.css +0 -18
- package/dist/esm-node/src/components/CdsBreadcrumbs/api/CdsBreadcrumbs.props.mjs +32 -8
- 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 +4 -1
- package/dist/esm-node/src/components/CdsButton/api/CdsButton.props.mjs +28 -7
- package/dist/esm-node/src/components/CdsButtonGroup/CdsButtonGroup.css +0 -18
- package/dist/esm-node/src/components/CdsButtonGroup/api/CdsButtonGroup.props.mjs +4 -1
- 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 +20 -5
- 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 +1 -1
- 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 +21 -6
- 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.constants.mjs +9 -9
- package/dist/esm-node/src/components/CdsCard/api/CdsCard.props.mjs +85 -21
- package/dist/esm-node/src/components/CdsCard/index.mjs +1 -1
- package/dist/esm-node/src/components/CdsCarousel/CdsCarousel.css +0 -18
- 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/CdsCheckboxButton/CdsCheckboxButton.css +0 -18
- 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 +24 -6
- package/dist/esm-node/src/components/CdsCombobox/api/CdsCombobox.props.mjs +13 -3
- package/dist/esm-node/src/components/CdsCounter/CdsCounter.css +0 -18
- 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 +8 -0
- package/dist/esm-node/src/components/CdsDateInput/api/CdsDateInput.props.mjs +31 -7
- 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 +20 -0
- package/dist/esm-node/src/components/CdsDatePicker/api/CdsDatePicker.props.mjs +64 -15
- 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/CdsDivider/CdsDivider.css +0 -18
- 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 +4 -0
- package/dist/esm-node/src/components/CdsDrawer/api/CdsDrawer.props.mjs +32 -8
- package/dist/esm-node/src/components/CdsEmptyState/CdsEmptyState.css +0 -18
- package/dist/esm-node/src/components/CdsEmptyState/api/CdsEmptyState.props.mjs +33 -8
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanel.vue_vue_type_script_setup_true_lang.mjs +16 -4
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanelTitle.vue_vue_type_script_setup_true_lang.mjs +8 -2
- 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 +8 -2
- package/dist/esm-node/src/components/CdsExpandablePanel/api/CdsExpandablePanel.props.mjs +38 -9
- 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 +13 -3
- package/dist/esm-node/src/components/CdsField/api/CdsField.props.mjs +56 -14
- 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/api/CdsFileInput.props.mjs +40 -10
- 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 +4 -0
- package/dist/esm-node/src/components/CdsFileUpload/api/CdsFileUpload.props.mjs +85 -21
- package/dist/esm-node/src/components/CdsFooter/CdsFooter.css +0 -18
- package/dist/esm-node/src/components/CdsForm/CdsForm.css +0 -18
- 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 +4 -1
- package/dist/esm-node/src/components/CdsGrid/api/CdsGrid.props.mjs +40 -10
- package/dist/esm-node/src/components/CdsGrid/components/CSSGrid.css +0 -18
- package/dist/esm-node/src/components/CdsGrid/components/FlexGrid.css +0 -18
- package/dist/esm-node/src/components/CdsHeader/CdsHeader.css +0 -18
- package/dist/esm-node/src/components/CdsHighlight/CdsHighlight.css +0 -18
- package/dist/esm-node/src/components/CdsHighlight/api/CdsHighlight.props.mjs +32 -8
- package/dist/esm-node/src/components/CdsIcon/CdsIcon.css +0 -18
- package/dist/esm-node/src/components/CdsIcon/api/CdsIcon.props.mjs +17 -4
- 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 +20 -0
- package/dist/esm-node/src/components/CdsImage/api/CdsImage.props.mjs +64 -16
- 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 +44 -11
- package/dist/esm-node/src/components/CdsInput/api/CdsInput.props.mjs +48 -12
- package/dist/esm-node/src/components/CdsLabel/CdsLabel.css +0 -18
- package/dist/esm-node/src/components/CdsLabel/api/CdsLabel.props.mjs +4 -0
- package/dist/esm-node/src/components/CdsLayout/CdsLayout.css +0 -18
- package/dist/esm-node/src/components/CdsLayout/api/CdsLayout.props.mjs +5 -1
- package/dist/esm-node/src/components/CdsLink/CdsLink.css +0 -18
- package/dist/esm-node/src/components/CdsLink/api/CdsLink.props.mjs +4 -1
- 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 +24 -6
- package/dist/esm-node/src/components/CdsList/CdsListGroup.vue_vue_type_script_setup_true_lang.mjs +4 -1
- 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 +28 -7
- package/dist/esm-node/src/components/CdsList/CdsListItemAction.vue_vue_type_script_setup_true_lang.mjs +8 -2
- package/dist/esm-node/src/components/CdsList/CdsListItemMedia.vue_vue_type_script_setup_true_lang.mjs +8 -2
- package/dist/esm-node/src/components/CdsList/api/CdsList.props.mjs +144 -36
- 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/index.mjs +5 -2
- package/dist/esm-node/src/components/CdsLoader/CdsLoader.css +0 -18
- 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/CdsMenu/CdsMenu.css +0 -18
- package/dist/esm-node/src/components/CdsMenu/api/CdsMenu.props.mjs +8 -2
- package/dist/esm-node/src/components/CdsMessages/CdsMessages.css +0 -18
- 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/api/CdsModal.props.mjs +8 -2
- package/dist/esm-node/src/components/CdsNotification/CdsNotification.css +0 -18
- package/dist/esm-node/src/components/CdsNotification/api/CdsNotification.props.mjs +28 -7
- package/dist/esm-node/src/components/CdsNotificationAlert/CdsNotificationAlert.css +0 -18
- package/dist/esm-node/src/components/CdsNotificationAlert/api/CdsNotificationAlert.props.mjs +28 -7
- 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 +20 -5
- package/dist/esm-node/src/components/CdsOtpInput/api/CdsOtpInput.props.mjs +52 -13
- 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 +44 -11
- package/dist/esm-node/src/components/CdsOverlay/api/CdsOverlay.props.mjs +36 -8
- package/dist/esm-node/src/components/CdsOverlay/composables/useActivator.mjs +25 -6
- package/dist/esm-node/src/components/CdsOverlay/composables/useLocationStrategies.mjs +18 -4
- package/dist/esm-node/src/components/CdsOverlay/composables/useScrollStrategies.mjs +4 -1
- package/dist/esm-node/src/components/CdsPage/CdsPage.css +0 -18
- 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 +16 -0
- package/dist/esm-node/src/components/CdsPagination/api/CdsPagination.props.mjs +84 -21
- package/dist/esm-node/src/components/CdsProgressBar/CdsProgressBar.css +0 -18
- package/dist/esm-node/src/components/CdsProgressBar/api/CdsProgressBar.props.mjs +64 -16
- package/dist/esm-node/src/components/CdsProgressBar/composables/useChunk.mjs +4 -0
- package/dist/esm-node/src/components/CdsProgressCircle/CdsProgressCircle.css +0 -18
- package/dist/esm-node/src/components/CdsProgressCircle/api/CdsProgressCircle.props.mjs +28 -7
- package/dist/esm-node/src/components/CdsRadio/CdsRadio.css +0 -18
- package/dist/esm-node/src/components/CdsRadioGroup/CdsRadioGroup.css +0 -18
- package/dist/esm-node/src/components/CdsRadioGroup/api/CdsRadioGroup.props.mjs +16 -4
- package/dist/esm-node/src/components/CdsResponsive/CdsResponsive.css +0 -18
- package/dist/esm-node/src/components/CdsResponsive/api/CdsResponsive.props.mjs +12 -3
- 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 +16 -4
- package/dist/esm-node/src/components/CdsSelect/api/CdsSelect.props.mjs +4 -1
- 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 +8 -0
- package/dist/esm-node/src/components/CdsSelectionControl/api/CdsSelectionControl.props.mjs +12 -3
- package/dist/esm-node/src/components/CdsSelectionControlGroup/CdsSelectionControlGroup.css +0 -18
- package/dist/esm-node/src/components/CdsSelectionControlGroup/api/CdsSelectionControlGroup.props.mjs +44 -11
- package/dist/esm-node/src/components/CdsSkeletonLoader/CdsSkeletonLoader.css +0 -18
- package/dist/esm-node/src/components/CdsSkeletonLoader/api/CdsSkeletonLoader.props.mjs +16 -4
- 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 +24 -6
- package/dist/esm-node/src/components/CdsSlideGroup/api/CdsSlideGroup.props.mjs +25 -6
- 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 +4 -0
- package/dist/esm-node/src/components/CdsSlideView/CdsSlideViewItem.vue_vue_type_script_setup_true_lang.mjs +5 -1
- package/dist/esm-node/src/components/CdsSlideView/api/CdsSlideView.props.mjs +44 -0
- 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 +8 -0
- package/dist/esm-node/src/components/CdsStages/api/CdsStages.props.mjs +8 -2
- package/dist/esm-node/src/components/CdsStatus/CdsStatus.css +0 -18
- package/dist/esm-node/src/components/CdsStatus/api/CdsStatus.props.mjs +4 -1
- 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 +8 -0
- package/dist/esm-node/src/components/CdsSteps/api/CdsSteps.props.mjs +44 -11
- package/dist/esm-node/src/components/CdsSurface/CdsSurface.css +0 -18
- package/dist/esm-node/src/components/CdsSurface/api/CdsSurface.props.mjs +4 -1
- 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/composable/table.mjs +47 -0
- package/dist/esm-node/src/components/CdsTabs/CdsTabs.css +0 -18
- package/dist/esm-node/src/components/CdsTabs/api/CdsTabs.props.mjs +56 -0
- package/dist/esm-node/src/components/CdsTag/CdsTag.css +0 -18
- package/dist/esm-node/src/components/CdsTag/api/CdsTag.props.mjs +72 -18
- 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 +20 -5
- package/dist/esm-node/src/components/CdsTagGroup/api/CdsTagGroup.props.mjs +11 -3
- package/dist/esm-node/src/components/CdsTextArea/CdsTextArea.css +0 -18
- package/dist/esm-node/src/components/CdsTextArea/api/CdsTextArea.props.mjs +52 -13
- package/dist/esm-node/src/components/CdsTextInput/CdsTextInput.css +0 -18
- package/dist/esm-node/src/components/CdsTextInput/api/CdsTextInput.props.mjs +40 -10
- 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 +24 -0
- package/dist/esm-node/src/components/CdsTimePicker/api/CdsTimePicker.props.mjs +32 -8
- package/dist/esm-node/src/components/CdsToast/CdsToast.css +0 -18
- package/dist/esm-node/src/components/CdsToast/api/CdsToast.props.mjs +48 -12
- package/dist/esm-node/src/components/CdsToastQueue/CdsToastQueue.vue_vue_type_script_setup_true_lang.mjs +4 -1
- package/dist/esm-node/src/components/CdsToastQueue/api/CdsToastQueue.props.mjs +28 -7
- package/dist/esm-node/src/components/CdsToggle/CdsToggle.css +0 -18
- package/dist/esm-node/src/components/CdsToggle/api/CdsToggle.props.mjs +12 -3
- package/dist/esm-node/src/components/CdsToolbar/CdsToolbar.css +0 -18
- package/dist/esm-node/src/components/CdsToolbar/api/CdsToolbar.props.mjs +20 -5
- package/dist/esm-node/src/components/CdsTooltip/CdsTooltip.css +0 -18
- package/dist/esm-node/src/components/CdsTooltip/api/CdsTooltip.props.mjs +20 -5
- 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 +16 -0
- 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/CdsUploader/CdsUploader.css +0 -18
- package/dist/esm-node/src/components/CdsUploader/CdsUploader.vue_vue_type_script_setup_true_lang.mjs +8 -0
- 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 +8 -0
- 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 +20 -5
- package/dist/esm-node/src/composables/useDatetime/useDatetime.mjs +3 -0
- package/dist/esm-node/src/composables/useDelay/useDelay.mjs +8 -2
- package/dist/esm-node/src/composables/useDimensions/useDimensions.mjs +24 -6
- package/dist/esm-node/src/composables/useDirection/useDirection.mjs +4 -1
- package/dist/esm-node/src/composables/useDisabled/index.mjs +1 -1
- package/dist/esm-node/src/composables/useDisabled/useDisabled.mjs +4 -1
- package/dist/esm-node/src/composables/useDisplay/useDisplay.mjs +2 -0
- package/dist/esm-node/src/composables/useFilter/useFilter.mjs +20 -0
- package/dist/esm-node/src/composables/useFocus/useFocus.mjs +12 -3
- package/dist/esm-node/src/composables/useFocus/useFocusTrap.mjs +8 -2
- package/dist/esm-node/src/composables/useForm/useForm.mjs +45 -0
- package/dist/esm-node/src/composables/useGroup/useGroup.mjs +24 -6
- package/dist/esm-node/src/composables/useGroup/useGroupItem.mjs +8 -2
- package/dist/esm-node/src/composables/useItems/useItems.mjs +32 -8
- package/dist/esm-node/src/composables/useLayout/useLayout.mjs +24 -6
- package/dist/esm-node/src/composables/useLazy/useLazy.mjs +1 -0
- package/dist/esm-node/src/composables/useLoader/index.mjs +1 -1
- package/dist/esm-node/src/composables/useLoader/useLoader.mjs +4 -1
- package/dist/esm-node/src/composables/useLocation/index.mjs +1 -1
- package/dist/esm-node/src/composables/useLocation/useLocation.mjs +4 -1
- package/dist/esm-node/src/composables/useNested/useNested.mjs +44 -11
- 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/useReveal/useReveal.mjs +4 -1
- package/dist/esm-node/src/composables/useRouter/index.mjs +1 -1
- package/dist/esm-node/src/composables/useRouter/useRouter.mjs +16 -4
- package/dist/esm-node/src/composables/useSize/useSize.mjs +4 -1
- package/dist/esm-node/src/composables/useStatus/useStatus.mjs +4 -1
- package/dist/esm-node/src/composables/useText/useText.mjs +8 -2
- package/dist/esm-node/src/composables/useTheme/useTheme.mjs +4 -1
- package/dist/esm-node/src/composables/useTransition/useTransition.mjs +4 -1
- package/dist/esm-node/src/composables/useValidation/useValidation.mjs +26 -6
- package/dist/esm-node/src/composables/useVirtual/useVirtual.mjs +12 -3
- package/dist/esm-node/src/core/defineComponent.mjs +4 -1
- package/dist/esm-node/src/themes/lumaDark.mjs +8 -4
- package/dist/esm-node/src/utils/date/date.mjs +4 -4
- package/dist/iife/entry.js +9 -9
- 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/entry.d.ts +1 -0
- package/dist/types/themes/lumaDark.d.ts +4 -4
- package/dist/types/utils/date/date.d.ts +1 -1
- package/llms/llms-components.txt +8861 -10675
- package/llms/llms-full.txt +10309 -11489
- package/llms/llms-guides.txt +1400 -738
- package/llms/llms-migration.txt +18 -46
- package/llms/llms-tokens.txt +55 -55
- package/llms/llms.txt +110 -109
- package/package.json +24 -11
- 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/lumaDark.ts +8 -4
- package/dist/styles/breakpoints.css +0 -1
- package/dist/styles/index.css +0 -1
|
@@ -2,9 +2,15 @@ import { p as propsFactory } from "../../core/propsFactory.js";
|
|
|
2
2
|
import { y as defer } from "../../utils/helpers.js";
|
|
3
3
|
const defineDelayProps = propsFactory(
|
|
4
4
|
{
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Время ожидания в миллисекундах перед закрытием компонента. Работает только с параметром open-on-hover.
|
|
7
|
+
* @en Delay in milliseconds before the component closes. Works only together with open-on-hover.
|
|
8
|
+
*/
|
|
6
9
|
closeDelay: [Number, String],
|
|
7
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Время ожидания в миллисекундах перед открытием компонента. Работает только с параметром open-on-hover.
|
|
12
|
+
* @en Delay in milliseconds before the component opens. Works only together with open-on-hover.
|
|
13
|
+
*/
|
|
8
14
|
openDelay: [Number, String]
|
|
9
15
|
},
|
|
10
16
|
"delay"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDelay.js","sources":["../../../../../src/composables/useDelay/useDelay.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { defer } from '@cds/utils';\nimport type { ExtractPublicPropTypes } from 'vue';\n\n/**\n * A variable that defines delay-related properties for a component.\n *\n * The `defineDelayProps` variable is generated using the `propsFactory` function\n * and is used to specify props that relate to opening and closing delays.\n *\n * Properties:\n * - `closeDelay`: Specifies the amount of time (in milliseconds or as a string) to delay before closing.\n * Accepts values of type `Number` or `String`.\n * - `openDelay`: Specifies the amount of time (in milliseconds or as a string) to delay before opening.\n * Accepts values of type `Number` or `String`.\n *\n * These properties can be useful for controlling transition timings or for UI/UX scenarios\n * where timed delays are required for components such as tooltips, modals, or menus.\n */\nexport const defineDelayProps = propsFactory(\n {\n
|
|
1
|
+
{"version":3,"file":"useDelay.js","sources":["../../../../../src/composables/useDelay/useDelay.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { defer } from '@cds/utils';\nimport type { ExtractPublicPropTypes } from 'vue';\n\n/**\n * A variable that defines delay-related properties for a component.\n *\n * The `defineDelayProps` variable is generated using the `propsFactory` function\n * and is used to specify props that relate to opening and closing delays.\n *\n * Properties:\n * - `closeDelay`: Specifies the amount of time (in milliseconds or as a string) to delay before closing.\n * Accepts values of type `Number` or `String`.\n * - `openDelay`: Specifies the amount of time (in milliseconds or as a string) to delay before opening.\n * Accepts values of type `Number` or `String`.\n *\n * These properties can be useful for controlling transition timings or for UI/UX scenarios\n * where timed delays are required for components such as tooltips, modals, or menus.\n */\nexport const defineDelayProps = propsFactory(\n {\n /**\n * Время ожидания в миллисекундах перед закрытием компонента. Работает только с параметром open-on-hover.\n * @en Delay in milliseconds before the component closes. Works only together with open-on-hover.\n */\n closeDelay: [Number, String],\n /**\n * Время ожидания в миллисекундах перед открытием компонента. Работает только с параметром open-on-hover.\n * @en Delay in milliseconds before the component opens. Works only together with open-on-hover.\n */\n openDelay: [Number, String]\n },\n 'delay'\n);\n\nexport interface DelayProps extends ExtractPublicPropTypes<ReturnType<typeof defineDelayProps>> {}\n\n/**\n * Manages delays for opening and closing events with optional callbacks.\n *\n * @param {DelayProps} props - Configurations for delay timings including `openDelay` and `closeDelay`.\n * @param {(value: boolean) => void} [cb] - Optional callback function executed when the delay completes. The callback is invoked with a boolean indicating the event type (`true` for opening, `false` for closing).\n * @return {Object} An object containing the following methods:\n * - `clearDelay`: A function to clear the currently scheduled delay.\n * - `runOpenDelay`: A function to initiate the open delay sequence.\n * - `runCloseDelay`: A function to initiate the close delay sequence with optional minimum delay options.\n */\nexport function useDelay(props: DelayProps, cb?: (value: boolean) => void) {\n let clearDelay: () => void = () => {};\n\n function runDelay(isOpening: boolean, options?: { minDelay: number }) {\n clearDelay?.();\n\n const delay = isOpening ? props.openDelay : props.closeDelay;\n\n const normalizedDelay = Math.max(options?.minDelay ?? 0, Number(delay ?? 0));\n\n return new Promise((resolve) => {\n clearDelay = defer(normalizedDelay, () => {\n cb?.(isOpening);\n resolve(isOpening);\n });\n });\n }\n\n function runOpenDelay() {\n return runDelay(true);\n }\n\n function runCloseDelay(options?: { minDelay: number }) {\n return runDelay(false, options);\n }\n\n return {\n clearDelay,\n runOpenDelay,\n runCloseDelay\n };\n}\n"],"names":[],"mappings":";;AAmBO,MAAM,mBAAmB;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,YAAY,CAAC,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAK3B,WAAW,CAAC,QAAQ,MAAM;AAAA,EAAA;AAAA,EAE5B;AACF;AAcO,SAAS,SAAS,OAAmB,IAA+B;AACzE,MAAI,aAAyB,MAAM;AAAA,EAAC;AAEpC,WAAS,SAAS,WAAoB,SAAgC;AACpE;AAEA,UAAM,QAAQ,YAAY,MAAM,YAAY,MAAM;AAElD,UAAM,kBAAkB,KAAK,KAAI,mCAAS,aAAY,GAAG,OAAO,SAAS,CAAC,CAAC;AAE3E,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,mBAAa,MAAM,iBAAiB,MAAM;AACxC,iCAAK;AACL,gBAAQ,SAAS;AAAA,MACnB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,WAAS,eAAe;AACtB,WAAO,SAAS,IAAI;AAAA,EACtB;AAEA,WAAS,cAAc,SAAgC;AACrD,WAAO,SAAS,OAAO,OAAO;AAAA,EAChC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
|
|
@@ -3,32 +3,50 @@ import { u as convertToUnit } from "../../utils/helpers.js";
|
|
|
3
3
|
import { computed } from "vue";
|
|
4
4
|
const defineDimensionsProps = propsFactory(
|
|
5
5
|
{
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Ширина компонента
|
|
8
|
+
* @en Component width
|
|
9
|
+
*/
|
|
7
10
|
width: {
|
|
8
11
|
type: [Number, String],
|
|
9
12
|
default: void 0
|
|
10
13
|
},
|
|
11
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Высота компонента
|
|
16
|
+
* @en Component height
|
|
17
|
+
*/
|
|
12
18
|
height: {
|
|
13
19
|
type: [Number, String],
|
|
14
20
|
default: void 0
|
|
15
21
|
},
|
|
16
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Максимальная ширина компонента
|
|
24
|
+
* @en Maximum component width
|
|
25
|
+
*/
|
|
17
26
|
maxWidth: {
|
|
18
27
|
type: [Number, String],
|
|
19
28
|
default: void 0
|
|
20
29
|
},
|
|
21
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Максимальная высота компонента
|
|
32
|
+
* @en Maximum component height
|
|
33
|
+
*/
|
|
22
34
|
maxHeight: {
|
|
23
35
|
type: [Number, String],
|
|
24
36
|
default: void 0
|
|
25
37
|
},
|
|
26
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Минимальная ширина компонента
|
|
40
|
+
* @en Minimum component width
|
|
41
|
+
*/
|
|
27
42
|
minWidth: {
|
|
28
43
|
type: [Number, String],
|
|
29
44
|
default: void 0
|
|
30
45
|
},
|
|
31
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Минимальная высота компонента
|
|
48
|
+
* @en Minimum component height
|
|
49
|
+
*/
|
|
32
50
|
minHeight: {
|
|
33
51
|
type: [Number, String],
|
|
34
52
|
default: void 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDimensions.js","sources":["../../../../../src/composables/useDimensions/useDimensions.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { convertToUnit } from '@cds/utils';\nimport { computed, type ExtractPublicPropTypes, type PropType } from 'vue';\n\n/**\n * Factory function for defining dimension-related properties for components.\n *\n * The `defineDimensionsProps` variable provides a set of reusable properties\n * to specify the width, height, and constraints (min/max width and height) of a component.\n * These properties support both numerical values and string values (e.g., CSS units like \"px\", \"%\", \"em\").\n *\n * The following properties are included:\n * - `width`: Represents the width of the component.\n * - `height`: Represents the height of the component.\n * - `maxWidth`: Defines the maximum allowable width for the component.\n * - `maxHeight`: Defines the maximum allowable height for the component.\n * - `minWidth`: Defines the minimum allowable width for the component.\n * - `minHeight`: Defines the minimum allowable height for the component.\n *\n * All properties accept values of type `number | string` and default to `undefined`.\n *\n * This set of properties can be used to control and enforce dimension constraints\n * for UI components dynamically at runtime.\n *\n * @variable defineDimensionsProps\n */\nexport const defineDimensionsProps = propsFactory(\n {\n
|
|
1
|
+
{"version":3,"file":"useDimensions.js","sources":["../../../../../src/composables/useDimensions/useDimensions.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { convertToUnit } from '@cds/utils';\nimport { computed, type ExtractPublicPropTypes, type PropType } from 'vue';\n\n/**\n * Factory function for defining dimension-related properties for components.\n *\n * The `defineDimensionsProps` variable provides a set of reusable properties\n * to specify the width, height, and constraints (min/max width and height) of a component.\n * These properties support both numerical values and string values (e.g., CSS units like \"px\", \"%\", \"em\").\n *\n * The following properties are included:\n * - `width`: Represents the width of the component.\n * - `height`: Represents the height of the component.\n * - `maxWidth`: Defines the maximum allowable width for the component.\n * - `maxHeight`: Defines the maximum allowable height for the component.\n * - `minWidth`: Defines the minimum allowable width for the component.\n * - `minHeight`: Defines the minimum allowable height for the component.\n *\n * All properties accept values of type `number | string` and default to `undefined`.\n *\n * This set of properties can be used to control and enforce dimension constraints\n * for UI components dynamically at runtime.\n *\n * @variable defineDimensionsProps\n */\nexport const defineDimensionsProps = propsFactory(\n {\n /**\n * Ширина компонента\n * @en Component width\n */\n width: {\n type: [Number, String] as PropType<string | number>,\n default: undefined\n },\n /**\n * Высота компонента\n * @en Component height\n */\n height: {\n type: [Number, String] as PropType<string | number>,\n default: undefined\n },\n /**\n * Максимальная ширина компонента\n * @en Maximum component width\n */\n maxWidth: {\n type: [Number, String] as PropType<string | number>,\n default: undefined\n },\n /**\n * Максимальная высота компонента\n * @en Maximum component height\n */\n maxHeight: {\n type: [Number, String] as PropType<string | number>,\n default: undefined\n },\n /**\n * Минимальная ширина компонента\n * @en Minimum component width\n */\n minWidth: {\n type: [Number, String] as PropType<string | number>,\n default: undefined\n },\n /**\n * Минимальная высота компонента\n * @en Minimum component height\n */\n minHeight: {\n type: [Number, String] as PropType<string | number>,\n default: undefined\n }\n },\n 'dimensions'\n);\n\nexport type DimensionsProps = ExtractPublicPropTypes<ReturnType<typeof defineDimensionsProps>>;\n\n/**\n * Computes and provides the dimension-related styles based on the provided properties.\n *\n * @param {DimensionsProps} props - An object containing dimension properties such as\n * width, height, maxWidth, maxHeight, minWidth, and minHeight.\n * These properties can be specified as strings or numbers.\n * @return {Object} An object containing the computed `dimensionStyles`, which includes\n * the CSS styles derived from the provided dimension properties.\n */\nexport function useDimensions(props: DimensionsProps) {\n const dimensionStyles = computed(() => {\n const styles: Record<string, any> = {};\n\n const width = convertToUnit(props.width);\n const height = convertToUnit(props.height);\n const maxWidth = convertToUnit(props.maxWidth);\n const maxHeight = convertToUnit(props.maxHeight);\n const minWidth = convertToUnit(props.minWidth);\n const minHeight = convertToUnit(props.minHeight);\n\n if (width != null) styles.width = width;\n if (height != null) styles.height = height;\n if (maxWidth != null) styles.maxWidth = maxWidth;\n if (maxHeight != null) styles.maxHeight = maxHeight;\n if (minWidth != null) styles.minWidth = minWidth;\n if (minHeight != null) styles.minHeight = minHeight;\n\n return styles;\n });\n\n return { dimensionStyles };\n}\n"],"names":[],"mappings":";;;AA0BO,MAAM,wBAAwB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,QAAQ;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,UAAU;AAAA,MACR,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,WAAW;AAAA,MACT,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,UAAU;AAAA,MACR,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,WAAW;AAAA,MACT,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AACF;AAaO,SAAS,cAAc,OAAwB;AACpD,QAAM,kBAAkB,SAAS,MAAM;AACrC,UAAM,SAA8B,CAAA;AAEpC,UAAM,QAAQ,cAAc,MAAM,KAAK;AACvC,UAAM,SAAS,cAAc,MAAM,MAAM;AACzC,UAAM,WAAW,cAAc,MAAM,QAAQ;AAC7C,UAAM,YAAY,cAAc,MAAM,SAAS;AAC/C,UAAM,WAAW,cAAc,MAAM,QAAQ;AAC7C,UAAM,YAAY,cAAc,MAAM,SAAS;AAE/C,QAAI,SAAS,KAAM,QAAO,QAAQ;AAClC,QAAI,UAAU,KAAM,QAAO,SAAS;AACpC,QAAI,YAAY,KAAM,QAAO,WAAW;AACxC,QAAI,aAAa,KAAM,QAAO,YAAY;AAC1C,QAAI,YAAY,KAAM,QAAO,WAAW;AACxC,QAAI,aAAa,KAAM,QAAO,YAAY;AAE1C,WAAO;AAAA,EACT,CAAC;AAED,SAAO,EAAE,gBAAA;AACX;"}
|
|
@@ -3,7 +3,10 @@ import { p as propsFactory } from "../../core/propsFactory.js";
|
|
|
3
3
|
import { computed, toRef, toValue } from "vue";
|
|
4
4
|
const defineDirectionProps = propsFactory(
|
|
5
5
|
{
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Переключение между горизонтальным или вертикальным отображением.
|
|
8
|
+
* @en Switches the component between horizontal and vertical layout.
|
|
9
|
+
*/
|
|
7
10
|
direction: {
|
|
8
11
|
type: String,
|
|
9
12
|
default: "horizontal",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDirection.js","sources":["../../../../../src/composables/useDirection/useDirection.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory } from '@cds/core';\nimport { computed, type ExtractPublicPropTypes, type PropType, toRef, toValue } from 'vue';\n\n/**\n * Factory function to define properties for directional components.\n *\n * @const {object} defineDirectionProps\n *\n * @property {string} direction\n * Specifies the orientation of the component. Accepts either 'horizontal' or 'vertical'.\n * Defaults to 'horizontal'. Validates against the allowed values 'horizontal' and 'vertical'.\n */\nexport const defineDirectionProps = propsFactory(\n {\n
|
|
1
|
+
{"version":3,"file":"useDirection.js","sources":["../../../../../src/composables/useDirection/useDirection.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory } from '@cds/core';\nimport { computed, type ExtractPublicPropTypes, type PropType, toRef, toValue } from 'vue';\n\n/**\n * Factory function to define properties for directional components.\n *\n * @const {object} defineDirectionProps\n *\n * @property {string} direction\n * Specifies the orientation of the component. Accepts either 'horizontal' or 'vertical'.\n * Defaults to 'horizontal'. Validates against the allowed values 'horizontal' and 'vertical'.\n */\nexport const defineDirectionProps = propsFactory(\n {\n /**\n * Переключение между горизонтальным или вертикальным отображением.\n * @en Switches the component between horizontal and vertical layout.\n */\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n validator: (value: any) => ['horizontal', 'vertical'].includes(value)\n }\n },\n 'direction'\n);\n\nexport interface DirectionProps extends ExtractPublicPropTypes<ReturnType<typeof defineDirectionProps>> {}\n\n/**\n * Computes and provides direction-related properties based on the given props.\n *\n * @param {DirectionProps} props - The properties containing the current direction configuration.\n * @param {string} [name=getCurrentInstanceName()] - The name of the current instance, defaulting to the current instance name.\n * @return {Object} An object containing the computed direction states and corresponding CSS classes:\n * - `isHorizontal` (`ComputedRef<boolean>`): Indicates if the direction is horizontal.\n * - `isVertical` (`ComputedRef<boolean>`): Indicates if the direction is vertical.\n * - `directionClasses` (`Ref<Object>`): A reference to an object containing CSS class mappings for the direction.\n */\nexport function useDirection(props: DirectionProps, name = getCurrentInstanceName()) {\n const isHorizontal = computed(() => props.direction === 'horizontal');\n const isVertical = computed(() => props.direction === 'vertical');\n\n const directionClasses = toRef(() => ({\n [`${name}--${props.direction}`]: toValue(props).direction\n }));\n\n return {\n isHorizontal,\n isVertical,\n directionClasses\n };\n}\n"],"names":[],"mappings":";;;AAYO,MAAM,uBAAuB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAAC,UAAe,CAAC,cAAc,UAAU,EAAE,SAAS,KAAK;AAAA,IAAA;AAAA,EACtE;AAAA,EAEF;AACF;AAcO,SAAS,aAAa,OAAuB,OAAO,0BAA0B;AACnF,QAAM,eAAe,SAAS,MAAM,MAAM,cAAc,YAAY;AACpE,QAAM,aAAa,SAAS,MAAM,MAAM,cAAc,UAAU;AAEhE,QAAM,mBAAmB,MAAM,OAAO;AAAA,IACpC,CAAC,GAAG,IAAI,KAAK,MAAM,SAAS,EAAE,GAAG,QAAQ,KAAK,EAAE;AAAA,EAAA,EAChD;AAEF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
|
|
@@ -3,7 +3,10 @@ import { p as propsFactory } from "../../core/propsFactory.js";
|
|
|
3
3
|
import { toRef, toValue } from "vue";
|
|
4
4
|
const defineDisabledProps = propsFactory(
|
|
5
5
|
{
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Заблокированное состояние
|
|
8
|
+
* @en Disabled state
|
|
9
|
+
*/
|
|
7
10
|
disabled: {
|
|
8
11
|
type: Boolean,
|
|
9
12
|
default: null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDisabled.js","sources":["../../../../../src/composables/useDisabled/useDisabled.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory } from '@cds/core';\nimport { type ExtractPublicPropTypes, type PropType, toRef, toValue } from 'vue';\n\n/**\n * Factory function for defining properties related to the disabled state.\n *\n * The `defineDisabledProps` object generates a set of props allowing components\n * to handle a disabled state. These props can be used within Vue components\n * to standardize how `disabled` functionality is implemented and applied.\n *\n * @constant {Object} defineDisabledProps - The generated props object for handling the `disabled` state.\n * @property {boolean} disabled - Determines whether the component is in a disabled state. Defaults to `null`.\n */\nexport const defineDisabledProps = propsFactory(\n {\n
|
|
1
|
+
{"version":3,"file":"useDisabled.js","sources":["../../../../../src/composables/useDisabled/useDisabled.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory } from '@cds/core';\nimport { type ExtractPublicPropTypes, type PropType, toRef, toValue } from 'vue';\n\n/**\n * Factory function for defining properties related to the disabled state.\n *\n * The `defineDisabledProps` object generates a set of props allowing components\n * to handle a disabled state. These props can be used within Vue components\n * to standardize how `disabled` functionality is implemented and applied.\n *\n * @constant {Object} defineDisabledProps - The generated props object for handling the `disabled` state.\n * @property {boolean} disabled - Determines whether the component is in a disabled state. Defaults to `null`.\n */\nexport const defineDisabledProps = propsFactory(\n {\n /**\n * Заблокированное состояние\n * @en Disabled state\n */\n disabled: {\n type: Boolean as PropType<boolean | null>,\n default: null\n }\n },\n 'disabled'\n);\n\nexport type DisabledProps = ExtractPublicPropTypes<ReturnType<typeof defineDisabledProps>>;\n\n/**\n * A composable function that generates a reactive class mapping for a disabled state.\n *\n * @param {DisabledProps} props - An object containing properties related to the disabled state.\n * @param {string} [name=getCurrentInstanceName()] - The name of the current instance, used to prefix the class name.\n * @return {{ disabledClasses: Object }} An object containing a reactive class mapping for the disabled state.\n */\nexport function useDisabled(props: DisabledProps, name = getCurrentInstanceName()) {\n const disabledClasses = toRef(() => ({\n [`${name}--disabled`]: toValue(props).disabled\n }));\n\n return { disabledClasses };\n}\n"],"names":[],"mappings":";;;AAaO,MAAM,sBAAsB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AACF;AAWO,SAAS,YAAY,OAAsB,OAAO,0BAA0B;AACjF,QAAM,kBAAkB,MAAM,OAAO;AAAA,IACnC,CAAC,GAAG,IAAI,YAAY,GAAG,QAAQ,KAAK,EAAE;AAAA,EAAA,EACtC;AAEF,SAAO,EAAE,gBAAA;AACX;"}
|
|
@@ -10,6 +10,7 @@ const defineDisplayProps = propsFactory(
|
|
|
10
10
|
* Если значение равно true, компонент будет отображаться в режиме для Mobile.
|
|
11
11
|
* Если значение равно false, компонент будет отображаться в режиме для Desktop.
|
|
12
12
|
* Если значение равно null, режим будет зависеть от текущего Breakpoint.
|
|
13
|
+
* @en Determines the display mode of the component: `true` renders it in mobile mode, `false` in desktop mode, `null` makes the mode depend on the current breakpoint.
|
|
13
14
|
*/
|
|
14
15
|
mobile: {
|
|
15
16
|
type: Boolean,
|
|
@@ -17,6 +18,7 @@ const defineDisplayProps = propsFactory(
|
|
|
17
18
|
},
|
|
18
19
|
/** Указывает точку преломления, при которой отображение будет переключаться в мобильный режим.
|
|
19
20
|
* Может быть числом (например, 600) или строкой, соответствующей одному из предопределенных Breakpoint (например, 'xs', 'sm', 'md', 'lg', 'xl').
|
|
21
|
+
* @en Sets the breakpoint at which the component switches to mobile mode. Accepts a number (for example, 600) or the name of a predefined breakpoint (`xs`, `sm`, `md`, `lg`, `xl`).
|
|
20
22
|
*/
|
|
21
23
|
mobileBreakpoint: [Number, String]
|
|
22
24
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDisplay.js","sources":["../../../../../src/composables/useDisplay/useDisplay.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory } from '@cds/core';\nimport { IN_BROWSER } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n onScopeDispose,\n type PropType,\n reactive,\n shallowRef,\n toRef,\n toRefs,\n unref,\n watchEffect\n} from 'vue';\n\nimport { DisplaySymbol } from './internal/useDisplay.constants';\nimport { getClientHeight, getClientWidth, getPlatform, parseDisplayOptions } from './internal/useDisplay.helpers';\nimport type { Breakpoint, DisplayInstance, DisplayOptions, SSROptions } from './internal/useDisplay.types';\n\n/**\n * Factory function for defining display-related properties.\n *\n * @typedef {Object} DisplayProps\n * @property {boolean | null} mobile - Determines if the display should adapt to mobile devices. Defaults to `false`.\n * @property {number | string} [mobileBreakpoint] - Specifies the breakpoint at which the display will switch to mobile view. Accepts a number or a named breakpoint.\n *\n * @param {string} namespace - The namespace for the property definitions.\n * @returns {DisplayProps} An object containing properties relevant to display configurations.\n */\nexport const defineDisplayProps = propsFactory(\n {\n /** Определяет режим отображения компонента:\n * Если значение равно true, компонент будет отображаться в режиме для Mobile.\n * Если значение равно false, компонент будет отображаться в режиме для Desktop.\n * Если значение равно null, режим будет зависеть от текущего Breakpoint.\n */\n mobile: {\n type: Boolean as PropType<boolean | null>,\n default: false\n },\n /** Указывает точку преломления, при которой отображение будет переключаться в мобильный режим.\n * Может быть числом (например, 600) или строкой, соответствующей одному из предопределенных Breakpoint (например, 'xs', 'sm', 'md', 'lg', 'xl').\n */\n mobileBreakpoint: [Number, String] as PropType<number | Breakpoint>\n },\n 'display'\n);\n\nexport interface DisplayProps extends ExtractPublicPropTypes<ReturnType<typeof defineDisplayProps>> {}\n\n/**\n * Creates a display instance with reactive values for screen dimensions and platform information.\n *\n * @param {DisplayOptions} [options] Optional settings for display configurations, including thresholds and mobile breakpoints.\n * @param {SSROptions} [ssr] Optional server-side rendering configurations for initial screen dimensions and platform data.\n * @return {DisplayInstance} A reactive display instance containing screen dimension, breakpoint, and platform information.\n */\nexport function createDisplay(options?: DisplayOptions, ssr?: SSROptions): DisplayInstance {\n const { thresholds, mobileBreakpoint } = parseDisplayOptions(options);\n\n const width = shallowRef(getClientWidth(ssr));\n const height = shallowRef(getClientHeight(ssr));\n const platform = shallowRef(getPlatform(ssr));\n\n const screenWidth = shallowRef(IN_BROWSER ? window.innerWidth : 0);\n const screenHeight = shallowRef(IN_BROWSER ? window.innerHeight : 0);\n\n const state = reactive<DisplayInstance>({} as DisplayInstance);\n\n watchEffect(() => {\n const xs = width.value < thresholds.sm;\n const sm = width.value < thresholds.md && !xs;\n const md = width.value < thresholds.lg && !(sm || xs);\n const lg = width.value < thresholds.xl && !(md || sm || xs);\n const xl = width.value >= thresholds.xl;\n\n const name = xs ? 'xs' : sm ? 'sm' : md ? 'md' : lg ? 'lg' : 'xl';\n const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint];\n const mobile = width.value < breakpointValue;\n\n state.xs = xs;\n state.sm = sm;\n state.md = md;\n state.lg = lg;\n state.xl = xl;\n state.smUp = !xs;\n state.mdUp = !(xs || sm);\n state.lgUp = !(xs || sm || md);\n state.xlUp = !(xs || sm || md || lg);\n state.smDown = !(md || lg || xl);\n state.mdDown = !(lg || xl);\n state.lgDown = !xl;\n state.xlDown = true;\n state.name = name;\n state.height = height.value;\n state.width = width.value;\n state.mobile = mobile;\n state.mobileBreakpoint = mobileBreakpoint;\n state.platform = platform.value;\n state.thresholds = thresholds;\n state.screenWidth = screenWidth.value;\n state.screenHeight = screenHeight.value;\n });\n\n if (IN_BROWSER) {\n window.addEventListener('resize', updateSize, { passive: true });\n\n onScopeDispose(() => {\n window.removeEventListener('resize', updateSize);\n }, true);\n }\n\n function updateSize() {\n height.value = getClientHeight();\n width.value = getClientWidth();\n }\n\n function update() {\n updateSize();\n platform.value = getPlatform();\n }\n\n return { ...toRefs(state), update, ssr: !!ssr };\n}\n\n/**\n * A composable function that manages and provides display-related utilities,\n * including responsiveness and custom mobile breakpoint handling.\n *\n * @param {DisplayProps} props - The configuration object containing the display properties,\n * such as `mobile` and `mobileBreakpoint`.\n * @param {string} [name=getCurrentInstanceName()] - The name of the current instance. If not provided,\n * it defaults to the result of the `getCurrentInstanceName` function.\n * @return {object} An object containing display-related utilities:\n * - `display`: The injected display object.\n * - `displayClasses`: A reactive reference to display-specific classes, like mobile-specific classes.\n * - `mobile`: A reactive computed property indicating whether the display is in a mobile state\n * based on the provided breakpoints or other criteria in `props`.\n * @throws {Error} If the injection for `cds:display` is not found.\n */\nexport function useDisplay(props: DisplayProps = { mobile: null }, name = getCurrentInstanceName()) {\n const display = inject(DisplaySymbol);\n\n if (!display) {\n throw new Error('[CDS] Could not find `cds:display` injection key. Are you missing the createDisplay function?');\n }\n\n const mobile = computed(() => {\n if (props.mobile) {\n return true;\n } else if (typeof props.mobileBreakpoint === 'number') {\n return display.width.value < props.mobileBreakpoint;\n } else if (props.mobileBreakpoint) {\n return display.width.value < display.thresholds.value[props.mobileBreakpoint];\n } else if (props.mobile === null) {\n return display.mobile.value;\n } else {\n return false;\n }\n });\n\n const displayClasses = toRef(() => {\n if (!name) return {};\n\n return { [`${name}--mobile`]: unref(mobile) };\n });\n\n return { ...display, displayClasses, mobile };\n}\n"],"names":[],"mappings":";;;;;;AA8BO,MAAM,qBAAqB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"useDisplay.js","sources":["../../../../../src/composables/useDisplay/useDisplay.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory } from '@cds/core';\nimport { IN_BROWSER } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n onScopeDispose,\n type PropType,\n reactive,\n shallowRef,\n toRef,\n toRefs,\n unref,\n watchEffect\n} from 'vue';\n\nimport { DisplaySymbol } from './internal/useDisplay.constants';\nimport { getClientHeight, getClientWidth, getPlatform, parseDisplayOptions } from './internal/useDisplay.helpers';\nimport type { Breakpoint, DisplayInstance, DisplayOptions, SSROptions } from './internal/useDisplay.types';\n\n/**\n * Factory function for defining display-related properties.\n *\n * @typedef {Object} DisplayProps\n * @property {boolean | null} mobile - Determines if the display should adapt to mobile devices. Defaults to `false`.\n * @property {number | string} [mobileBreakpoint] - Specifies the breakpoint at which the display will switch to mobile view. Accepts a number or a named breakpoint.\n *\n * @param {string} namespace - The namespace for the property definitions.\n * @returns {DisplayProps} An object containing properties relevant to display configurations.\n */\nexport const defineDisplayProps = propsFactory(\n {\n /** Определяет режим отображения компонента:\n * Если значение равно true, компонент будет отображаться в режиме для Mobile.\n * Если значение равно false, компонент будет отображаться в режиме для Desktop.\n * Если значение равно null, режим будет зависеть от текущего Breakpoint.\n * @en Determines the display mode of the component: `true` renders it in mobile mode, `false` in desktop mode, `null` makes the mode depend on the current breakpoint.\n */\n mobile: {\n type: Boolean as PropType<boolean | null>,\n default: false\n },\n /** Указывает точку преломления, при которой отображение будет переключаться в мобильный режим.\n * Может быть числом (например, 600) или строкой, соответствующей одному из предопределенных Breakpoint (например, 'xs', 'sm', 'md', 'lg', 'xl').\n * @en Sets the breakpoint at which the component switches to mobile mode. Accepts a number (for example, 600) or the name of a predefined breakpoint (`xs`, `sm`, `md`, `lg`, `xl`).\n */\n mobileBreakpoint: [Number, String] as PropType<number | Breakpoint>\n },\n 'display'\n);\n\nexport interface DisplayProps extends ExtractPublicPropTypes<ReturnType<typeof defineDisplayProps>> {}\n\n/**\n * Creates a display instance with reactive values for screen dimensions and platform information.\n *\n * @param {DisplayOptions} [options] Optional settings for display configurations, including thresholds and mobile breakpoints.\n * @param {SSROptions} [ssr] Optional server-side rendering configurations for initial screen dimensions and platform data.\n * @return {DisplayInstance} A reactive display instance containing screen dimension, breakpoint, and platform information.\n */\nexport function createDisplay(options?: DisplayOptions, ssr?: SSROptions): DisplayInstance {\n const { thresholds, mobileBreakpoint } = parseDisplayOptions(options);\n\n const width = shallowRef(getClientWidth(ssr));\n const height = shallowRef(getClientHeight(ssr));\n const platform = shallowRef(getPlatform(ssr));\n\n const screenWidth = shallowRef(IN_BROWSER ? window.innerWidth : 0);\n const screenHeight = shallowRef(IN_BROWSER ? window.innerHeight : 0);\n\n const state = reactive<DisplayInstance>({} as DisplayInstance);\n\n watchEffect(() => {\n const xs = width.value < thresholds.sm;\n const sm = width.value < thresholds.md && !xs;\n const md = width.value < thresholds.lg && !(sm || xs);\n const lg = width.value < thresholds.xl && !(md || sm || xs);\n const xl = width.value >= thresholds.xl;\n\n const name = xs ? 'xs' : sm ? 'sm' : md ? 'md' : lg ? 'lg' : 'xl';\n const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint];\n const mobile = width.value < breakpointValue;\n\n state.xs = xs;\n state.sm = sm;\n state.md = md;\n state.lg = lg;\n state.xl = xl;\n state.smUp = !xs;\n state.mdUp = !(xs || sm);\n state.lgUp = !(xs || sm || md);\n state.xlUp = !(xs || sm || md || lg);\n state.smDown = !(md || lg || xl);\n state.mdDown = !(lg || xl);\n state.lgDown = !xl;\n state.xlDown = true;\n state.name = name;\n state.height = height.value;\n state.width = width.value;\n state.mobile = mobile;\n state.mobileBreakpoint = mobileBreakpoint;\n state.platform = platform.value;\n state.thresholds = thresholds;\n state.screenWidth = screenWidth.value;\n state.screenHeight = screenHeight.value;\n });\n\n if (IN_BROWSER) {\n window.addEventListener('resize', updateSize, { passive: true });\n\n onScopeDispose(() => {\n window.removeEventListener('resize', updateSize);\n }, true);\n }\n\n function updateSize() {\n height.value = getClientHeight();\n width.value = getClientWidth();\n }\n\n function update() {\n updateSize();\n platform.value = getPlatform();\n }\n\n return { ...toRefs(state), update, ssr: !!ssr };\n}\n\n/**\n * A composable function that manages and provides display-related utilities,\n * including responsiveness and custom mobile breakpoint handling.\n *\n * @param {DisplayProps} props - The configuration object containing the display properties,\n * such as `mobile` and `mobileBreakpoint`.\n * @param {string} [name=getCurrentInstanceName()] - The name of the current instance. If not provided,\n * it defaults to the result of the `getCurrentInstanceName` function.\n * @return {object} An object containing display-related utilities:\n * - `display`: The injected display object.\n * - `displayClasses`: A reactive reference to display-specific classes, like mobile-specific classes.\n * - `mobile`: A reactive computed property indicating whether the display is in a mobile state\n * based on the provided breakpoints or other criteria in `props`.\n * @throws {Error} If the injection for `cds:display` is not found.\n */\nexport function useDisplay(props: DisplayProps = { mobile: null }, name = getCurrentInstanceName()) {\n const display = inject(DisplaySymbol);\n\n if (!display) {\n throw new Error('[CDS] Could not find `cds:display` injection key. Are you missing the createDisplay function?');\n }\n\n const mobile = computed(() => {\n if (props.mobile) {\n return true;\n } else if (typeof props.mobileBreakpoint === 'number') {\n return display.width.value < props.mobileBreakpoint;\n } else if (props.mobileBreakpoint) {\n return display.width.value < display.thresholds.value[props.mobileBreakpoint];\n } else if (props.mobile === null) {\n return display.mobile.value;\n } else {\n return false;\n }\n });\n\n const displayClasses = toRef(() => {\n if (!name) return {};\n\n return { [`${name}--mobile`]: unref(mobile) };\n });\n\n return { ...display, displayClasses, mobile };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,33 @@ import { ac as wrapInArray, M as getPropertyFromItem } from "../../utils/helpers
|
|
|
3
3
|
import { shallowRef, computed, unref, watchEffect } from "vue";
|
|
4
4
|
const defineFilterProps = propsFactory(
|
|
5
5
|
{
|
|
6
|
+
/**
|
|
7
|
+
* Своя функция фильтрации значений. Получает значение, поисковый запрос и элемент, возвращает совпадение или `-1`
|
|
8
|
+
* @en Your own value filtering function. Receives the value, the search query and the item, returns a match or `-1`
|
|
9
|
+
*/
|
|
6
10
|
customFilter: Function,
|
|
11
|
+
/**
|
|
12
|
+
* Отдельные функции фильтрации для конкретных ключей элемента — объект вида `{ ключ: функция }`
|
|
13
|
+
* @en Separate filtering functions for specific item keys — an object of the form `{ key: function }`
|
|
14
|
+
*/
|
|
7
15
|
customKeyFilter: Object,
|
|
16
|
+
/**
|
|
17
|
+
* Ключи элемента, по которым идёт поиск. По умолчанию фильтрация идёт по заголовку элемента
|
|
18
|
+
* @en Item keys the search runs over. By default filtering goes by the item title
|
|
19
|
+
*/
|
|
8
20
|
filterKeys: [Array, String],
|
|
21
|
+
/**
|
|
22
|
+
* Как объединяются результаты `customKeyFilter` и общей фильтрации: пересечением, объединением или заменой
|
|
23
|
+
* @en How the results of `customKeyFilter` and of the general filtering are combined: by intersection, by union or by replacement
|
|
24
|
+
*/
|
|
9
25
|
filterMode: {
|
|
10
26
|
type: String,
|
|
11
27
|
default: "intersection"
|
|
12
28
|
},
|
|
29
|
+
/**
|
|
30
|
+
* Отключает встроенную фильтрацию — список показывается как есть, поиск обрабатывается снаружи
|
|
31
|
+
* @en Turns off the built-in filtering — the list is shown as is, the search is handled outside
|
|
32
|
+
*/
|
|
13
33
|
noFilter: Boolean
|
|
14
34
|
},
|
|
15
35
|
"filter"
|
|
@@ -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":";;;AA+CO,MAAM,oBAAoB;AAAA,EAC/B;AAAA,IACE,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,YAAY,CAAC,OAAO,MAAM;AAAA,IAC1B,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,IAEX,UAAU;AAAA,EAAA;AAAA,EAEZ;AACF;AAmBO,SAAS,UACd,OACA,OACA,OACA,SAIA;AACA,QAAM,gBAAgB,WAAgB,EAAE;AACxC,QAAM,kBAAkB,WAAW,oBAAI,KAAoE;AAC3G,QAAM,mBAAmB;AAAA,IAAS,MAC6D,MAAM,KAAK;AAAA,EAAA;AAG1G,cAAY,MAAM;AAChB,UAAM,SAAS,OAAO,UAAU,aAAa,MAAA,IAAU,MAAM,KAAK;AAClE,UAAM,WAAW,OAAO,WAAW,YAAY,OAAO,WAAW,WAAW,KAAK,OAAO,MAAM;AAE9F,UAAM,UAAU,YAAY,iBAAiB,OAAO,UAAU;AAAA,MAC5D,iBAAiB;AAAA,QACf,GAAG,MAAM;AAAA,QACT,GAAG,MAAM,mCAAS,eAAe;AAAA,MAAA;AAAA,MAEnC,SAAS,MAAM;AAAA,MACf,YAAY,MAAM;AAAA,MAClB,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,IAAA,CACjB;AAED,UAAM,gBAAgB,MAAM,KAAK;AAEjC,UAAM,iBAAkD,CAAA;AACxD,UAAM,uCAA0D,IAAA;AAChE,YAAQ,QAAQ,CAAC,EAAE,OAAO,cAAc;AACtC,YAAM,OAAO,cAAc,KAAK;AAChC,qBAAe,KAAK,IAAI;AACxB,UAAI,KAAK,UAAU,QAAW;AAC5B,yBAAiB,IAAI,KAAK,OAAO,OAAO;AAAA,MAC1C;AAAA,IACF,CAAC;AACD,kBAAc,QAAQ;AACtB,oBAAgB,QAAQ;AAAA,EAC1B,CAAC;AAED,WAAS,WAAW,MAAS;AAC3B,WAAO,gBAAgB,MAAM,IAAI,KAAK,KAAK;AAAA,EAC7C;AAEA,SAAO,EAAE,eAAe,iBAAiB,WAAA;AAC3C;AAkBO,MAAM,gBAAgC,CAAC,OAAO,OAAO,UAAU;AACpE,MAAI,SAAS,QAAQ,SAAS,KAAM,QAAO;AAC3C,MAAI,CAAC,MAAM,OAAQ,QAAO;AAE1B,UAAQ,MAAM,SAAA,EAAW,kBAAA;AACzB,UAAQ,MAAM,SAAA,EAAW,kBAAA;AAEzB,QAAM,SAAS,CAAA;AACf,MAAI,MAAM,MAAM,QAAQ,KAAK;AAC7B,SAAO,CAAC,KAAK;AACX,WAAO,KAAK,CAAC,KAAK,MAAM,MAAM,MAAM,CAAU;AAE9C,UAAM,MAAM,QAAQ,OAAO,MAAM,MAAM,MAAM;AAAA,EAC/C;AAEA,SAAO,OAAO,SAAS,SAAS;AAClC;AAmBO,SAAS,YACd,OACA,OACA,SAOA;;AACA,QAAM,QAAwB,CAAA;AAC9B,QAAM,UAAS,mCAAS,YAAW;AACnC,QAAM,QAAO,mCAAS,cAAa,YAAY,QAAQ,UAAU,IAAI;AACrE,QAAM,sBAAsB,OAAO,MAAK,mCAAS,oBAAmB,CAAA,CAAE,EAAE;AAExE,MAAI,EAAC,+BAAO,QAAQ,QAAO;AAE3B,MAAI,iBAAiC,CAAA;AAErC,iBAAe,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC3C,UAAM,CAAC,MAAM,cAAc,IAAI,IAAI,YAAY,MAAM,CAAC,CAAC;AACvD,UAAM,gBAAsE,CAAA;AAC5E,UAAM,iBAAuE,CAAA;AAC7E,QAAI,QAAqB;AAEzB,SAAK,SAAS,sBAAsB,MAAM,EAAC,mCAAS,WAAU;AAC5D,UAAI,uBAAuB;AAE3B,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,KAAK,SAAS,aAAa,KAAK,SAAS,aAAa;AACxD,gBAAI,oBAAe,GAAG,EAAE,MAApB,mBAAuB,UAAS,aAAa,KAAK,SAAS,aAAa;AAC1E,6BAAiB,CAAA;AAAA,UACnB;AAEA,yBAAe,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA,GAAI,MAAM,KAAK,MAAM;AAC9D;AAAA,QACF;AAEA,cAAM,aAAa,QAAQ,OAAO,KAAK,WAAW;AAClD,+BAAuB,WAAW,WAAW;AAE7C,mBAAW,OAAO,YAAY;AAC5B,gBAAM,QAAQ,oBAAoB,aAAa,GAAG;AAClD,gBAAM,aAAY,wCAAS,oBAAT,mBAA2B;AAE7C,kBAAQ,YAAY,UAAU,OAAO,OAAO,IAAI,IAAI,OAAO,OAAO,OAAO,IAAI;AAE7E,cAAI,UAAU,MAAM,UAAU,OAAO;AACnC,gBAAI,UAAW,eAAc,GAAG,IAAI,eAAe,OAAO,KAAK;AAAA,gBAC1D,gBAAe,GAAG,IAAI,eAAe,OAAO,KAAK;AAAA,UACxD,YAAW,mCAAS,gBAAe,SAAS;AAC1C,qBAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF,OAAO;AACL,gBAAQ,OAAO,MAAM,OAAO,IAAI;AAChC,YAAI,UAAU,MAAM,UAAU,OAAO;AACnC,yBAAe,QAAQ,eAAe,OAAO,KAAK;AAAA,QACpD;AAAA,MACF;AAEA,YAAM,uBAAuB,OAAO,KAAK,cAAc,EAAE;AACzD,YAAM,sBAAsB,OAAO,KAAK,aAAa,EAAE;AAEvD,UAAI,CAAC,wBAAwB,CAAC,oBAAqB;AAEnD,WAAI,mCAAS,gBAAe,WAAW,wBAAwB,uBAAuB,CAAC;AACrF;AAEF,WACE,mCAAS,gBAAe,mBACvB,wBAAwB,uBACtB,CAAC,wBAAwB,sBAAsB,KAAK,CAAC;AAExD;AAAA,IACJ;AAEA,QAAI,eAAe,QAAQ;AACzB,YAAM,KAAK,GAAG,cAAc;AAC5B,uBAAiB,CAAA;AAAA,IACnB;AAEA,UAAM,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,gBAAgB,GAAG,cAAA,GAAiB;AAAA,EAC3E;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,OAAoB,OAAqD;AAC/F,MAAI,SAAS,QAAQ,OAAO,UAAU,aAAa,UAAU,GAAI;AACjE,MAAI,OAAO,UAAU,SAAU,QAAO,CAAC,CAAC,OAAO,QAAQ,MAAM,MAAM,CAAC;AACpE,MAAI,MAAM,QAAQ,MAAM,CAAC,CAAC,EAAG,QAAO;AACpC,SAAO,CAAC,KAAK;AACf;"}
|
|
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
|
}
|