@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useForm.js","sources":["../../../../../src/composables/useForm/useForm.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { defineReadonlyProps } from '@cds/composables/useReadonly';\nimport type { ValidationProps } from '@cds/composables/useValidation';\nimport { propsFactory, useProxyModel } from '@cds/core';\nimport { warn } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n markRaw,\n type PropType,\n provide,\n ref,\n shallowRef,\n toRef,\n unref,\n watch\n} from 'vue';\n\nimport { FormKey } from './internal/useForm.constants';\nimport type { FieldValidationResult, FormField } from './internal/useForm.types';\n\nexport const defineFormProps = propsFactory(\n {\n firstFail: Boolean,\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null\n },\n validateOn: {\n type: String as PropType<ValidationProps['validateOn']>,\n default: 'input'\n },\n ...defineDisabledProps(),\n ...defineReadonlyProps()\n },\n 'form'\n);\n\nexport interface FormProps extends ExtractPublicPropTypes<ReturnType<typeof defineFormProps>> {}\n\nexport function createForm(props: FormProps) {\n const model = useProxyModel(props, 'modelValue');\n\n const isDisabled = toRef(() => props.disabled);\n const isReadonly = toRef(() => props.readonly);\n const isValidating = shallowRef(false);\n const items = ref<FormField[]>([]);\n const errors = ref<FieldValidationResult[]>([]);\n\n async function validate() {\n const results = [];\n let valid = true;\n\n errors.value = [];\n isValidating.value = true;\n\n for (const item of unref(items)) {\n const itemErrorMessages = await item.validate();\n\n if (itemErrorMessages.length > 0) {\n valid = false;\n\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages\n });\n }\n\n if (!valid && props.firstFail) break;\n }\n\n errors.value = results;\n isValidating.value = false;\n\n return { valid, errors: unref(errors) };\n }\n\n function reset() {\n unref(items).forEach((item) => item.reset());\n }\n\n function resetValidation() {\n unref(items).forEach((item) => item.resetValidation());\n }\n\n watch(\n items,\n () => {\n let valid = 0;\n let invalid = 0;\n const results = [];\n\n for (const item of unref(items)) {\n if (item.isValid === false) {\n invalid++;\n results.push({\n id: item.id,\n errorMessages: item.errorMessages\n });\n } else if (item.isValid === true) valid++;\n }\n\n errors.value = results;\n model.value = invalid > 0 ? false : valid === unref(items).length ? true : null;\n },\n { deep: true, flush: 'post' }\n );\n\n provide(FormKey, {\n register: ({ id, vm, validate, reset, resetValidation }) => {\n if (unref(items).some((item) => item.id === id)) {\n warn('useForm', `Duplicate input name \"${id}\"`);\n }\n\n items.value.push({\n id,\n validate,\n reset,\n resetValidation,\n vm: markRaw(vm),\n isValid: null,\n errorMessages: []\n });\n },\n unregister: (id) => {\n items.value = unref(items).filter((item) => item.id !== id);\n },\n update: (id, isValid, errorMessages) => {\n const found = unref(items).find((item) => item.id === id);\n\n if (!found) return;\n\n found.isValid = isValid;\n found.errorMessages = errorMessages;\n },\n isDisabled,\n isReadonly,\n isValidating,\n isValid: model,\n items,\n validateOn: toRef(() => props.validateOn)\n });\n\n return {\n errors,\n isDisabled,\n isReadonly,\n isValidating,\n isValid: model,\n items,\n validate,\n reset,\n resetValidation\n };\n}\n\nexport function useForm(props?: { readonly?: boolean | null; disabled?: boolean | null }) {\n const form = inject(FormKey, null);\n return {\n ...form,\n isReadonly: computed(() => !!(props?.readonly ?? unref(form?.isReadonly))),\n isDisabled: computed(() => !!(props?.disabled ?? unref(form?.isDisabled)))\n };\n}\n"],"names":["validate","reset","resetValidation"],"mappings":";;;;;;;AAsBO,MAAM,kBAAkB;AAAA,EAC7B;AAAA,
|
|
1
|
+
{"version":3,"file":"useForm.js","sources":["../../../../../src/composables/useForm/useForm.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { defineReadonlyProps } from '@cds/composables/useReadonly';\nimport type { ValidationProps } from '@cds/composables/useValidation';\nimport { propsFactory, useProxyModel } from '@cds/core';\nimport { warn } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n markRaw,\n type PropType,\n provide,\n ref,\n shallowRef,\n toRef,\n unref,\n watch\n} from 'vue';\n\nimport { FormKey } from './internal/useForm.constants';\nimport type { FieldValidationResult, FormField } from './internal/useForm.types';\n\nexport const defineFormProps = propsFactory(\n {\n /**\n * Останавливает валидацию на первом же невалидном поле — остальные поля не проверяются\n * @en Stops the validation at the very first invalid field — the remaining fields are not checked\n */\n firstFail: Boolean,\n /**\n * Итоговая валидность формы: `true` — все поля прошли проверку, `false` — есть ошибки, `null` — форма ещё не валидировалась\n * @en Resulting validity of the form: `true` — every field passed the check, `false` — there are errors, `null` — the form has not been validated yet\n */\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null\n },\n /**\n * Когда запускать валидацию полей формы: при вводе, потере фокуса или только вручную\n * @en When to run the validation of the form fields: on input, on blur or manually only\n */\n validateOn: {\n type: String as PropType<ValidationProps['validateOn']>,\n default: 'input'\n },\n ...defineDisabledProps(),\n ...defineReadonlyProps()\n },\n 'form'\n);\n\nexport interface FormProps extends ExtractPublicPropTypes<ReturnType<typeof defineFormProps>> {}\n\nexport function createForm(props: FormProps) {\n const model = useProxyModel(props, 'modelValue');\n\n const isDisabled = toRef(() => props.disabled);\n const isReadonly = toRef(() => props.readonly);\n const isValidating = shallowRef(false);\n const items = ref<FormField[]>([]);\n const errors = ref<FieldValidationResult[]>([]);\n\n async function validate() {\n const results = [];\n let valid = true;\n\n errors.value = [];\n isValidating.value = true;\n\n for (const item of unref(items)) {\n const itemErrorMessages = await item.validate();\n\n if (itemErrorMessages.length > 0) {\n valid = false;\n\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages\n });\n }\n\n if (!valid && props.firstFail) break;\n }\n\n errors.value = results;\n isValidating.value = false;\n\n return { valid, errors: unref(errors) };\n }\n\n function reset() {\n unref(items).forEach((item) => item.reset());\n }\n\n function resetValidation() {\n unref(items).forEach((item) => item.resetValidation());\n }\n\n watch(\n items,\n () => {\n let valid = 0;\n let invalid = 0;\n const results = [];\n\n for (const item of unref(items)) {\n if (item.isValid === false) {\n invalid++;\n results.push({\n id: item.id,\n errorMessages: item.errorMessages\n });\n } else if (item.isValid === true) valid++;\n }\n\n errors.value = results;\n model.value = invalid > 0 ? false : valid === unref(items).length ? true : null;\n },\n { deep: true, flush: 'post' }\n );\n\n provide(FormKey, {\n register: ({ id, vm, validate, reset, resetValidation }) => {\n if (unref(items).some((item) => item.id === id)) {\n warn('useForm', `Duplicate input name \"${id}\"`);\n }\n\n items.value.push({\n id,\n validate,\n reset,\n resetValidation,\n vm: markRaw(vm),\n isValid: null,\n errorMessages: []\n });\n },\n unregister: (id) => {\n items.value = unref(items).filter((item) => item.id !== id);\n },\n update: (id, isValid, errorMessages) => {\n const found = unref(items).find((item) => item.id === id);\n\n if (!found) return;\n\n found.isValid = isValid;\n found.errorMessages = errorMessages;\n },\n isDisabled,\n isReadonly,\n isValidating,\n isValid: model,\n items,\n validateOn: toRef(() => props.validateOn)\n });\n\n return {\n /**\n * Ошибки валидации полей формы: идентификатор поля и его сообщения об ошибках.\n * @en Validation errors of the form fields: the identifier of a field and its error messages.\n */\n errors,\n /**\n * Заблокированы ли все поля формы.\n * @en Whether all the fields of the form are blocked.\n */\n isDisabled,\n /**\n * Доступны ли поля формы только для чтения.\n * @en Whether the fields of the form are read-only.\n */\n isReadonly,\n /**\n * Идёт ли сейчас валидация формы.\n * @en Whether the form is being validated right now.\n */\n isValidating,\n /**\n * Валидность формы: `true` — все поля прошли проверку, `false` — есть ошибки, `null` — форма ещё не валидировалась.\n * @en Validity of the form: `true` — every field passed the check, `false` — there are errors, `null` — the form has not been validated yet.\n */\n isValid: model,\n /**\n * Зарегистрированные в форме поля с их состоянием валидации.\n * @en The fields registered in the form together with their validation state.\n */\n items,\n /**\n * Запускает валидацию всех полей формы и возвращает результат вместе со списком ошибок.\n * @en Runs the validation of all the form fields and returns the result together with the list of errors.\n */\n validate,\n /** Сбрасывает значения всех полей формы и их валидацию. */\n reset,\n /**\n * Сбрасывает только состояние валидации, сохраняя введённые значения.\n * @en Resets the validation state only, keeping the entered values.\n */\n resetValidation\n };\n}\n\nexport function useForm(props?: { readonly?: boolean | null; disabled?: boolean | null }) {\n const form = inject(FormKey, null);\n return {\n ...form,\n isReadonly: computed(() => !!(props?.readonly ?? unref(form?.isReadonly))),\n isDisabled: computed(() => !!(props?.disabled ?? unref(form?.isDisabled)))\n };\n}\n"],"names":["validate","reset","resetValidation"],"mappings":"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"}
|
|
@@ -7,20 +7,38 @@ import { w as warn } from "../../utils/dom/console.js";
|
|
|
7
7
|
import { reactive, onMounted, onBeforeUnmount, onUpdated, unref, toRef, provide } from "vue";
|
|
8
8
|
const defineGroupProps = propsFactory(
|
|
9
9
|
{
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Значение выбранных элементов группы
|
|
12
|
+
* @en Value of the selected items of the group
|
|
13
|
+
*/
|
|
11
14
|
modelValue: {
|
|
12
15
|
type: null,
|
|
13
16
|
default: void 0
|
|
14
17
|
},
|
|
15
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Разрешить множественный выбор
|
|
20
|
+
* @en Allows selecting several items at once
|
|
21
|
+
*/
|
|
16
22
|
multiple: Boolean,
|
|
17
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Обязательный выбор хотя бы одного элемента
|
|
25
|
+
* @en Requires at least one item to stay selected
|
|
26
|
+
*/
|
|
18
27
|
required: [Boolean, String],
|
|
19
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Обязательный выбор хотя бы одного элемента
|
|
30
|
+
* @en Requires at least one item to stay selected
|
|
31
|
+
*/
|
|
20
32
|
mandatory: [Boolean, String],
|
|
21
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Максимальное количество выбираемых элементов
|
|
35
|
+
* @en Maximum number of items that can be selected
|
|
36
|
+
*/
|
|
22
37
|
max: Number,
|
|
23
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* CSS класс для выбранного состояния
|
|
40
|
+
* @en CSS class applied in the selected state
|
|
41
|
+
*/
|
|
24
42
|
selectedClass: String,
|
|
25
43
|
...defineDisabledProps()
|
|
26
44
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGroup.js","sources":["../../../../../src/composables/useGroup/useGroup.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { getCurrentInstance, propsFactory, useProxyModel } from '@cds/core';\nimport { deepEqual, type EventProp, findChildrenWithProvide, warn, wrapInArray } from '@cds/utils';\nimport {\n type ComponentInternalInstance,\n type ExtractPublicPropTypes,\n type InjectionKey,\n onBeforeUnmount,\n onMounted,\n onUpdated,\n type PropType,\n provide,\n reactive,\n type Ref,\n toRef,\n unref,\n type UnwrapRef\n} from 'vue';\n\nimport type { GroupItem } from './useGroupItem';\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void;\n unregister: (id: string) => void;\n select: (id: string, value: boolean) => void;\n selected: Ref<Readonly<string[]>>;\n isSelected: (id: string) => boolean;\n selectedClass: Ref<string | undefined>;\n items: Readonly<\n Ref<\n {\n id: string;\n value: unknown;\n disabled: boolean | undefined;\n }[]\n >\n >;\n disabled: Ref<boolean | null | undefined>;\n getItemIndex: (value: unknown) => number;\n prev: () => void;\n next: () => void;\n}\n\nexport const defineGroupProps = propsFactory(\n {\n /** Значение выбранных элементов группы */\n modelValue: {\n type: null,\n default: undefined\n },\n /** Разрешить множественный выбор */\n multiple: Boolean,\n /** Обязательный выбор хотя бы одного элемента */\n required: [Boolean, String] as PropType<boolean | 'force'>,\n /** Обязательный выбор хотя бы одного элемента */\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n /** Максимальное количество выбираемых элементов */\n max: Number,\n /** CSS класс для выбранного состояния */\n selectedClass: String,\n\n ...defineDisabledProps()\n },\n 'group'\n);\nexport interface GroupProps extends ExtractPublicPropTypes<ReturnType<typeof defineGroupProps>> {\n 'onUpdate:modelValue'?: EventProp<[unknown]> | undefined;\n}\n\n/**\n * Provides group management functionality, including item registration, selection, and navigation.\n *\n * @param {GroupProps} props - The props object for configuring the group behavior. It includes options like `modelValue`, `multiple`, `mandatory`, and others.\n * @param {InjectionKey<GroupProvide>} injectKey - The injection key used to provide the group state to child components.\n * @return {GroupProvide} An object containing methods and properties for managing the group state. This includes methods for registering/unregistering items, selecting/deselecting items, navigating through items, and querying item states.\n */\nexport function useGroup(props: GroupProps, injectKey: InjectionKey<GroupProvide>) {\n let isUnmounted = false;\n const items = reactive<GroupItem[]>([]);\n const groupVm = getCurrentInstance('useGroup');\n\n const selected = useProxyModel(\n props,\n 'modelValue',\n [],\n (value) => {\n if (value === undefined) return [];\n return getIds(items, value === null ? [null] : wrapInArray(value));\n },\n (value) => {\n const arr = getValues(items, value);\n return props.multiple ? arr : arr[0];\n }\n );\n\n onMounted(() => {\n forceMandatoryValue();\n });\n\n onBeforeUnmount(() => {\n isUnmounted = true;\n });\n\n onUpdated(() => {\n for (let i = 0; i < items.length; i++) {\n if (items[i].useIndexAsValue) {\n items[i].value = i;\n }\n }\n });\n\n function register(item: GroupItem, vm: ComponentInternalInstance) {\n const unwrapped = item as unknown as UnwrapRef<GroupItem>;\n\n const key = Symbol.for(`${injectKey.description}:id`);\n const children = findChildrenWithProvide(key, groupVm?.vnode);\n const index = children.indexOf(vm);\n\n if (unref(unwrapped.value) === undefined) {\n unwrapped.value = index;\n unwrapped.useIndexAsValue = true;\n }\n\n if (index > -1) {\n items.splice(index, 0, unwrapped);\n } else {\n items.push(unwrapped);\n }\n }\n\n function unregister(id: string) {\n if (isUnmounted) return;\n\n forceMandatoryValue();\n\n const index = items.findIndex((item) => item.id === id);\n items.splice(index, 1);\n }\n\n function forceMandatoryValue() {\n const item = items.find((item) => !item.disabled);\n const forceMandatory = props.mandatory === 'force' || props.required === 'force';\n\n if (item && forceMandatory && !unref(selected).length) {\n selected.value = [item.id];\n }\n }\n\n function select(id: string, value?: boolean) {\n const item = items.find((item) => item.id === id);\n const isMandatory = props.mandatory || props.required;\n\n if (value && item?.disabled) return;\n\n if (props.multiple) {\n const internalValue = unref(selected).slice();\n const index = internalValue.findIndex((v) => v === id);\n const isSelected = ~index;\n\n value = value ?? !isSelected;\n\n if (isSelected && isMandatory && internalValue.length <= 1) return;\n if (!isSelected && props.max != null && internalValue.length + 1 > props.max) return;\n\n if (index < 0 && value) internalValue.push(id);\n else if (index >= 0 && !value) internalValue.splice(index, 1);\n\n selected.value = internalValue;\n } else {\n const isSelected = selected.value.includes(id);\n if (isMandatory && isSelected) return;\n if (!isSelected && !value) return;\n\n selected.value = (value ?? !isSelected) ? [id] : [];\n }\n }\n\n function step(offset: number) {\n if (props.multiple) warn('useGroup', 'This method is not supported when using \"multiple\" prop');\n\n if (!unref(selected).length) {\n const item = items.find((item) => !item.disabled);\n item && (selected.value = [item.id]);\n } else {\n const currentId = unref(selected)[0];\n const currentIndex = items.findIndex((i) => i.id === currentId);\n\n let newIndex = (currentIndex + offset) % items.length;\n let newItem = items[newIndex];\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length;\n newItem = items[newIndex];\n }\n\n if (newItem.disabled) return;\n\n selected.value = [items[newIndex].id];\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(() => props.disabled),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: string) => selected.value.includes(id),\n selectedClass: toRef(() => props.selectedClass),\n items: toRef(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value)\n };\n\n provide(injectKey, state);\n\n return state;\n}\n\nfunction getItemIndex(items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value]);\n\n if (!ids.length) return -1;\n\n return items.findIndex((item) => item.id === ids[0]);\n}\n\nfunction getIds(items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: string[] = [];\n\n modelValue.forEach((value) => {\n const item = items.find((item) => deepEqual(value, item.value));\n const itemByIndex = items[value];\n\n if (item?.value !== undefined) {\n ids.push(item.id);\n } else if (itemByIndex?.useIndexAsValue) {\n ids.push(itemByIndex.id);\n }\n });\n\n return ids;\n}\n\nfunction getValues(items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = [];\n\n ids.forEach((id) => {\n const itemIndex = items.findIndex((item) => item.id === id);\n if (~itemIndex) {\n const item = items[itemIndex];\n values.push(item.value !== undefined ? item.value : itemIndex);\n }\n });\n\n return values;\n}\n"],"names":["item"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useGroup.js","sources":["../../../../../src/composables/useGroup/useGroup.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { getCurrentInstance, propsFactory, useProxyModel } from '@cds/core';\nimport { deepEqual, type EventProp, findChildrenWithProvide, warn, wrapInArray } from '@cds/utils';\nimport {\n type ComponentInternalInstance,\n type ExtractPublicPropTypes,\n type InjectionKey,\n onBeforeUnmount,\n onMounted,\n onUpdated,\n type PropType,\n provide,\n reactive,\n type Ref,\n toRef,\n unref,\n type UnwrapRef\n} from 'vue';\n\nimport type { GroupItem } from './useGroupItem';\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void;\n unregister: (id: string) => void;\n select: (id: string, value: boolean) => void;\n selected: Ref<Readonly<string[]>>;\n isSelected: (id: string) => boolean;\n selectedClass: Ref<string | undefined>;\n items: Readonly<\n Ref<\n {\n id: string;\n value: unknown;\n disabled: boolean | undefined;\n }[]\n >\n >;\n disabled: Ref<boolean | null | undefined>;\n getItemIndex: (value: unknown) => number;\n prev: () => void;\n next: () => void;\n}\n\nexport const defineGroupProps = propsFactory(\n {\n /**\n * Значение выбранных элементов группы\n * @en Value of the selected items of the group\n */\n modelValue: {\n type: null,\n default: undefined\n },\n /**\n * Разрешить множественный выбор\n * @en Allows selecting several items at once\n */\n multiple: Boolean,\n /**\n * Обязательный выбор хотя бы одного элемента\n * @en Requires at least one item to stay selected\n */\n required: [Boolean, String] as PropType<boolean | 'force'>,\n /**\n * Обязательный выбор хотя бы одного элемента\n * @en Requires at least one item to stay selected\n */\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n /**\n * Максимальное количество выбираемых элементов\n * @en Maximum number of items that can be selected\n */\n max: Number,\n /**\n * CSS класс для выбранного состояния\n * @en CSS class applied in the selected state\n */\n selectedClass: String,\n\n ...defineDisabledProps()\n },\n 'group'\n);\nexport interface GroupProps extends ExtractPublicPropTypes<ReturnType<typeof defineGroupProps>> {\n 'onUpdate:modelValue'?: EventProp<[unknown]> | undefined;\n}\n\n/**\n * Provides group management functionality, including item registration, selection, and navigation.\n *\n * @param {GroupProps} props - The props object for configuring the group behavior. It includes options like `modelValue`, `multiple`, `mandatory`, and others.\n * @param {InjectionKey<GroupProvide>} injectKey - The injection key used to provide the group state to child components.\n * @return {GroupProvide} An object containing methods and properties for managing the group state. This includes methods for registering/unregistering items, selecting/deselecting items, navigating through items, and querying item states.\n */\nexport function useGroup(props: GroupProps, injectKey: InjectionKey<GroupProvide>) {\n let isUnmounted = false;\n const items = reactive<GroupItem[]>([]);\n const groupVm = getCurrentInstance('useGroup');\n\n const selected = useProxyModel(\n props,\n 'modelValue',\n [],\n (value) => {\n if (value === undefined) return [];\n return getIds(items, value === null ? [null] : wrapInArray(value));\n },\n (value) => {\n const arr = getValues(items, value);\n return props.multiple ? arr : arr[0];\n }\n );\n\n onMounted(() => {\n forceMandatoryValue();\n });\n\n onBeforeUnmount(() => {\n isUnmounted = true;\n });\n\n onUpdated(() => {\n for (let i = 0; i < items.length; i++) {\n if (items[i].useIndexAsValue) {\n items[i].value = i;\n }\n }\n });\n\n function register(item: GroupItem, vm: ComponentInternalInstance) {\n const unwrapped = item as unknown as UnwrapRef<GroupItem>;\n\n const key = Symbol.for(`${injectKey.description}:id`);\n const children = findChildrenWithProvide(key, groupVm?.vnode);\n const index = children.indexOf(vm);\n\n if (unref(unwrapped.value) === undefined) {\n unwrapped.value = index;\n unwrapped.useIndexAsValue = true;\n }\n\n if (index > -1) {\n items.splice(index, 0, unwrapped);\n } else {\n items.push(unwrapped);\n }\n }\n\n function unregister(id: string) {\n if (isUnmounted) return;\n\n forceMandatoryValue();\n\n const index = items.findIndex((item) => item.id === id);\n items.splice(index, 1);\n }\n\n function forceMandatoryValue() {\n const item = items.find((item) => !item.disabled);\n const forceMandatory = props.mandatory === 'force' || props.required === 'force';\n\n if (item && forceMandatory && !unref(selected).length) {\n selected.value = [item.id];\n }\n }\n\n function select(id: string, value?: boolean) {\n const item = items.find((item) => item.id === id);\n const isMandatory = props.mandatory || props.required;\n\n if (value && item?.disabled) return;\n\n if (props.multiple) {\n const internalValue = unref(selected).slice();\n const index = internalValue.findIndex((v) => v === id);\n const isSelected = ~index;\n\n value = value ?? !isSelected;\n\n if (isSelected && isMandatory && internalValue.length <= 1) return;\n if (!isSelected && props.max != null && internalValue.length + 1 > props.max) return;\n\n if (index < 0 && value) internalValue.push(id);\n else if (index >= 0 && !value) internalValue.splice(index, 1);\n\n selected.value = internalValue;\n } else {\n const isSelected = selected.value.includes(id);\n if (isMandatory && isSelected) return;\n if (!isSelected && !value) return;\n\n selected.value = (value ?? !isSelected) ? [id] : [];\n }\n }\n\n function step(offset: number) {\n if (props.multiple) warn('useGroup', 'This method is not supported when using \"multiple\" prop');\n\n if (!unref(selected).length) {\n const item = items.find((item) => !item.disabled);\n item && (selected.value = [item.id]);\n } else {\n const currentId = unref(selected)[0];\n const currentIndex = items.findIndex((i) => i.id === currentId);\n\n let newIndex = (currentIndex + offset) % items.length;\n let newItem = items[newIndex];\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length;\n newItem = items[newIndex];\n }\n\n if (newItem.disabled) return;\n\n selected.value = [items[newIndex].id];\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(() => props.disabled),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: string) => selected.value.includes(id),\n selectedClass: toRef(() => props.selectedClass),\n items: toRef(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value)\n };\n\n provide(injectKey, state);\n\n return state;\n}\n\nfunction getItemIndex(items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value]);\n\n if (!ids.length) return -1;\n\n return items.findIndex((item) => item.id === ids[0]);\n}\n\nfunction getIds(items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: string[] = [];\n\n modelValue.forEach((value) => {\n const item = items.find((item) => deepEqual(value, item.value));\n const itemByIndex = items[value];\n\n if (item?.value !== undefined) {\n ids.push(item.id);\n } else if (itemByIndex?.useIndexAsValue) {\n ids.push(itemByIndex.id);\n }\n });\n\n return ids;\n}\n\nfunction getValues(items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = [];\n\n ids.forEach((id) => {\n const itemIndex = items.findIndex((item) => item.id === id);\n if (~itemIndex) {\n const item = items[itemIndex];\n values.push(item.value !== undefined ? item.value : itemIndex);\n }\n });\n\n return values;\n}\n"],"names":["item"],"mappings":"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"}
|
|
@@ -4,9 +4,15 @@ import { p as propsFactory } from "../../core/propsFactory.js";
|
|
|
4
4
|
import { useId, provide, inject, toRef, computed, unref, onBeforeUnmount, watch } from "vue";
|
|
5
5
|
const defineGroupItemProps = propsFactory(
|
|
6
6
|
{
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Значение компонента в группе
|
|
9
|
+
* @en Value of the component within the group
|
|
10
|
+
*/
|
|
8
11
|
value: null,
|
|
9
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* CSS класс для выбранного состояния
|
|
14
|
+
* @en CSS class applied in the selected state
|
|
15
|
+
*/
|
|
10
16
|
selectedClass: String,
|
|
11
17
|
...defineDisabledProps()
|
|
12
18
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGroupItem.js","sources":["../../../../../src/composables/useGroup/useGroupItem.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { getCurrentInstance, propsFactory } from '@cds/core';\nimport type { EventProp } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n type InjectionKey,\n onBeforeUnmount,\n provide,\n type Ref,\n toRef,\n unref,\n useId,\n watch\n} from 'vue';\n\nimport type { GroupProvide } from './useGroup';\n\nexport interface GroupItem {\n id: string;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n useIndexAsValue?: boolean;\n}\n\nexport interface GroupItemProvide {\n id: string;\n isSelected: Ref<boolean>;\n isFirst: Ref<boolean>;\n isLast: Ref<boolean>;\n toggle: () => void;\n select: (value: boolean) => void;\n selectedClass: Ref<(string | undefined)[] | false>;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n group: GroupProvide;\n register: () => void;\n unregister: () => void;\n}\n\nexport const defineGroupItemProps = propsFactory(\n {\n
|
|
1
|
+
{"version":3,"file":"useGroupItem.js","sources":["../../../../../src/composables/useGroup/useGroupItem.ts"],"sourcesContent":["import { defineDisabledProps } from '@cds/composables/useDisabled';\nimport { getCurrentInstance, propsFactory } from '@cds/core';\nimport type { EventProp } from '@cds/utils';\nimport {\n computed,\n type ExtractPublicPropTypes,\n inject,\n type InjectionKey,\n onBeforeUnmount,\n provide,\n type Ref,\n toRef,\n unref,\n useId,\n watch\n} from 'vue';\n\nimport type { GroupProvide } from './useGroup';\n\nexport interface GroupItem {\n id: string;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n useIndexAsValue?: boolean;\n}\n\nexport interface GroupItemProvide {\n id: string;\n isSelected: Ref<boolean>;\n isFirst: Ref<boolean>;\n isLast: Ref<boolean>;\n toggle: () => void;\n select: (value: boolean) => void;\n selectedClass: Ref<(string | undefined)[] | false>;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n group: GroupProvide;\n register: () => void;\n unregister: () => void;\n}\n\nexport const defineGroupItemProps = propsFactory(\n {\n /**\n * Значение компонента в группе\n * @en Value of the component within the group\n */\n value: null,\n /**\n * CSS класс для выбранного состояния\n * @en CSS class applied in the selected state\n */\n selectedClass: String,\n ...defineDisabledProps()\n },\n 'group-item'\n);\nexport interface GroupItemProps extends ExtractPublicPropTypes<ReturnType<typeof defineGroupItemProps>> {\n 'onGroup:selected'?: EventProp<[{ value: boolean }]> | undefined;\n}\n\n/**\n * Provides logic for managing group items within a group context.\n *\n * @param {GroupItemProps} props - The properties of the group item to be used.\n * @param {InjectionKey<GroupProvide>} injectKey - The injection key used to access the group context.\n * @param {true} [required] - A flag indicating if the group context is required.\n * @return {GroupItemProvide} The group item instance with its associated behavior and properties.\n */\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true\n): GroupItemProvide;\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false\n): GroupItemProvide | null;\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem');\n\n if (!vm) {\n throw new Error(`[CDS] useGroupItem must be used inside a setup function.`);\n }\n\n const id = useId();\n\n provide(Symbol.for(`${injectKey.description}:id`), id);\n\n const group = inject(injectKey, null);\n\n if (!group) {\n if (!required) return group;\n\n throw new Error(`[CDS] Could not find useGroup injection with symbol ${injectKey.description}`);\n }\n\n const value = toRef(() => props.value);\n const disabled = computed(() => !!(unref(group.disabled) || props.disabled));\n\n function register() {\n group?.register({ id, value, disabled }, vm);\n }\n\n function unregister() {\n group?.unregister(id);\n }\n\n register();\n onBeforeUnmount(() => unregister());\n\n const isSelected = computed(() => {\n return group.isSelected(id);\n });\n const isFirst = computed(() => {\n return unref(group.items)[0].id === id;\n });\n const isLast = computed(() => {\n return unref(group.items)[unref(group.items).length - 1].id === id;\n });\n\n const selectedClass = computed(() => unref(isSelected) && [unref(group.selectedClass), props.selectedClass]);\n\n watch(\n isSelected,\n (value) => {\n vm.emit('group:selected', { value });\n },\n { flush: 'sync' }\n );\n\n return {\n id,\n isSelected,\n isFirst,\n isLast,\n selectedClass,\n value,\n disabled,\n group,\n register,\n unregister,\n toggle: () => group.select(id, !unref(isSelected)),\n select: (value: boolean) => group.select(id, value)\n };\n}\n"],"names":["value"],"mappings":";;;;AAyCO,MAAM,uBAAuB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP,eAAe;AAAA,IACf,GAAG,oBAAA;AAAA,EAAoB;AAAA,EAEzB;AACF;AAuBO,SAAS,aACd,OACA,WACA,WAAW,MACc;AACzB,QAAM,KAAK,mBAAmB,cAAc;AAE5C,MAAI,CAAC,IAAI;AACP,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AAEA,QAAM,KAAK,MAAA;AAEX,UAAQ,OAAO,IAAI,GAAG,UAAU,WAAW,KAAK,GAAG,EAAE;AAErD,QAAM,QAAQ,OAAO,WAAW,IAAI;AAEpC,MAAI,CAAC,OAAO;AACV,QAAI,CAAC,SAAU,QAAO;AAEtB,UAAM,IAAI,MAAM,uDAAuD,UAAU,WAAW,EAAE;AAAA,EAChG;AAEA,QAAM,QAAQ,MAAM,MAAM,MAAM,KAAK;AACrC,QAAM,WAAW,SAAS,MAAM,CAAC,EAAE,MAAM,MAAM,QAAQ,KAAK,MAAM,SAAS;AAE3E,WAAS,WAAW;AAClB,mCAAO,SAAS,EAAE,IAAI,OAAO,SAAA,GAAY;AAAA,EAC3C;AAEA,WAAS,aAAa;AACpB,mCAAO,WAAW;AAAA,EACpB;AAEA,WAAA;AACA,kBAAgB,MAAM,YAAY;AAElC,QAAM,aAAa,SAAS,MAAM;AAChC,WAAO,MAAM,WAAW,EAAE;AAAA,EAC5B,CAAC;AACD,QAAM,UAAU,SAAS,MAAM;AAC7B,WAAO,MAAM,MAAM,KAAK,EAAE,CAAC,EAAE,OAAO;AAAA,EACtC,CAAC;AACD,QAAM,SAAS,SAAS,MAAM;AAC5B,WAAO,MAAM,MAAM,KAAK,EAAE,MAAM,MAAM,KAAK,EAAE,SAAS,CAAC,EAAE,OAAO;AAAA,EAClE,CAAC;AAED,QAAM,gBAAgB,SAAS,MAAM,MAAM,UAAU,KAAK,CAAC,MAAM,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC;AAE3G;AAAA,IACE;AAAA,IACA,CAACA,WAAU;AACT,SAAG,KAAK,kBAAkB,EAAE,OAAAA,QAAO;AAAA,IACrC;AAAA,IACA,EAAE,OAAO,OAAA;AAAA,EAAO;AAGlB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,MAAM,MAAM,OAAO,IAAI,CAAC,MAAM,UAAU,CAAC;AAAA,IACjD,QAAQ,CAACA,WAAmB,MAAM,OAAO,IAAIA,MAAK;AAAA,EAAA;AAEtD;"}
|
|
@@ -3,39 +3,63 @@ import { W as isPrimitive, a7 as pick, x as deepEqual, M as getPropertyFromItem,
|
|
|
3
3
|
import { computed, shallowRef, watchEffect } from "vue";
|
|
4
4
|
const defineItemsProps = propsFactory(
|
|
5
5
|
{
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Массив элементов для отображения
|
|
8
|
+
* @en Array of items to display
|
|
9
|
+
*/
|
|
7
10
|
items: {
|
|
8
11
|
type: Array,
|
|
9
12
|
default: () => []
|
|
10
13
|
},
|
|
11
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Свойство объекта, используемое как заголовок элемента, либо функция для его получения
|
|
16
|
+
* @en Object field used as the item title, or a function that returns it
|
|
17
|
+
*/
|
|
12
18
|
itemTitle: {
|
|
13
19
|
type: [String, Array, Function],
|
|
14
20
|
default: "title"
|
|
15
21
|
},
|
|
16
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Свойство объекта, используемое как значение элемента, либо функция для его получения
|
|
24
|
+
* @en Object field used as the item value, or a function that returns it
|
|
25
|
+
*/
|
|
17
26
|
itemValue: {
|
|
18
27
|
type: [String, Array, Function],
|
|
19
28
|
default: "value"
|
|
20
29
|
},
|
|
21
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Свойство объекта, содержащее дочерние элементы, либо функция для их получения
|
|
32
|
+
* @en Object field that holds the child items, or a function that returns them
|
|
33
|
+
*/
|
|
22
34
|
itemChildren: {
|
|
23
35
|
type: [Boolean, String, Array, Function],
|
|
24
36
|
default: "children"
|
|
25
37
|
},
|
|
26
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Свойство объекта, содержащее пропсы для элемента, либо функция для их получения
|
|
40
|
+
* @en Object field that holds the props of the item, or a function that returns them
|
|
41
|
+
*/
|
|
27
42
|
itemProps: {
|
|
28
43
|
type: [Boolean, String, Array, Function],
|
|
29
44
|
default: "props"
|
|
30
45
|
},
|
|
31
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Свойство объекта, определяющее тип элемента (`item`, `divider`, `subheader`), либо функция для его получения
|
|
48
|
+
* @en Object field that defines the item type (`item`, `divider`, `subheader`), or a function that returns it
|
|
49
|
+
*/
|
|
32
50
|
itemType: {
|
|
33
51
|
type: [Boolean, String, Array, Function],
|
|
34
52
|
default: "type"
|
|
35
53
|
},
|
|
36
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Возвращать в значении модели объект вместо массива
|
|
56
|
+
* @en Return an object in the model value instead of an array
|
|
57
|
+
*/
|
|
37
58
|
returnObject: Boolean,
|
|
38
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Функция сравнения значений элементов для определения выбранного состояния
|
|
61
|
+
* @en Function that compares item values to determine the selected state
|
|
62
|
+
*/
|
|
39
63
|
valueComparator: Function
|
|
40
64
|
},
|
|
41
65
|
"list-items"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useItems.js","sources":["../../../../../src/composables/useItems/useItems.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport {\n deepEqual,\n getPropertyFromItem,\n isPrimitive,\n omit,\n pick,\n type Primitive,\n type SelectItemKey,\n type ValueComparator\n} from '@cds/utils';\nimport { computed, type ExtractPublicPropTypes, type PropType, shallowRef, watchEffect } from 'vue';\n\nimport type { ListItem } from './internal/useItems.types';\n\nexport const defineItemsProps = propsFactory(\n {\n /** Массив элементов для отображения */\n items: {\n type: Array as PropType<any[]>,\n default: () => []\n },\n /** Свойство объекта, используемое как заголовок элемента, либо функция для его получения */\n itemTitle: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'title'\n },\n /** Свойство объекта, используемое как значение элемента, либо функция для его получения */\n itemValue: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'value'\n },\n /** Свойство объекта, содержащее дочерние элементы, либо функция для их получения */\n itemChildren: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'children'\n },\n /** Свойство объекта, содержащее пропсы для элемента, либо функция для их получения */\n itemProps: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'props'\n },\n /** Свойство объекта, определяющее тип элемента (`item`, `divider`, `subheader`), либо функция для его получения */\n itemType: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'type'\n },\n /** Возвращать в значении модели объект вместо массива */\n returnObject: Boolean,\n /** Функция сравнения значений элементов для определения выбранного состояния */\n valueComparator: Function as PropType<ValueComparator>\n },\n 'list-items'\n);\n\nexport interface ItemProps extends ExtractPublicPropTypes<ReturnType<typeof defineItemsProps>> {}\n\nconst itemTypes = new Set(['item', 'divider', 'subheader']);\n\nexport function transformItem(props: Pick<ItemProps, (typeof transformItem.neededProps)[number]>, item: any): ListItem {\n const title = getPropertyFromItem(item, props.itemTitle, item);\n const value = getPropertyFromItem(item, props.itemValue, title);\n const children = getPropertyFromItem(item, props.itemChildren);\n const itemProps =\n props.itemProps === true\n ? typeof item === 'object' && item != null && !Array.isArray(item)\n ? 'children' in item\n ? omit(item, ['children'])\n : item\n : undefined\n : getPropertyFromItem(item, props.itemProps);\n\n let type = getPropertyFromItem(item, props.itemType, 'item');\n if (!itemTypes.has(type)) {\n type = 'item';\n }\n\n const _props = {\n title,\n value,\n ...itemProps\n };\n\n return {\n type,\n title: String(_props.title ?? ''),\n value: _props.value,\n props: _props,\n children: type === 'item' && Array.isArray(children) ? transformItems(props, children) : undefined,\n raw: item\n };\n}\n\ntransformItem.neededProps = ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType'] as const;\n\nexport function transformItems(\n props: Pick<ItemProps, (typeof transformItem.neededProps)[number]>,\n items: ItemProps['items']\n) {\n // avoid reactive access in the loop\n const _props = pick(props, [...transformItem.neededProps]);\n\n const array: ListItem[] = [];\n for (const item of items ?? []) {\n array.push(transformItem(_props, item));\n }\n\n return array;\n}\n\nexport function useItems(props: ItemProps) {\n const items = computed(() => transformItems(props, props.items));\n const hasNullItem = computed(() => items.value.some((item) => item.value === null));\n\n const itemsMap = shallowRef<Map<Primitive, ListItem[]>>(new Map());\n const keylessItems = shallowRef<ListItem[]>([]);\n\n watchEffect(() => {\n const _items = items.value;\n const map = new Map();\n const keyless = [];\n for (let i = 0; i < _items.length; i++) {\n const item = _items[i];\n if (isPrimitive(item.value) || item.value === null) {\n let values = map.get(item.value);\n if (!values) {\n values = [];\n map.set(item.value, values);\n }\n values.push(item);\n } else {\n keyless.push(item);\n }\n }\n itemsMap.value = map;\n keylessItems.value = keyless;\n });\n\n function transformIn(value: any[]): ListItem[] {\n // Cache unrefed values outside the loop,\n // proxy getters can be slow when you call them a billion times\n const _items = itemsMap.value;\n const _allItems = items.value;\n const _keylessItems = keylessItems.value;\n const _hasNullItem = hasNullItem.value;\n const _returnObject = props.returnObject;\n const hasValueComparator = !!props.valueComparator;\n const valueComparator = props.valueComparator || deepEqual;\n const _props = pick(props, [...transformItem.neededProps]);\n\n const returnValue: ListItem[] = [];\n main: for (const v of value) {\n // When the model value is null, return an InternalItem\n // based on null only if null is one of the items\n if (!_hasNullItem && v === null) continue;\n\n // String model value means value is a custom input value from combobox\n // Don't look up existing items if the model value is a string\n if (_returnObject && typeof v === 'string') {\n returnValue.push(transformItem(_props, v));\n continue;\n }\n\n // Fast path, items with primitive values and no\n // custom valueComparator can use a constant-time\n // map lookup instead of searching the items array\n const fastItems = _items.get(v);\n\n // Slow path, always use valueComparator.\n // This is O(n^2) so we really don't want to\n // do it for more than a couple hundred items.\n if (hasValueComparator || !fastItems) {\n for (const item of hasValueComparator ? _allItems : _keylessItems) {\n if (valueComparator(v, item.value)) {\n returnValue.push(item);\n continue main;\n }\n }\n returnValue.push(transformItem(_props, v));\n continue;\n }\n\n returnValue.push(...fastItems);\n }\n\n return returnValue;\n }\n\n function transformOut(value: ListItem[]): any[] {\n return props.returnObject ? value.map(({ raw }) => raw) : value.map(({ value }) => value);\n }\n\n return { items, transformIn, transformOut };\n}\n"],"names":["value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useItems.js","sources":["../../../../../src/composables/useItems/useItems.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport {\n deepEqual,\n getPropertyFromItem,\n isPrimitive,\n omit,\n pick,\n type Primitive,\n type SelectItemKey,\n type ValueComparator\n} from '@cds/utils';\nimport { computed, type ExtractPublicPropTypes, type PropType, shallowRef, watchEffect } from 'vue';\n\nimport type { ListItem } from './internal/useItems.types';\n\nexport const defineItemsProps = propsFactory(\n {\n /**\n * Массив элементов для отображения\n * @en Array of items to display\n */\n items: {\n type: Array as PropType<any[]>,\n default: () => []\n },\n /**\n * Свойство объекта, используемое как заголовок элемента, либо функция для его получения\n * @en Object field used as the item title, or a function that returns it\n */\n itemTitle: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'title'\n },\n /**\n * Свойство объекта, используемое как значение элемента, либо функция для его получения\n * @en Object field used as the item value, or a function that returns it\n */\n itemValue: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'value'\n },\n /**\n * Свойство объекта, содержащее дочерние элементы, либо функция для их получения\n * @en Object field that holds the child items, or a function that returns them\n */\n itemChildren: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'children'\n },\n /**\n * Свойство объекта, содержащее пропсы для элемента, либо функция для их получения\n * @en Object field that holds the props of the item, or a function that returns them\n */\n itemProps: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'props'\n },\n /**\n * Свойство объекта, определяющее тип элемента (`item`, `divider`, `subheader`), либо функция для его получения\n * @en Object field that defines the item type (`item`, `divider`, `subheader`), or a function that returns it\n */\n itemType: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'type'\n },\n /**\n * Возвращать в значении модели объект вместо массива\n * @en Return an object in the model value instead of an array\n */\n returnObject: Boolean,\n /**\n * Функция сравнения значений элементов для определения выбранного состояния\n * @en Function that compares item values to determine the selected state\n */\n valueComparator: Function as PropType<ValueComparator>\n },\n 'list-items'\n);\n\nexport interface ItemProps extends ExtractPublicPropTypes<ReturnType<typeof defineItemsProps>> {}\n\nconst itemTypes = new Set(['item', 'divider', 'subheader']);\n\nexport function transformItem(props: Pick<ItemProps, (typeof transformItem.neededProps)[number]>, item: any): ListItem {\n const title = getPropertyFromItem(item, props.itemTitle, item);\n const value = getPropertyFromItem(item, props.itemValue, title);\n const children = getPropertyFromItem(item, props.itemChildren);\n const itemProps =\n props.itemProps === true\n ? typeof item === 'object' && item != null && !Array.isArray(item)\n ? 'children' in item\n ? omit(item, ['children'])\n : item\n : undefined\n : getPropertyFromItem(item, props.itemProps);\n\n let type = getPropertyFromItem(item, props.itemType, 'item');\n if (!itemTypes.has(type)) {\n type = 'item';\n }\n\n const _props = {\n title,\n value,\n ...itemProps\n };\n\n return {\n type,\n title: String(_props.title ?? ''),\n value: _props.value,\n props: _props,\n children: type === 'item' && Array.isArray(children) ? transformItems(props, children) : undefined,\n raw: item\n };\n}\n\ntransformItem.neededProps = ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType'] as const;\n\nexport function transformItems(\n props: Pick<ItemProps, (typeof transformItem.neededProps)[number]>,\n items: ItemProps['items']\n) {\n // avoid reactive access in the loop\n const _props = pick(props, [...transformItem.neededProps]);\n\n const array: ListItem[] = [];\n for (const item of items ?? []) {\n array.push(transformItem(_props, item));\n }\n\n return array;\n}\n\nexport function useItems(props: ItemProps) {\n const items = computed(() => transformItems(props, props.items));\n const hasNullItem = computed(() => items.value.some((item) => item.value === null));\n\n const itemsMap = shallowRef<Map<Primitive, ListItem[]>>(new Map());\n const keylessItems = shallowRef<ListItem[]>([]);\n\n watchEffect(() => {\n const _items = items.value;\n const map = new Map();\n const keyless = [];\n for (let i = 0; i < _items.length; i++) {\n const item = _items[i];\n if (isPrimitive(item.value) || item.value === null) {\n let values = map.get(item.value);\n if (!values) {\n values = [];\n map.set(item.value, values);\n }\n values.push(item);\n } else {\n keyless.push(item);\n }\n }\n itemsMap.value = map;\n keylessItems.value = keyless;\n });\n\n function transformIn(value: any[]): ListItem[] {\n // Cache unrefed values outside the loop,\n // proxy getters can be slow when you call them a billion times\n const _items = itemsMap.value;\n const _allItems = items.value;\n const _keylessItems = keylessItems.value;\n const _hasNullItem = hasNullItem.value;\n const _returnObject = props.returnObject;\n const hasValueComparator = !!props.valueComparator;\n const valueComparator = props.valueComparator || deepEqual;\n const _props = pick(props, [...transformItem.neededProps]);\n\n const returnValue: ListItem[] = [];\n main: for (const v of value) {\n // When the model value is null, return an InternalItem\n // based on null only if null is one of the items\n if (!_hasNullItem && v === null) continue;\n\n // String model value means value is a custom input value from combobox\n // Don't look up existing items if the model value is a string\n if (_returnObject && typeof v === 'string') {\n returnValue.push(transformItem(_props, v));\n continue;\n }\n\n // Fast path, items with primitive values and no\n // custom valueComparator can use a constant-time\n // map lookup instead of searching the items array\n const fastItems = _items.get(v);\n\n // Slow path, always use valueComparator.\n // This is O(n^2) so we really don't want to\n // do it for more than a couple hundred items.\n if (hasValueComparator || !fastItems) {\n for (const item of hasValueComparator ? _allItems : _keylessItems) {\n if (valueComparator(v, item.value)) {\n returnValue.push(item);\n continue main;\n }\n }\n returnValue.push(transformItem(_props, v));\n continue;\n }\n\n returnValue.push(...fastItems);\n }\n\n return returnValue;\n }\n\n function transformOut(value: ListItem[]): any[] {\n return props.returnObject ? value.map(({ raw }) => raw) : value.map(({ value }) => value);\n }\n\n return { items, transformIn, transformOut };\n}\n"],"names":["value"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sources":["../../../../../src/composables/useLayout/context.ts"],"sourcesContent":["import { createContext } from '@cds/hooks/createContext';\nimport type { ComputedRef, Ref } from 'vue';\n\n/**\n * Состояние наблюдателя за скроллом области макета.\n */\nexport interface ScrollObserver {\n position: {\n top: number;\n left: number;\n };\n direction: 'up' | 'down' | 'left' | 'right';\n directionChanged: boolean;\n delta: {\n top: number;\n left: number;\n };\n inflectionPoint: {\n top: number;\n left: number;\n };\n}\n\n/**\n * Описание одной части макета (header / footer / left / right).\n */\nexport interface LayoutPart {\n /** Размер части в пикселях. */\n size: number;\n /** Смещение части относительно края макета. */\n offset: number;\n /** Резервирует ли часть пространство в потоке. */\n space: boolean;\n}\n\n/**\n * Контекст макета, предоставляемый `CdsLayout` и потребляемый\n * `CdsHeader`, `CdsFooter`, `CdsDrawer`, `CdsMain`, `CdsPage`.\n */\nexport interface LayoutContext {\n instances: Record<string, unknown>;\n view: ComputedRef<string>;\n isContainer: ComputedRef<boolean>;\n rootRef: Ref<HTMLElement | undefined>;\n height: Ref<number>;\n containerHeight: Ref<number>;\n scrollbarWidth: Ref<number>;\n totalWidth: ComputedRef<number>;\n rows: ComputedRef<{\n top: string[];\n middle: string[];\n bottom: string[];\n }>;\n header: LayoutPart;\n right: LayoutPart;\n footer: LayoutPart;\n left: LayoutPart;\n scroll: Ref<ScrollObserver>;\n animate: () => void;\n update: (part: 'header' | 'footer' | 'left' | 'right', prop: keyof LayoutPart, value: number | boolean) => void;\n}\n\nexport const CDS_LAYOUT_CONTEXT_KEY = 'cds:layout';\n\n/**\n * Возвращает контекст макета. Вне `CdsLayout` отдаёт пустой объект —\n * потребители проверяют это и предупреждают разработчика.\n */\nexport const [useInjectLayout, provideLayout] = createContext<LayoutContext>(\n CDS_LAYOUT_CONTEXT_KEY,\n {} as LayoutContext\n);\n"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"context.js","sources":["../../../../../src/composables/useLayout/context.ts"],"sourcesContent":["import { createContext } from '@cds/hooks/createContext';\nimport type { ComputedRef, Ref } from 'vue';\n\n/**\n * Состояние наблюдателя за скроллом области макета.\n */\nexport interface ScrollObserver {\n position: {\n top: number;\n left: number;\n };\n direction: 'up' | 'down' | 'left' | 'right';\n directionChanged: boolean;\n delta: {\n top: number;\n left: number;\n };\n inflectionPoint: {\n top: number;\n left: number;\n };\n}\n\n/**\n * Описание одной части макета (header / footer / left / right).\n */\nexport interface LayoutPart {\n /** Размер части в пикселях. */\n size: number;\n /** Смещение части относительно края макета. */\n offset: number;\n /** Резервирует ли часть пространство в потоке. */\n space: boolean;\n}\n\n/**\n * Контекст макета, предоставляемый `CdsLayout` и потребляемый\n * `CdsHeader`, `CdsFooter`, `CdsDrawer`, `CdsMain`, `CdsPage`.\n */\nexport interface LayoutContext {\n /**\n * Зарегистрированные в макете компоненты по идентификаторам — шапка, подвал, панели, контент.\n * @en Components registered in the layout by their identifiers — the header, the footer, the drawers, the content.\n */\n instances: Record<string, unknown>;\n /** Текущая раскладка макета — какие части занимают верх, низ и бока. */\n view: ComputedRef<string>;\n /**\n * Ограничен ли макет по ширине контейнером (`container`) вместо растягивания на весь экран.\n * @en Whether the layout is limited in width by a container (`container`) instead of stretching across the whole screen.\n */\n isContainer: ComputedRef<boolean>;\n /**\n * Ссылка на корневой DOM-элемент макета.\n * @en Ref to the root DOM element of the layout.\n */\n rootRef: Ref<HTMLElement | undefined>;\n /**\n * Полная высота макета в пикселях.\n * @en Full height of the layout in pixels.\n */\n height: Ref<number>;\n /**\n * Высота области контента без шапки и подвала, в пикселях.\n * @en Height of the content area without the header and the footer, in pixels.\n */\n containerHeight: Ref<number>;\n /**\n * Ширина системной полосы прокрутки в пикселях — учитывается при блокировке скролла.\n * @en Width of the system scrollbar in pixels — taken into account when the scroll is locked.\n */\n scrollbarWidth: Ref<number>;\n /**\n * Полная ширина макета в пикселях.\n * @en Full width of the layout in pixels.\n */\n totalWidth: ComputedRef<number>;\n /**\n * Идентификаторы компонентов, распределённые по рядам макета: сверху, посередине и снизу.\n * @en Identifiers of the components distributed across the rows of the layout: top, middle and bottom.\n */\n rows: ComputedRef<{\n top: string[];\n middle: string[];\n bottom: string[];\n }>;\n /**\n * Размеры и смещение шапки макета.\n * @en Size and offset of the layout header.\n */\n header: LayoutPart;\n /**\n * Размеры и смещение правой панели макета.\n * @en Size and offset of the right drawer of the layout.\n */\n right: LayoutPart;\n /**\n * Размеры и смещение подвала макета.\n * @en Size and offset of the layout footer.\n */\n footer: LayoutPart;\n /**\n * Размеры и смещение левой панели макета.\n * @en Size and offset of the left drawer of the layout.\n */\n left: LayoutPart;\n /**\n * Состояние прокрутки макета: позиция, направление и дельта.\n * @en Scroll state of the layout: position, direction and delta.\n */\n scroll: Ref<ScrollObserver>;\n /**\n * Включает анимацию перестроения макета на время ближайшего обновления размеров.\n * @en Turns on the rebuild animation of the layout for the duration of the next size update.\n */\n animate: () => void;\n /**\n * Обновляет размер, смещение или резервирование места для части макета.\n * @en Updates the size, the offset or the space reservation for a part of the layout.\n */\n update: (part: 'header' | 'footer' | 'left' | 'right', prop: keyof LayoutPart, value: number | boolean) => void;\n}\n\nexport const CDS_LAYOUT_CONTEXT_KEY = 'cds:layout';\n\n/**\n * Возвращает контекст макета. Вне `CdsLayout` отдаёт пустой объект —\n * потребители проверяют это и предупреждают разработчика.\n */\nexport const [useInjectLayout, provideLayout] = createContext<LayoutContext>(\n CDS_LAYOUT_CONTEXT_KEY,\n {} as LayoutContext\n);\n"],"names":[],"mappings":";AA2HO,MAAM,yBAAyB;AAM/B,MAAM,CAAC,iBAAiB,aAAa,IAAI;AAAA,EAC9C;AAAA,EACA,CAAA;AACF;"}
|
|
@@ -5,32 +5,50 @@ import { u as useInjectLayout } from "./context.js";
|
|
|
5
5
|
import { u as useDisplay } from "../useDisplay/useDisplay.js";
|
|
6
6
|
const defineLayoutProps = propsFactory(
|
|
7
7
|
{
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Видимость элемента в макете.
|
|
10
|
+
* @en Visibility of the element in the layout.
|
|
11
|
+
*/
|
|
9
12
|
modelValue: {
|
|
10
13
|
type: Boolean,
|
|
11
14
|
default: true
|
|
12
15
|
},
|
|
13
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Плавающий режим: элемент появляется/скрывается при скролле.
|
|
18
|
+
* @en Floating mode: the element appears/hides on scroll.
|
|
19
|
+
*/
|
|
14
20
|
reveal: {
|
|
15
21
|
type: Boolean,
|
|
16
22
|
default: false
|
|
17
23
|
},
|
|
18
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Порог скролла (px), до которого плавающий элемент остаётся видимым.
|
|
26
|
+
* @en Scroll threshold (px) up to which the floating element stays visible.
|
|
27
|
+
*/
|
|
19
28
|
revealOffset: {
|
|
20
29
|
type: Number,
|
|
21
30
|
default: 250
|
|
22
31
|
},
|
|
23
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Отображение границы.
|
|
34
|
+
* @en Shows the border.
|
|
35
|
+
*/
|
|
24
36
|
bordered: {
|
|
25
37
|
type: Boolean,
|
|
26
38
|
default: false
|
|
27
39
|
},
|
|
28
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Отображение тени.
|
|
42
|
+
* @en Shows the shadow.
|
|
43
|
+
*/
|
|
29
44
|
elevated: {
|
|
30
45
|
type: Boolean,
|
|
31
46
|
default: false
|
|
32
47
|
},
|
|
33
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Высота элемента.
|
|
50
|
+
* @en Height of the element.
|
|
51
|
+
*/
|
|
34
52
|
height: {
|
|
35
53
|
type: [String, Number],
|
|
36
54
|
default: 50
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLayout.js","sources":["../../../../../src/composables/useLayout/useLayout.ts"],"sourcesContent":["import { useDisplay } from '@cds/composables/useDisplay';\nimport { propsFactory } from '@cds/core';\nimport { IN_BROWSER } from '@cds/utils';\nimport {\n computed,\n type ComputedRef,\n type CSSProperties,\n type ExtractPublicPropTypes,\n onBeforeUnmount,\n type PropType,\n type Ref,\n ref,\n unref,\n watch\n} from 'vue';\n\nimport { type LayoutPart, useInjectLayout } from './context';\n\n/**\n * Фабрика пропсов для частей макета `CdsHeader` / `CdsFooter`.\n */\nexport const defineLayoutProps = propsFactory(\n {\n /** Видимость элемента в макете. */\n modelValue: {\n type: Boolean as PropType<boolean>,\n default: true\n },\n /** Плавающий режим: элемент появляется/скрывается при скролле. */\n reveal: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n /** Порог скролла (px), до которого плавающий элемент остаётся видимым. */\n revealOffset: {\n type: Number as PropType<number>,\n default: 250\n },\n /** Отображение границы. */\n bordered: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n /** Отображение тени. */\n elevated: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n /** Высота элемента. */\n height: {\n type: [String, Number] as PropType<string | number>,\n default: 50\n }\n },\n 'layout'\n);\n\nexport interface LayoutProps extends ExtractPublicPropTypes<ReturnType<typeof defineLayoutProps>> {}\n\nexport interface UseLayout {\n layout: ReturnType<typeof useInjectLayout>;\n size: Ref<number>;\n revealed: Ref<boolean>;\n fixed: ComputedRef<boolean>;\n windowHeight: Ref<number>;\n containerHeight: ComputedRef<number>;\n offset: ComputedRef<number>;\n hidden: ComputedRef<boolean>;\n revealOnFocus: ComputedRef<boolean>;\n classes: ComputedRef<Record<string, boolean>>;\n style: ComputedRef<CSSProperties>;\n updateLocal: (prop: Ref, value: unknown) => void;\n updateRevealed: () => void;\n onResize: (rect: Pick<DOMRectReadOnly, 'width' | 'height'>) => void;\n}\n\n/**\n * Общая логика частей макета (header/footer): вычисление видимости,\n * плавающего поведения при скролле, классов и стилей, синхронизация\n * размеров с контекстом макета.\n *\n * @param props Пропсы части макета.\n * @param rootClass kebab-class компонента (например `cds-header`).\n * @param view Тип части: `H` — header, `F` — footer.\n */\nexport function useLayout(props: LayoutProps, rootClass: string, view: 'H' | 'F' = 'H'): UseLayout {\n const isHeader = view === 'H';\n const isFooter = view === 'F';\n\n const layout = useInjectLayout();\n const display = useDisplay();\n const size = ref(parseInt(props.height as string, 10));\n const revealed = ref(true);\n\n const fixed = computed(\n () =>\n props.reveal ||\n unref(layout.view).indexOf(view) > -1 ||\n (unref(display.platform).ios && unref(layout.isContainer))\n );\n\n const windowHeight = ref(!IN_BROWSER || unref(layout.isContainer) ? 0 : window.innerHeight);\n\n const containerHeight = computed(() =>\n unref(layout.isContainer) ? unref(layout.containerHeight) : unref(windowHeight)\n );\n\n const offset = computed(() => {\n if (!props.modelValue) return 0;\n if (unref(fixed)) return unref(revealed) ? unref(size) : 0;\n\n let offset = 0;\n\n if (isHeader) {\n offset = unref(size) - unref(layout.scroll).position.top;\n }\n\n if (isFooter) {\n offset = unref(layout.scroll).position.top + unref(containerHeight) + unref(size) - unref(layout.height);\n }\n\n return offset > 0 ? offset : 0;\n });\n\n const hidden = computed(() => !props.modelValue || (unref(fixed) && !unref(revealed)));\n\n const revealOnFocus = computed(() => !!(props.modelValue && unref(hidden) && props.reveal));\n\n const classes = computed(() => ({\n [rootClass]: true,\n [`${rootClass}--fixed`]: unref(fixed),\n [`${rootClass}--absolute`]: !unref(fixed),\n [`${rootClass}--hidden`]: unref(hidden),\n [`${rootClass}--bordered`]: !!props.bordered,\n [`${rootClass}--elevated`]: !!props.elevated,\n [`${rootClass}--prevent-focus`]: !props.modelValue\n }));\n\n const style = computed(() => {\n const rows = isHeader ? unref(layout.rows).top : unref(layout.rows).bottom;\n const css: CSSProperties = {};\n\n if (rows[0] === 'l' && layout.left.space) {\n css.left = `${layout.left.size}px`;\n }\n\n if (rows[2] === 'r' && layout.right.space) {\n css.right = `${layout.right.size}px`;\n }\n\n return css;\n });\n\n function updateLayout(prop: keyof LayoutPart, value: number | boolean) {\n layout.update(isHeader ? 'header' : 'footer', prop, value);\n }\n\n function updateLocal(prop: Ref, value: unknown) {\n if (unref(prop) !== value) {\n prop.value = value;\n }\n }\n\n function updateRevealed() {\n if (!props.reveal) return;\n\n const { direction, position, inflectionPoint } = unref(layout.scroll);\n\n updateLocal(\n revealed,\n direction === 'up' ||\n position.top - inflectionPoint.top < 100 ||\n unref(layout.height) - unref(containerHeight) - position.top - unref(size) < 300\n );\n }\n\n function onResize({ height }: Pick<DOMRectReadOnly, 'width' | 'height'>) {\n updateLocal(size, height);\n updateLayout('size', height);\n }\n\n watch(\n () => props.modelValue,\n (value) => {\n updateLayout('space', !!value);\n updateLocal(revealed, true);\n layout.animate();\n }\n );\n\n watch(offset, (value) => {\n updateLayout('offset', value);\n });\n\n watch(\n () => props.reveal,\n (value) => {\n !value && updateLocal(revealed, props.modelValue);\n }\n );\n\n const instance = {};\n\n layout.instances[isHeader ? 'header' : 'footer'] = instance;\n props.modelValue && updateLayout('size', unref(size));\n updateLayout('space', !!props.modelValue);\n updateLayout('offset', unref(offset));\n\n onBeforeUnmount(() => {\n if (layout.instances[isHeader ? 'header' : 'footer'] === instance) {\n layout.instances[isHeader ? 'header' : 'footer'] = undefined;\n updateLayout('size', 0);\n updateLayout('offset', 0);\n updateLayout('space', false);\n }\n });\n\n return {\n layout,\n size,\n revealed,\n fixed,\n windowHeight,\n containerHeight,\n offset,\n hidden,\n revealOnFocus,\n classes,\n style,\n updateLocal,\n updateRevealed,\n onResize\n };\n}\n"],"names":["offset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useLayout.js","sources":["../../../../../src/composables/useLayout/useLayout.ts"],"sourcesContent":["import { useDisplay } from '@cds/composables/useDisplay';\nimport { propsFactory } from '@cds/core';\nimport { IN_BROWSER } from '@cds/utils';\nimport {\n computed,\n type ComputedRef,\n type CSSProperties,\n type ExtractPublicPropTypes,\n onBeforeUnmount,\n type PropType,\n type Ref,\n ref,\n unref,\n watch\n} from 'vue';\n\nimport { type LayoutPart, useInjectLayout } from './context';\n\n/**\n * Фабрика пропсов для частей макета `CdsHeader` / `CdsFooter`.\n */\nexport const defineLayoutProps = propsFactory(\n {\n /**\n * Видимость элемента в макете.\n * @en Visibility of the element in the layout.\n */\n modelValue: {\n type: Boolean as PropType<boolean>,\n default: true\n },\n /**\n * Плавающий режим: элемент появляется/скрывается при скролле.\n * @en Floating mode: the element appears/hides on scroll.\n */\n reveal: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n /**\n * Порог скролла (px), до которого плавающий элемент остаётся видимым.\n * @en Scroll threshold (px) up to which the floating element stays visible.\n */\n revealOffset: {\n type: Number as PropType<number>,\n default: 250\n },\n /**\n * Отображение границы.\n * @en Shows the border.\n */\n bordered: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n /**\n * Отображение тени.\n * @en Shows the shadow.\n */\n elevated: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n /**\n * Высота элемента.\n * @en Height of the element.\n */\n height: {\n type: [String, Number] as PropType<string | number>,\n default: 50\n }\n },\n 'layout'\n);\n\nexport interface LayoutProps extends ExtractPublicPropTypes<ReturnType<typeof defineLayoutProps>> {}\n\nexport interface UseLayout {\n layout: ReturnType<typeof useInjectLayout>;\n size: Ref<number>;\n revealed: Ref<boolean>;\n fixed: ComputedRef<boolean>;\n windowHeight: Ref<number>;\n containerHeight: ComputedRef<number>;\n offset: ComputedRef<number>;\n hidden: ComputedRef<boolean>;\n revealOnFocus: ComputedRef<boolean>;\n classes: ComputedRef<Record<string, boolean>>;\n style: ComputedRef<CSSProperties>;\n updateLocal: (prop: Ref, value: unknown) => void;\n updateRevealed: () => void;\n onResize: (rect: Pick<DOMRectReadOnly, 'width' | 'height'>) => void;\n}\n\n/**\n * Общая логика частей макета (header/footer): вычисление видимости,\n * плавающего поведения при скролле, классов и стилей, синхронизация\n * размеров с контекстом макета.\n *\n * @param props Пропсы части макета.\n * @param rootClass kebab-class компонента (например `cds-header`).\n * @param view Тип части: `H` — header, `F` — footer.\n */\nexport function useLayout(props: LayoutProps, rootClass: string, view: 'H' | 'F' = 'H'): UseLayout {\n const isHeader = view === 'H';\n const isFooter = view === 'F';\n\n const layout = useInjectLayout();\n const display = useDisplay();\n const size = ref(parseInt(props.height as string, 10));\n const revealed = ref(true);\n\n const fixed = computed(\n () =>\n props.reveal ||\n unref(layout.view).indexOf(view) > -1 ||\n (unref(display.platform).ios && unref(layout.isContainer))\n );\n\n const windowHeight = ref(!IN_BROWSER || unref(layout.isContainer) ? 0 : window.innerHeight);\n\n const containerHeight = computed(() =>\n unref(layout.isContainer) ? unref(layout.containerHeight) : unref(windowHeight)\n );\n\n const offset = computed(() => {\n if (!props.modelValue) return 0;\n if (unref(fixed)) return unref(revealed) ? unref(size) : 0;\n\n let offset = 0;\n\n if (isHeader) {\n offset = unref(size) - unref(layout.scroll).position.top;\n }\n\n if (isFooter) {\n offset = unref(layout.scroll).position.top + unref(containerHeight) + unref(size) - unref(layout.height);\n }\n\n return offset > 0 ? offset : 0;\n });\n\n const hidden = computed(() => !props.modelValue || (unref(fixed) && !unref(revealed)));\n\n const revealOnFocus = computed(() => !!(props.modelValue && unref(hidden) && props.reveal));\n\n const classes = computed(() => ({\n [rootClass]: true,\n [`${rootClass}--fixed`]: unref(fixed),\n [`${rootClass}--absolute`]: !unref(fixed),\n [`${rootClass}--hidden`]: unref(hidden),\n [`${rootClass}--bordered`]: !!props.bordered,\n [`${rootClass}--elevated`]: !!props.elevated,\n [`${rootClass}--prevent-focus`]: !props.modelValue\n }));\n\n const style = computed(() => {\n const rows = isHeader ? unref(layout.rows).top : unref(layout.rows).bottom;\n const css: CSSProperties = {};\n\n if (rows[0] === 'l' && layout.left.space) {\n css.left = `${layout.left.size}px`;\n }\n\n if (rows[2] === 'r' && layout.right.space) {\n css.right = `${layout.right.size}px`;\n }\n\n return css;\n });\n\n function updateLayout(prop: keyof LayoutPart, value: number | boolean) {\n layout.update(isHeader ? 'header' : 'footer', prop, value);\n }\n\n function updateLocal(prop: Ref, value: unknown) {\n if (unref(prop) !== value) {\n prop.value = value;\n }\n }\n\n function updateRevealed() {\n if (!props.reveal) return;\n\n const { direction, position, inflectionPoint } = unref(layout.scroll);\n\n updateLocal(\n revealed,\n direction === 'up' ||\n position.top - inflectionPoint.top < 100 ||\n unref(layout.height) - unref(containerHeight) - position.top - unref(size) < 300\n );\n }\n\n function onResize({ height }: Pick<DOMRectReadOnly, 'width' | 'height'>) {\n updateLocal(size, height);\n updateLayout('size', height);\n }\n\n watch(\n () => props.modelValue,\n (value) => {\n updateLayout('space', !!value);\n updateLocal(revealed, true);\n layout.animate();\n }\n );\n\n watch(offset, (value) => {\n updateLayout('offset', value);\n });\n\n watch(\n () => props.reveal,\n (value) => {\n !value && updateLocal(revealed, props.modelValue);\n }\n );\n\n const instance = {};\n\n layout.instances[isHeader ? 'header' : 'footer'] = instance;\n props.modelValue && updateLayout('size', unref(size));\n updateLayout('space', !!props.modelValue);\n updateLayout('offset', unref(offset));\n\n onBeforeUnmount(() => {\n if (layout.instances[isHeader ? 'header' : 'footer'] === instance) {\n layout.instances[isHeader ? 'header' : 'footer'] = undefined;\n updateLayout('size', 0);\n updateLayout('offset', 0);\n updateLayout('space', false);\n }\n });\n\n return {\n layout,\n size,\n revealed,\n fixed,\n windowHeight,\n containerHeight,\n offset,\n hidden,\n revealOnFocus,\n classes,\n style,\n updateLocal,\n updateRevealed,\n onResize\n };\n}\n"],"names":["offset"],"mappings":";;;;;AAqBO,MAAM,oBAAoB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,QAAQ;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AACF;AA8BO,SAAS,UAAU,OAAoB,WAAmB,OAAkB,KAAgB;AACjG,QAAM,WAAW,SAAS;AAC1B,QAAM,WAAW,SAAS;AAE1B,QAAM,SAAS,gBAAA;AACf,QAAM,UAAU,WAAA;AAChB,QAAM,OAAO,IAAI,SAAS,MAAM,QAAkB,EAAE,CAAC;AACrD,QAAM,WAAW,IAAI,IAAI;AAEzB,QAAM,QAAQ;AAAA,IACZ,MACE,MAAM,UACN,MAAM,OAAO,IAAI,EAAE,QAAQ,IAAI,IAAI,MAClC,MAAM,QAAQ,QAAQ,EAAE,OAAO,MAAM,OAAO,WAAW;AAAA,EAAA;AAG5D,QAAM,eAAe,IAAI,CAAC,cAAc,MAAM,OAAO,WAAW,IAAI,IAAI,OAAO,WAAW;AAE1F,QAAM,kBAAkB;AAAA,IAAS,MAC/B,MAAM,OAAO,WAAW,IAAI,MAAM,OAAO,eAAe,IAAI,MAAM,YAAY;AAAA,EAAA;AAGhF,QAAM,SAAS,SAAS,MAAM;AAC5B,QAAI,CAAC,MAAM,WAAY,QAAO;AAC9B,QAAI,MAAM,KAAK,EAAG,QAAO,MAAM,QAAQ,IAAI,MAAM,IAAI,IAAI;AAEzD,QAAIA,UAAS;AAEb,QAAI,UAAU;AACZA,gBAAS,MAAM,IAAI,IAAI,MAAM,OAAO,MAAM,EAAE,SAAS;AAAA,IACvD;AAEA,QAAI,UAAU;AACZA,gBAAS,MAAM,OAAO,MAAM,EAAE,SAAS,MAAM,MAAM,eAAe,IAAI,MAAM,IAAI,IAAI,MAAM,OAAO,MAAM;AAAA,IACzG;AAEA,WAAOA,UAAS,IAAIA,UAAS;AAAA,EAC/B,CAAC;AAED,QAAM,SAAS,SAAS,MAAM,CAAC,MAAM,cAAe,MAAM,KAAK,KAAK,CAAC,MAAM,QAAQ,CAAE;AAErF,QAAM,gBAAgB,SAAS,MAAM,CAAC,EAAE,MAAM,cAAc,MAAM,MAAM,KAAK,MAAM,OAAO;AAE1F,QAAM,UAAU,SAAS,OAAO;AAAA,IAC9B,CAAC,SAAS,GAAG;AAAA,IACb,CAAC,GAAG,SAAS,SAAS,GAAG,MAAM,KAAK;AAAA,IACpC,CAAC,GAAG,SAAS,YAAY,GAAG,CAAC,MAAM,KAAK;AAAA,IACxC,CAAC,GAAG,SAAS,UAAU,GAAG,MAAM,MAAM;AAAA,IACtC,CAAC,GAAG,SAAS,YAAY,GAAG,CAAC,CAAC,MAAM;AAAA,IACpC,CAAC,GAAG,SAAS,YAAY,GAAG,CAAC,CAAC,MAAM;AAAA,IACpC,CAAC,GAAG,SAAS,iBAAiB,GAAG,CAAC,MAAM;AAAA,EAAA,EACxC;AAEF,QAAM,QAAQ,SAAS,MAAM;AAC3B,UAAM,OAAO,WAAW,MAAM,OAAO,IAAI,EAAE,MAAM,MAAM,OAAO,IAAI,EAAE;AACpE,UAAM,MAAqB,CAAA;AAE3B,QAAI,KAAK,CAAC,MAAM,OAAO,OAAO,KAAK,OAAO;AACxC,UAAI,OAAO,GAAG,OAAO,KAAK,IAAI;AAAA,IAChC;AAEA,QAAI,KAAK,CAAC,MAAM,OAAO,OAAO,MAAM,OAAO;AACzC,UAAI,QAAQ,GAAG,OAAO,MAAM,IAAI;AAAA,IAClC;AAEA,WAAO;AAAA,EACT,CAAC;AAED,WAAS,aAAa,MAAwB,OAAyB;AACrE,WAAO,OAAO,WAAW,WAAW,UAAU,MAAM,KAAK;AAAA,EAC3D;AAEA,WAAS,YAAY,MAAW,OAAgB;AAC9C,QAAI,MAAM,IAAI,MAAM,OAAO;AACzB,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAEA,WAAS,iBAAiB;AACxB,QAAI,CAAC,MAAM,OAAQ;AAEnB,UAAM,EAAE,WAAW,UAAU,oBAAoB,MAAM,OAAO,MAAM;AAEpE;AAAA,MACE;AAAA,MACA,cAAc,QACZ,SAAS,MAAM,gBAAgB,MAAM,OACrC,MAAM,OAAO,MAAM,IAAI,MAAM,eAAe,IAAI,SAAS,MAAM,MAAM,IAAI,IAAI;AAAA,IAAA;AAAA,EAEnF;AAEA,WAAS,SAAS,EAAE,UAAqD;AACvE,gBAAY,MAAM,MAAM;AACxB,iBAAa,QAAQ,MAAM;AAAA,EAC7B;AAEA;AAAA,IACE,MAAM,MAAM;AAAA,IACZ,CAAC,UAAU;AACT,mBAAa,SAAS,CAAC,CAAC,KAAK;AAC7B,kBAAY,UAAU,IAAI;AAC1B,aAAO,QAAA;AAAA,IACT;AAAA,EAAA;AAGF,QAAM,QAAQ,CAAC,UAAU;AACvB,iBAAa,UAAU,KAAK;AAAA,EAC9B,CAAC;AAED;AAAA,IACE,MAAM,MAAM;AAAA,IACZ,CAAC,UAAU;AACT,OAAC,SAAS,YAAY,UAAU,MAAM,UAAU;AAAA,IAClD;AAAA,EAAA;AAGF,QAAM,WAAW,CAAA;AAEjB,SAAO,UAAU,WAAW,WAAW,QAAQ,IAAI;AACnD,QAAM,cAAc,aAAa,QAAQ,MAAM,IAAI,CAAC;AACpD,eAAa,SAAS,CAAC,CAAC,MAAM,UAAU;AACxC,eAAa,UAAU,MAAM,MAAM,CAAC;AAEpC,kBAAgB,MAAM;AACpB,QAAI,OAAO,UAAU,WAAW,WAAW,QAAQ,MAAM,UAAU;AACjE,aAAO,UAAU,WAAW,WAAW,QAAQ,IAAI;AACnD,mBAAa,QAAQ,CAAC;AACtB,mBAAa,UAAU,CAAC;AACxB,mBAAa,SAAS,KAAK;AAAA,IAC7B;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
|
|
@@ -5,6 +5,7 @@ const defineLazyProps = propsFactory(
|
|
|
5
5
|
/**
|
|
6
6
|
* Принудительно рендерит содержимое компонента при его использовании.
|
|
7
7
|
* Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO.
|
|
8
|
+
* @en Renders the content of the component right away. Useful when you have content that is not in the DOM but has to be indexed for SEO.
|
|
8
9
|
*/
|
|
9
10
|
eager: Boolean
|
|
10
11
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLazy.js","sources":["../../../../../src/composables/useLazy/useLazy.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { type Ref, shallowRef, toRef, unref, watch } from 'vue';\n\n/**\n * A factory-generated configuration object used to define properties\n * with lazy initialization behavior. The resulting properties can\n * optionally be defined as eager using the `eager` option.\n *\n * @type {Object}\n * @property {boolean} eager - Specifies whether the properties should be initialized eagerly.\n */\nexport const defineLazyProps = propsFactory(\n {\n /**\n * Принудительно рендерит содержимое компонента при его использовании.\n * Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO.\n */\n eager: Boolean\n },\n 'lazy'\n);\n\n/**\n * Hook to manage lazy behavior for content rendering.\n *\n * @param {Object} props - The properties object.\n * @param {boolean} props.eager - Determines if the content should be immediately booted.\n * @param {Ref<boolean>} active - A reference that indicates whether the content is active.\n * @return {Object} Returns an object containing reactive states and methods.\n * @return {Ref<boolean>} return.isBooted - A reactive reference indicating if the content has been booted.\n * @return {Ref<boolean>} return.hasContent - A reference indicating if the content is currently available.\n * @return {Function} return.onAfterLeave - A method to call after the content is left to reset its state if necessary.\n */\nexport function useLazy(props: { eager: boolean }, active: Ref<boolean>) {\n const isBooted = shallowRef(false);\n const hasContent = toRef(() => unref(isBooted) || props.eager || unref(active));\n\n watch(active, () => (isBooted.value = true));\n\n function onAfterLeave() {\n if (!props.eager) isBooted.value = false;\n }\n\n return { isBooted, hasContent, onAfterLeave };\n}\n"],"names":[],"mappings":";;AAWO,MAAM,kBAAkB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"useLazy.js","sources":["../../../../../src/composables/useLazy/useLazy.ts"],"sourcesContent":["import { propsFactory } from '@cds/core';\nimport { type Ref, shallowRef, toRef, unref, watch } from 'vue';\n\n/**\n * A factory-generated configuration object used to define properties\n * with lazy initialization behavior. The resulting properties can\n * optionally be defined as eager using the `eager` option.\n *\n * @type {Object}\n * @property {boolean} eager - Specifies whether the properties should be initialized eagerly.\n */\nexport const defineLazyProps = propsFactory(\n {\n /**\n * Принудительно рендерит содержимое компонента при его использовании.\n * Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO.\n * @en Renders the content of the component right away. Useful when you have content that is not in the DOM but has to be indexed for SEO.\n */\n eager: Boolean\n },\n 'lazy'\n);\n\n/**\n * Hook to manage lazy behavior for content rendering.\n *\n * @param {Object} props - The properties object.\n * @param {boolean} props.eager - Determines if the content should be immediately booted.\n * @param {Ref<boolean>} active - A reference that indicates whether the content is active.\n * @return {Object} Returns an object containing reactive states and methods.\n * @return {Ref<boolean>} return.isBooted - A reactive reference indicating if the content has been booted.\n * @return {Ref<boolean>} return.hasContent - A reference indicating if the content is currently available.\n * @return {Function} return.onAfterLeave - A method to call after the content is left to reset its state if necessary.\n */\nexport function useLazy(props: { eager: boolean }, active: Ref<boolean>) {\n const isBooted = shallowRef(false);\n const hasContent = toRef(() => unref(isBooted) || props.eager || unref(active));\n\n watch(active, () => (isBooted.value = true));\n\n function onAfterLeave() {\n if (!props.eager) isBooted.value = false;\n }\n\n return { isBooted, hasContent, onAfterLeave };\n}\n"],"names":[],"mappings":";;AAWO,MAAM,kBAAkB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAME,OAAO;AAAA,EAAA;AAAA,EAET;AACF;AAaO,SAAS,QAAQ,OAA2B,QAAsB;AACvE,QAAM,WAAW,WAAW,KAAK;AACjC,QAAM,aAAa,MAAM,MAAM,MAAM,QAAQ,KAAK,MAAM,SAAS,MAAM,MAAM,CAAC;AAE9E,QAAM,QAAQ,MAAO,SAAS,QAAQ,IAAK;AAE3C,WAAS,eAAe;AACtB,QAAI,CAAC,MAAM,MAAO,UAAS,QAAQ;AAAA,EACrC;AAEA,SAAO,EAAE,UAAU,YAAY,aAAA;AACjC;"}
|
|
@@ -3,7 +3,10 @@ import { p as propsFactory } from "../../core/propsFactory.js";
|
|
|
3
3
|
import { toRef, toValue } from "vue";
|
|
4
4
|
const defineLoaderProps = propsFactory(
|
|
5
5
|
{
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Индикатор загрузки для компонента
|
|
8
|
+
* @en Loading indicator for the component
|
|
9
|
+
*/
|
|
7
10
|
loading: {
|
|
8
11
|
type: [Boolean, String],
|
|
9
12
|
default: void 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLoader.js","sources":["../../../../../src/composables/useLoader/useLoader.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory } from '@cds/core';\nimport type { ExtractPublicPropTypes, MaybeRefOrGetter, PropType } from 'vue';\nimport { toRef, toValue } from 'vue';\n\nexport interface LoaderSlotProps {\n color: string | undefined;\n isActive: boolean;\n}\n\n/**\n * A factory function that defines props for a loader component.\n *\n * The `defineLoaderProps` variable utilizes `propsFactory` to create the `loading` prop,\n * which indicates the loading state of a component.\n *\n * Properties:\n * - `loading`: Accepts `Boolean` or `String` values. Represents the loading state\n * of the component, with an optional default value of `undefined`.\n *\n * Used for generating consistent props configurations related to loading indicators.\n */\nexport const defineLoaderProps = propsFactory(\n {\n
|
|
1
|
+
{"version":3,"file":"useLoader.js","sources":["../../../../../src/composables/useLoader/useLoader.ts"],"sourcesContent":["import { getCurrentInstanceName, propsFactory } from '@cds/core';\nimport type { ExtractPublicPropTypes, MaybeRefOrGetter, PropType } from 'vue';\nimport { toRef, toValue } from 'vue';\n\nexport interface LoaderSlotProps {\n color: string | undefined;\n isActive: boolean;\n}\n\n/**\n * A factory function that defines props for a loader component.\n *\n * The `defineLoaderProps` variable utilizes `propsFactory` to create the `loading` prop,\n * which indicates the loading state of a component.\n *\n * Properties:\n * - `loading`: Accepts `Boolean` or `String` values. Represents the loading state\n * of the component, with an optional default value of `undefined`.\n *\n * Used for generating consistent props configurations related to loading indicators.\n */\nexport const defineLoaderProps = propsFactory(\n {\n /**\n * Индикатор загрузки для компонента\n * @en Loading indicator for the component\n */\n loading: {\n type: [Boolean, String] as PropType<boolean | string>,\n default: undefined\n }\n },\n 'loader'\n);\n\nexport type LoaderProps = ExtractPublicPropTypes<ReturnType<typeof defineLoaderProps>>;\n\n/**\n * A composable function that provides reactive loader class information\n * based on the loading state defined in the provided properties.\n *\n * @param {MaybeRefOrGetter<LoaderProps>} props - Reactive or non-reactive loader properties that include the loading state.\n * @param {string} [name=getCurrentInstanceName()] - The component or context name to prefix the loader class.\n * @return {Object} An object containing reactive `loaderClasses` which maps the loader class name to its active state.\n */\nexport function useLoader(props: MaybeRefOrGetter<LoaderProps>, name = getCurrentInstanceName()) {\n const loaderClasses = toRef(() => ({\n [`${name}--loading`]: toValue(props).loading\n }));\n\n return { loaderClasses };\n}\n"],"names":[],"mappings":";;;AAqBO,MAAM,oBAAoB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,SAAS;AAAA,MACP,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF;AACF;AAYO,SAAS,UAAU,OAAsC,OAAO,0BAA0B;AAC/F,QAAM,gBAAgB,MAAM,OAAO;AAAA,IACjC,CAAC,GAAG,IAAI,WAAW,GAAG,QAAQ,KAAK,EAAE;AAAA,EAAA,EACrC;AAEF,SAAO,EAAE,cAAA;AACX;"}
|
|
@@ -11,7 +11,10 @@ const oppositeMap = {
|
|
|
11
11
|
};
|
|
12
12
|
const defineLocationProps = propsFactory(
|
|
13
13
|
{
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Позиционирование элемента относительно его контейнера. Например, "top left", "center", "bottom right" и т.д.
|
|
16
|
+
* @en Position of the element relative to its container, for example "top left", "center", "bottom right".
|
|
17
|
+
*/
|
|
15
18
|
location: String
|
|
16
19
|
},
|
|
17
20
|
"location"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocation.js","sources":["../../../../../src/composables/useLocation/useLocation.ts"],"sourcesContent":["import { useRtl } from '@cds/composables/useLocale';\nimport { propsFactory } from '@cds/core';\nimport { type Anchor, parseAnchor } from '@cds/utils';\nimport { computed, type CSSProperties, type ExtractPublicPropTypes, type PropType } from 'vue';\n\nconst oppositeMap = {\n center: 'center',\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n} as const;\n\nexport const defineLocationProps = propsFactory(\n {\n
|
|
1
|
+
{"version":3,"file":"useLocation.js","sources":["../../../../../src/composables/useLocation/useLocation.ts"],"sourcesContent":["import { useRtl } from '@cds/composables/useLocale';\nimport { propsFactory } from '@cds/core';\nimport { type Anchor, parseAnchor } from '@cds/utils';\nimport { computed, type CSSProperties, type ExtractPublicPropTypes, type PropType } from 'vue';\n\nconst oppositeMap = {\n center: 'center',\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n} as const;\n\nexport const defineLocationProps = propsFactory(\n {\n /**\n * Позиционирование элемента относительно его контейнера. Например, \"top left\", \"center\", \"bottom right\" и т.д.\n * @en Position of the element relative to its container, for example \"top left\", \"center\", \"bottom right\".\n */\n location: String as PropType<Anchor | null>\n },\n 'location'\n);\n\nexport interface LocationProps extends ExtractPublicPropTypes<ReturnType<typeof defineLocationProps>> {}\n\n/**\n * Computes and returns CSS styles based on the specified location, alignment, and offset logic.\n *\n * @param {LocationProps} props - The properties containing the location configuration.\n * @param {boolean} [opposite=false] - Determines whether to apply styles in the opposite direction.\n * @param {function(string): number} [offset] - A function that calculates the offset for a specific side.\n * @return {{ locationStyles: import('vue').ComputedRef<CSSProperties> }} An object containing a computed ref with the calculated CSS properties.\n */\nexport function useLocation(props: LocationProps, opposite = false, offset?: (side: string) => number) {\n const { isRtl } = useRtl();\n\n const locationStyles = computed(() => {\n if (!props.location) return {};\n\n const { side, align } = parseAnchor(\n props.location.split(' ').length > 1 ? props.location : (`${props.location} center` as Anchor),\n isRtl.value\n );\n\n function getOffset(side: string) {\n return offset ? offset(side) : 0;\n }\n\n const styles = {} as CSSProperties;\n\n if (side !== 'center') {\n if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;\n else styles[side] = 0;\n }\n if (align !== 'center') {\n if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;\n else styles[align] = 0;\n } else {\n if (side === 'center') styles.top = styles.left = '50%';\n else {\n styles[\n (\n {\n top: 'left',\n bottom: 'left',\n left: 'top',\n right: 'top'\n } as const\n )[side]\n ] = '50%';\n }\n styles.transform = {\n top: 'translateX(-50%)',\n bottom: 'translateX(-50%)',\n left: 'translateY(-50%)',\n right: 'translateY(-50%)',\n center: 'translate(-50%, -50%)'\n }[side];\n }\n\n return styles;\n });\n\n return { locationStyles };\n}\n"],"names":["side"],"mappings":";;;;AAKA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT;AAEO,MAAM,sBAAsB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,UAAU;AAAA,EAAA;AAAA,EAEZ;AACF;AAYO,SAAS,YAAY,OAAsB,WAAW,OAAO,QAAmC;AACrG,QAAM,EAAE,MAAA,IAAU,OAAA;AAElB,QAAM,iBAAiB,SAAS,MAAM;AACpC,QAAI,CAAC,MAAM,SAAU,QAAO,CAAA;AAE5B,UAAM,EAAE,MAAM,MAAA,IAAU;AAAA,MACtB,MAAM,SAAS,MAAM,GAAG,EAAE,SAAS,IAAI,MAAM,WAAY,GAAG,MAAM,QAAQ;AAAA,MAC1E,MAAM;AAAA,IAAA;AAGR,aAAS,UAAUA,OAAc;AAC/B,aAAO,SAAS,OAAOA,KAAI,IAAI;AAAA,IACjC;AAEA,UAAM,SAAS,CAAA;AAEf,QAAI,SAAS,UAAU;AACrB,UAAI,iBAAiB,YAAY,IAAI,CAAC,IAAI,eAAe,UAAU,IAAI,CAAC;AAAA,UACnE,QAAO,IAAI,IAAI;AAAA,IACtB;AACA,QAAI,UAAU,UAAU;AACtB,UAAI,iBAAiB,YAAY,KAAK,CAAC,IAAI,eAAe,UAAU,KAAK,CAAC;AAAA,UACrE,QAAO,KAAK,IAAI;AAAA,IACvB,OAAO;AACL,UAAI,SAAS,SAAU,QAAO,MAAM,OAAO,OAAO;AAAA,WAC7C;AACH,eAEI;AAAA,UACE,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,QAAA,EAET,IAAI,CACR,IAAI;AAAA,MACN;AACA,aAAO,YAAY;AAAA,QACjB,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MAAA,EACR,IAAI;AAAA,IACR;AAEA,WAAO;AAAA,EACT,CAAC;AAED,SAAO,EAAE,eAAA;AACX;"}
|