@central-design-system/components 4.0.0-alpha.2 → 4.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/MIGRATION.md +1 -1
- package/dist/browser/chunks/cdsLegacy-VUz8RzDN.js +120 -0
- package/dist/browser/chunks/useIcons.component-Df4MSurB.js +102 -0
- package/dist/browser/entry.js +31811 -0
- package/dist/browser/iconsets/carbon.js +155 -0
- package/dist/browser/iconsets/cds.js +149 -0
- package/dist/browser/iconsets/cdsLegacy.js +6 -0
- package/dist/browser/iconsets/lucide.js +156 -0
- package/dist/browser/iconsets/mdi.js +154 -0
- package/dist/browser/iconsets/phosphor.js +155 -0
- package/dist/browser/iconsets/remix.js +155 -0
- package/dist/cjs/entry.js +11 -11
- package/dist/es/entry.js +221 -202
- package/dist/es/entry.js.map +1 -1
- package/dist/es/src/cds.js +5 -5
- package/dist/es/src/components/CdsApp/CdsApp.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsApp/api/CdsApp.props.js +1 -1
- package/dist/es/src/components/CdsAvatar/CdsAvatar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsAvatar/api/CdsAvatar.props.js +1 -1
- package/dist/es/src/components/CdsBadge/CdsBadge.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsBadge/api/CdsBadge.props.js +1 -1
- package/dist/es/src/components/CdsButton/CdsButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsButton/api/CdsButton.props.js +1 -1
- package/dist/es/src/components/CdsButtonGroup/CdsButtonGroup.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsButtonGroup/api/CdsButtonGroup.props.js +1 -1
- package/dist/es/src/components/CdsCard/CdsCard.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsCard/CdsCardGroup.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsCard/api/CdsCard.props.js +1 -1
- package/dist/es/src/components/CdsDatePicker/CdsDatePicker.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsDatePicker/api/CdsDatePicker.props.js +1 -1
- package/dist/es/src/components/CdsDivider/CdsDivider.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsDrawer/CdsDrawer.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/src/components/CdsDrawer/api/CdsDrawer.props.js +1 -1
- package/dist/es/src/components/CdsEmptyState/CdsEmptyState.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/src/components/CdsEmptyState/api/CdsEmptyState.props.js +1 -1
- package/dist/es/src/components/CdsExpandablePanel/CdsExpandablePanels.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsExpandablePanel/api/CdsExpandablePanel.props.js +1 -1
- package/dist/es/src/components/CdsField/CdsField.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsField/api/CdsField.props.js +1 -1
- package/dist/es/src/components/CdsFooter/CdsFooter.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/src/components/CdsFooter/api/CdsFooter.props.js +1 -1
- package/dist/es/src/components/CdsFunctionalButton/api/CdsFunctionalButton.props.js +1 -1
- package/dist/es/src/components/CdsGrid/CdsCol.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsHeader/CdsHeader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsHeader/api/CdsHeader.props.js +1 -1
- package/dist/es/src/components/CdsIcon/CdsIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsIcon/api/CdsIcon.props.js +1 -1
- package/dist/es/src/components/CdsImage/CdsImage.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsImage/api/CdsImage.props.js +1 -1
- package/dist/es/src/components/CdsInput/CdsInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsInput/api/CdsInput.props.js +1 -1
- package/dist/es/src/components/CdsLayout/CdsLayout.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/src/components/CdsLayout/api/CdsLayout.props.js +1 -1
- package/dist/es/src/components/CdsLink/CdsLink.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsLink/api/CdsLink.props.js +1 -1
- package/dist/es/src/components/CdsList/CdsList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsList/CdsListItem.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsList/api/CdsList.props.js +1 -1
- package/dist/es/src/components/CdsLoader/CdsLoader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsNotification/CdsNotification.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsNotification/api/CdsNotification.props.js +1 -1
- package/dist/es/src/components/CdsOtpInput/CdsOtpField.js +2 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpField.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpField.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpField.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpGroup.js +2 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpGroup.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpGroup.vue_vue_type_script_setup_true_lang.js +51 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpInput.css +204 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpInput.js +2 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpInput.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpInput.vue_vue_type_script_setup_true_lang.js +338 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpSeparator.js +2 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpSeparator.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpSeparator.vue_vue_type_script_setup_true_lang.js +34 -0
- package/dist/es/src/components/CdsOtpInput/CdsOtpSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/api/CdsOtpInput.constants.js +16 -0
- package/dist/es/src/components/CdsOtpInput/api/CdsOtpInput.constants.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/api/CdsOtpInput.props.js +97 -0
- package/dist/es/src/components/CdsOtpInput/api/CdsOtpInput.props.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/api/CdsOtpInput.types.js +2 -0
- package/dist/es/src/components/CdsOtpInput/api/CdsOtpInput.types.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/composables/useOtpInput.js +329 -0
- package/dist/es/src/components/CdsOtpInput/composables/useOtpInput.js.map +1 -0
- package/dist/es/src/components/CdsOtpInput/index.js +17 -0
- package/dist/es/src/components/CdsOtpInput/index.js.map +1 -0
- package/dist/es/src/components/CdsOverlay/CdsOverlay.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsOverlay/api/CdsOverlay.props.js +1 -1
- package/dist/es/src/components/CdsPage/CdsPage.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsPagination/CdsPagination.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/src/components/CdsPagination/api/CdsPagination.props.js +1 -1
- package/dist/es/src/components/CdsProgressBar/CdsProgressBar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsProgressBar/api/CdsProgressBar.props.js +1 -1
- package/dist/es/src/components/CdsProgressCircle/CdsProgressCircle.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsProgressCircle/api/CdsProgressCircle.props.js +1 -1
- package/dist/es/src/components/CdsSkeletonLoader/CdsSkeletonLoader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsSkeletonLoader/api/CdsSkeletonLoader.props.js +1 -1
- package/dist/es/src/components/CdsSlideGroup/CdsSlideGroup.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsSlideGroup/api/CdsSlideGroup.props.js +1 -1
- package/dist/es/src/components/CdsSlideView/api/CdsSlideView.props.js +1 -1
- package/dist/es/src/components/CdsStages/CdsStages.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsStages/api/CdsStages.props.js +1 -1
- package/dist/es/src/components/CdsStatus/CdsStatus.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsStatus/api/CdsStatus.props.js +1 -1
- package/dist/es/src/components/CdsSteps/api/CdsSteps.props.js +1 -1
- package/dist/es/src/components/CdsSurface/CdsSurface.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsSurface/api/CdsSurface.props.js +1 -1
- package/dist/es/src/components/CdsTable/api/CdsTable.props.js +1 -1
- package/dist/es/src/components/CdsTable/components/TableProvider.js +2 -2
- package/dist/es/src/components/CdsTag/CdsTag.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsTagGroup/CdsTagGroup.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsTagGroup/api/CdsTagGroup.props.js +1 -1
- package/dist/es/src/components/CdsTimePicker/CdsTimePicker.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsTimePicker/api/CdsTimePicker.props.js +1 -1
- package/dist/es/src/components/CdsToast/CdsToast.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsToolbar/CdsToolbar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsToolbar/api/CdsToolbar.props.js +1 -1
- package/dist/es/src/components/CdsTree/CdsTree.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/CdsTree/api/CdsTree.props.js +1 -1
- package/dist/es/src/components/CdsUploader/CdsUploader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/src/components/index.js +10 -0
- package/dist/es/src/components/index.js.map +1 -1
- package/dist/es/src/composables/useHydration/useHydration.js +1 -1
- package/dist/es/src/composables/useLayout/useLayout.js +1 -1
- package/dist/es/src/composables/useTheme/internal/useTheme.constants.js +13 -2
- package/dist/es/src/composables/useTheme/internal/useTheme.constants.js.map +1 -1
- package/dist/es/src/composables/useVirtual/useVirtual.js +1 -1
- package/dist/es/src/core/useDefaults.js +3 -1
- package/dist/es/src/locales/adapters/cdsLocaleAdapter.js +2 -1
- package/dist/es/src/locales/adapters/cdsLocaleAdapter.js.map +1 -1
- package/dist/es/src/locales/en.js +70 -0
- package/dist/es/src/locales/en.js.map +1 -0
- package/dist/es/src/locales/index.js +18 -0
- package/dist/es/src/locales/index.js.map +1 -0
- package/dist/es/src/locales/ru.js +1 -0
- package/dist/es/src/locales/ru.js.map +1 -1
- package/dist/es/src/themes/index.js +4 -0
- package/dist/es/src/themes/index.js.map +1 -1
- package/dist/es/src/themes/lumaDark.js +20 -0
- package/dist/es/src/themes/lumaDark.js.map +1 -0
- package/dist/es/src/themes/lumaLight.js +20 -0
- package/dist/es/src/themes/lumaLight.js.map +1 -0
- package/dist/esm-node/entry.mjs +221 -202
- package/dist/esm-node/src/assets/icons/cdsLegacy.mjs +1 -1
- package/dist/esm-node/src/cds.mjs +6 -6
- package/dist/esm-node/src/components/CdsApp/CdsApp.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsApp/api/CdsApp.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsAutocomplete/CdsAutocomplete.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsAutocomplete/api/CdsAutocomplete.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsAvatar/CdsAvatar.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsAvatar/api/CdsAvatar.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsBadge/CdsBadge.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsBadge/api/CdsBadge.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsBreadcrumbs/CdsBreadcrumbs.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsBreadcrumbs/CdsBreadcrumbsDivider.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsBreadcrumbs/CdsBreadcrumbsItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsBreadcrumbs/api/CdsBreadcrumbs.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsButton/CdsButton.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsButton/api/CdsButton.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsButtonGroup/CdsButtonGroup.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsButtonGroup/api/CdsButtonGroup.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsButtonToggle/CdsButtonToggle.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsButtonToggle/api/CdsButtonToggle.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsCard/CdsCard.vue_vue_type_script_setup_true_lang.mjs +4 -4
- 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 +2 -2
- package/dist/esm-node/src/components/CdsCard/CdsCardGroup.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsCard/CdsCardItem.vue_vue_type_script_setup_true_lang.mjs +2 -2
- 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 +2 -2
- package/dist/esm-node/src/components/CdsCard/index.mjs +1 -1
- package/dist/esm-node/src/components/CdsCarousel/CdsCarousel.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsCarousel/CdsCarouselItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsCheckbox/CdsCheckbox.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsCheckbox/api/CdsCheckbox.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsCheckboxButton/CdsCheckboxButton.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsCombobox/CdsCombobox.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsCombobox/api/CdsCombobox.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsCounter/CdsCounter.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsDateInput/CdsDateInput.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsDateInput/api/CdsDateInput.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsDatePicker/CdsDatePicker.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsDatePicker/api/CdsDatePicker.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsDatePicker/composables/useCalendar.mjs +3 -3
- package/dist/esm-node/src/components/CdsDescription/CdsDescription.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsDivider/CdsDivider.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsDrawer/CdsDrawer.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsDrawer/api/CdsDrawer.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsEmptyState/CdsEmptyState.vue_vue_type_script_setup_true_lang.mjs +5 -5
- package/dist/esm-node/src/components/CdsEmptyState/api/CdsEmptyState.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanel.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanelContent.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanelTitle.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsExpandablePanel/CdsExpandablePanels.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsExpandablePanel/api/CdsExpandablePanel.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsField/CdsField.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsField/api/CdsField.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsFileInput/CdsFileInput.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsFileInput/api/CdsFileInput.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsFileUpload/CdsFileUpload.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsFileUpload/CdsFileUploadDropzone.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsFileUpload/CdsFileUploadItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsFileUpload/CdsFileUploadList.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsFileUpload/api/CdsFileUpload.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsFooter/CdsFooter.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsFooter/api/CdsFooter.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsForm/CdsForm.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsFunctionalButton/api/CdsFunctionalButton.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsGrid/CdsCol.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsGrid/CdsRow.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsGrid/api/CdsGrid.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsGrid/components/CSSGrid.mjs +1 -1
- package/dist/esm-node/src/components/CdsGrid/components/FlexGrid.mjs +1 -1
- package/dist/esm-node/src/components/CdsHeader/CdsHeader.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsHeader/api/CdsHeader.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsHighlight/CdsHighlight.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsHighlight/utils/toHighlight.mjs +1 -1
- package/dist/esm-node/src/components/CdsIcon/CdsIcon.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsIcon/api/CdsIcon.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsImage/CdsImage.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsImage/api/CdsImage.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsInput/CdsInput.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsInput/CdsInputIcon.mjs +1 -1
- package/dist/esm-node/src/components/CdsInput/api/CdsInput.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsLabel/CdsLabel.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsLabel/api/CdsLabel.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsLayout/CdsLayout.vue_vue_type_script_setup_true_lang.mjs +5 -5
- package/dist/esm-node/src/components/CdsLayout/api/CdsLayout.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsLayout/internal/LayoutResizeObserver.mjs +1 -1
- package/dist/esm-node/src/components/CdsLayout/internal/LayoutScrollObserver.mjs +2 -2
- package/dist/esm-node/src/components/CdsLink/CdsLink.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsLink/api/CdsLink.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsList/CdsList.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsList/CdsListGroup.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsList/CdsListItem.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsList/CdsListItemAction.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsList/CdsListItemDivider.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsList/CdsListItemMedia.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsList/CdsListSubheader.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsList/api/CdsList.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsList/composables/useList.mjs +1 -1
- package/dist/esm-node/src/components/CdsLoader/CdsLoader.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsMain/CdsMain.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsMenu/CdsMenu.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsMenu/api/CdsMenu.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsMessages/CdsMessages.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsModal/CdsModal.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsNotification/CdsNotification.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsNotification/api/CdsNotification.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsNotificationAlert/CdsNotificationAlert.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsNotificationAlert/api/CdsNotificationAlert.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpField.mjs +2 -0
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpField.vue_vue_type_script_setup_true_lang.mjs +62 -0
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpGroup.mjs +2 -0
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpGroup.vue_vue_type_script_setup_true_lang.mjs +51 -0
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpInput.css +204 -0
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpInput.mjs +2 -0
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpInput.vue_vue_type_script_setup_true_lang.mjs +336 -0
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpSeparator.mjs +2 -0
- package/dist/esm-node/src/components/CdsOtpInput/CdsOtpSeparator.vue_vue_type_script_setup_true_lang.mjs +34 -0
- package/dist/esm-node/src/components/CdsOtpInput/api/CdsOtpInput.constants.mjs +16 -0
- package/dist/esm-node/src/components/CdsOtpInput/api/CdsOtpInput.props.mjs +97 -0
- package/dist/esm-node/src/components/CdsOtpInput/api/CdsOtpInput.types.mjs +2 -0
- package/dist/esm-node/src/components/CdsOtpInput/composables/useOtpInput.mjs +329 -0
- package/dist/esm-node/src/components/CdsOtpInput/index.mjs +17 -0
- package/dist/esm-node/src/components/CdsOverlay/CdsOverlay.vue_vue_type_script_setup_true_lang.mjs +6 -6
- package/dist/esm-node/src/components/CdsOverlay/api/CdsOverlay.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsOverlay/components/Scrim.mjs +1 -1
- package/dist/esm-node/src/components/CdsOverlay/composables/useActivator.mjs +2 -2
- package/dist/esm-node/src/components/CdsOverlay/composables/useLocationStrategies.mjs +3 -3
- package/dist/esm-node/src/components/CdsOverlay/composables/useScrollStrategies.mjs +3 -3
- package/dist/esm-node/src/components/CdsPage/CdsPage.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsPagination/CdsPagination.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsPagination/api/CdsPagination.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsProgressBar/CdsProgressBar.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsProgressBar/api/CdsProgressBar.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsProgressBar/composables/useChunk.mjs +1 -1
- package/dist/esm-node/src/components/CdsProgressCircle/CdsProgressCircle.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsProgressCircle/api/CdsProgressCircle.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsRadio/CdsRadio.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsRadioGroup/CdsRadioGroup.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsRadioGroup/api/CdsRadioGroup.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsResponsive/CdsResponsive.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsResponsive/composables/useAspectStyles.mjs +1 -1
- package/dist/esm-node/src/components/CdsSelect/CdsSelect.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsSelect/api/CdsSelect.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsSelectionControl/CdsSelectionControl.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsSelectionControl/api/CdsSelectionControl.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsSelectionControl/composables/useSelectionControl.mjs +1 -1
- package/dist/esm-node/src/components/CdsSelectionControlGroup/CdsSelectionControlGroup.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSelectionControlGroup/api/CdsSelectionControlGroup.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsSkeletonLoader/CdsSkeletonLoader.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsSkeletonLoader/api/CdsSkeletonLoader.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsSlideGroup/CdsSlideGroup.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsSlideGroup/api/CdsSlideGroup.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsSlideView/CdsSlideView.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsSlideView/CdsSlideViewItem.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsSlideView/api/CdsSlideView.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsStages/CdsStages.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsStages/api/CdsStages.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsStatus/CdsStatus.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsStatus/api/CdsStatus.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsSteps/CdsSteps.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsSteps/CdsStepsActions.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSteps/CdsStepsItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSteps/CdsStepsView.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSteps/CdsStepsViewItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsSteps/api/CdsSteps.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsSurface/CdsSurface.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsSurface/api/CdsSurface.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/api/CdsTable.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/Body/BodyRow.mjs +2 -2
- package/dist/esm-node/src/components/CdsTable/components/Cell/Cell.mjs +6 -6
- package/dist/esm-node/src/components/CdsTable/components/Drag/ColumnDragHandle.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/Drag/RowDragHandle.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/Filter/FilterDropdown.mjs +3 -3
- package/dist/esm-node/src/components/CdsTable/components/FixedHolder/FixedHolder.mjs +2 -2
- package/dist/esm-node/src/components/CdsTable/components/Header/DragHandle.mjs +4 -4
- package/dist/esm-node/src/components/CdsTable/components/Header/Header.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/Header/HeaderRow.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/ResizeObserver/ResizeObserver.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/components/StickyScrollbar/StickyScrollbar.mjs +3 -3
- package/dist/esm-node/src/components/CdsTable/components/Table/InternalTable.mjs +4 -4
- package/dist/esm-node/src/components/CdsTable/components/TableProvider.mjs +6 -6
- package/dist/esm-node/src/components/CdsTable/composable/columns.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/composable/filter.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/composable/frame.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/composable/pagination.mjs +2 -2
- package/dist/esm-node/src/components/CdsTable/composable/scroll.mjs +3 -3
- package/dist/esm-node/src/components/CdsTable/composable/selection.mjs +2 -2
- package/dist/esm-node/src/components/CdsTable/composable/sorter.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/composable/sticky.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/context/sticky.mjs +1 -1
- package/dist/esm-node/src/components/CdsTable/utils/column.mjs +1 -1
- package/dist/esm-node/src/components/CdsTabs/CdsTab.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsTabs/CdsTabs.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsTabs/CdsTabsView.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsTabs/CdsTabsViewItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsTabs/api/CdsTabs.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTag/CdsTag.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsTag/api/CdsTag.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTagGroup/CdsTagGroup.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsTagGroup/api/CdsTagGroup.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsTextArea/CdsTextArea.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsTextArea/api/CdsTextArea.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTextInput/CdsTextInput.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsTextInput/api/CdsTextInput.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTimePicker/CdsTimePicker.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsTimePicker/api/CdsTimePicker.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTimePicker/composables/useTime.mjs +1 -1
- package/dist/esm-node/src/components/CdsToast/CdsToast.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsToast/api/CdsToast.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsToastQueue/CdsToastQueue.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsToastQueue/api/CdsToastQueue.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsToastQueue/composables/useDocumentVisibility.mjs +1 -1
- package/dist/esm-node/src/components/CdsToggle/CdsToggle.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsToggle/api/CdsToggle.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsToolbar/CdsToolbar.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsToolbar/CdsToolbarTitle.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsToolbar/api/CdsToolbar.props.mjs +2 -2
- package/dist/esm-node/src/components/CdsTooltip/CdsTooltip.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/CdsTooltip/api/CdsTooltip.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/CdsTree.vue_vue_type_script_setup_true_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsTree/CdsTreeDirectory.vue_vue_type_script_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsTree/CdsTreeNode.vue_vue_type_script_lang.mjs +3 -3
- package/dist/esm-node/src/components/CdsTree/api/CdsTree.props.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/DropIndicator.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/NodeList.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/SwitcherIcon.mjs +2 -2
- package/dist/esm-node/src/components/CdsTree/components/TreeProvider.mjs +4 -4
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/Filler.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/Item.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/ResizeObserver.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/ScrollBar.mjs +2 -2
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/VirtualList.mjs +2 -2
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/features/useFrameWheel.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/features/useHeights.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/components/VirtualList/features/useMobileTouchMove.mjs +1 -1
- package/dist/esm-node/src/components/CdsTree/utils/data.mjs +3 -3
- package/dist/esm-node/src/components/CdsUploader/CdsUploader.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsUploader/components/AjaxUploader.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/dist/esm-node/src/components/CdsVirtualScroll/CdsVirtualScroll.vue_vue_type_script_setup_true_lang.mjs +4 -4
- package/dist/esm-node/src/components/CdsVirtualScroll/CdsVirtualScrollItem.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/dist/esm-node/src/components/index.mjs +10 -0
- package/dist/esm-node/src/composables/useColor/useColor.mjs +1 -1
- package/dist/esm-node/src/composables/useDatetime/useDatetime.mjs +2 -2
- package/dist/esm-node/src/composables/useDimensions/useDimensions.mjs +1 -1
- package/dist/esm-node/src/composables/useDisabled/index.mjs +1 -1
- package/dist/esm-node/src/composables/useDisplay/internal/useDisplay.helpers.mjs +1 -1
- package/dist/esm-node/src/composables/useDisplay/useDisplay.mjs +1 -1
- package/dist/esm-node/src/composables/useFilter/useFilter.mjs +1 -1
- package/dist/esm-node/src/composables/useFocus/useFocus.mjs +1 -1
- package/dist/esm-node/src/composables/useFocus/useFocusGroup.mjs +1 -1
- package/dist/esm-node/src/composables/useFocus/useFocusTrap.mjs +2 -2
- package/dist/esm-node/src/composables/useForm/useForm.mjs +1 -1
- package/dist/esm-node/src/composables/useGoTo/useGoTo.mjs +3 -3
- package/dist/esm-node/src/composables/useGroup/useGroup.mjs +1 -1
- package/dist/esm-node/src/composables/useHydration/useHydration.mjs +2 -2
- package/dist/esm-node/src/composables/useIcons/useIcons.mjs +1 -1
- package/dist/esm-node/src/composables/useItems/useItems.mjs +1 -1
- package/dist/esm-node/src/composables/useLayout/useLayout.mjs +2 -2
- package/dist/esm-node/src/composables/useLocation/useLocation.mjs +1 -1
- package/dist/esm-node/src/composables/useNested/strategies/activeStrategies.mjs +1 -1
- package/dist/esm-node/src/composables/useNested/useNested.mjs +2 -2
- package/dist/esm-node/src/composables/useResizeObserver/useResizeObserver.mjs +1 -1
- package/dist/esm-node/src/composables/useRouter/useRouter.mjs +1 -1
- package/dist/esm-node/src/composables/useSize/useSize.mjs +1 -1
- package/dist/esm-node/src/composables/useTeleport/useTeleport.mjs +2 -2
- package/dist/esm-node/src/composables/useTheme/internal/useTheme.constants.mjs +13 -2
- package/dist/esm-node/src/composables/useTheme/internal/useTheme.utils.mjs +2 -2
- package/dist/esm-node/src/composables/useTheme/useTheme.mjs +2 -2
- package/dist/esm-node/src/composables/useTransition/useTransition.mjs +1 -1
- package/dist/esm-node/src/composables/useValidation/useValidation.mjs +1 -1
- package/dist/esm-node/src/composables/useVirtual/useVirtual.mjs +2 -2
- package/dist/esm-node/src/core/defineComponent.mjs +2 -2
- package/dist/esm-node/src/core/getCurrentInstance.mjs +1 -1
- package/dist/esm-node/src/core/useDefaults.mjs +4 -2
- package/dist/esm-node/src/core/useProxyModel.mjs +1 -1
- package/dist/esm-node/src/hooks/createContext/index.mjs +1 -1
- package/dist/esm-node/src/hooks/createObserver/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useBreakpoints/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useEventListener/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useHydration/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useIntersectionObserver/index.mjs +1 -1
- package/dist/esm-node/src/hooks/useResizeObserver/index.mjs +1 -1
- package/dist/esm-node/src/icons.mjs +2 -2
- package/dist/esm-node/src/locales/adapters/cdsLocaleAdapter.mjs +3 -2
- package/dist/esm-node/src/locales/en.mjs +70 -0
- package/dist/esm-node/src/locales/index.mjs +18 -0
- package/dist/esm-node/src/locales/ru.mjs +1 -0
- package/dist/esm-node/src/themes/index.mjs +4 -0
- package/dist/esm-node/src/themes/lumaDark.mjs +20 -0
- package/dist/esm-node/src/themes/lumaLight.mjs +20 -0
- package/dist/esm-node/src/transitions/collapseTransition.mjs +1 -1
- package/dist/esm-node/src/transitions/createTransition.mjs +1 -1
- package/dist/esm-node/src/transitions/modalTransition.mjs +1 -1
- package/dist/esm-node/src/utils/colorsUtils/utils.mjs +2 -2
- package/dist/esm-node/src/utils/dom/classNames.mjs +1 -1
- package/dist/esm-node/src/utils/dom/console.mjs +1 -1
- package/dist/esm-node/src/utils/dom/dom.mjs +1 -1
- package/dist/iife/entry.js +11 -11
- package/dist/styles.css +2 -2
- package/dist/types/components/CdsOtpInput/CdsOtpField.vue.d.ts +25 -0
- package/dist/types/components/CdsOtpInput/CdsOtpGroup.vue.d.ts +34 -0
- package/dist/types/components/CdsOtpInput/CdsOtpInput.vue.d.ts +222 -0
- package/dist/types/components/CdsOtpInput/CdsOtpSeparator.vue.d.ts +25 -0
- package/dist/types/components/CdsOtpInput/api/CdsOtpInput.constants.d.ts +9 -0
- package/dist/types/components/CdsOtpInput/api/CdsOtpInput.props.d.ts +340 -0
- package/dist/types/components/CdsOtpInput/api/CdsOtpInput.types.d.ts +47 -0
- package/dist/types/components/CdsOtpInput/composables/useOtpInput.d.ts +76 -0
- package/dist/types/components/CdsOtpInput/index.d.ts +529 -0
- package/dist/types/components/index.d.ts +1 -0
- package/dist/types/composables/useTheme/internal/useTheme.constants.d.ts +1 -1
- package/dist/types/entry.d.ts +135 -123
- package/dist/types/locales/en.d.ts +1 -0
- package/dist/types/locales/index.d.ts +1 -0
- package/dist/types/locales/ru.d.ts +1 -0
- package/dist/types/themes/index.d.ts +4 -0
- package/dist/types/themes/lumaDark.d.ts +190 -0
- package/dist/types/themes/lumaLight.d.ts +190 -0
- package/llms/llms-components.txt +512 -1
- package/llms/llms-full.txt +1561 -11
- package/llms/llms-guides.txt +807 -10
- package/llms/llms-migration.txt +2 -2
- package/llms/llms-tokens.txt +243 -1
- package/llms/llms.txt +4 -3
- package/package.json +8 -1
- package/src/themes/css/lumaDark.css +184 -0
- package/src/themes/css/lumaLight.css +184 -0
- package/src/themes/index.ts +4 -0
- package/src/themes/lumaDark.ts +17 -0
- package/src/themes/lumaLight.ts +17 -0
package/llms/llms-full.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Central Design System (CDS 4) — полная документация
|
|
2
2
|
|
|
3
|
-
> Версия: 4.0.0-alpha.
|
|
3
|
+
> Версия: 4.0.0-alpha.4
|
|
4
4
|
> Всё сразу: гайды, токены и темы, компоненты с примерами и контрактом API, миграция с CDS 3.
|
|
5
5
|
> Сгенерировано автоматически (`bun run generate:meta` → `bun run generate:llms`). Не редактировать вручную.
|
|
6
6
|
|
|
@@ -421,16 +421,18 @@ ThemeDefinition (TS) → --cds-color-* / --cds-* (CSS-переменные)
|
|
|
421
421
|
|
|
422
422
|
## Подключение темы
|
|
423
423
|
|
|
424
|
-
CDS 4 поставляет
|
|
424
|
+
CDS 4 поставляет восемь готовых тем:
|
|
425
425
|
|
|
426
|
-
| Тема | Описание
|
|
427
|
-
| -------------
|
|
428
|
-
| `cdsLight` | светлая тема, используется по умолчанию
|
|
429
|
-
| `cdsDark` | тёмная тема
|
|
430
|
-
| `b2bLight` | светлая тема для приложений B2B-Center
|
|
431
|
-
| `b2bDark` | тёмная тема для приложений B2B-Center
|
|
432
|
-
| `
|
|
433
|
-
| `
|
|
426
|
+
| Тема | Описание |
|
|
427
|
+
| ------------- |-----------------------------------------|
|
|
428
|
+
| `cdsLight` | светлая тема, используется по умолчанию |
|
|
429
|
+
| `cdsDark` | тёмная тема |
|
|
430
|
+
| `b2bLight` | светлая тема для приложений B2B-Center |
|
|
431
|
+
| `b2bDark` | тёмная тема для приложений B2B-Center |
|
|
432
|
+
| `lumaLight` | светлая тема Luma |
|
|
433
|
+
| `lumaDark` | тёмная тема Luma |
|
|
434
|
+
| `promoLight` | светлая промо-тема |
|
|
435
|
+
| `promoDark` | тёмная промо-тема |
|
|
434
436
|
|
|
435
437
|
> По умолчанию используется `cdsLight` — подключать её не нужно.
|
|
436
438
|
|
|
@@ -1339,6 +1341,801 @@ defineRender(() => (
|
|
|
1339
1341
|
|
|
1340
1342
|
---
|
|
1341
1343
|
|
|
1344
|
+
# Глобальная конфигурация
|
|
1345
|
+
|
|
1346
|
+
CDS 4 позволяет задать значения пропсов по умолчанию — глобально, для конкретного компонента
|
|
1347
|
+
или только внутри определённого поддерева. Так вы один раз описываете «как выглядят кнопки
|
|
1348
|
+
в нашем продукте» и перестаёте дублировать одни и те же пропсы в каждом шаблоне.
|
|
1349
|
+
|
|
1350
|
+
## Настройка
|
|
1351
|
+
|
|
1352
|
+
Значения по умолчанию задаются опцией `defaults` в `createCds`. Ключ `global` действует на все
|
|
1353
|
+
компоненты, ключ с именем компонента — только на него.
|
|
1354
|
+
|
|
1355
|
+
```ts
|
|
1356
|
+
import { createApp } from 'vue';
|
|
1357
|
+
import '@central-design-system/components/styles';
|
|
1358
|
+
import { createCds, components, directives } from '@central-design-system/components';
|
|
1359
|
+
|
|
1360
|
+
import App from './App.vue';
|
|
1361
|
+
|
|
1362
|
+
const cds = createCds({
|
|
1363
|
+
components,
|
|
1364
|
+
directives,
|
|
1365
|
+
defaults: {
|
|
1366
|
+
global: {
|
|
1367
|
+
size: 'sm'
|
|
1368
|
+
},
|
|
1369
|
+
CdsButton: {
|
|
1370
|
+
appearance: 'secondary'
|
|
1371
|
+
},
|
|
1372
|
+
CdsTextInput: {
|
|
1373
|
+
hideDetails: 'auto'
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
});
|
|
1377
|
+
|
|
1378
|
+
createApp(App).use(cds);
|
|
1379
|
+
```
|
|
1380
|
+
|
|
1381
|
+
**Важно.** Пропсы в `defaults` пишутся в camelCase: `hideDetails`, а не `hide-details`.
|
|
1382
|
+
|
|
1383
|
+
Ключ компонента — это его имя из `defineOptions({ name })`, то есть `CdsButton`, `CdsTextInput`,
|
|
1384
|
+
`CdsCardActions` и так далее. Имена подкомпонентов (`CdsCardTitle`, `CdsListItem`) работают так же,
|
|
1385
|
+
как имена корневых.
|
|
1386
|
+
|
|
1387
|
+
### Порядок разрешения значения
|
|
1388
|
+
|
|
1389
|
+
Для каждого пропса CDS берёт первое подходящее значение:
|
|
1390
|
+
|
|
1391
|
+
1. проп, явно переданный в шаблоне;
|
|
1392
|
+
2. `defaults.<ИмяКомпонента>.<проп>` из ближайшего контекста дефолтов;
|
|
1393
|
+
3. `defaults.global.<проп>`;
|
|
1394
|
+
4. значение по умолчанию, объявленное в самом компоненте.
|
|
1395
|
+
|
|
1396
|
+
Явно переданный проп всегда выигрывает — дефолты не могут «перебить» шаблон.
|
|
1397
|
+
|
|
1398
|
+
### Изменение дефолтов в рантайме
|
|
1399
|
+
|
|
1400
|
+
`createCds` возвращает инстанс, у которого дефолты лежат в реактивной ссылке. Их можно менять
|
|
1401
|
+
на лету — все смонтированные компоненты пересчитаются:
|
|
1402
|
+
|
|
1403
|
+
```ts
|
|
1404
|
+
const cds = createCds({ components, directives });
|
|
1405
|
+
|
|
1406
|
+
// например, включить компактный режим по настройке пользователя
|
|
1407
|
+
cds.defaults.value = {
|
|
1408
|
+
...cds.defaults.value,
|
|
1409
|
+
global: { size: 'sm' }
|
|
1410
|
+
};
|
|
1411
|
+
```
|
|
1412
|
+
|
|
1413
|
+
## Контекстные дефолты
|
|
1414
|
+
|
|
1415
|
+
Дефолты можно задать для компонентов, вложенных в другой компонент. Например, чтобы все кнопки
|
|
1416
|
+
внутри карточки по умолчанию были вторичными:
|
|
1417
|
+
|
|
1418
|
+
```ts
|
|
1419
|
+
createCds({
|
|
1420
|
+
defaults: {
|
|
1421
|
+
CdsCard: {
|
|
1422
|
+
CdsButton: { appearance: 'secondary' }
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
1425
|
+
});
|
|
1426
|
+
```
|
|
1427
|
+
|
|
1428
|
+
Правило простое: ключ с заглавной буквы — это имя вложенного компонента, ключ со строчной —
|
|
1429
|
+
проп текущего компонента. Вложенность не ограничена одним уровнем:
|
|
1430
|
+
|
|
1431
|
+
```ts
|
|
1432
|
+
createCds({
|
|
1433
|
+
defaults: {
|
|
1434
|
+
CdsCard: {
|
|
1435
|
+
CdsCardActions: {
|
|
1436
|
+
CdsButton: { appearance: 'tertiary', size: 'sm' }
|
|
1437
|
+
}
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
});
|
|
1441
|
+
```
|
|
1442
|
+
|
|
1443
|
+
Тот же механизм библиотека использует внутри себя, чтобы группирующие компоненты раздавали
|
|
1444
|
+
свои настройки детям:
|
|
1445
|
+
|
|
1446
|
+
- `CdsButtonGroup` задаёт вложенным `CdsButton` пропсы `appearance`, `color`, `baseColor`, `size`;
|
|
1447
|
+
- `CdsTagGroup` задаёт `CdsTag` пропсы `color`, `activeColor`, `disabled`, `filter`;
|
|
1448
|
+
- `CdsSelectionControlGroup` раздаёт настройки контролам, имя целевого компонента задаётся
|
|
1449
|
+
пропом `defaultsTarget` (`CdsCheckbox`, `CdsRadio` и т. д.);
|
|
1450
|
+
- так же работают `CdsTabs`, `CdsSteps`, `CdsList`, `CdsBreadcrumbs`, `CdsButtonToggle`,
|
|
1451
|
+
`CdsExpandablePanels`, `CdsOtpInput`.
|
|
1452
|
+
|
|
1453
|
+
Поэтому `<CdsButtonGroup size="sm">` делает маленькими все кнопки внутри — вам не нужно
|
|
1454
|
+
проставлять `size` каждой.
|
|
1455
|
+
|
|
1456
|
+
## Глобальные класс и стиль
|
|
1457
|
+
|
|
1458
|
+
В дефолтах компонента, помимо пропсов, можно задать `class` и `style`. Это удобный способ
|
|
1459
|
+
навесить продуктовые правила на все экземпляры компонента, не трогая шаблоны:
|
|
1460
|
+
|
|
1461
|
+
```ts
|
|
1462
|
+
createCds({
|
|
1463
|
+
defaults: {
|
|
1464
|
+
CdsButton: {
|
|
1465
|
+
class: 'my-button'
|
|
1466
|
+
}
|
|
1467
|
+
}
|
|
1468
|
+
});
|
|
1469
|
+
```
|
|
1470
|
+
|
|
1471
|
+
Работает любое значение, которое принимает Vue, — строка, объект, массив:
|
|
1472
|
+
|
|
1473
|
+
```ts
|
|
1474
|
+
createCds({
|
|
1475
|
+
defaults: {
|
|
1476
|
+
CdsButton: {
|
|
1477
|
+
style: [{ textTransform: 'none' }]
|
|
1478
|
+
}
|
|
1479
|
+
}
|
|
1480
|
+
});
|
|
1481
|
+
```
|
|
1482
|
+
|
|
1483
|
+
В отличие от обычных пропсов, `class` и `style` не перезаписываются шаблоном, а **объединяются**
|
|
1484
|
+
с ним. То есть `<CdsButton class="mt-200">` получит и `my-button`, и `mt-200`.
|
|
1485
|
+
|
|
1486
|
+
**Важно.** `class` и `style` работают только в ключе конкретного компонента. В `global` они
|
|
1487
|
+
игнорируются.
|
|
1488
|
+
|
|
1489
|
+
## Алиасы
|
|
1490
|
+
|
|
1491
|
+
Алиас — это тот же компонент, зарегистрированный под другим именем и со своими дефолтами.
|
|
1492
|
+
Из алиасов удобно собирать «продуктовые» варианты компонентов.
|
|
1493
|
+
|
|
1494
|
+
```ts
|
|
1495
|
+
import { createCds, components, directives, CdsButton } from '@central-design-system/components';
|
|
1496
|
+
|
|
1497
|
+
const cds = createCds({
|
|
1498
|
+
components,
|
|
1499
|
+
directives,
|
|
1500
|
+
aliases: {
|
|
1501
|
+
CdsButtonPrimary: CdsButton,
|
|
1502
|
+
CdsButtonDanger: CdsButton
|
|
1503
|
+
},
|
|
1504
|
+
defaults: {
|
|
1505
|
+
CdsButtonPrimary: {
|
|
1506
|
+
appearance: 'primary',
|
|
1507
|
+
class: 'my-button--primary'
|
|
1508
|
+
},
|
|
1509
|
+
CdsButtonDanger: {
|
|
1510
|
+
appearance: 'primary',
|
|
1511
|
+
color: 'red',
|
|
1512
|
+
class: 'my-button--danger'
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
});
|
|
1516
|
+
```
|
|
1517
|
+
|
|
1518
|
+
Алиасы регистрируются глобально, поэтому в шаблоне их можно использовать сразу:
|
|
1519
|
+
|
|
1520
|
+
```vue
|
|
1521
|
+
<template>
|
|
1522
|
+
<CdsButtonPrimary>Сохранить</CdsButtonPrimary>
|
|
1523
|
+
<CdsButtonDanger class="ml-200">Удалить</CdsButtonDanger>
|
|
1524
|
+
</template>
|
|
1525
|
+
```
|
|
1526
|
+
|
|
1527
|
+
**Важно.** Алиас не наследует дефолты базового компонента. Если в конфигурации есть
|
|
1528
|
+
`defaults.CdsButton`, к `<CdsButtonPrimary>` они не применятся — дефолты ищутся по имени алиаса.
|
|
1529
|
+
Общие настройки для обоих выносите в `global` или дублируйте в ключе алиаса.
|
|
1530
|
+
|
|
1531
|
+
## Дефолты для части приложения
|
|
1532
|
+
|
|
1533
|
+
Чтобы задать дефолты не глобально, а в поддереве, используйте компонент `CdsDefaultsProvider`.
|
|
1534
|
+
На нём же построена панель Controls в Storybook: значения из панели применяются
|
|
1535
|
+
к компонентам примера как дефолты.
|
|
1536
|
+
|
|
1537
|
+
```vue
|
|
1538
|
+
<script setup lang="ts">
|
|
1539
|
+
import { CdsButton, CdsDefaultsProvider } from '@central-design-system/components';
|
|
1540
|
+
</script>
|
|
1541
|
+
|
|
1542
|
+
<template>
|
|
1543
|
+
<CdsDefaultsProvider :defaults="{ CdsButton: { appearance: 'tertiary', size: 'sm' } }">
|
|
1544
|
+
<CdsButton>Второстепенная маленькая кнопка</CdsButton>
|
|
1545
|
+
</CdsDefaultsProvider>
|
|
1546
|
+
</template>
|
|
1547
|
+
```
|
|
1548
|
+
|
|
1549
|
+
| Проп | Тип | Назначение |
|
|
1550
|
+
| ---------- | ------------------- | -------------------------------------------------------------------------------------------- |
|
|
1551
|
+
| `defaults` | `DefaultsOptions` | Дефолты для поддерева; по умолчанию мержатся с унаследованными |
|
|
1552
|
+
| `scoped` | `boolean` | Не смешивать с родительскими дефолтами — действуют только заданные здесь |
|
|
1553
|
+
| `reset` | `number \| string` | Подняться на N уровней вверх по цепочке дефолтов |
|
|
1554
|
+
| `root` | `boolean \| string` | Вернуться к корневым дефолтам из `createCds`; строкой — к именованной группе внутри них |
|
|
1555
|
+
| `disabled` | `boolean` | Ничего не провайдить — поддерево получает дефолты родителя как есть |
|
|
1556
|
+
|
|
1557
|
+
Типичный сценарий `scoped` — «островок» в чужом окружении: вложенные группы (например,
|
|
1558
|
+
`CdsButtonGroup`) не должны навязывать свои настройки вашему блоку.
|
|
1559
|
+
|
|
1560
|
+
## Свои компоненты
|
|
1561
|
+
|
|
1562
|
+
Собственные компоненты приложения тоже могут участвовать в системе дефолтов. Для этого
|
|
1563
|
+
пропустите пропсы через `useDefaults`:
|
|
1564
|
+
|
|
1565
|
+
```vue
|
|
1566
|
+
<script setup lang="ts">
|
|
1567
|
+
import { useDefaults } from '@central-design-system/components';
|
|
1568
|
+
|
|
1569
|
+
const _props = defineProps<{ foo?: string }>();
|
|
1570
|
+
const props = useDefaults(_props, 'MyComponent');
|
|
1571
|
+
</script>
|
|
1572
|
+
|
|
1573
|
+
<template>
|
|
1574
|
+
<div>Я {{ props.foo }}</div>
|
|
1575
|
+
</template>
|
|
1576
|
+
```
|
|
1577
|
+
|
|
1578
|
+
У `useDefaults` два аргумента, оба опциональные:
|
|
1579
|
+
|
|
1580
|
+
- `props` — объект пропсов, возвращённый `defineProps`;
|
|
1581
|
+
- `name` — имя компонента, по которому ищется ключ в `defaults`. Если не передать, берётся имя
|
|
1582
|
+
из `defineOptions({ name })`, а при его отсутствии — имя файла.
|
|
1583
|
+
|
|
1584
|
+
Теперь компонент настраивается из общей конфигурации:
|
|
1585
|
+
|
|
1586
|
+
```ts
|
|
1587
|
+
createCds({
|
|
1588
|
+
defaults: {
|
|
1589
|
+
MyComponent: { foo: 'бар' }
|
|
1590
|
+
}
|
|
1591
|
+
});
|
|
1592
|
+
```
|
|
1593
|
+
|
|
1594
|
+
**Важно.** В шаблоне обращайтесь к `props.foo`, а не к `foo`. `useDefaults` возвращает прокси
|
|
1595
|
+
над пропсами, и распакованные `defineProps` переменные его минуют:
|
|
1596
|
+
|
|
1597
|
+
```diff
|
|
1598
|
+
-<div>Я {{ foo }}</div>
|
|
1599
|
+
+<div>Я {{ props.foo }}</div>
|
|
1600
|
+
```
|
|
1601
|
+
|
|
1602
|
+
### Вложенные дефолты в своих компонентах
|
|
1603
|
+
|
|
1604
|
+
Чтобы ваш компонент раздавал дефолты детям (как это делает `CdsButtonGroup`), достаточно
|
|
1605
|
+
вызвать `useDefaults()` без аргументов — вложенные ключи из его секции `defaults` уйдут в
|
|
1606
|
+
дочерний контекст:
|
|
1607
|
+
|
|
1608
|
+
```vue
|
|
1609
|
+
<script setup lang="ts">
|
|
1610
|
+
import { useDefaults } from '@central-design-system/components';
|
|
1611
|
+
|
|
1612
|
+
useDefaults();
|
|
1613
|
+
</script>
|
|
1614
|
+
|
|
1615
|
+
<template>
|
|
1616
|
+
<div class="my-panel">
|
|
1617
|
+
<slot />
|
|
1618
|
+
</div>
|
|
1619
|
+
</template>
|
|
1620
|
+
```
|
|
1621
|
+
|
|
1622
|
+
```ts
|
|
1623
|
+
createCds({
|
|
1624
|
+
defaults: {
|
|
1625
|
+
MyPanel: {
|
|
1626
|
+
CdsButton: { appearance: 'tertiary' }
|
|
1627
|
+
}
|
|
1628
|
+
}
|
|
1629
|
+
});
|
|
1630
|
+
```
|
|
1631
|
+
|
|
1632
|
+
Если дефолты детей зависят от пропсов компонента, используйте `provideDefaults` напрямую:
|
|
1633
|
+
|
|
1634
|
+
```vue
|
|
1635
|
+
<script setup lang="ts">
|
|
1636
|
+
import { provideDefaults } from '@central-design-system/components';
|
|
1637
|
+
import { toRef } from 'vue';
|
|
1638
|
+
|
|
1639
|
+
const props = defineProps<{ size?: 'sm' | 'md' }>();
|
|
1640
|
+
|
|
1641
|
+
provideDefaults({
|
|
1642
|
+
CdsButton: {
|
|
1643
|
+
size: toRef(() => props.size)
|
|
1644
|
+
}
|
|
1645
|
+
});
|
|
1646
|
+
</script>
|
|
1647
|
+
|
|
1648
|
+
<template>
|
|
1649
|
+
<div class="my-toolbar">
|
|
1650
|
+
<slot />
|
|
1651
|
+
</div>
|
|
1652
|
+
</template>
|
|
1653
|
+
```
|
|
1654
|
+
|
|
1655
|
+
## Blueprint — пресет конфигурации
|
|
1656
|
+
|
|
1657
|
+
Если один и тот же набор опций нужен нескольким приложениям, вынесите его в `blueprint`:
|
|
1658
|
+
это обычный объект опций `createCds`, на который сверху накладывается остальная конфигурация.
|
|
1659
|
+
|
|
1660
|
+
```ts
|
|
1661
|
+
import { createCds, components, directives } from '@central-design-system/components';
|
|
1662
|
+
import type { Blueprint } from '@central-design-system/components';
|
|
1663
|
+
|
|
1664
|
+
const productBlueprint: Blueprint = {
|
|
1665
|
+
theme: { defaultTheme: 'b2bLight' },
|
|
1666
|
+
defaults: {
|
|
1667
|
+
CdsButton: { appearance: 'secondary' }
|
|
1668
|
+
}
|
|
1669
|
+
};
|
|
1670
|
+
|
|
1671
|
+
const cds = createCds({
|
|
1672
|
+
blueprint: productBlueprint,
|
|
1673
|
+
components,
|
|
1674
|
+
directives,
|
|
1675
|
+
// перекрывает значение из blueprint
|
|
1676
|
+
defaults: {
|
|
1677
|
+
CdsButton: { size: 'sm' }
|
|
1678
|
+
}
|
|
1679
|
+
});
|
|
1680
|
+
```
|
|
1681
|
+
|
|
1682
|
+
Опции сливаются глубоко (`mergeDeep`), поэтому в примере выше у кнопок останется
|
|
1683
|
+
`appearance: 'secondary'` из пресета и добавится `size: 'sm'`.
|
|
1684
|
+
|
|
1685
|
+
---
|
|
1686
|
+
|
|
1687
|
+
# Интернационализация (i18n)
|
|
1688
|
+
|
|
1689
|
+
У компонентов CDS есть собственные тексты: «Отсутствуют данные» в селекте, подписи фильтров
|
|
1690
|
+
таблицы, `aria-label` кнопки закрытия, счётчик файлов. Все они идут через встроенный слой
|
|
1691
|
+
локализации, поэтому вы можете перевести их на другой язык, переопределить отдельную строку под
|
|
1692
|
+
свой продукт или переключать язык на лету — не переписывая компоненты.
|
|
1693
|
+
|
|
1694
|
+
В библиотеку встроены два словаря — русский и английский. По умолчанию активен `ru`, поэтому без
|
|
1695
|
+
настройки всё уже на русском.
|
|
1696
|
+
|
|
1697
|
+
## Настройка
|
|
1698
|
+
|
|
1699
|
+
Локаль настраивается опцией `locale` в `createCds`. Переключиться на встроенный английский —
|
|
1700
|
+
одна строка, словари для этого передавать не нужно:
|
|
1701
|
+
|
|
1702
|
+
```ts
|
|
1703
|
+
import { createApp } from 'vue';
|
|
1704
|
+
import '@central-design-system/components/styles';
|
|
1705
|
+
import { createCds, components, directives } from '@central-design-system/components';
|
|
1706
|
+
|
|
1707
|
+
import App from './App.vue';
|
|
1708
|
+
|
|
1709
|
+
const cds = createCds({
|
|
1710
|
+
components,
|
|
1711
|
+
directives,
|
|
1712
|
+
locale: {
|
|
1713
|
+
locale: 'en'
|
|
1714
|
+
}
|
|
1715
|
+
});
|
|
1716
|
+
|
|
1717
|
+
createApp(App).use(cds);
|
|
1718
|
+
```
|
|
1719
|
+
|
|
1720
|
+
Языки, которых в библиотеке нет, добавляются словарём в `messages`:
|
|
1721
|
+
|
|
1722
|
+
```ts
|
|
1723
|
+
import de from './locales/cds-de';
|
|
1724
|
+
|
|
1725
|
+
createCds({
|
|
1726
|
+
components,
|
|
1727
|
+
directives,
|
|
1728
|
+
locale: {
|
|
1729
|
+
locale: 'de',
|
|
1730
|
+
fallback: 'en',
|
|
1731
|
+
messages: { de }
|
|
1732
|
+
}
|
|
1733
|
+
});
|
|
1734
|
+
```
|
|
1735
|
+
|
|
1736
|
+
| Опция | Тип | Назначение |
|
|
1737
|
+
| ------------------ | ------------------------- | ----------------------------------------------------------------------------- |
|
|
1738
|
+
| `locale` | `string` | Активный язык; из коробки доступны `ru` (по умолчанию) и `en` |
|
|
1739
|
+
| `fallback` | `string` | Язык, из которого берётся строка, если в активном её нет; по умолчанию `ru` |
|
|
1740
|
+
| `messages` | `LocaleMessages` | Словари дополнительных языков; словарь одноимённого встроенного заменяется целиком |
|
|
1741
|
+
| `decimalSeparator` | `string` | Разделитель дробной части; по умолчанию выводится из активной локали |
|
|
1742
|
+
| `rtl` | `Record<string, boolean>` | Карта языков с письмом справа налево (см. [RTL](#rtl)) |
|
|
1743
|
+
| `adapter` | `LocaleInstance` | Свой движок переводов вместо встроенного (см. [Свой адаптер](#свои-адаптер)) |
|
|
1744
|
+
|
|
1745
|
+
Встроенные словари доступны и вам — они лежат в экспорте `locales`. Берите их за основу для
|
|
1746
|
+
своего языка или чтобы поправить пару строк:
|
|
1747
|
+
|
|
1748
|
+
```ts
|
|
1749
|
+
import { locales } from '@central-design-system/components';
|
|
1750
|
+
|
|
1751
|
+
locales.ru; // русский словарь
|
|
1752
|
+
locales.en; // английский словарь
|
|
1753
|
+
```
|
|
1754
|
+
|
|
1755
|
+
Полный набор ключей — в разделе [Ключи сообщений](#ключи-сообщении).
|
|
1756
|
+
|
|
1757
|
+
## Как компоненты берут текст
|
|
1758
|
+
|
|
1759
|
+
Строки компонентов — это ключи с префиксом `$cds.`, которые библиотека прогоняет через функцию
|
|
1760
|
+
перевода. Часть ключей объявлена значениями пропсов по умолчанию, поэтому их видно в API:
|
|
1761
|
+
`text` у `CdsFileUpload` — `$cds.fileUpload.browse`, `closeLabel` у `CdsNotification` — `$cds.close`,
|
|
1762
|
+
`noDataText` у `CdsSelect` — `$cds.noDataText`.
|
|
1763
|
+
|
|
1764
|
+
Отсюда три способа поменять текст.
|
|
1765
|
+
|
|
1766
|
+
**Сменить язык целиком** — опцией `locale`:
|
|
1767
|
+
|
|
1768
|
+
```ts
|
|
1769
|
+
createCds({ locale: { locale: 'en' } });
|
|
1770
|
+
```
|
|
1771
|
+
|
|
1772
|
+
**Поменять надписи во всём продукте** — словарём поверх встроенного:
|
|
1773
|
+
|
|
1774
|
+
```ts
|
|
1775
|
+
import { createCds, locales } from '@central-design-system/components';
|
|
1776
|
+
|
|
1777
|
+
createCds({
|
|
1778
|
+
locale: {
|
|
1779
|
+
messages: {
|
|
1780
|
+
ru: { ...locales.ru, noDataText: 'Ничего не нашлось' }
|
|
1781
|
+
}
|
|
1782
|
+
}
|
|
1783
|
+
});
|
|
1784
|
+
```
|
|
1785
|
+
|
|
1786
|
+
**Важно.** Словарь языка заменяется целиком, а не сливается по ключам. Без спреда
|
|
1787
|
+
`...locales.ru` в русской локали останется один ключ, а остальные строки превратятся
|
|
1788
|
+
в свои же ключи (`$cds.close` вместо «Закрыть»). Вложенные секции спредьте отдельно:
|
|
1789
|
+
`table: { ...locales.ru.table, emptyText: '…' }`.
|
|
1790
|
+
|
|
1791
|
+
**Поменять одну надпись в одном месте** — пропсом:
|
|
1792
|
+
|
|
1793
|
+
```vue
|
|
1794
|
+
<CdsSelect :items="items" no-data-text="Подходящих поставщиков нет" />
|
|
1795
|
+
```
|
|
1796
|
+
|
|
1797
|
+
Тот же проп можно задать значением по умолчанию для всех экземпляров компонента —
|
|
1798
|
+
см. глобальную конфигурацию:
|
|
1799
|
+
|
|
1800
|
+
```ts
|
|
1801
|
+
createCds({
|
|
1802
|
+
defaults: {
|
|
1803
|
+
CdsSelect: { noDataText: 'Ничего не нашлось' }
|
|
1804
|
+
}
|
|
1805
|
+
});
|
|
1806
|
+
```
|
|
1807
|
+
|
|
1808
|
+
Функция перевода принимает и обычный текст: строка без префикса `$cds.` возвращается как есть,
|
|
1809
|
+
подставляя параметры. Так пропсы с локализуемым значением работают одинаково и с ключом,
|
|
1810
|
+
и с готовой фразой.
|
|
1811
|
+
|
|
1812
|
+
Если ключа нет ни в активной локали, ни в `fallback`, компонент покажет сам ключ, а в dev-режиме
|
|
1813
|
+
в консоли появится предупреждение `[CDS: useLocale] Translation key … not found`.
|
|
1814
|
+
|
|
1815
|
+
## Смена языка в рантайме
|
|
1816
|
+
|
|
1817
|
+
`createCds` возвращает инстанс, у которого локаль лежит в реактивных ссылках — переключение
|
|
1818
|
+
языка достаточно записать в `current`:
|
|
1819
|
+
|
|
1820
|
+
```ts
|
|
1821
|
+
const cds = createCds({ components, directives });
|
|
1822
|
+
|
|
1823
|
+
// например, по выбору пользователя в настройках профиля
|
|
1824
|
+
cds.locale.current.value = 'en';
|
|
1825
|
+
```
|
|
1826
|
+
|
|
1827
|
+
Внутри компонентов то же делает композабл `useLocale`:
|
|
1828
|
+
|
|
1829
|
+
```vue
|
|
1830
|
+
<script setup lang="ts">
|
|
1831
|
+
import { CdsButton, CdsButtonToggle, useLocale } from '@central-design-system/components';
|
|
1832
|
+
|
|
1833
|
+
const { current } = useLocale();
|
|
1834
|
+
</script>
|
|
1835
|
+
|
|
1836
|
+
<template>
|
|
1837
|
+
<CdsButtonToggle v-model="current" appearance="tertiary">
|
|
1838
|
+
<CdsButton value="ru" text="Русский" />
|
|
1839
|
+
<CdsButton value="en" text="English" />
|
|
1840
|
+
</CdsButtonToggle>
|
|
1841
|
+
</template>
|
|
1842
|
+
```
|
|
1843
|
+
|
|
1844
|
+
Все смонтированные компоненты пересчитают свои строки сами — перезагрузка страницы не нужна.
|
|
1845
|
+
|
|
1846
|
+
## Локаль для части приложения
|
|
1847
|
+
|
|
1848
|
+
Отдельному поддереву можно задать свой язык — например, показать англоязычный виджет внутри
|
|
1849
|
+
русского интерфейса. Для этого в компоненте-обёртке вызовите `provideLocale`: он берёт локаль
|
|
1850
|
+
из контекста, накладывает переданные пропсы и провайдит результат детям.
|
|
1851
|
+
|
|
1852
|
+
```vue
|
|
1853
|
+
<script setup lang="ts">
|
|
1854
|
+
import { provideLocale } from '@central-design-system/components';
|
|
1855
|
+
|
|
1856
|
+
const props = defineProps<{ locale?: string; fallback?: string }>();
|
|
1857
|
+
|
|
1858
|
+
provideLocale(props);
|
|
1859
|
+
</script>
|
|
1860
|
+
|
|
1861
|
+
<template>
|
|
1862
|
+
<div>
|
|
1863
|
+
<slot />
|
|
1864
|
+
</div>
|
|
1865
|
+
</template>
|
|
1866
|
+
```
|
|
1867
|
+
|
|
1868
|
+
```vue
|
|
1869
|
+
<template>
|
|
1870
|
+
<LocaleProvider locale="en">
|
|
1871
|
+
<CdsSelect :items="items" />
|
|
1872
|
+
</LocaleProvider>
|
|
1873
|
+
</template>
|
|
1874
|
+
```
|
|
1875
|
+
|
|
1876
|
+
Не переданные пропсы наследуются от родительской локали, поэтому обёртка с одним `locale`
|
|
1877
|
+
не теряет ни `fallback`, ни словари.
|
|
1878
|
+
|
|
1879
|
+
## useLocale
|
|
1880
|
+
|
|
1881
|
+
Композабл отдаёт текущую локаль и её функции — используйте его в своих компонентах, чтобы их
|
|
1882
|
+
тексты жили в тех же словарях, что и тексты CDS.
|
|
1883
|
+
|
|
1884
|
+
```vue
|
|
1885
|
+
<script setup lang="ts">
|
|
1886
|
+
import { useLocale } from '@central-design-system/components';
|
|
1887
|
+
|
|
1888
|
+
const { t, n } = useLocale();
|
|
1889
|
+
</script>
|
|
1890
|
+
|
|
1891
|
+
<template>
|
|
1892
|
+
<p>{{ t('$cds.table.emptyText') }}</p>
|
|
1893
|
+
<p>{{ n(1234.56) }}</p>
|
|
1894
|
+
</template>
|
|
1895
|
+
```
|
|
1896
|
+
|
|
1897
|
+
| Свойство | Тип | Назначение |
|
|
1898
|
+
| ------------------ | ---------------------------------------------- | ------------------------------------------------------------- |
|
|
1899
|
+
| `t` | `(key: string, ...params: unknown[]) => string` | Перевод ключа `$cds.…` с подстановкой параметров |
|
|
1900
|
+
| `n` | `(value: number) => string` | Форматирование числа по активной локали |
|
|
1901
|
+
| `current` | `Ref<string>` | Активный язык; запись меняет язык |
|
|
1902
|
+
| `fallback` | `Ref<string>` | Язык-подстраховка |
|
|
1903
|
+
| `messages` | `Ref<LocaleMessages>` | Словари; можно дописывать в рантайме |
|
|
1904
|
+
| `decimalSeparator` | `ShallowRef<string>` | Разделитель дробной части активной локали |
|
|
1905
|
+
|
|
1906
|
+
Параметры в строках нумерованные — `{0}`, `{1}`:
|
|
1907
|
+
|
|
1908
|
+
```ts
|
|
1909
|
+
const { t } = useLocale();
|
|
1910
|
+
|
|
1911
|
+
t('$cds.carousel.delimiter', 3, 8); // «Слайд 3 из 8»
|
|
1912
|
+
t('Осталось дней: {0}', 5); // «Осталось дней: 5»
|
|
1913
|
+
```
|
|
1914
|
+
|
|
1915
|
+
`n` под капотом — `Intl.NumberFormat` с активной локалью и `fallback`, так что разделители групп
|
|
1916
|
+
и дробной части приходят из браузера. `decimalSeparator` библиотека выводит из той же локали
|
|
1917
|
+
(`,` для `ru`, `.` для `en`); если в продукте принят другой — задайте его явно в `createCds`.
|
|
1918
|
+
|
|
1919
|
+
## Даты
|
|
1920
|
+
|
|
1921
|
+
Названия месяцев и дней недели живут в отдельных date-локалях: их везут `ru` и `en`. Компоненты
|
|
1922
|
+
даты и времени берут date-локаль по активному языку, поэтому после `current.value = 'en'` календарь
|
|
1923
|
+
переключится сам.
|
|
1924
|
+
|
|
1925
|
+
Одному компоненту язык задаётся пропом `locale` — он есть у `CdsDatePicker`, `CdsDateInput`
|
|
1926
|
+
и `CdsTimePicker`:
|
|
1927
|
+
|
|
1928
|
+
```vue
|
|
1929
|
+
<CdsDatePicker v-model="value" locale="en" :first-day-of-week="0" header />
|
|
1930
|
+
```
|
|
1931
|
+
|
|
1932
|
+
Проп принимает не только имя языка, но и свой объект date-локали (тип `TDateLocale`) — так
|
|
1933
|
+
подключается язык, которого в библиотеке нет. Встроенные date-локали для сверки и переиспользования
|
|
1934
|
+
лежат в том же экспорте `locales`: `locales.ruDate`, `locales.enDate` и карта `locales.dateLocales`.
|
|
1935
|
+
|
|
1936
|
+
```ts
|
|
1937
|
+
const de = {
|
|
1938
|
+
days: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
|
|
1939
|
+
daysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
|
|
1940
|
+
months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
|
1941
|
+
monthsLong: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
|
1942
|
+
monthsShort: 'Jan_Feb_Mär_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez'.split('_'),
|
|
1943
|
+
today: 'Heute',
|
|
1944
|
+
now: 'Jetzt',
|
|
1945
|
+
firstDayOfWeek: 1,
|
|
1946
|
+
format24h: true,
|
|
1947
|
+
pluralDay: (day = 0) => (day === 1 ? 'Tag' : 'Tage')
|
|
1948
|
+
};
|
|
1949
|
+
```
|
|
1950
|
+
|
|
1951
|
+
```vue
|
|
1952
|
+
<CdsDatePicker v-model="value" :locale="de" />
|
|
1953
|
+
```
|
|
1954
|
+
|
|
1955
|
+
## Таблица
|
|
1956
|
+
|
|
1957
|
+
`CdsTable` собирает свои подписи из ключей `$cds.table.*`, но принимает и точечное
|
|
1958
|
+
переопределение пропом `locale` — он перекрывает только переданные строки:
|
|
1959
|
+
|
|
1960
|
+
```vue
|
|
1961
|
+
<CdsTable :columns="columns" :data="data" :locale="{ emptyText: 'Заявок пока нет' }" />
|
|
1962
|
+
```
|
|
1963
|
+
|
|
1964
|
+
## RTL
|
|
1965
|
+
|
|
1966
|
+
Языки с письмом справа налево описываются картой `rtl`: ключ — язык, значение — направление.
|
|
1967
|
+
|
|
1968
|
+
```ts
|
|
1969
|
+
createCds({
|
|
1970
|
+
locale: {
|
|
1971
|
+
locale: 'ar',
|
|
1972
|
+
messages: { ar },
|
|
1973
|
+
rtl: { ar: true }
|
|
1974
|
+
}
|
|
1975
|
+
});
|
|
1976
|
+
```
|
|
1977
|
+
|
|
1978
|
+
Компоненты читают направление через `useRtl` и разворачивают то, что зависит от оси: сторону
|
|
1979
|
+
раскрытия меню и тултипов, стрелки пагинации, порядок ячеек `CdsOtpInput`, заливку
|
|
1980
|
+
`CdsProgressBar`. Отступы и границы в стилях в основном описаны логическими свойствами
|
|
1981
|
+
(`margin-inline`, `inset-inline`) и зеркалятся браузером сами — но полноценной поддержки RTL
|
|
1982
|
+
дизайн-система пока не заявляет, отдельные места потребуют доводки на вашей стороне.
|
|
1983
|
+
|
|
1984
|
+
Атрибут направления библиотека за вас не проставляет — повесьте его на корень приложения сами:
|
|
1985
|
+
|
|
1986
|
+
```vue
|
|
1987
|
+
<script setup lang="ts">
|
|
1988
|
+
import { useRtl } from '@central-design-system/components';
|
|
1989
|
+
|
|
1990
|
+
const { isRtl } = useRtl();
|
|
1991
|
+
</script>
|
|
1992
|
+
|
|
1993
|
+
<template>
|
|
1994
|
+
<div :dir="isRtl ? 'rtl' : 'ltr'">
|
|
1995
|
+
<slot />
|
|
1996
|
+
</div>
|
|
1997
|
+
</template>
|
|
1998
|
+
```
|
|
1999
|
+
|
|
2000
|
+
`useRtl` отдаёт `isRtl` и `rtlClasses` — готовый класс `cds-locale--is-rtl` / `cds-locale--is-ltr`
|
|
2001
|
+
для ваших собственных стилей.
|
|
2002
|
+
|
|
2003
|
+
## Свой адаптер
|
|
2004
|
+
|
|
2005
|
+
Если в приложении уже есть i18n-библиотека, отдайте переводы ей: опция `adapter` принимает любой
|
|
2006
|
+
объект, реализующий интерфейс `LocaleInstance`. Тогда `messages`, `locale` и `fallback` из
|
|
2007
|
+
`createCds` не используются — источником истины становится ваш движок, а строки CDS живут
|
|
2008
|
+
в общих словарях приложения под ключом `$cds`.
|
|
2009
|
+
|
|
2010
|
+
```ts
|
|
2011
|
+
import type { LocaleInstance, LocaleOptions } from '@central-design-system/components';
|
|
2012
|
+
import { toRef } from 'vue';
|
|
2013
|
+
import type { I18n } from 'vue-i18n';
|
|
2014
|
+
|
|
2015
|
+
export function createVueI18nAdapter(i18n: I18n<any, any, any, string, false>): LocaleInstance {
|
|
2016
|
+
const format = (value: number) => i18n.global.n(value);
|
|
2017
|
+
|
|
2018
|
+
return {
|
|
2019
|
+
name: 'vue-i18n',
|
|
2020
|
+
current: i18n.global.locale,
|
|
2021
|
+
fallback: i18n.global.fallbackLocale as never,
|
|
2022
|
+
messages: i18n.global.messages as never,
|
|
2023
|
+
decimalSeparator: toRef(() => (format(0.1).includes(',') ? ',' : '.')),
|
|
2024
|
+
t: (key, ...params) => i18n.global.t(key, params as never),
|
|
2025
|
+
n: format,
|
|
2026
|
+
provide: () => createVueI18nAdapter(i18n)
|
|
2027
|
+
};
|
|
2028
|
+
}
|
|
2029
|
+
```
|
|
2030
|
+
|
|
2031
|
+
```ts
|
|
2032
|
+
import { createI18n } from 'vue-i18n';
|
|
2033
|
+
|
|
2034
|
+
const i18n = createI18n({
|
|
2035
|
+
legacy: false,
|
|
2036
|
+
locale: 'ru',
|
|
2037
|
+
messages: {
|
|
2038
|
+
ru: {
|
|
2039
|
+
$cds: { noDataText: 'Отсутствуют данные' },
|
|
2040
|
+
profile: { title: 'Профиль' }
|
|
2041
|
+
}
|
|
2042
|
+
}
|
|
2043
|
+
});
|
|
2044
|
+
|
|
2045
|
+
const cds = createCds({
|
|
2046
|
+
components,
|
|
2047
|
+
directives,
|
|
2048
|
+
locale: {
|
|
2049
|
+
adapter: createVueI18nAdapter(i18n)
|
|
2050
|
+
}
|
|
2051
|
+
});
|
|
2052
|
+
```
|
|
2053
|
+
|
|
2054
|
+
Обязательные члены `LocaleInstance`: `name` (по нему адаптер и распознаётся), `current`,
|
|
2055
|
+
`fallback`, `messages`, `decimalSeparator`, `t`, `n` и `provide` — фабрика вложенной локали
|
|
2056
|
+
для `provideLocale`. Если поддержка «локали в поддереве» вам не нужна, `provide` может возвращать
|
|
2057
|
+
тот же инстанс, как в примере выше.
|
|
2058
|
+
|
|
2059
|
+
## Ключи сообщений
|
|
2060
|
+
|
|
2061
|
+
Встроенный русский словарь — шаблон для перевода на новый язык. Скопируйте его, переведите
|
|
2062
|
+
значения и передайте в `messages` под ключом своего языка; его английская версия доступна как
|
|
2063
|
+
`locales.en`.
|
|
2064
|
+
|
|
2065
|
+
```ts
|
|
2066
|
+
export default {
|
|
2067
|
+
badge: 'Бейдж',
|
|
2068
|
+
noDataText: 'Отсутствуют данные',
|
|
2069
|
+
selectAll: 'Выбрать все',
|
|
2070
|
+
close: 'Закрыть',
|
|
2071
|
+
open: 'Открыть',
|
|
2072
|
+
dismiss: 'Отклонить',
|
|
2073
|
+
confirmEdit: {
|
|
2074
|
+
ok: 'ОК',
|
|
2075
|
+
cancel: 'Отмена'
|
|
2076
|
+
},
|
|
2077
|
+
carousel: {
|
|
2078
|
+
prev: 'Предыдущий слайд',
|
|
2079
|
+
next: 'Следующий слайд',
|
|
2080
|
+
delimiter: 'Слайд {0} из {1}'
|
|
2081
|
+
},
|
|
2082
|
+
input: {
|
|
2083
|
+
clear: 'Очистить {0}',
|
|
2084
|
+
otp: 'Введите одноразовый код',
|
|
2085
|
+
prependAction: '{0} предварительных действий',
|
|
2086
|
+
appendAction: '{0} добавочных действий'
|
|
2087
|
+
},
|
|
2088
|
+
fileInput: {
|
|
2089
|
+
counter: 'Файлов: {0}',
|
|
2090
|
+
counterSize: 'Файлов: {0} ({1} всего)'
|
|
2091
|
+
},
|
|
2092
|
+
fileUpload: {
|
|
2093
|
+
title: 'Перетащите файлы сюда',
|
|
2094
|
+
divider: 'или',
|
|
2095
|
+
browse: 'Выберите файлы'
|
|
2096
|
+
},
|
|
2097
|
+
steps: {
|
|
2098
|
+
prev: 'Назад',
|
|
2099
|
+
next: 'Далее'
|
|
2100
|
+
},
|
|
2101
|
+
table: {
|
|
2102
|
+
filterTitle: 'Фильтр меню',
|
|
2103
|
+
filterConfirm: 'Выбрать',
|
|
2104
|
+
filterReset: 'Сброс',
|
|
2105
|
+
filterEmptyText: 'Нет фильтров',
|
|
2106
|
+
filterCheckAll: 'Выбрать все элементы',
|
|
2107
|
+
filterSearchPlaceholder: 'Поиск фильтров',
|
|
2108
|
+
emptyText: 'Нет данных',
|
|
2109
|
+
selectAll: 'Выбрать текущую страницу',
|
|
2110
|
+
selectInvert: 'Инвертировать текущую страницу',
|
|
2111
|
+
selectNone: 'Очистить все данные',
|
|
2112
|
+
selectionAll: 'Выбрать все данные',
|
|
2113
|
+
sortTitle: 'Сортировка',
|
|
2114
|
+
expand: 'Раскрыть строку',
|
|
2115
|
+
collapse: 'Свернуть строку',
|
|
2116
|
+
triggerDesc: 'Отсортировать по убыванию',
|
|
2117
|
+
triggerAsc: 'Отсортировать по возрастанию',
|
|
2118
|
+
cancelSort: 'Отменить сортировку',
|
|
2119
|
+
showed: 'Отображено',
|
|
2120
|
+
from: 'из',
|
|
2121
|
+
rowOnPage: 'Строк на странице'
|
|
2122
|
+
},
|
|
2123
|
+
uploader: {
|
|
2124
|
+
uploading: 'Загрузка...',
|
|
2125
|
+
uploadFile: 'Загрузить файл',
|
|
2126
|
+
downloadFile: 'Скачать файл',
|
|
2127
|
+
removeFile: 'Удалить файл',
|
|
2128
|
+
uploadError: 'Ошибка загрузки',
|
|
2129
|
+
previewFile: 'Предпросмотр файла'
|
|
2130
|
+
}
|
|
2131
|
+
};
|
|
2132
|
+
```
|
|
2133
|
+
|
|
2134
|
+
Словарь можно оставить неполным: недостающие ключи возьмутся из `fallback`, то есть по умолчанию
|
|
2135
|
+
из русского.
|
|
2136
|
+
|
|
2137
|
+
---
|
|
2138
|
+
|
|
1342
2139
|
# Темы и глобальные цветовые токены (уровень 2)
|
|
1343
2140
|
|
|
1344
2141
|
> Сгенерировано из `src/themes/*.ts` скриптом `bun run generate:skill`. Не редактировать вручную.
|
|
@@ -1837,6 +2634,248 @@ const cds = createCds({ theme: { defaultTheme: 'cdsLight' } });
|
|
|
1837
2634
|
| `--cds-color-brand-primary-active` | `#014F77` |
|
|
1838
2635
|
| `--cds-color-brand-primary` | `#0287CA` |
|
|
1839
2636
|
|
|
2637
|
+
## lumaLight (светлая)
|
|
2638
|
+
|
|
2639
|
+
| Токен | Значение |
|
|
2640
|
+
| --- | --- |
|
|
2641
|
+
| `--cds-color-surface-secondary` | `#ECEEF2` |
|
|
2642
|
+
| `--cds-color-surface-primary` | `#FFFFFF` |
|
|
2643
|
+
| `--cds-color-surface-overlay` | `#272A3080` |
|
|
2644
|
+
| `--cds-color-surface-inverse` | `#404653` |
|
|
2645
|
+
| `--cds-color-surface-elevated` | `#FFFFFF` |
|
|
2646
|
+
| `--cds-color-status-warning-surface` | `#A6840A` |
|
|
2647
|
+
| `--cds-color-status-warning-line` | `#B69210` |
|
|
2648
|
+
| `--cds-color-status-warning-fill-hover` | `#DEC048` |
|
|
2649
|
+
| `--cds-color-status-warning-fill` | `#F2DB82` |
|
|
2650
|
+
| `--cds-color-status-warning-content` | `#584001` |
|
|
2651
|
+
| `--cds-color-status-success-surface` | `#3C9C2C` |
|
|
2652
|
+
| `--cds-color-status-success-line` | `#50A946` |
|
|
2653
|
+
| `--cds-color-status-success-fill-hover` | `#97D283` |
|
|
2654
|
+
| `--cds-color-status-success-fill` | `#BCE8AB` |
|
|
2655
|
+
| `--cds-color-status-success-content` | `#005005` |
|
|
2656
|
+
| `--cds-color-status-progress-surface` | `#198FD8` |
|
|
2657
|
+
| `--cds-color-status-progress-line` | `#2B9DE9` |
|
|
2658
|
+
| `--cds-color-status-progress-fill-hover` | `#90C8FF` |
|
|
2659
|
+
| `--cds-color-status-progress-fill` | `#C3DFFF` |
|
|
2660
|
+
| `--cds-color-status-progress-content` | `#004871` |
|
|
2661
|
+
| `--cds-color-status-info-surface` | `#828A97` |
|
|
2662
|
+
| `--cds-color-status-info-line` | `#9298A4` |
|
|
2663
|
+
| `--cds-color-status-info-fill-hover` | `#C0C3CB` |
|
|
2664
|
+
| `--cds-color-status-info-fill` | `#DADDE2` |
|
|
2665
|
+
| `--cds-color-status-info-content` | `#404653` |
|
|
2666
|
+
| `--cds-color-status-indication-surface` | `#D1453F` |
|
|
2667
|
+
| `--cds-color-status-indication-line` | `#D1453F` |
|
|
2668
|
+
| `--cds-color-status-indication-fill-hover` | `#FFAE9E` |
|
|
2669
|
+
| `--cds-color-status-indication-fill` | `#FFD1C6` |
|
|
2670
|
+
| `--cds-color-status-indication-content` | `#831118` |
|
|
2671
|
+
| `--cds-color-status-danger-surface` | `#D1453F` |
|
|
2672
|
+
| `--cds-color-status-danger-line` | `#D1453F` |
|
|
2673
|
+
| `--cds-color-status-danger-fill-hover` | `#FFAE9E` |
|
|
2674
|
+
| `--cds-color-status-danger-fill` | `#FFD1C6` |
|
|
2675
|
+
| `--cds-color-status-danger-content` | `#831118` |
|
|
2676
|
+
| `--cds-color-page-primary` | `#ECEEF2` |
|
|
2677
|
+
| `--cds-color-other-teal-surface` | `#3A969E` |
|
|
2678
|
+
| `--cds-color-other-teal-line` | `#3CA5AD` |
|
|
2679
|
+
| `--cds-color-other-teal-fill-hover` | `#48D6DB` |
|
|
2680
|
+
| `--cds-color-other-teal-fill` | `#A1E9E9` |
|
|
2681
|
+
| `--cds-color-other-teal-content` | `#022B2F` |
|
|
2682
|
+
| `--cds-color-other-purple-surface` | `#A96FDE` |
|
|
2683
|
+
| `--cds-color-other-purple-line` | `#B381E1` |
|
|
2684
|
+
| `--cds-color-other-purple-fill-hover` | `#D6B8EF` |
|
|
2685
|
+
| `--cds-color-other-purple-fill` | `#E8D5F6` |
|
|
2686
|
+
| `--cds-color-other-purple-content` | `#2F0F50` |
|
|
2687
|
+
| `--cds-color-other-pink-surface` | `#D25CB8` |
|
|
2688
|
+
| `--cds-color-other-pink-line` | `#DB70C4` |
|
|
2689
|
+
| `--cds-color-other-pink-fill-hover` | `#F3ACE7` |
|
|
2690
|
+
| `--cds-color-other-pink-fill` | `#F8D1F2` |
|
|
2691
|
+
| `--cds-color-other-pink-content` | `#420D35` |
|
|
2692
|
+
| `--cds-color-other-lime-surface` | `#78922C` |
|
|
2693
|
+
| `--cds-color-other-lime-line` | `#85A12D` |
|
|
2694
|
+
| `--cds-color-other-lime-fill-hover` | `#B6CC65` |
|
|
2695
|
+
| `--cds-color-other-lime-fill` | `#D4E490` |
|
|
2696
|
+
| `--cds-color-other-lime-content` | `#202901` |
|
|
2697
|
+
| `--cds-color-other-lemon-surface` | `#8E8C23` |
|
|
2698
|
+
| `--cds-color-other-lemon-line` | `#9D9B25` |
|
|
2699
|
+
| `--cds-color-other-lemon-fill-hover` | `#CBC65F` |
|
|
2700
|
+
| `--cds-color-other-lemon-fill` | `#E6DF83` |
|
|
2701
|
+
| `--cds-color-other-lemon-content` | `#282601` |
|
|
2702
|
+
| `--cds-color-other-indigo-surface` | `#807EEC` |
|
|
2703
|
+
| `--cds-color-other-indigo-line` | `#918DEC` |
|
|
2704
|
+
| `--cds-color-other-indigo-fill-hover` | `#C3BDF9` |
|
|
2705
|
+
| `--cds-color-other-indigo-fill` | `#DDD9FC` |
|
|
2706
|
+
| `--cds-color-other-indigo-content` | `#1F1F55` |
|
|
2707
|
+
| `--cds-color-other-cyan-surface` | `#439786` |
|
|
2708
|
+
| `--cds-color-other-cyan-line` | `#48A692` |
|
|
2709
|
+
| `--cds-color-other-cyan-fill-hover` | `#58D8BE` |
|
|
2710
|
+
| `--cds-color-other-cyan-fill` | `#9FEBD8` |
|
|
2711
|
+
| `--cds-color-other-cyan-content` | `#052B24` |
|
|
2712
|
+
| `--cds-color-other-chocolate-surface` | `#AC7F58` |
|
|
2713
|
+
| `--cds-color-other-chocolate-line` | `#B78F6D` |
|
|
2714
|
+
| `--cds-color-other-chocolate-fill-hover` | `#D8BEA9` |
|
|
2715
|
+
| `--cds-color-other-chocolate-fill` | `#E7D9CC` |
|
|
2716
|
+
| `--cds-color-other-chocolate-content` | `#361D01` |
|
|
2717
|
+
| `--cds-color-line-tertiary-hover` | `#AFB3BD` |
|
|
2718
|
+
| `--cds-color-line-tertiary` | `#CCCFD6` |
|
|
2719
|
+
| `--cds-color-line-selected-hover` | `#2978D4` |
|
|
2720
|
+
| `--cds-color-line-selected` | `#4D98F9` |
|
|
2721
|
+
| `--cds-color-line-secondary-hover` | `#9298A4` |
|
|
2722
|
+
| `--cds-color-line-secondary` | `#AFB3BD` |
|
|
2723
|
+
| `--cds-color-line-primary-hover` | `#727987` |
|
|
2724
|
+
| `--cds-color-line-primary` | `#9298A4` |
|
|
2725
|
+
| `--cds-color-line-focus-outline` | `#A4C5FE` |
|
|
2726
|
+
| `--cds-color-line-focus` | `#4D98F9` |
|
|
2727
|
+
| `--cds-color-line-elevated` | `#FFFFFF00` |
|
|
2728
|
+
| `--cds-color-line-disable` | `#C0C3CB` |
|
|
2729
|
+
| `--cds-color-fill-selected-hover` | `#2978D4` |
|
|
2730
|
+
| `--cds-color-fill-selected` | `#4D98F9` |
|
|
2731
|
+
| `--cds-color-fill-secondary-hover` | `#CCCFD6` |
|
|
2732
|
+
| `--cds-color-fill-secondary-active` | `#C0C3CB` |
|
|
2733
|
+
| `--cds-color-fill-secondary` | `#DADDE2` |
|
|
2734
|
+
| `--cds-color-fill-primary-hover` | `#DADDE2` |
|
|
2735
|
+
| `--cds-color-fill-primary-active` | `#CCCFD6` |
|
|
2736
|
+
| `--cds-color-fill-primary` | `#FFFFFF` |
|
|
2737
|
+
| `--cds-color-fill-elevated` | `#FFFFFF` |
|
|
2738
|
+
| `--cds-color-fill-disable` | `#DADDE2` |
|
|
2739
|
+
| `--cds-color-content-tertiary` | `#727987` |
|
|
2740
|
+
| `--cds-color-content-secondary` | `#4F5666` |
|
|
2741
|
+
| `--cds-color-content-primary` | `#212631` |
|
|
2742
|
+
| `--cds-color-content-placeholder` | `#828A97` |
|
|
2743
|
+
| `--cds-color-content-on-dark` | `#FFFFFF` |
|
|
2744
|
+
| `--cds-color-content-link-visited` | `#955EC8` |
|
|
2745
|
+
| `--cds-color-content-link` | `#2978D4` |
|
|
2746
|
+
| `--cds-color-content-inverse` | `#FFFFFF` |
|
|
2747
|
+
| `--cds-color-content-disable` | `#9298A4` |
|
|
2748
|
+
| `--cds-color-brand-secondary-hover` | `#F7CFDA` |
|
|
2749
|
+
| `--cds-color-brand-secondary-border` | `#FBE7EC` |
|
|
2750
|
+
| `--cds-color-brand-secondary-active` | `#F0A8BC` |
|
|
2751
|
+
| `--cds-color-brand-secondary` | `#FBE7EC` |
|
|
2752
|
+
| `--cds-color-brand-primary-hover` | `#D2154B` |
|
|
2753
|
+
| `--cds-color-brand-primary-content` | `#7D0E27` |
|
|
2754
|
+
| `--cds-color-brand-primary-border` | `#C71B3C` |
|
|
2755
|
+
| `--cds-color-brand-primary-active` | `#E0476E` |
|
|
2756
|
+
| `--cds-color-brand-primary` | `#C71B3C` |
|
|
2757
|
+
|
|
2758
|
+
## lumaDark (тёмная)
|
|
2759
|
+
|
|
2760
|
+
| Токен | Значение |
|
|
2761
|
+
| --- | --- |
|
|
2762
|
+
| `--cds-color-surface-secondary` | `#33373F` |
|
|
2763
|
+
| `--cds-color-surface-primary` | `#272A30` |
|
|
2764
|
+
| `--cds-color-surface-overlay` | `#272A30CC` |
|
|
2765
|
+
| `--cds-color-surface-inverse` | `#DCDDE3` |
|
|
2766
|
+
| `--cds-color-surface-elevated` | `#33373F` |
|
|
2767
|
+
| `--cds-color-status-warning-surface` | `#C9A449` |
|
|
2768
|
+
| `--cds-color-status-warning-line` | `#BE9737` |
|
|
2769
|
+
| `--cds-color-status-warning-fill-hover` | `#8A6502` |
|
|
2770
|
+
| `--cds-color-status-warning-fill` | `#614301` |
|
|
2771
|
+
| `--cds-color-status-warning-content` | `#EADBBA` |
|
|
2772
|
+
| `--cds-color-status-success-surface` | `#6EBA66` |
|
|
2773
|
+
| `--cds-color-status-success-line` | `#5DAF55` |
|
|
2774
|
+
| `--cds-color-status-success-fill-hover` | `#1F7C22` |
|
|
2775
|
+
| `--cds-color-status-success-fill` | `#0D5512` |
|
|
2776
|
+
| `--cds-color-status-success-content` | `#CAE4C4` |
|
|
2777
|
+
| `--cds-color-status-progress-surface` | `#4DB1FF` |
|
|
2778
|
+
| `--cds-color-status-progress-line` | `#0EA4F8` |
|
|
2779
|
+
| `--cds-color-status-progress-fill-hover` | `#0172AC` |
|
|
2780
|
+
| `--cds-color-status-progress-fill` | `#014F77` |
|
|
2781
|
+
| `--cds-color-status-progress-content` | `#C7E0FF` |
|
|
2782
|
+
| `--cds-color-status-info-surface` | `#A5A9B2` |
|
|
2783
|
+
| `--cds-color-status-info-line` | `#989DA8` |
|
|
2784
|
+
| `--cds-color-status-info-fill-hover` | `#666C79` |
|
|
2785
|
+
| `--cds-color-status-info-fill` | `#454951` |
|
|
2786
|
+
| `--cds-color-status-info-content` | `#DCDDE3` |
|
|
2787
|
+
| `--cds-color-status-indication-surface` | `#FF9E92` |
|
|
2788
|
+
| `--cds-color-status-indication-line` | `#FF9E92` |
|
|
2789
|
+
| `--cds-color-status-indication-fill-hover` | `#B8423D` |
|
|
2790
|
+
| `--cds-color-status-indication-fill` | `#822825` |
|
|
2791
|
+
| `--cds-color-status-indication-content` | `#FFD2CC` |
|
|
2792
|
+
| `--cds-color-status-danger-surface` | `#FF9E92` |
|
|
2793
|
+
| `--cds-color-status-danger-line` | `#FF9E92` |
|
|
2794
|
+
| `--cds-color-status-danger-fill-hover` | `#B8423D` |
|
|
2795
|
+
| `--cds-color-status-danger-fill` | `#822825` |
|
|
2796
|
+
| `--cds-color-status-danger-content` | `#FFD2CC` |
|
|
2797
|
+
| `--cds-color-page-primary` | `#1A1A1A` |
|
|
2798
|
+
| `--cds-color-other-teal-surface` | `#0ABACE` |
|
|
2799
|
+
| `--cds-color-other-teal-line` | `#01ACBF` |
|
|
2800
|
+
| `--cds-color-other-teal-fill-hover` | `#007886` |
|
|
2801
|
+
| `--cds-color-other-teal-fill` | `#04525B` |
|
|
2802
|
+
| `--cds-color-other-teal-content` | `#D4F2F7` |
|
|
2803
|
+
| `--cds-color-other-purple-surface` | `#B79AF5` |
|
|
2804
|
+
| `--cds-color-other-purple-line` | `#AE8BEE` |
|
|
2805
|
+
| `--cds-color-other-purple-fill-hover` | `#8457B8` |
|
|
2806
|
+
| `--cds-color-other-purple-fill` | `#5E3882` |
|
|
2807
|
+
| `--cds-color-other-purple-content` | `#F3E9FE` |
|
|
2808
|
+
| `--cds-color-other-pink-surface` | `#E889D1` |
|
|
2809
|
+
| `--cds-color-other-pink-line` | `#E078C7` |
|
|
2810
|
+
| `--cds-color-other-pink-fill-hover` | `#AC4296` |
|
|
2811
|
+
| `--cds-color-other-pink-fill` | `#7A2869` |
|
|
2812
|
+
| `--cds-color-other-pink-content` | `#FDE6F6` |
|
|
2813
|
+
| `--cds-color-other-lime-surface` | `#9BB24D` |
|
|
2814
|
+
| `--cds-color-other-lime-line` | `#8DA63B` |
|
|
2815
|
+
| `--cds-color-other-lime-fill-hover` | `#5B7400` |
|
|
2816
|
+
| `--cds-color-other-lime-fill` | `#3D4F00` |
|
|
2817
|
+
| `--cds-color-other-lime-content` | `#EBEED8` |
|
|
2818
|
+
| `--cds-color-other-lemon-surface` | `#ABAE48` |
|
|
2819
|
+
| `--cds-color-other-lemon-line` | `#9DA235` |
|
|
2820
|
+
| `--cds-color-other-lemon-fill-hover` | `#6A7100` |
|
|
2821
|
+
| `--cds-color-other-lemon-fill` | `#484C01` |
|
|
2822
|
+
| `--cds-color-other-lemon-content` | `#EEEED9` |
|
|
2823
|
+
| `--cds-color-other-indigo-surface` | `#96A4FF` |
|
|
2824
|
+
| `--cds-color-other-indigo-line` | `#8B95F9` |
|
|
2825
|
+
| `--cds-color-other-indigo-fill-hover` | `#6362C5` |
|
|
2826
|
+
| `--cds-color-other-indigo-fill` | `#40428D` |
|
|
2827
|
+
| `--cds-color-other-indigo-content` | `#EBEBFF` |
|
|
2828
|
+
| `--cds-color-other-cyan-surface` | `#0ABEA3` |
|
|
2829
|
+
| `--cds-color-other-cyan-line` | `#0AB098` |
|
|
2830
|
+
| `--cds-color-other-cyan-fill-hover` | `#067A69` |
|
|
2831
|
+
| `--cds-color-other-cyan-fill` | `#005348` |
|
|
2832
|
+
| `--cds-color-other-cyan-content` | `#D5F3EB` |
|
|
2833
|
+
| `--cds-color-other-chocolate-surface` | `#D49E6D` |
|
|
2834
|
+
| `--cds-color-other-chocolate-line` | `#CA915C` |
|
|
2835
|
+
| `--cds-color-other-chocolate-fill-hover` | `#985E1F` |
|
|
2836
|
+
| `--cds-color-other-chocolate-fill` | `#6E3B01` |
|
|
2837
|
+
| `--cds-color-other-chocolate-content` | `#FAEADB` |
|
|
2838
|
+
| `--cds-color-line-tertiary-hover` | `#7A808E` |
|
|
2839
|
+
| `--cds-color-line-tertiary` | `#565D67` |
|
|
2840
|
+
| `--cds-color-line-selected-hover` | `#92BAFE` |
|
|
2841
|
+
| `--cds-color-line-selected` | `#5D9DFC` |
|
|
2842
|
+
| `--cds-color-line-secondary-hover` | `#989DA8` |
|
|
2843
|
+
| `--cds-color-line-secondary` | `#7A808E` |
|
|
2844
|
+
| `--cds-color-line-primary-hover` | `#B5B7C0` |
|
|
2845
|
+
| `--cds-color-line-primary` | `#989DA8` |
|
|
2846
|
+
| `--cds-color-line-focus-outline` | `#1159B5` |
|
|
2847
|
+
| `--cds-color-line-focus` | `#5D9DFC` |
|
|
2848
|
+
| `--cds-color-line-elevated` | `#828A9766` |
|
|
2849
|
+
| `--cds-color-line-disable` | `#666C79` |
|
|
2850
|
+
| `--cds-color-fill-selected-hover` | `#92BAFE` |
|
|
2851
|
+
| `--cds-color-fill-selected` | `#5D9DFC` |
|
|
2852
|
+
| `--cds-color-fill-secondary-hover` | `#565D67` |
|
|
2853
|
+
| `--cds-color-fill-secondary-active` | `#666C79` |
|
|
2854
|
+
| `--cds-color-fill-secondary` | `#454951` |
|
|
2855
|
+
| `--cds-color-fill-primary-hover` | `#454951` |
|
|
2856
|
+
| `--cds-color-fill-primary-active` | `#565D67` |
|
|
2857
|
+
| `--cds-color-fill-primary` | `#272A30` |
|
|
2858
|
+
| `--cds-color-fill-elevated` | `#7A808E` |
|
|
2859
|
+
| `--cds-color-fill-disable` | `#454951` |
|
|
2860
|
+
| `--cds-color-content-tertiary` | `#B5B7C0` |
|
|
2861
|
+
| `--cds-color-content-secondary` | `#CFD2D7` |
|
|
2862
|
+
| `--cds-color-content-primary` | `#ECECEF` |
|
|
2863
|
+
| `--cds-color-content-placeholder` | `#A5A9B2` |
|
|
2864
|
+
| `--cds-color-content-on-dark` | `#F9F9FC` |
|
|
2865
|
+
| `--cds-color-content-link-visited` | `#C0AEF8` |
|
|
2866
|
+
| `--cds-color-content-link` | `#92BAFE` |
|
|
2867
|
+
| `--cds-color-content-inverse` | `#1A1A1A` |
|
|
2868
|
+
| `--cds-color-content-disable` | `#989DA8` |
|
|
2869
|
+
| `--cds-color-brand-secondary-hover` | `#650B25` |
|
|
2870
|
+
| `--cds-color-brand-secondary-border` | `#8A1034` |
|
|
2871
|
+
| `--cds-color-brand-secondary-active` | `#8A1034` |
|
|
2872
|
+
| `--cds-color-brand-secondary` | `#3A0715` |
|
|
2873
|
+
| `--cds-color-brand-primary-hover` | `#8A1034` |
|
|
2874
|
+
| `--cds-color-brand-primary-content` | `#FFD9E1` |
|
|
2875
|
+
| `--cds-color-brand-primary-border` | `#D2154B` |
|
|
2876
|
+
| `--cds-color-brand-primary-active` | `#650B25` |
|
|
2877
|
+
| `--cds-color-brand-primary` | `#D2154B` |
|
|
2878
|
+
|
|
1840
2879
|
## promoLight (светлая)
|
|
1841
2880
|
|
|
1842
2881
|
| Токен | Значение |
|
|
@@ -22304,6 +23343,517 @@ function onUpdateModelValue(value: boolean, id: number) {
|
|
|
22304
23343
|
|
|
22305
23344
|
---
|
|
22306
23345
|
|
|
23346
|
+
# CdsOtpInput
|
|
23347
|
+
|
|
23348
|
+
_Категория: Controls · появился в 4.0.0 · статус: new_
|
|
23349
|
+
|
|
23350
|
+
Поле ввода одноразового кода — из SMS, письма или приложения-аутентификатора. Внешне это ряд отдельных ячеек, но ввод принимает один скрытый `input`: поэтому работают автозаполнение кода из SMS, вставка целой строкой из буфера, выделение и стрелки, а фокус не приходится перепрыгивать между ячейками вручную.
|
|
23351
|
+
|
|
23352
|
+
**Смотрите также:** Для обычного короткого текста или числа возьмите CdsTextInput: `CdsOtpInput` нужен там, где длина ввода известна заранее и каждый символ показывается отдельной ячейкой.
|
|
23353
|
+
|
|
23354
|
+
## Анатомия
|
|
23355
|
+
|
|
23356
|
+
Ячейки (`CdsOtpField`) только рисуют код — введённый символ, заполнитель или
|
|
23357
|
+
мигающую каретку. Настоящий ввод принимает скрытый `input`: он прижат к нижнему
|
|
23358
|
+
краю компонента, поэтому подсказка автозаполнения из SMS появляется под ячейками
|
|
23359
|
+
и ничего не перекрывает. Между ячейками может стоять разделитель
|
|
23360
|
+
(`CdsOtpSeparator`), а в слитном виде ячейки собираются в группу (`CdsOtpGroup`).
|
|
23361
|
+
|
|
23362
|
+
**Пример — `Anatomy.vue`:**
|
|
23363
|
+
|
|
23364
|
+
```vue
|
|
23365
|
+
<script setup lang="ts">
|
|
23366
|
+
import AnatomyDemo from '@cds/utils/docs/AnatomyDemo.vue';
|
|
23367
|
+
import { CdsOtpInput } from '@central-design-system/components';
|
|
23368
|
+
|
|
23369
|
+
// Схема 1: обычный ряд — ячейки и разделители между ними
|
|
23370
|
+
const fieldsMarkers = [
|
|
23371
|
+
{ selector: '.cds-otp-input__content', label: 'Ряд ячеек', side: 'right' as const },
|
|
23372
|
+
{ selector: '.cds-otp-field', label: 'Ячейка (CdsOtpField)', side: 'top' as const },
|
|
23373
|
+
{ selector: '.cds-otp-separator', label: 'Разделитель (CdsOtpSeparator)', side: 'bottom' as const },
|
|
23374
|
+
{ selector: '.cds-otp-field__placeholder', label: 'Символ-заполнитель', side: 'bottom' as const }
|
|
23375
|
+
];
|
|
23376
|
+
|
|
23377
|
+
// Схема 2: слитный вид — ячейки собраны в общую группу
|
|
23378
|
+
const mergedMarkers = [
|
|
23379
|
+
{ selector: '.cds-otp-field', label: 'Ячейка (CdsOtpField)', side: 'top' as const },
|
|
23380
|
+
{ selector: '.cds-otp-group', label: 'Группа (CdsOtpGroup)', side: 'bottom' as const }
|
|
23381
|
+
];
|
|
23382
|
+
</script>
|
|
23383
|
+
|
|
23384
|
+
<template>
|
|
23385
|
+
<div class="flex flex-col gap-600">
|
|
23386
|
+
<AnatomyDemo :markers="fieldsMarkers">
|
|
23387
|
+
<CdsOtpInput model-value="12" divider="-" placeholder="0" />
|
|
23388
|
+
</AnatomyDemo>
|
|
23389
|
+
|
|
23390
|
+
<AnatomyDemo :markers="mergedMarkers">
|
|
23391
|
+
<CdsOtpInput model-value="12" merged />
|
|
23392
|
+
</AnatomyDemo>
|
|
23393
|
+
</div>
|
|
23394
|
+
</template>
|
|
23395
|
+
```
|
|
23396
|
+
|
|
23397
|
+
## Вариации
|
|
23398
|
+
|
|
23399
|
+
### Длина и тип кода
|
|
23400
|
+
|
|
23401
|
+
Свойство `length` задаёт число ячеек, `type` — что можно вводить: `number`
|
|
23402
|
+
(по умолчанию) принимает только цифры и открывает цифровую клавиатуру на
|
|
23403
|
+
мобильных, `text` — любые символы, `password` дополнительно скрывает введённое
|
|
23404
|
+
точками. Тот же эффект без смены типа даёт `masked`.
|
|
23405
|
+
|
|
23406
|
+
**Пример — `LengthAndType.vue`:**
|
|
23407
|
+
|
|
23408
|
+
```vue
|
|
23409
|
+
<script setup lang="ts">
|
|
23410
|
+
import { CdsOtpInput } from '@central-design-system/components';
|
|
23411
|
+
</script>
|
|
23412
|
+
|
|
23413
|
+
<template>
|
|
23414
|
+
<div class="flex flex-col items-center gap-400">
|
|
23415
|
+
<CdsOtpInput :length="4" model-value="1234" />
|
|
23416
|
+
<CdsOtpInput type="text" model-value="AB12CD" />
|
|
23417
|
+
<CdsOtpInput type="password" model-value="123456" />
|
|
23418
|
+
</div>
|
|
23419
|
+
</template>
|
|
23420
|
+
```
|
|
23421
|
+
|
|
23422
|
+
### Допустимые символы
|
|
23423
|
+
|
|
23424
|
+
Свойство `pattern` сужает набор символов: имя готового набора (`numeric`,
|
|
23425
|
+
`alpha`, `alphanumeric`, `unicode-alpha`, `unicode-alphanumeric`) или своё
|
|
23426
|
+
регулярное выражение. Проверка идёт посимвольно — лишние символы не попадут в
|
|
23427
|
+
поле ни с клавиатуры, ни из буфера обмена.
|
|
23428
|
+
|
|
23429
|
+
**Пример — `Pattern.vue`:**
|
|
23430
|
+
|
|
23431
|
+
```vue
|
|
23432
|
+
<script setup lang="ts">
|
|
23433
|
+
import { CdsOtpInput } from '@central-design-system/components';
|
|
23434
|
+
</script>
|
|
23435
|
+
|
|
23436
|
+
<template>
|
|
23437
|
+
<div class="flex flex-col items-center gap-400">
|
|
23438
|
+
<CdsOtpInput type="text" pattern="alpha" :length="4" placeholder="A" />
|
|
23439
|
+
<CdsOtpInput type="text" pattern="alphanumeric" placeholder="X" />
|
|
23440
|
+
<CdsOtpInput type="text" :pattern="/[0-9A-F]/" placeholder="F" />
|
|
23441
|
+
</div>
|
|
23442
|
+
</template>
|
|
23443
|
+
```
|
|
23444
|
+
|
|
23445
|
+
### Разделитель
|
|
23446
|
+
|
|
23447
|
+
Свойство `divider` ставит символ между ячейками — например, дефис в коде вида
|
|
23448
|
+
`123-456`. Слот `divider` даёт полную свободу разметки и получает `index` —
|
|
23449
|
+
номер ячейки слева от разделителя, так что разделитель можно поставить только
|
|
23450
|
+
в нужном месте.
|
|
23451
|
+
|
|
23452
|
+
**Пример — `Divider.vue`:**
|
|
23453
|
+
|
|
23454
|
+
```vue
|
|
23455
|
+
<script setup lang="ts">
|
|
23456
|
+
import { CdsIcon, CdsOtpInput } from '@central-design-system/components';
|
|
23457
|
+
</script>
|
|
23458
|
+
|
|
23459
|
+
<template>
|
|
23460
|
+
<div class="flex flex-col items-center gap-400">
|
|
23461
|
+
<CdsOtpInput divider="-" model-value="123456" />
|
|
23462
|
+
|
|
23463
|
+
<CdsOtpInput model-value="123456">
|
|
23464
|
+
<template #divider="{ index }">
|
|
23465
|
+
<CdsIcon v-if="index === 2" name="minus" size="sm" />
|
|
23466
|
+
</template>
|
|
23467
|
+
</CdsOtpInput>
|
|
23468
|
+
</div>
|
|
23469
|
+
</template>
|
|
23470
|
+
```
|
|
23471
|
+
|
|
23472
|
+
### Слитный вид
|
|
23473
|
+
|
|
23474
|
+
Свойство `merged` убирает промежутки: ячейки становятся одним полем с общей
|
|
23475
|
+
рамкой. Такой вид компактнее и меньше дробит форму.
|
|
23476
|
+
|
|
23477
|
+
**Пример — `Merged.vue`:**
|
|
23478
|
+
|
|
23479
|
+
```vue
|
|
23480
|
+
<script setup lang="ts">
|
|
23481
|
+
import { CdsOtpInput } from '@central-design-system/components';
|
|
23482
|
+
</script>
|
|
23483
|
+
|
|
23484
|
+
<template>
|
|
23485
|
+
<div class="flex justify-center">
|
|
23486
|
+
<CdsOtpInput merged model-value="1234" />
|
|
23487
|
+
</div>
|
|
23488
|
+
</template>
|
|
23489
|
+
```
|
|
23490
|
+
|
|
23491
|
+
### Заполнитель
|
|
23492
|
+
|
|
23493
|
+
Свойство `placeholder` показывает символ в пустых ячейках — подсказку формата
|
|
23494
|
+
или просто точку, чтобы ряд не выглядел пустым.
|
|
23495
|
+
|
|
23496
|
+
**Пример — `Placeholder.vue`:**
|
|
23497
|
+
|
|
23498
|
+
```vue
|
|
23499
|
+
<script setup lang="ts">
|
|
23500
|
+
import { CdsOtpInput } from '@central-design-system/components';
|
|
23501
|
+
</script>
|
|
23502
|
+
|
|
23503
|
+
<template>
|
|
23504
|
+
<div class="flex flex-col items-center gap-400">
|
|
23505
|
+
<CdsOtpInput placeholder="0" />
|
|
23506
|
+
<CdsOtpInput placeholder="•" />
|
|
23507
|
+
</div>
|
|
23508
|
+
</template>
|
|
23509
|
+
```
|
|
23510
|
+
|
|
23511
|
+
### Размеры
|
|
23512
|
+
|
|
23513
|
+
Свойство `size` меняет высоту ячеек и размер шрифта. Размер по умолчанию — `md`.
|
|
23514
|
+
|
|
23515
|
+
**Пример — `Sizes.vue`:**
|
|
23516
|
+
|
|
23517
|
+
```vue
|
|
23518
|
+
<script setup lang="ts">
|
|
23519
|
+
import { CdsOtpInput } from '@central-design-system/components';
|
|
23520
|
+
|
|
23521
|
+
const sizes = ['xs', 'sm', 'md', 'lg', 'xl'] as const;
|
|
23522
|
+
</script>
|
|
23523
|
+
|
|
23524
|
+
<template>
|
|
23525
|
+
<div class="flex flex-col items-center gap-400">
|
|
23526
|
+
<CdsOtpInput v-for="size of sizes" :key="size" :size="size" :length="4" model-value="1234" />
|
|
23527
|
+
</div>
|
|
23528
|
+
</template>
|
|
23529
|
+
```
|
|
23530
|
+
|
|
23531
|
+
### Состояния
|
|
23532
|
+
|
|
23533
|
+
`disabled` блокирует ввод, `error` подсвечивает весь ряд ошибкой, `loading`
|
|
23534
|
+
показывает индикатор поверх ячеек и не стирает набранный код. `focus-all`
|
|
23535
|
+
подсвечивает весь ряд, пока поле в фокусе, а не только активную ячейку.
|
|
23536
|
+
|
|
23537
|
+
**Пример — `States.vue`:**
|
|
23538
|
+
|
|
23539
|
+
```vue
|
|
23540
|
+
<script setup lang="ts">
|
|
23541
|
+
import { CdsOtpInput } from '@central-design-system/components';
|
|
23542
|
+
</script>
|
|
23543
|
+
|
|
23544
|
+
<template>
|
|
23545
|
+
<div class="flex flex-col items-center gap-400">
|
|
23546
|
+
<CdsOtpInput :length="4" model-value="12" disabled />
|
|
23547
|
+
<CdsOtpInput :length="4" model-value="1234" error />
|
|
23548
|
+
<CdsOtpInput :length="4" model-value="1234" loading />
|
|
23549
|
+
<CdsOtpInput :length="4" model-value="12" focus-all />
|
|
23550
|
+
</div>
|
|
23551
|
+
</template>
|
|
23552
|
+
```
|
|
23553
|
+
|
|
23554
|
+
### Слоты
|
|
23555
|
+
|
|
23556
|
+
| Слот | Описание |
|
|
23557
|
+
| :-------- | :---------------------------------------------------------------------------- |
|
|
23558
|
+
| `fields` | Ряд ячеек целиком — своя разметка из `CdsOtpGroup`, `CdsOtpField` и `CdsOtpSeparator` |
|
|
23559
|
+
| `divider` | Разделитель между ячейками, `index` — номер ячейки слева от него |
|
|
23560
|
+
| `loader` | Свой индикатор загрузки (при `loading`) |
|
|
23561
|
+
| `default` | Произвольный контент поверх ячеек |
|
|
23562
|
+
|
|
23563
|
+
Слот `fields` нужен, когда ячейки собираются в группы: каждая `CdsOtpField`
|
|
23564
|
+
получает свой `index`, а `CdsOtpGroup` объединяет соседние ячейки в общую рамку.
|
|
23565
|
+
|
|
23566
|
+
**Пример — `CustomFields.vue`:**
|
|
23567
|
+
|
|
23568
|
+
```vue
|
|
23569
|
+
<script setup lang="ts">
|
|
23570
|
+
import { CdsOtpField, CdsOtpGroup, CdsOtpInput, CdsOtpSeparator } from '@central-design-system/components';
|
|
23571
|
+
</script>
|
|
23572
|
+
|
|
23573
|
+
<template>
|
|
23574
|
+
<div class="flex justify-center">
|
|
23575
|
+
<CdsOtpInput model-value="123456">
|
|
23576
|
+
<template #fields>
|
|
23577
|
+
<CdsOtpGroup merged>
|
|
23578
|
+
<CdsOtpField v-for="index of [0, 1, 2]" :key="index" :index="index" />
|
|
23579
|
+
</CdsOtpGroup>
|
|
23580
|
+
|
|
23581
|
+
<CdsOtpSeparator>—</CdsOtpSeparator>
|
|
23582
|
+
|
|
23583
|
+
<CdsOtpGroup merged>
|
|
23584
|
+
<CdsOtpField v-for="index of [3, 4, 5]" :key="index" :index="index" />
|
|
23585
|
+
</CdsOtpGroup>
|
|
23586
|
+
</template>
|
|
23587
|
+
</CdsOtpInput>
|
|
23588
|
+
</div>
|
|
23589
|
+
</template>
|
|
23590
|
+
```
|
|
23591
|
+
|
|
23592
|
+
## Рекомендации
|
|
23593
|
+
|
|
23594
|
+
| ✅ Хорошо | ❌ Плохо |
|
|
23595
|
+
| --- | --- |
|
|
23596
|
+
| Число ячеек равно длине кода — пользователь сразу видит, сколько символов вводить. | Лишние ячейки заставляют гадать, весь ли код набран. |
|
|
23597
|
+
| Код целиком набирается в одном поле: вставка из буфера и автозаполнение из SMS работают. | Отдельные текстовые поля ломают вставку кода и заставляют вручную перепрыгивать фокус. |
|
|
23598
|
+
| При ошибке поле остаётся доступным, а текст рядом говорит, что делать дальше. | Заблокированное поле без объяснения не даёт исправить код. |
|
|
23599
|
+
|
|
23600
|
+
## Сценарии использования
|
|
23601
|
+
|
|
23602
|
+
### Подтверждение по SMS
|
|
23603
|
+
|
|
23604
|
+
Событие `finish` срабатывает, как только код набран целиком, — отправляйте
|
|
23605
|
+
запрос по нему, отдельная кнопка не нужна. На время проверки включите `loading`:
|
|
23606
|
+
код остаётся на экране, а поле не выглядит сломанным. Если сервер не принял код,
|
|
23607
|
+
`error` подсвечивает ряд, а методы `reset()` и `focus()` через ref очищают поле
|
|
23608
|
+
и возвращают в него курсор.
|
|
23609
|
+
|
|
23610
|
+
**Пример — `SmsConfirmation.vue`:**
|
|
23611
|
+
|
|
23612
|
+
```vue
|
|
23613
|
+
<script setup lang="ts">
|
|
23614
|
+
import { CdsOtpInput } from '@central-design-system/components';
|
|
23615
|
+
import { ref } from 'vue';
|
|
23616
|
+
|
|
23617
|
+
const otpRef = ref<InstanceType<typeof CdsOtpInput>>();
|
|
23618
|
+
|
|
23619
|
+
const code = ref('');
|
|
23620
|
+
const loading = ref(false);
|
|
23621
|
+
const status = ref<'idle' | 'success' | 'error'>('idle');
|
|
23622
|
+
|
|
23623
|
+
// Имитация проверки кода на сервере: верный код — 123456
|
|
23624
|
+
function onFinish(value: string) {
|
|
23625
|
+
loading.value = true;
|
|
23626
|
+
status.value = 'idle';
|
|
23627
|
+
|
|
23628
|
+
setTimeout(() => {
|
|
23629
|
+
loading.value = false;
|
|
23630
|
+
status.value = value === '123456' ? 'success' : 'error';
|
|
23631
|
+
|
|
23632
|
+
if (status.value === 'error') {
|
|
23633
|
+
otpRef.value?.reset();
|
|
23634
|
+
otpRef.value?.focus();
|
|
23635
|
+
}
|
|
23636
|
+
}, 1000);
|
|
23637
|
+
}
|
|
23638
|
+
</script>
|
|
23639
|
+
|
|
23640
|
+
<template>
|
|
23641
|
+
<div class="flex flex-col items-center gap-300">
|
|
23642
|
+
<p class="text-200 text-content-secondary">Код отправлен на +7 999 000-00-00</p>
|
|
23643
|
+
|
|
23644
|
+
<CdsOtpInput
|
|
23645
|
+
ref="otpRef"
|
|
23646
|
+
v-model="code"
|
|
23647
|
+
:loading="loading"
|
|
23648
|
+
:error="status === 'error'"
|
|
23649
|
+
@finish="onFinish"
|
|
23650
|
+
@update:model-value="status = 'idle'"
|
|
23651
|
+
/>
|
|
23652
|
+
|
|
23653
|
+
<p v-if="status === 'success'" class="text-200 text-status-success-content">Код подтверждён</p>
|
|
23654
|
+
<p v-else-if="status === 'error'" class="text-200 text-status-danger-content">
|
|
23655
|
+
Код неверный — введите последние цифры из SMS ещё раз
|
|
23656
|
+
</p>
|
|
23657
|
+
<p v-else class="text-200 text-content-tertiary">Введите 123456, чтобы увидеть подтверждение</p>
|
|
23658
|
+
</div>
|
|
23659
|
+
</template>
|
|
23660
|
+
```
|
|
23661
|
+
|
|
23662
|
+
### Повторная отправка кода
|
|
23663
|
+
|
|
23664
|
+
Кнопка «Отправить снова» открывается по таймеру — так пользователь не завалит
|
|
23665
|
+
запросами шлюз. Вместе с новым кодом сбрасывайте поле: `reset()` очищает ячейки,
|
|
23666
|
+
`focus()` ставит курсор в первую, и старый код не смешивается с новым.
|
|
23667
|
+
|
|
23668
|
+
**Пример — `ResendCode.vue`:**
|
|
23669
|
+
|
|
23670
|
+
```vue
|
|
23671
|
+
<script setup lang="ts">
|
|
23672
|
+
import { CdsButton, CdsOtpInput } from '@central-design-system/components';
|
|
23673
|
+
import { onScopeDispose, ref } from 'vue';
|
|
23674
|
+
|
|
23675
|
+
const otpRef = ref<InstanceType<typeof CdsOtpInput>>();
|
|
23676
|
+
|
|
23677
|
+
const code = ref('');
|
|
23678
|
+
const seconds = ref(15);
|
|
23679
|
+
|
|
23680
|
+
let timer: ReturnType<typeof setInterval> | undefined;
|
|
23681
|
+
|
|
23682
|
+
function countdown() {
|
|
23683
|
+
clearInterval(timer);
|
|
23684
|
+
|
|
23685
|
+
timer = setInterval(() => {
|
|
23686
|
+
seconds.value -= 1;
|
|
23687
|
+
|
|
23688
|
+
if (seconds.value <= 0) clearInterval(timer);
|
|
23689
|
+
}, 1000);
|
|
23690
|
+
}
|
|
23691
|
+
|
|
23692
|
+
function resend() {
|
|
23693
|
+
seconds.value = 15;
|
|
23694
|
+
countdown();
|
|
23695
|
+
|
|
23696
|
+
otpRef.value?.reset();
|
|
23697
|
+
otpRef.value?.focus();
|
|
23698
|
+
}
|
|
23699
|
+
|
|
23700
|
+
countdown();
|
|
23701
|
+
onScopeDispose(() => clearInterval(timer));
|
|
23702
|
+
</script>
|
|
23703
|
+
|
|
23704
|
+
<template>
|
|
23705
|
+
<div class="flex flex-col items-center gap-300">
|
|
23706
|
+
<CdsOtpInput ref="otpRef" v-model="code" placeholder="•" />
|
|
23707
|
+
|
|
23708
|
+
<CdsButton
|
|
23709
|
+
appearance="tertiary"
|
|
23710
|
+
size="sm"
|
|
23711
|
+
:disabled="seconds > 0"
|
|
23712
|
+
:text="seconds > 0 ? `Отправить снова через ${seconds} с` : 'Отправить код снова'"
|
|
23713
|
+
@click="resend"
|
|
23714
|
+
/>
|
|
23715
|
+
</div>
|
|
23716
|
+
</template>
|
|
23717
|
+
```
|
|
23718
|
+
|
|
23719
|
+
### Код в форме
|
|
23720
|
+
|
|
23721
|
+
Когда код — часть формы входа, оставьте кнопку подтверждения: она даёт явный
|
|
23722
|
+
момент отправки. Кнопка ждёт, пока набраны все символы, — длину кода видно из
|
|
23723
|
+
`v-model`, а `disabled` на поле фиксирует уже подтверждённый код.
|
|
23724
|
+
|
|
23725
|
+
**Пример — `TwoFactorForm.vue`:**
|
|
23726
|
+
|
|
23727
|
+
```vue
|
|
23728
|
+
<script setup lang="ts">
|
|
23729
|
+
import { CdsButton, CdsForm, CdsOtpInput } from '@central-design-system/components';
|
|
23730
|
+
import { computed, ref } from 'vue';
|
|
23731
|
+
|
|
23732
|
+
const code = ref('');
|
|
23733
|
+
const loading = ref(false);
|
|
23734
|
+
const confirmed = ref(false);
|
|
23735
|
+
|
|
23736
|
+
const isComplete = computed(() => code.value.length === 6);
|
|
23737
|
+
|
|
23738
|
+
function submit() {
|
|
23739
|
+
loading.value = true;
|
|
23740
|
+
|
|
23741
|
+
setTimeout(() => {
|
|
23742
|
+
loading.value = false;
|
|
23743
|
+
confirmed.value = true;
|
|
23744
|
+
}, 1000);
|
|
23745
|
+
}
|
|
23746
|
+
</script>
|
|
23747
|
+
|
|
23748
|
+
<template>
|
|
23749
|
+
<CdsForm class="flex flex-col items-center gap-300 w-[350px] m-auto" @submit.prevent="submit">
|
|
23750
|
+
<p class="text-200 text-content-secondary">Введите код из приложения-аутентификатора</p>
|
|
23751
|
+
|
|
23752
|
+
<CdsOtpInput v-model="code" :disabled="confirmed" divider="-" />
|
|
23753
|
+
|
|
23754
|
+
<CdsButton type="submit" text="Подтвердить вход" :disabled="!isComplete || confirmed" :loading="loading" block />
|
|
23755
|
+
|
|
23756
|
+
<p v-if="confirmed" class="text-200 text-status-success-content">Вход подтверждён</p>
|
|
23757
|
+
</CdsForm>
|
|
23758
|
+
</template>
|
|
23759
|
+
```
|
|
23760
|
+
|
|
23761
|
+
## API
|
|
23762
|
+
|
|
23763
|
+
### CdsOtpInput
|
|
23764
|
+
|
|
23765
|
+
**Props**
|
|
23766
|
+
|
|
23767
|
+
| Prop | Type | Default | Required | Description |
|
|
23768
|
+
| --- | --- | --- | --- | --- |
|
|
23769
|
+
| `activeColor` | `string \| undefined` | — | no | Цвет компонента, когда он находится в активном состоянии |
|
|
23770
|
+
| `autofocus` | `boolean \| undefined` | — | no | Включает автофокус |
|
|
23771
|
+
| `baseColor` | `string \| undefined` | — | no | Цвет неактивного компонента |
|
|
23772
|
+
| `bgColor` | `string \| undefined` | — | no | Цвет фона компонента |
|
|
23773
|
+
| `color` | `string \| undefined` | — | no | Цвет компонента |
|
|
23774
|
+
| `disabled` | `boolean \| null \| undefined` | `null` | no | Заблокированное состояние |
|
|
23775
|
+
| `divider` | `string \| undefined` | — | no | Символ-разделитель, который ставится между ячейками кода |
|
|
23776
|
+
| `error` | `boolean \| undefined` | — | no | Состояние ошибки |
|
|
23777
|
+
| `focusAll` | `boolean \| undefined` | — | no | Подсвечивать все ячейки, пока поле находится в фокусе, а не только активную |
|
|
23778
|
+
| `focused` | `boolean \| undefined` | — | no | Управляет состоянием фокуса компонента. Когда `true`, компонент считается сфокусированным и может применять соответствующие стили или поведение. |
|
|
23779
|
+
| `height` | `string \| number \| undefined` | — | no | Высота компонента |
|
|
23780
|
+
| `label` | `string \| undefined` | `'$cds.input.otp'` | no | Доступное имя поля (`aria-label`). Принимает ключ локализации вида `$cds.input.otp` |
|
|
23781
|
+
| `length` | `string \| number \| undefined` | `6` | no | Количество ячеек кода |
|
|
23782
|
+
| `loading` | `string \| boolean \| undefined` | — | no | Индикатор загрузки для компонента |
|
|
23783
|
+
| `masked` | `boolean \| undefined` | — | no | Скрывать введённые символы точками |
|
|
23784
|
+
| `maxHeight` | `string \| number \| undefined` | — | no | Максимальная высота компонента |
|
|
23785
|
+
| `maxWidth` | `string \| number \| undefined` | — | no | Максимальная ширина компонента |
|
|
23786
|
+
| `merged` | `boolean \| undefined` | — | no | Слитный вид: ячейки объединяются в одно поле без промежутков между ними |
|
|
23787
|
+
| `minHeight` | `string \| number \| undefined` | — | no | Минимальная высота компонента |
|
|
23788
|
+
| `minWidth` | `string \| number \| undefined` | — | no | Минимальная ширина компонента |
|
|
23789
|
+
| `modelValue` | `string \| number \| undefined` | — | no | Значение компонента v-model |
|
|
23790
|
+
| `pattern` | `RegExp \| "numeric" \| "alpha" \| "alphanumeric" \| "unicode-alpha" \| "unicode-alphanumeric" \| undefined` | — | no | Допустимые символы: имя готового паттерна (`numeric`, `alpha`, `alphanumeric`, `unicode-alpha`, `unicode-alphanumeric`) или собственное регулярное выражение |
|
|
23791
|
+
| `placeholder` | `string \| undefined` | — | no | Символ-заполнитель, который показывается в пустой ячейке |
|
|
23792
|
+
| `size` | `number \| "xs" \| "sm" \| "md" \| "lg" \| "xl" \| undefined` | `'md'` | no | Размер компонента |
|
|
23793
|
+
| `textColor` | `string \| undefined` | — | no | Цвет текста компонента |
|
|
23794
|
+
| `theme` | `string \| undefined` | — | no | Тема компонента |
|
|
23795
|
+
| `type` | `CdsOtpInputType \| undefined` | `'number'` | no | Тип вводимого кода. `number` ограничивает ввод цифрами, `password` скрывает символы |
|
|
23796
|
+
| `width` | `string \| number \| undefined` | — | no | Ширина компонента |
|
|
23797
|
+
|
|
23798
|
+
**Events**
|
|
23799
|
+
|
|
23800
|
+
| Name | Type | Description |
|
|
23801
|
+
| --- | --- | --- |
|
|
23802
|
+
| `finish` | `[value: string]` | Срабатывает, когда код набран полностью |
|
|
23803
|
+
| `update:focused` | `[focused: boolean]` | Срабатывает при получении или потере фокуса |
|
|
23804
|
+
| `update:modelValue` | `[value: string]` | Срабатывает при изменении значения компонента |
|
|
23805
|
+
|
|
23806
|
+
**Slots**
|
|
23807
|
+
|
|
23808
|
+
| Name | Type | Description |
|
|
23809
|
+
| --- | --- | --- |
|
|
23810
|
+
| `default` | `any` | Произвольный контент поверх ячеек кода |
|
|
23811
|
+
| `divider` | `{ index: number; }` | Разделитель между ячейками. `index` — номер ячейки слева от разделителя |
|
|
23812
|
+
| `fields` | `any` | Полностью заменяет ряд ячеек собственной разметкой из `CdsOtpGroup`, `CdsOtpField` и `CdsOtpSeparator` |
|
|
23813
|
+
| `loader` | `any` | Пользовательский индикатор загрузки |
|
|
23814
|
+
|
|
23815
|
+
**Exposed**
|
|
23816
|
+
|
|
23817
|
+
| Name | Type | Description |
|
|
23818
|
+
| --- | --- | --- |
|
|
23819
|
+
| `blur` | `() => void` | Снять фокус с поля |
|
|
23820
|
+
| `focus` | `() => void` | Установить фокус на поле |
|
|
23821
|
+
| `inputRef` | `HTMLInputElement \| undefined` | Ref-ссылка на скрытый input, который принимает ввод кода |
|
|
23822
|
+
| `isFocused` | `boolean \| undefined` | Состояние фокуса поля |
|
|
23823
|
+
| `reset` | `() => void` | Очистить введённый код |
|
|
23824
|
+
|
|
23825
|
+
### CdsOtpField
|
|
23826
|
+
|
|
23827
|
+
**Props**
|
|
23828
|
+
|
|
23829
|
+
| Prop | Type | Default | Required | Description |
|
|
23830
|
+
| --- | --- | --- | --- | --- |
|
|
23831
|
+
| `index` | `number` | — | yes | Порядковый номер ячейки, начиная с нуля |
|
|
23832
|
+
|
|
23833
|
+
### CdsOtpGroup
|
|
23834
|
+
|
|
23835
|
+
**Props**
|
|
23836
|
+
|
|
23837
|
+
| Prop | Type | Default | Required | Description |
|
|
23838
|
+
| --- | --- | --- | --- | --- |
|
|
23839
|
+
| `merged` | `boolean \| null \| undefined` | — | no | Слитный вид группы. По умолчанию наследуется от родительского `CdsOtpInput` |
|
|
23840
|
+
|
|
23841
|
+
**Slots**
|
|
23842
|
+
|
|
23843
|
+
| Name | Type | Description |
|
|
23844
|
+
| --- | --- | --- |
|
|
23845
|
+
| `default` | `any` | Ячейки кода группы |
|
|
23846
|
+
|
|
23847
|
+
### CdsOtpSeparator
|
|
23848
|
+
|
|
23849
|
+
**Slots**
|
|
23850
|
+
|
|
23851
|
+
| Name | Type | Description |
|
|
23852
|
+
| --- | --- | --- |
|
|
23853
|
+
| `default` | `any` | Содержимое разделителя |
|
|
23854
|
+
|
|
23855
|
+
---
|
|
23856
|
+
|
|
22307
23857
|
# CdsOverlay
|
|
22308
23858
|
|
|
22309
23859
|
_Категория: Content · появился в 4.0.0_
|
|
@@ -41092,7 +42642,7 @@ function toggle(id: number) {
|
|
|
41092
42642
|
Этот документ — **живой** migration guide: записи добавляются по мере появления
|
|
41093
42643
|
breaking-изменений в alpha/beta релизах CDS 4.
|
|
41094
42644
|
|
|
41095
|
-
> Версии: CDS 3 — `3.10.1` (стабильная), CDS 4 — `4.0.0-alpha.
|
|
42645
|
+
> Версии: CDS 3 — `3.10.1` (стабильная), CDS 4 — `4.0.0-alpha.4` (в разработке).
|
|
41096
42646
|
|
|
41097
42647
|
## Как читать этот документ
|
|
41098
42648
|
|