@central-design-system/skills 4.0.0-alpha.6
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/.claude-plugin/plugin.json +6 -0
- package/README.md +218 -0
- package/bin/cds-skills.mjs +124 -0
- package/package.json +33 -0
- package/skills/cds-builder/GENERATION.md +44 -0
- package/skills/cds-builder/SKILL.md +308 -0
- package/skills/cds-builder/references/component-decision-tree.md +310 -0
- package/skills/cds-builder/references/components/cds-app/api.md +19 -0
- package/skills/cds-builder/references/components/cds-app/tokens.md +12 -0
- package/skills/cds-builder/references/components/cds-autocomplete/api.md +155 -0
- package/skills/cds-builder/references/components/cds-autocomplete/examples.md +447 -0
- package/skills/cds-builder/references/components/cds-autocomplete/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-autocomplete/tokens.md +19 -0
- package/skills/cds-builder/references/components/cds-avatar/api.md +35 -0
- package/skills/cds-builder/references/components/cds-avatar/examples.md +240 -0
- package/skills/cds-builder/references/components/cds-avatar/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-avatar/tokens.md +32 -0
- package/skills/cds-builder/references/components/cds-badge/api.md +44 -0
- package/skills/cds-builder/references/components/cds-badge/examples.md +332 -0
- package/skills/cds-builder/references/components/cds-badge/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-badge/tokens.md +32 -0
- package/skills/cds-builder/references/components/cds-breadcrumbs/api.md +83 -0
- package/skills/cds-builder/references/components/cds-breadcrumbs/examples.md +219 -0
- package/skills/cds-builder/references/components/cds-breadcrumbs/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-breadcrumbs/tokens.md +24 -0
- package/skills/cds-builder/references/components/cds-button/api.md +66 -0
- package/skills/cds-builder/references/components/cds-button/examples.md +324 -0
- package/skills/cds-builder/references/components/cds-button/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-button/tokens.md +190 -0
- package/skills/cds-builder/references/components/cds-button-group/api.md +27 -0
- package/skills/cds-builder/references/components/cds-button-group/examples.md +33 -0
- package/skills/cds-builder/references/components/cds-button-group/tokens.md +17 -0
- package/skills/cds-builder/references/components/cds-button-toggle/api.md +51 -0
- package/skills/cds-builder/references/components/cds-button-toggle/examples.md +278 -0
- package/skills/cds-builder/references/components/cds-button-toggle/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-button-toggle/tokens.md +13 -0
- package/skills/cds-builder/references/components/cds-card/api.md +221 -0
- package/skills/cds-builder/references/components/cds-card/examples.md +652 -0
- package/skills/cds-builder/references/components/cds-card/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-card/tokens.md +46 -0
- package/skills/cds-builder/references/components/cds-carousel/api.md +107 -0
- package/skills/cds-builder/references/components/cds-carousel/examples.md +444 -0
- package/skills/cds-builder/references/components/cds-carousel/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-carousel/tokens.md +17 -0
- package/skills/cds-builder/references/components/cds-checkbox/api.md +93 -0
- package/skills/cds-builder/references/components/cds-checkbox/examples.md +319 -0
- package/skills/cds-builder/references/components/cds-checkbox/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-checkbox/tokens.md +18 -0
- package/skills/cds-builder/references/components/cds-checkbox-button/api.md +56 -0
- package/skills/cds-builder/references/components/cds-checkbox-button/examples.md +29 -0
- package/skills/cds-builder/references/components/cds-checkbox-button/tokens.md +56 -0
- package/skills/cds-builder/references/components/cds-combobox/api.md +158 -0
- package/skills/cds-builder/references/components/cds-combobox/examples.md +264 -0
- package/skills/cds-builder/references/components/cds-combobox/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-combobox/tokens.md +19 -0
- package/skills/cds-builder/references/components/cds-counter/api.md +24 -0
- package/skills/cds-builder/references/components/cds-counter/examples.md +93 -0
- package/skills/cds-builder/references/components/cds-counter/tokens.md +11 -0
- package/skills/cds-builder/references/components/cds-date-input/api.md +151 -0
- package/skills/cds-builder/references/components/cds-date-input/examples.md +479 -0
- package/skills/cds-builder/references/components/cds-date-input/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-date-input/tokens.md +16 -0
- package/skills/cds-builder/references/components/cds-date-picker/api.md +63 -0
- package/skills/cds-builder/references/components/cds-date-picker/examples.md +394 -0
- package/skills/cds-builder/references/components/cds-date-picker/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-date-picker/tokens.md +66 -0
- package/skills/cds-builder/references/components/cds-defaults-provider/api.md +21 -0
- package/skills/cds-builder/references/components/cds-description/api.md +22 -0
- package/skills/cds-builder/references/components/cds-description/examples.md +69 -0
- package/skills/cds-builder/references/components/cds-description/tokens.md +11 -0
- package/skills/cds-builder/references/components/cds-divider/api.md +29 -0
- package/skills/cds-builder/references/components/cds-divider/examples.md +374 -0
- package/skills/cds-builder/references/components/cds-divider/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-divider/tokens.md +38 -0
- package/skills/cds-builder/references/components/cds-drawer/api.md +53 -0
- package/skills/cds-builder/references/components/cds-drawer/examples.md +432 -0
- package/skills/cds-builder/references/components/cds-drawer/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-drawer/tokens.md +27 -0
- package/skills/cds-builder/references/components/cds-empty-state/api.md +55 -0
- package/skills/cds-builder/references/components/cds-empty-state/examples.md +330 -0
- package/skills/cds-builder/references/components/cds-empty-state/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-empty-state/tokens.md +25 -0
- package/skills/cds-builder/references/components/cds-expandable-panel/api.md +157 -0
- package/skills/cds-builder/references/components/cds-expandable-panel/examples.md +569 -0
- package/skills/cds-builder/references/components/cds-expandable-panel/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-expandable-panel/tokens.md +34 -0
- package/skills/cds-builder/references/components/cds-field/api.md +62 -0
- package/skills/cds-builder/references/components/cds-field/examples.md +202 -0
- package/skills/cds-builder/references/components/cds-field/tokens.md +94 -0
- package/skills/cds-builder/references/components/cds-file-input/api.md +109 -0
- package/skills/cds-builder/references/components/cds-file-input/examples.md +368 -0
- package/skills/cds-builder/references/components/cds-file-input/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-file-input/tokens.md +15 -0
- package/skills/cds-builder/references/components/cds-file-upload/api.md +296 -0
- package/skills/cds-builder/references/components/cds-file-upload/examples.md +411 -0
- package/skills/cds-builder/references/components/cds-file-upload/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-file-upload/tokens.md +50 -0
- package/skills/cds-builder/references/components/cds-footer/api.md +35 -0
- package/skills/cds-builder/references/components/cds-footer/examples.md +219 -0
- package/skills/cds-builder/references/components/cds-footer/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-footer/tokens.md +14 -0
- package/skills/cds-builder/references/components/cds-form/api.md +48 -0
- package/skills/cds-builder/references/components/cds-form/examples.md +552 -0
- package/skills/cds-builder/references/components/cds-form/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-form/tokens.md +15 -0
- package/skills/cds-builder/references/components/cds-functional-button/api.md +34 -0
- package/skills/cds-builder/references/components/cds-functional-button/examples.md +254 -0
- package/skills/cds-builder/references/components/cds-functional-button/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-functional-button/tokens.md +35 -0
- package/skills/cds-builder/references/components/cds-grid/api.md +66 -0
- package/skills/cds-builder/references/components/cds-grid/examples.md +687 -0
- package/skills/cds-builder/references/components/cds-grid/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-header/api.md +35 -0
- package/skills/cds-builder/references/components/cds-header/examples.md +345 -0
- package/skills/cds-builder/references/components/cds-header/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-header/tokens.md +13 -0
- package/skills/cds-builder/references/components/cds-highlight/api.md +22 -0
- package/skills/cds-builder/references/components/cds-highlight/examples.md +313 -0
- package/skills/cds-builder/references/components/cds-highlight/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-highlight/tokens.md +18 -0
- package/skills/cds-builder/references/components/cds-icon/api.md +33 -0
- package/skills/cds-builder/references/components/cds-icon/examples.md +272 -0
- package/skills/cds-builder/references/components/cds-icon/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-icon/tokens.md +30 -0
- package/skills/cds-builder/references/components/cds-image/api.md +67 -0
- package/skills/cds-builder/references/components/cds-image/examples.md +437 -0
- package/skills/cds-builder/references/components/cds-image/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-image/tokens.md +14 -0
- package/skills/cds-builder/references/components/cds-input/api.md +80 -0
- package/skills/cds-builder/references/components/cds-input/examples.md +205 -0
- package/skills/cds-builder/references/components/cds-input/tokens.md +108 -0
- package/skills/cds-builder/references/components/cds-label/api.md +25 -0
- package/skills/cds-builder/references/components/cds-label/examples.md +72 -0
- package/skills/cds-builder/references/components/cds-label/tokens.md +12 -0
- package/skills/cds-builder/references/components/cds-layout/api.md +50 -0
- package/skills/cds-builder/references/components/cds-layout/examples.md +431 -0
- package/skills/cds-builder/references/components/cds-layout/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-layout/tokens.md +12 -0
- package/skills/cds-builder/references/components/cds-link/api.md +33 -0
- package/skills/cds-builder/references/components/cds-link/examples.md +195 -0
- package/skills/cds-builder/references/components/cds-link/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-link/tokens.md +16 -0
- package/skills/cds-builder/references/components/cds-list/api.md +329 -0
- package/skills/cds-builder/references/components/cds-list/examples.md +653 -0
- package/skills/cds-builder/references/components/cds-list/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-list/tokens.md +125 -0
- package/skills/cds-builder/references/components/cds-loader/api.md +18 -0
- package/skills/cds-builder/references/components/cds-loader/examples.md +59 -0
- package/skills/cds-builder/references/components/cds-loader/tokens.md +50 -0
- package/skills/cds-builder/references/components/cds-main/api.md +14 -0
- package/skills/cds-builder/references/components/cds-main/examples.md +60 -0
- package/skills/cds-builder/references/components/cds-menu/api.md +84 -0
- package/skills/cds-builder/references/components/cds-menu/examples.md +595 -0
- package/skills/cds-builder/references/components/cds-menu/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-menu/tokens.md +19 -0
- package/skills/cds-builder/references/components/cds-messages/api.md +29 -0
- package/skills/cds-builder/references/components/cds-messages/examples.md +119 -0
- package/skills/cds-builder/references/components/cds-messages/tokens.md +15 -0
- package/skills/cds-builder/references/components/cds-modal/api.md +86 -0
- package/skills/cds-builder/references/components/cds-modal/examples.md +516 -0
- package/skills/cds-builder/references/components/cds-modal/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-modal/tokens.md +22 -0
- package/skills/cds-builder/references/components/cds-notification/api.md +46 -0
- package/skills/cds-builder/references/components/cds-notification/examples.md +314 -0
- package/skills/cds-builder/references/components/cds-notification/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-notification/tokens.md +23 -0
- package/skills/cds-builder/references/components/cds-notification-alert/api.md +93 -0
- package/skills/cds-builder/references/components/cds-notification-alert/examples.md +202 -0
- package/skills/cds-builder/references/components/cds-notification-alert/tokens.md +15 -0
- package/skills/cds-builder/references/components/cds-otp-input/api.md +106 -0
- package/skills/cds-builder/references/components/cds-otp-input/examples.md +329 -0
- package/skills/cds-builder/references/components/cds-otp-input/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-otp-input/tokens.md +41 -0
- package/skills/cds-builder/references/components/cds-overlay/api.md +85 -0
- package/skills/cds-builder/references/components/cds-overlay/examples.md +409 -0
- package/skills/cds-builder/references/components/cds-overlay/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-overlay/tokens.md +12 -0
- package/skills/cds-builder/references/components/cds-page/api.md +21 -0
- package/skills/cds-builder/references/components/cds-page/examples.md +123 -0
- package/skills/cds-builder/references/components/cds-pagination/api.md +67 -0
- package/skills/cds-builder/references/components/cds-pagination/examples.md +320 -0
- package/skills/cds-builder/references/components/cds-pagination/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-pagination/tokens.md +20 -0
- package/skills/cds-builder/references/components/cds-progress-bar/api.md +53 -0
- package/skills/cds-builder/references/components/cds-progress-bar/examples.md +393 -0
- package/skills/cds-builder/references/components/cds-progress-bar/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-progress-bar/tokens.md +33 -0
- package/skills/cds-builder/references/components/cds-progress-circle/api.md +30 -0
- package/skills/cds-builder/references/components/cds-progress-circle/examples.md +326 -0
- package/skills/cds-builder/references/components/cds-progress-circle/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-progress-circle/tokens.md +31 -0
- package/skills/cds-builder/references/components/cds-radio/api.md +47 -0
- package/skills/cds-builder/references/components/cds-radio/tokens.md +36 -0
- package/skills/cds-builder/references/components/cds-radio-group/api.md +87 -0
- package/skills/cds-builder/references/components/cds-radio-group/examples.md +320 -0
- package/skills/cds-builder/references/components/cds-radio-group/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-radio-group/tokens.md +14 -0
- package/skills/cds-builder/references/components/cds-responsive/api.md +29 -0
- package/skills/cds-builder/references/components/cds-responsive/examples.md +271 -0
- package/skills/cds-builder/references/components/cds-responsive/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-responsive/tokens.md +13 -0
- package/skills/cds-builder/references/components/cds-select/api.md +155 -0
- package/skills/cds-builder/references/components/cds-select/examples.md +794 -0
- package/skills/cds-builder/references/components/cds-select/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-select/tokens.md +17 -0
- package/skills/cds-builder/references/components/cds-selection-control/api.md +60 -0
- package/skills/cds-builder/references/components/cds-selection-control/examples.md +468 -0
- package/skills/cds-builder/references/components/cds-selection-control-group/api.md +45 -0
- package/skills/cds-builder/references/components/cds-selection-control-group/examples.md +349 -0
- package/skills/cds-builder/references/components/cds-skeleton-loader/api.md +30 -0
- package/skills/cds-builder/references/components/cds-skeleton-loader/examples.md +297 -0
- package/skills/cds-builder/references/components/cds-skeleton-loader/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-skeleton-loader/tokens.md +62 -0
- package/skills/cds-builder/references/components/cds-slide-group/api.md +76 -0
- package/skills/cds-builder/references/components/cds-slide-group/examples.md +304 -0
- package/skills/cds-builder/references/components/cds-slide-group/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-slide-group/tokens.md +11 -0
- package/skills/cds-builder/references/components/cds-slide-view/api.md +88 -0
- package/skills/cds-builder/references/components/cds-slide-view/examples.md +311 -0
- package/skills/cds-builder/references/components/cds-slide-view/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-slide-view/tokens.md +14 -0
- package/skills/cds-builder/references/components/cds-stages/api.md +31 -0
- package/skills/cds-builder/references/components/cds-stages/examples.md +230 -0
- package/skills/cds-builder/references/components/cds-stages/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-stages/tokens.md +27 -0
- package/skills/cds-builder/references/components/cds-status/api.md +24 -0
- package/skills/cds-builder/references/components/cds-status/examples.md +170 -0
- package/skills/cds-builder/references/components/cds-status/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-status/tokens.md +17 -0
- package/skills/cds-builder/references/components/cds-steps/api.md +176 -0
- package/skills/cds-builder/references/components/cds-steps/examples.md +320 -0
- package/skills/cds-builder/references/components/cds-steps/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-steps/tokens.md +52 -0
- package/skills/cds-builder/references/components/cds-surface/api.md +30 -0
- package/skills/cds-builder/references/components/cds-surface/examples.md +106 -0
- package/skills/cds-builder/references/components/cds-table/api.md +120 -0
- package/skills/cds-builder/references/components/cds-table/examples.md +3049 -0
- package/skills/cds-builder/references/components/cds-table/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-table/tokens.md +92 -0
- package/skills/cds-builder/references/components/cds-tabs/api.md +179 -0
- package/skills/cds-builder/references/components/cds-tabs/examples.md +610 -0
- package/skills/cds-builder/references/components/cds-tabs/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-tabs/tokens.md +40 -0
- package/skills/cds-builder/references/components/cds-tag/api.md +64 -0
- package/skills/cds-builder/references/components/cds-tag/examples.md +278 -0
- package/skills/cds-builder/references/components/cds-tag/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-tag/tokens.md +67 -0
- package/skills/cds-builder/references/components/cds-tag-group/api.md +58 -0
- package/skills/cds-builder/references/components/cds-tag-group/examples.md +346 -0
- package/skills/cds-builder/references/components/cds-tag-group/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-tag-group/tokens.md +18 -0
- package/skills/cds-builder/references/components/cds-text-area/api.md +113 -0
- package/skills/cds-builder/references/components/cds-text-area/examples.md +327 -0
- package/skills/cds-builder/references/components/cds-text-area/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-text-area/tokens.md +16 -0
- package/skills/cds-builder/references/components/cds-text-input/api.md +115 -0
- package/skills/cds-builder/references/components/cds-text-input/examples.md +546 -0
- package/skills/cds-builder/references/components/cds-text-input/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-text-input/tokens.md +17 -0
- package/skills/cds-builder/references/components/cds-time-picker/api.md +44 -0
- package/skills/cds-builder/references/components/cds-time-picker/examples.md +407 -0
- package/skills/cds-builder/references/components/cds-time-picker/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-time-picker/tokens.md +23 -0
- package/skills/cds-builder/references/components/cds-toast/api.md +97 -0
- package/skills/cds-builder/references/components/cds-toast/examples.md +296 -0
- package/skills/cds-builder/references/components/cds-toast/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-toast/tokens.md +26 -0
- package/skills/cds-builder/references/components/cds-toast-queue/api.md +86 -0
- package/skills/cds-builder/references/components/cds-toast-queue/examples.md +227 -0
- package/skills/cds-builder/references/components/cds-toggle/api.md +97 -0
- package/skills/cds-builder/references/components/cds-toggle/examples.md +335 -0
- package/skills/cds-builder/references/components/cds-toggle/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-toggle/tokens.md +91 -0
- package/skills/cds-builder/references/components/cds-toolbar/api.md +44 -0
- package/skills/cds-builder/references/components/cds-toolbar/examples.md +186 -0
- package/skills/cds-builder/references/components/cds-toolbar/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-toolbar/tokens.md +13 -0
- package/skills/cds-builder/references/components/cds-tooltip/api.md +83 -0
- package/skills/cds-builder/references/components/cds-tooltip/examples.md +321 -0
- package/skills/cds-builder/references/components/cds-tooltip/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-tooltip/tokens.md +25 -0
- package/skills/cds-builder/references/components/cds-tree/api.md +169 -0
- package/skills/cds-builder/references/components/cds-tree/examples.md +785 -0
- package/skills/cds-builder/references/components/cds-tree/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-tree/tokens.md +39 -0
- package/skills/cds-builder/references/components/cds-uploader/api.md +105 -0
- package/skills/cds-builder/references/components/cds-uploader/examples.md +553 -0
- package/skills/cds-builder/references/components/cds-uploader/guidelines.md +10 -0
- package/skills/cds-builder/references/components/cds-uploader/tokens.md +26 -0
- package/skills/cds-builder/references/components/cds-virtual-scroll/api.md +60 -0
- package/skills/cds-builder/references/components/cds-virtual-scroll/examples.md +272 -0
- package/skills/cds-builder/references/components/cds-virtual-scroll/guidelines.md +9 -0
- package/skills/cds-builder/references/components/cds-virtual-scroll/tokens.md +13 -0
- package/skills/cds-builder/references/guides/conventions.md +48 -0
- package/skills/cds-builder/references/guides/date-utils.md +301 -0
- package/skills/cds-builder/references/guides/display-and-platform.md +263 -0
- package/skills/cds-builder/references/guides/forms.md +77 -0
- package/skills/cds-builder/references/guides/global-configuration.md +354 -0
- package/skills/cds-builder/references/guides/icons.md +172 -0
- package/skills/cds-builder/references/guides/internationalization.md +470 -0
- package/skills/cds-builder/references/guides/migration-cds3-to-cds4.md +49 -0
- package/skills/cds-builder/references/guides/sass-variables.md +238 -0
- package/skills/cds-builder/references/guides/setup.md +81 -0
- package/skills/cds-builder/references/guides/tailwindcss.md +93 -0
- package/skills/cds-builder/references/guides/theme.md +343 -0
- package/skills/cds-builder/references/guides/treeshaking.md +237 -0
- package/skills/cds-builder/references/patterns/dialogs.md +89 -0
- package/skills/cds-builder/references/patterns/forms.md +101 -0
- package/skills/cds-builder/references/patterns/page-layout.md +78 -0
- package/skills/cds-builder/references/patterns/tables.md +87 -0
- package/skills/cds-builder/references/tokens/colors.md +507 -0
- package/skills/cds-builder/references/tokens/themes.md +981 -0
- package/skills/cds-builder/scripts/check-contracts.mjs +264 -0
- package/skills/cds-migrate/GENERATION.md +44 -0
- package/skills/cds-migrate/SKILL.md +160 -0
- package/skills/cds-migrate/references/migration-full.md +2225 -0
- package/skills/cds-refactor/GENERATION.md +44 -0
- package/skills/cds-refactor/SKILL.md +187 -0
- package/skills/cds-refactor/references/html-to-cds.md +80 -0
- package/skills/cds-refactor/references/review-checklist.md +73 -0
- package/skills/cds-refactor/references/tailwind-to-cds.md +65 -0
|
@@ -0,0 +1,2225 @@
|
|
|
1
|
+
# CDS 3 → CDS 4 migration — full guide
|
|
2
|
+
|
|
3
|
+
> Copy of `MIGRATION.md` from the `@central-design-system/components` npm package,
|
|
4
|
+
> taken by `bun run generate:skill`. Do not edit manually. The guide itself is
|
|
5
|
+
> currently in Russian; an English mirror does not exist yet.
|
|
6
|
+
|
|
7
|
+
# Миграция на CDS 4
|
|
8
|
+
|
|
9
|
+
`@central-design-system/components` v4 — мажорное обновление дизайн-системы.
|
|
10
|
+
Этот документ — **живой** migration guide: записи добавляются по мере появления
|
|
11
|
+
breaking-изменений в alpha/beta релизах CDS 4.
|
|
12
|
+
|
|
13
|
+
> Версии: CDS 3 — `3.10.1` (стабильная), CDS 4 — `4.0.0-alpha.4` (в разработке).
|
|
14
|
+
|
|
15
|
+
## Как читать этот документ
|
|
16
|
+
|
|
17
|
+
- Каждая запись имеет **severity** (см. ниже). Сначала разбирайтесь с `BREAKING`,
|
|
18
|
+
затем с `RENAMED`, затем с `DEPRECATED`.
|
|
19
|
+
- Записи сгруппированы по **категориям** (Архитектура, Иконки, …). Изменения
|
|
20
|
+
по конкретным компонентам — в разделе [Компоненты](#8-компоненты).
|
|
21
|
+
- Каждая запись содержит блоки **Было (CDS 3)** и **Стало (CDS 4)** с примерами
|
|
22
|
+
кода и поле **Действие** — конкретный шаг миграции.
|
|
23
|
+
- При запуске приложения смотрите на консольные `[CDS UPGRADE]` warnings —
|
|
24
|
+
они подсказывают точки миграции в рантайме
|
|
25
|
+
(реализация: `src/utils/dom/warn.ts → deprecate()`).
|
|
26
|
+
|
|
27
|
+
## Легенда severity
|
|
28
|
+
|
|
29
|
+
| Маркер | Что значит |
|
|
30
|
+
| --- | --- |
|
|
31
|
+
| ⚠️ **BREAKING** | Ломает существующий код — обязательное действие. |
|
|
32
|
+
| 🔁 **RENAMED** | Переименование (частный случай breaking) — механический поиск/замена. |
|
|
33
|
+
| 🟠 **DEPRECATED** | Работает в 4.x, будет удалено в 5.x. Желательно обновить. |
|
|
34
|
+
| ✨ **NEW** | Новая возможность без ломки. Информативно. |
|
|
35
|
+
|
|
36
|
+
## Оглавление
|
|
37
|
+
|
|
38
|
+
- [Быстрый чек-лист](#быстрый-чек-лист)
|
|
39
|
+
- [1. Архитектура](#1-архитектура)
|
|
40
|
+
- [2. Иконки](#2-иконки)
|
|
41
|
+
- [3. Пропсы](#3-пропсы)
|
|
42
|
+
- [4. Стили и токены](#4-стили-и-токены)
|
|
43
|
+
- [5. Композаблы](#5-композаблы)
|
|
44
|
+
- [6. Hooks](#6-hooks)
|
|
45
|
+
- [7. Сборка и экспорты](#7-сборка-и-экспорты)
|
|
46
|
+
- [8. Компоненты](#8-компоненты)
|
|
47
|
+
|
|
48
|
+
<a id="быстрый-чек-лист"></a>
|
|
49
|
+
|
|
50
|
+
## Быстрый чек-лист
|
|
51
|
+
|
|
52
|
+
- ✅ Прочитать раздел [«Архитектура»](#1-архитектура) — публичный API инициализации мог измениться.
|
|
53
|
+
- ✅ Если используете `@central-design-system/icons` — см. раздел [«Иконки»](#2-иконки) (есть legacy-режим).
|
|
54
|
+
- ✅ Проверить [индекс изменений по компонентам](#индекс-изменений-по-компонентам).
|
|
55
|
+
- ✅ Прогнать сборку приложения и проверить консоль: `[CDS UPGRADE]` warnings указывают на устаревшие пропсы.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
<a id="1-архитектура"></a>
|
|
60
|
+
|
|
61
|
+
## 1. Архитектура
|
|
62
|
+
|
|
63
|
+
Сюда попадают изменения публичного API инициализации (`createCds`),
|
|
64
|
+
DI через `provide/inject`, точек входа и общих принципов работы фреймворка.
|
|
65
|
+
|
|
66
|
+
### Библиотека переписана на новую архитектуру (JSX, `propsFactory`, `composables` / `hooks`)
|
|
67
|
+
|
|
68
|
+
> ✨ **NEW** — внутренняя архитектура CDS 4 переписана с нуля. На публичный API компонентов это, как правило, не влияет, но меняет способ расширения библиотеки и пути «глубоких» импортов.
|
|
69
|
+
|
|
70
|
+
**Было (CDS 3):**
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
// CDS 3 — SFC на <template>, пропсы inline, композаблы в composable/ (ед. ч.)
|
|
74
|
+
import { createCds, components, directives, plugin, utils } from '@central-design-system/components';
|
|
75
|
+
import { useTheme } from '@central-design-system/components'; // из ./composable
|
|
76
|
+
import { CdsTransitionFade } from '@central-design-system/components'; // из ./transitions
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Стало (CDS 4):**
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
// CDS 4 — компоненты на JSX defineRender + propsFactory,
|
|
83
|
+
// композаблы в composables/ (мн. ч.), низкоуровневые примитивы в hooks/
|
|
84
|
+
import { createCds, utils } from '@central-design-system/components';
|
|
85
|
+
import { useTheme } from '@central-design-system/components'; // из ./composables
|
|
86
|
+
import { CdsTransitionFade } from '@central-design-system/components'; // из ./transitions
|
|
87
|
+
import { createContext, useResizeObserver } from '@central-design-system/components'; // ./hooks
|
|
88
|
+
|
|
89
|
+
// Внутри пакета — alias @cds/* (@cds/composables/useTheme, @cds/core, @cds/utils)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Действие:** для обычного использования компонентов миграция не требуется. Если вы импортировали внутренние сущности напрямую — учтите: каталог `composable/` переименован в `composables/`, добавлен слой `hooks/`. Namespace `utils` и плоские экспорты `transitions` (`CdsTransitionFade`, …) сохранены как в CDS 3; убран только корневой реэкспорт `plugin`. Пропсы компонентов теперь собираются фабриками `propsFactory` (`@cds/core`), рендер — через `defineRender(() => <jsx/>)`.
|
|
93
|
+
|
|
94
|
+
<!-- entry-meta: id=architecture-library-rewrite; severity=new; component= -->
|
|
95
|
+
|
|
96
|
+
### `createCds`: новые опции `defaults`, `blueprint`, `goTo`, `aliases`
|
|
97
|
+
|
|
98
|
+
> ✨ **NEW** — фабрика `createCds` получила новые подсистемы конфигурации. Все они аддитивны — существующий вызов `createCds()` продолжает работать.
|
|
99
|
+
|
|
100
|
+
**Было (CDS 3):**
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
// CDS 3 — ICdsOptions: components, directives, icons, illustrations,
|
|
104
|
+
// display, theme, cssGrid, ssr, locale, teleport
|
|
105
|
+
import { createCds } from '@central-design-system/components';
|
|
106
|
+
|
|
107
|
+
app.use(createCds({
|
|
108
|
+
theme: { defaultTheme: 'light' },
|
|
109
|
+
locale: 'ru',
|
|
110
|
+
}));
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Стало (CDS 4):**
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
// CDS 4 — добавлены defaults, blueprint, goTo, aliases
|
|
117
|
+
import { createCds } from '@central-design-system/components';
|
|
118
|
+
|
|
119
|
+
app.use(createCds({
|
|
120
|
+
// Глобальные дефолты пропсов компонентов.
|
|
121
|
+
// Локально переопределяются компонентом <CdsDefaultsProvider>.
|
|
122
|
+
defaults: {
|
|
123
|
+
global: { rounded: 'md' },
|
|
124
|
+
CdsButton: { appearance: 'secondary' },
|
|
125
|
+
},
|
|
126
|
+
// Пресет конфигурации: базовый набор опций, поверх которого мержится остальное.
|
|
127
|
+
blueprint: { theme: { defaultTheme: 'light' } },
|
|
128
|
+
// Подсистема программной прокрутки (composable useGoTo).
|
|
129
|
+
goTo: { duration: 300, offset: 0 },
|
|
130
|
+
}));
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Действие:** миграция не требуется. Новое: `defaults` задаёт глобальные значения пропсов (переопределяются компонентом `CdsDefaultsProvider` и composable `useDefaults`); `blueprint` — пресет опций, на который накладывается остальная конфигурация (`mergeDeep(blueprint, rest)`); `goTo` — программная прокрутка через `useGoTo`; `aliases` — регистрация компонентов-алиасов. Символы DI: `DefaultsSymbol`, `GoToSymbol`, `IconSymbol` (см. `src/cds.ts`).
|
|
134
|
+
|
|
135
|
+
<!-- entry-meta: id=architecture-createcds-new-options; severity=new; component= -->
|
|
136
|
+
|
|
137
|
+
### Глобальная опция `createCds({ teleport })` удалена
|
|
138
|
+
|
|
139
|
+
> ⚠️ **BREAKING** — глобальная конфигурация телепорта всплывающих компонентов (`teleport` → `TeleportSymbol`) убрана из `createCds`. Цель телепорта теперь задаётся per-component через пропсы `attach` / `contained`.
|
|
140
|
+
|
|
141
|
+
**Было (CDS 3):**
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
// CDS 3 — глобально для всех оверлеев (модалки, тултипы, меню, тосты)
|
|
145
|
+
import { createCds } from '@central-design-system/components';
|
|
146
|
+
|
|
147
|
+
app.use(createCds({
|
|
148
|
+
teleport: {
|
|
149
|
+
target: document.getElementById('app')!,
|
|
150
|
+
contained: false,
|
|
151
|
+
root: false,
|
|
152
|
+
containerClassName: 'cds-overlay-container',
|
|
153
|
+
},
|
|
154
|
+
}));
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Стало (CDS 4):**
|
|
158
|
+
|
|
159
|
+
```html
|
|
160
|
+
<!-- CDS 4 — цель телепорта указывается на конкретном компоненте -->
|
|
161
|
+
<CdsModal v-model="modal" attach="#app">…</CdsModal>
|
|
162
|
+
<CdsTooltip contained text="Подсказка">…</CdsTooltip>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Действие:** удалить опцию `teleport` из `createCds()`. Там, где нужен нестандартный контейнер телепорта, задать проп `attach` (`boolean | string | Element`) или `contained` на самих оверлейных компонентах (`CdsOverlay` и производные: `CdsModal`, `CdsTooltip`, `CdsMenu`, `CdsDrawer` и т. д.). Поиск: `grep -rn "teleport" src/` в местах вызова `createCds`.
|
|
166
|
+
|
|
167
|
+
<!-- entry-meta: id=architecture-teleport-option-removed; severity=breaking; component= -->
|
|
168
|
+
|
|
169
|
+
### Опция `locale` стала объектом `LocaleOptions` (+ RTL)
|
|
170
|
+
|
|
171
|
+
> ⚠️ **BREAKING** — в CDS 3 `locale` принимал строку (`'ru'`) или объект `ILocale`. В CDS 4 это объект `LocaleOptions & RtlOptions` с полем `locale`, сообщениями, fallback и настройкой RTL.
|
|
172
|
+
|
|
173
|
+
**Было (CDS 3):**
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
// CDS 3 — locale: TAvailableLocale | ILocale (по умолчанию строка 'ru')
|
|
177
|
+
import { createCds } from '@central-design-system/components';
|
|
178
|
+
|
|
179
|
+
app.use(createCds({
|
|
180
|
+
locale: 'ru',
|
|
181
|
+
}));
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Стало (CDS 4):**
|
|
185
|
+
|
|
186
|
+
```ts
|
|
187
|
+
// CDS 4 — locale: LocaleOptions & RtlOptions
|
|
188
|
+
import { createCds } from '@central-design-system/components';
|
|
189
|
+
|
|
190
|
+
app.use(createCds({
|
|
191
|
+
locale: {
|
|
192
|
+
locale: 'ru',
|
|
193
|
+
fallback: 'en',
|
|
194
|
+
messages: { /* переопределения строк */ },
|
|
195
|
+
rtl: { ar: true },
|
|
196
|
+
},
|
|
197
|
+
}));
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Действие:** заменить строковое значение `locale: 'ru'` на объект `locale: { locale: 'ru' }`. Полный набор полей: `locale`, `fallback`, `messages`, `decimalSeparator`, `adapter`, `rtl` (см. `LocaleOptions` / `RtlOptions` в `src/composables/useLocale/internal/useLocale.types.ts`). Доступ в рантайме — через composable `useLocale`. Поиск: `grep -rn "createCds" src/` и проверить поле `locale`.
|
|
201
|
+
|
|
202
|
+
<!-- entry-meta: id=architecture-locale-options-object; severity=breaking; component= -->
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
<a id="2-иконки"></a>
|
|
207
|
+
|
|
208
|
+
## 2. Иконки
|
|
209
|
+
|
|
210
|
+
### Пакет `@central-design-system/icons` помечен deprecated
|
|
211
|
+
|
|
212
|
+
> 🟠 **DEPRECATED** — пакет продолжает работать через legacy-режим, но будет удалён в будущих версиях.
|
|
213
|
+
|
|
214
|
+
**Было (CDS 3):**
|
|
215
|
+
|
|
216
|
+
```ts
|
|
217
|
+
// CDS 3
|
|
218
|
+
import * as legacyIcons from '@central-design-system/icons';
|
|
219
|
+
import { createCds } from '@central-design-system/components';
|
|
220
|
+
|
|
221
|
+
createCds({
|
|
222
|
+
icons: legacyIcons
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Стало (CDS 4):**
|
|
227
|
+
|
|
228
|
+
```ts
|
|
229
|
+
// CDS 4
|
|
230
|
+
import { createCds } from '@central-design-system/components';
|
|
231
|
+
|
|
232
|
+
// Дефолт — встроенный iconpack `cds`.
|
|
233
|
+
createCds({
|
|
234
|
+
icons: {
|
|
235
|
+
defaultSet: 'cds'
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
В рантайме при старом подключении в dev-консоли появится:
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
[CDS UPGRADE] '@central-design-system/icons' is deprecated and will be removed in future. Please use modern icons instead.
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
(см. `src/icons.ts`, ветка `Symbol.toStringTag === 'Module'`).
|
|
247
|
+
|
|
248
|
+
**Действие:** перейти на новые icon packs через опцию `createCds({ icons })`.
|
|
249
|
+
Если миграция постепенная — можно временно использовать поле `legacyIcons`
|
|
250
|
+
(см. `InternalIconOptions` в `src/composables/useIcons/internal/useIcons.types.ts`),
|
|
251
|
+
оно специально оставлено на переходный период и будет удалено в будущих версиях.
|
|
252
|
+
|
|
253
|
+
<!-- entry-meta: id=icons-legacy-package-deprecated; severity=deprecation; component= -->
|
|
254
|
+
|
|
255
|
+
### Новая фабрика `createIcons` и iconpacks
|
|
256
|
+
|
|
257
|
+
> ✨ **NEW**
|
|
258
|
+
|
|
259
|
+
В CDS 4 иконки конфигурируются через явную фабрику `createIcons`,
|
|
260
|
+
понимающую концепцию **iconpack**. Готовые наборы лежат в
|
|
261
|
+
`src/assets/icons/`: `cds` (по умолчанию), `cdsLegacy` (для совместимости),
|
|
262
|
+
`carbon`, `lucide`, `phosphor`, `remix`. Это позволяет смешивать наборы и
|
|
263
|
+
переопределять алиасы под продукт.
|
|
264
|
+
|
|
265
|
+
**Было (CDS 3):**
|
|
266
|
+
|
|
267
|
+
```ts
|
|
268
|
+
// CDS 3
|
|
269
|
+
import * as icons from '@central-design-system/icons';
|
|
270
|
+
import { createCds } from '@central-design-system/components';
|
|
271
|
+
|
|
272
|
+
createCds({ icons });
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Стало (CDS 4):**
|
|
276
|
+
|
|
277
|
+
```ts
|
|
278
|
+
// CDS 4
|
|
279
|
+
import { createCds, iconsets } from '@central-design-system/components';
|
|
280
|
+
|
|
281
|
+
createCds({
|
|
282
|
+
icons: {
|
|
283
|
+
defaultSet: 'remix',
|
|
284
|
+
sets: { remix: iconsets.remix.icons, },
|
|
285
|
+
aliases: iconsets.remix.aliases,
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**Действие:** ознакомиться с [Icons Installation](/docs/icons-installation--docs)
|
|
291
|
+
и выбрать iconpack под продукт. По умолчанию активен набор `cds` с алиасами
|
|
292
|
+
из `src/assets/icons/cds.ts`.
|
|
293
|
+
|
|
294
|
+
<!-- entry-meta: id=icons-createicons-factory; severity=new; component= -->
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
<a id="3-пропсы"></a>
|
|
299
|
+
|
|
300
|
+
## 3. Пропсы
|
|
301
|
+
|
|
302
|
+
Сюда попадают общие изменения системы пропсов (фабрики
|
|
303
|
+
`defineXProps()` через `propsFactory`, новые композаблы пропсов).
|
|
304
|
+
Точечные переименования у конкретных компонентов — в разделе [Компоненты](#8-компоненты).
|
|
305
|
+
|
|
306
|
+
_Пока изменений нет. Записи будут добавляться по мере появления breaking-изменений._
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
<a id="4-стили-и-токены"></a>
|
|
311
|
+
|
|
312
|
+
## 4. Стили и токены
|
|
313
|
+
|
|
314
|
+
Сюда попадают изменения CSS-токенов (2 уровня), CSS Layers (ITCSS),
|
|
315
|
+
интеграции с Tailwind, публичных импортов `./styles/...`.
|
|
316
|
+
|
|
317
|
+
### Изменён путь импорта CSS
|
|
318
|
+
|
|
319
|
+
> ⚠️ **BREAKING** — собранный `dist/cds.css` больше не является публичной точкой входа.
|
|
320
|
+
|
|
321
|
+
**Было (CDS 3):**
|
|
322
|
+
|
|
323
|
+
```ts
|
|
324
|
+
// CDS 3
|
|
325
|
+
import '@central-design-system/components/dist/cds.css';
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Стало (CDS 4):**
|
|
329
|
+
|
|
330
|
+
```ts
|
|
331
|
+
// CDS 4
|
|
332
|
+
import '@central-design-system/components/styles';
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**Действие:** заменить во всех приложениях-потребителях импорт `@central-design-system/components/dist/cds.css` на `@central-design-system/components/styles`. Поиск: `grep -rn "@central-design-system/components/dist/cds.css" .`.
|
|
336
|
+
|
|
337
|
+
<!-- entry-meta: id=styles-css-import-path; severity=breaking; component= -->
|
|
338
|
+
|
|
339
|
+
### Legacy reset вынесен в опциональный флаг
|
|
340
|
+
|
|
341
|
+
> ⚠️ **BREAKING** — `styles/utilities/legacy/legacy.scss` теперь содержит только утилитарные классы (display / layout / spacing / flexbox / typography); глобальный reset из CDS 3 больше не подключается по умолчанию.
|
|
342
|
+
|
|
343
|
+
**Было (CDS 3):**
|
|
344
|
+
|
|
345
|
+
```scss
|
|
346
|
+
// CDS 3 — legacy.scss тянул за собой полный глобальный reset
|
|
347
|
+
// (box-sizing, обнуление margin, list-style, media-query'и и т.д.)
|
|
348
|
+
// автоматически при подключении стилей CDS.
|
|
349
|
+
@use '@central-design-system/components/styles';
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**Стало (CDS 4):**
|
|
353
|
+
|
|
354
|
+
```scss
|
|
355
|
+
// CDS 4 — legacy.scss содержит только утилиты; старый reset вынесен
|
|
356
|
+
// в generic/_legacy-reset.scss и выключен по умолчанию.
|
|
357
|
+
// Чтобы вернуть поведение CDS 3, передайте $legacy-reset через with():
|
|
358
|
+
@use '@central-design-system/components/styles' with (
|
|
359
|
+
$legacy-reset: true
|
|
360
|
+
);
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
**Действие:** если приложение полагалось на глобальный reset из CDS 3 (обнулённые `margin`, `list-style: none`, `box-sizing: border-box` на `*` и т.д.) — включите его явно через `$legacy-reset: true` в `settings` (см. `src/styles/settings/_variables.scss`). Иначе — проверьте вёрстку и доверьтесь нативным дефолтам браузера.
|
|
364
|
+
|
|
365
|
+
<!-- entry-meta: id=styles-legacy-reset-opt-in; severity=breaking; component= -->
|
|
366
|
+
|
|
367
|
+
### CSS-архитектура переписана на ITCSS + CSS Layers
|
|
368
|
+
|
|
369
|
+
> ⚠️ **BREAKING** — порядок каскада теперь определяется нативными `@layer`. Глобальные переопределения стилей CDS, написанные без `!important`, могут сработать иначе.
|
|
370
|
+
|
|
371
|
+
**Было (CDS 3):**
|
|
372
|
+
|
|
373
|
+
```scss
|
|
374
|
+
// CDS 3 — плоская структура без cascade layers.
|
|
375
|
+
// Все стили компонентов и утилит грузились в обычный каскад,
|
|
376
|
+
// побеждал последний по специфичности / порядку импорта.
|
|
377
|
+
@import '@central-design-system/components/dist/cds.css';
|
|
378
|
+
|
|
379
|
+
// Переопределение приходилось делать через повышение специфичности
|
|
380
|
+
// или !important:
|
|
381
|
+
.cds-button { color: red !important; }
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**Стало (CDS 4):**
|
|
385
|
+
|
|
386
|
+
```scss
|
|
387
|
+
// CDS 4 — ITCSS + нативные CSS Layers.
|
|
388
|
+
// Каскад: cds-core → cds-components → cds-overrides → cds-utilities,
|
|
389
|
+
// см. src/styles/generic/_layers.scss.
|
|
390
|
+
@use '@central-design-system/components/styles';
|
|
391
|
+
|
|
392
|
+
@layer cds-overrides {
|
|
393
|
+
.cds-button { color: red; }
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Действие:** ознакомиться с [ITCSS](https://developer.helpscout.com/seed/glossary/itcss/) и порядком слоёв в `src/styles/generic/_layers.scss` (`cds-core` → `cds-components` → `cds-overrides` → `cds-utilities` c вложенными `theme-base`, `helpers`, `grid`, `tailwind`, `theme-background`, `theme-foreground`). Проверьте свои глобальные переопределения CDS — если они были написаны без `!important` и полагались на порядок импорта, теперь они **гарантированно** перебивают `@layer cds-components`. Для контролируемого переопределения используйте слой `cds-overrides` (через `@include tools.layer('overrides') { … }`) — он специально расположен между компонентами и утилитами.
|
|
398
|
+
|
|
399
|
+
<!-- entry-meta: id=styles-itcss-css-layers-architecture; severity=breaking; component= -->
|
|
400
|
+
|
|
401
|
+
### Утилитарные классы CDS 3 отключены по умолчанию
|
|
402
|
+
|
|
403
|
+
> ⚠️ **BREAKING** — классы `cds-flex`, `cds-flex-col`, `cds-px-4`, `cds-my-*`, цветов, типографики и т. п. больше не подключаются автоматически.
|
|
404
|
+
|
|
405
|
+
**Было (CDS 3):**
|
|
406
|
+
|
|
407
|
+
```ts
|
|
408
|
+
// CDS 3
|
|
409
|
+
import '@central-design-system/components/dist/cds.css';
|
|
410
|
+
import { createCds } from '@central-design-system/components';
|
|
411
|
+
|
|
412
|
+
app.use(createCds());
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
```vue
|
|
416
|
+
<!-- CDS 3 -->
|
|
417
|
+
<div class="cds-flex cds-flex-col cds-px-4">…</div>
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**Стало (CDS 4):**
|
|
421
|
+
|
|
422
|
+
```ts
|
|
423
|
+
// CDS 4 — временно включить легаси-утилиты на период миграции
|
|
424
|
+
import '@central-design-system/components/styles';
|
|
425
|
+
import '@central-design-system/components/styles/legacy';
|
|
426
|
+
import { createCds } from '@central-design-system/components';
|
|
427
|
+
|
|
428
|
+
app.use(createCds({
|
|
429
|
+
theme: { legacyClasses: true },
|
|
430
|
+
}));
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
**Действие:** мигрировать на Tailwind CSS v4 (см. запись «Интеграция с Tailwind CSS v4» ниже). На переходный период включите легаси-утилиты комбинацией `theme: { legacyClasses: true }` в `createCds()` + импорт `@central-design-system/components/styles/legacy`. Источник: `src/styles/utilities/legacy/legacy.scss` (display, layout, spacing, flexbox, typography).
|
|
434
|
+
|
|
435
|
+
<!-- entry-meta: id=styles-legacy-utilities-disabled; severity=breaking; component= -->
|
|
436
|
+
|
|
437
|
+
### Интеграция с Tailwind CSS v4
|
|
438
|
+
|
|
439
|
+
> ✨ **NEW** — CDS из коробки поставляет конфигурацию Tailwind v4 с design-токенами как утилитарными классами.
|
|
440
|
+
|
|
441
|
+
**Было (CDS 3):**
|
|
442
|
+
|
|
443
|
+
```vue
|
|
444
|
+
<!-- CDS 3 — собственные утилитарные классы CDS -->
|
|
445
|
+
<div class="cds-flex cds-flex-col cds-px-4 cds-text-surface-primary">…</div>
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**Стало (CDS 4):**
|
|
449
|
+
|
|
450
|
+
```css
|
|
451
|
+
/* CDS 4 — main.css */
|
|
452
|
+
@import "@central-design-system/components/styles/tailwind";
|
|
453
|
+
@import "tailwindcss/theme" layer(cds-utilities.tailwind);
|
|
454
|
+
@import "tailwindcss/utilities" layer(cds-utilities.tailwind);
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
```vue
|
|
458
|
+
<!-- CDS 4 — Tailwind v4 + CDS-токены как утилиты -->
|
|
459
|
+
<div class="flex flex-col p-4 text-surface-primary">…</div>
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
**Действие:** установить Tailwind CSS v4 по [официальной документации](https://tailwindcss.com/) и подключить конфигурацию `@central-design-system/components/styles/tailwind` — она расширяет тему Tailwind токенами CDS (`bg-surface-*`, `text-content-*`, `rounded-200`, …) и автоматически реагирует на смену темы. Отступы пишутся стандартной числовой шкалой Tailwind (`p-4`, `gap-2`) — шкала отступов CDS с ней совпадает.
|
|
463
|
+
|
|
464
|
+
<!-- entry-meta: id=styles-tailwind-v4-integration; severity=new; component= -->
|
|
465
|
+
|
|
466
|
+
### Семантика миксина `cds-breakpoint-down` выровнена с JS `useDisplay`
|
|
467
|
+
|
|
468
|
+
> ⚠️ **BREAKING** — в CDS 3 SCSS-миксин `cds-breakpoint-down($name)` следовал конвенции «строго ниже начала брейкпоинта», а JS-composable `useDisplay` — конвенции «брейкпоинт и всё, что ниже». Из-за этого `cds-breakpoint-down('sm')` и `display.smDown` покрывали **разные** диапазоны (сдвиг на один брейкпоинт). В CDS 4 CSS выровнен под JS: `down('<name>')` теперь означает «`<name>` и ниже».
|
|
469
|
+
|
|
470
|
+
**Было (CDS 3):**
|
|
471
|
+
|
|
472
|
+
```scss
|
|
473
|
+
// CDS 3 — max-width = ширина САМОГО брейкпоинта − 0.02 («строго ниже sm»)
|
|
474
|
+
// down('sm') → @media (max-width: 671.98px) // только диапазон xs
|
|
475
|
+
// down('md') → @media (max-width: 1055.98px) // xs + sm
|
|
476
|
+
// down('lg') → @media (max-width: 1311.98px) // xs + sm + md
|
|
477
|
+
// НЕ совпадает с JS: display.smDown === (width < 1056)
|
|
478
|
+
.card { @include cds-breakpoint-down(sm) { display: none; } }
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
**Стало (CDS 4):**
|
|
482
|
+
|
|
483
|
+
```scss
|
|
484
|
+
// CDS 4 — max-width = ширина СЛЕДУЮЩЕГО брейкпоинта − 0.02 («sm и ниже»)
|
|
485
|
+
// down('sm') → @media (max-width: 1055.98px) // xs + sm
|
|
486
|
+
// down('md') → @media (max-width: 1311.98px) // xs + sm + md
|
|
487
|
+
// down('lg') → @media (max-width: 1583.98px) // xs + sm + md + lg
|
|
488
|
+
// down('xl') → без media query (все ширины)
|
|
489
|
+
// Совпадает с JS: display.smDown === (width < 1056)
|
|
490
|
+
.card { @include cds-breakpoint-down(sm) { display: none; } }
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
**Действие:** пройтись по использованиям `cds-breakpoint-down(...)` (и `cds-breakpoint-between(...)` с именованной нижней/верхней границей — она делегирует в тот же миксин). Если код полагался на старую логику «строго ниже названного брейкпоинта», сдвиньте аргумент на один вниз: старый `down('md')` ⇒ новый `down('sm')`, старый `down('lg')` ⇒ `down('md')` и т. д. Миксины `cds-breakpoint-up` / значения порогов (`320 / 672 / 1056 / 1312 / 1584`) не менялись. Поиск: `grep -rnE "cds-breakpoint-down\(" src/`.
|
|
494
|
+
|
|
495
|
+
<!-- entry-meta: id=styles-breakpoint-down-semantics; severity=breaking; component= -->
|
|
496
|
+
|
|
497
|
+
### Сетка и брейкпоинты заданы в px вместо rem
|
|
498
|
+
|
|
499
|
+
> ⚠️ **BREAKING** — в CDS 3 вся геометрия сетки (`$grid-gutter`, `margin` и `width` брейкпоинтов) прогонялась через `convert.toRem` и зависела от размера корневого шрифта. В CDS 4 значения намеренно заданы в px: каркас страницы не зависит от `html { font-size }` хоста, а CSS-медиазапросы гарантированно совпадают с px-порогами JS-композабла `useDisplay` (rem в медиазапросах считается от настройки шрифта браузера и расходится с `window.innerWidth`).
|
|
500
|
+
|
|
501
|
+
**Было (CDS 3):**
|
|
502
|
+
|
|
503
|
+
```scss
|
|
504
|
+
// CDS 3 — rem от корневого шрифта: хост с html { font-size: 14px }
|
|
505
|
+
// получал gutter 28px вместо 32px, а rem-медиазапросы срабатывали
|
|
506
|
+
// не там, где JS-логика в px
|
|
507
|
+
$grid-gutter: convert.toRem(32px); // 2rem
|
|
508
|
+
$grid-breakpoints: (
|
|
509
|
+
sm: (columns: 8, margin: convert.toRem(16px), width: convert.toRem(672px)),
|
|
510
|
+
// …
|
|
511
|
+
);
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
**Стало (CDS 4):**
|
|
515
|
+
|
|
516
|
+
```scss
|
|
517
|
+
// CDS 4 — px: геометрия сетки стабильна в любом хосте и совпадает
|
|
518
|
+
// с порогами useDisplay (320 / 672 / 1056 / 1312 / 1584)
|
|
519
|
+
$grid-gutter: 32px;
|
|
520
|
+
$grid-breakpoints: (
|
|
521
|
+
sm: (columns: 8, margin: 16px, width: 672px),
|
|
522
|
+
// …
|
|
523
|
+
);
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
**Действие:** в большинстве приложений ничего делать не нужно — браузерный зум масштабирует px-макет целиком. Если хост менял `html { font-size }` в расчёте на масштабирование сетки, этот механизм больше не работает: сетка и брейкпоинты фиксированы, масштабируемый слой — rem-токены `--cds-spacing-*` (отступы контента и типографика).
|
|
527
|
+
|
|
528
|
+
<!-- entry-meta: id=styles-grid-px-instead-of-rem; severity=breaking; component= -->
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
<a id="5-композаблы"></a>
|
|
533
|
+
|
|
534
|
+
## 5. Композаблы
|
|
535
|
+
|
|
536
|
+
Сюда попадают изменения API композаблов (`useTheme`, `useIcons`, `useDisplay`,
|
|
537
|
+
`useLocale`, `useDefaults`, `useForm` и др.) и injection-системы
|
|
538
|
+
(`DefaultsSymbol`, `ThemeSymbol`, `IconSymbol`, …).
|
|
539
|
+
|
|
540
|
+
_Пока изменений нет. Записи будут добавляться по мере появления breaking-изменений._
|
|
541
|
+
|
|
542
|
+
---
|
|
543
|
+
|
|
544
|
+
## 6. Hooks
|
|
545
|
+
|
|
546
|
+
Сюда попадают изменения API хуков из `src/hooks/`
|
|
547
|
+
(`createContext`, `createObserver`, `createPlugin`, `createTrinity`,
|
|
548
|
+
`useHydration`, `useIntersectionObserver`, `useResizeObserver`).
|
|
549
|
+
|
|
550
|
+
_Пока изменений нет. Записи будут добавляться по мере появления breaking-изменений._
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
<a id="7-сборка-и-экспорты"></a>
|
|
555
|
+
|
|
556
|
+
## 7. Сборка и экспорты
|
|
557
|
+
|
|
558
|
+
Сюда попадают изменения целей сборки (CJS / ESM / MJS / IIFE / WC / Styles),
|
|
559
|
+
полей `exports` / `main` / `module` / `types` в `package.json`, путей
|
|
560
|
+
импортов `@central-design-system/components/...`.
|
|
561
|
+
|
|
562
|
+
_Пока изменений нет. Записи будут добавляться по мере появления breaking-изменений._
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
<a id="8-компоненты"></a>
|
|
567
|
+
|
|
568
|
+
## 8. Компоненты
|
|
569
|
+
|
|
570
|
+
Точечные изменения по конкретным компонентам: переименования пропсов,
|
|
571
|
+
удалённые слоты, изменения событий и т. п.
|
|
572
|
+
|
|
573
|
+
<a id="индекс-изменений-по-компонентам"></a>
|
|
574
|
+
|
|
575
|
+
### Индекс изменений по компонентам
|
|
576
|
+
|
|
577
|
+
| Компонент | Изменения | Подробнее |
|
|
578
|
+
|------------------|--------------------------------------------------------------------------------------------|-----------------------------------|
|
|
579
|
+
| `CdsBadge` | 🔁 `count`→`content`, `limited`→`max`; ⚠️ удалён `invertColor`, изменён дефолт `inline` | [CdsBadge](#cdsbadge) |
|
|
580
|
+
| `CdsBreadcrumbsItem` | 🔁 `text`→`title`; ⚠️ удалён deprecated `currentPage` | [CdsBreadcrumbsItem](#cdsbreadcrumbsitem) |
|
|
581
|
+
| `CdsButton` | ⚠️ удалён автоматический отступ между соседними кнопками | [CdsButton](#cdsbutton) |
|
|
582
|
+
| `CdsCard` | ⚠️ удалены `interactive` / `selected` | [CdsCard](#cdscard) |
|
|
583
|
+
| `CdsCheckbox` | ⚠️ удалён `CdsCheckboxGroup`; ⚠️ изменён exposed-API | [CdsCheckbox](#cdscheckbox) |
|
|
584
|
+
| `CdsContentSwitcher` | ⚠️ Компонент удалён → `CdsTabs` / `CdsTab` | [CdsContentSwitcher](#cdscontentswitcher) |
|
|
585
|
+
| `CdsForm` | ⚠️ изменён exposed-API — убраны обёртки `form` / `formRef` | [CdsForm](#cdsform) |
|
|
586
|
+
| `CdsIcon` | ⚠️ удалён deprecated `invertColor` → цветовые пропсы `color` / `baseColor` / `textColor` | [CdsIcon](#cdsicon) |
|
|
587
|
+
| `CdsList` | ⚠️ удалён `invertColor`; `CdsListItem` — удалён `isClickable` (→ `link`) и изменён exposed-API; `CdsListGroup` — удалён слот `title`, проп `title` стал текстом активатора (статичная подпись → `CdsListSubheader`), изменён exposed-API; payload `click:open`/`click:select` без `event` | [CdsList](#cdslist) |
|
|
588
|
+
| `CdsModal` | ⚠️ удалены `loading` и `dismissBtn`; ⚠️ изменён exposed-API | [CdsModal](#cdsmodal) |
|
|
589
|
+
| `CdsNotification` | 🔁 `status="error"`→`"danger"`; ⚠️ удалён `customIcon`; ✨ `variant="flat"`, тень у `important`, `bgColor`/`textColor` | [CdsNotification](#cdsnotification) |
|
|
590
|
+
| `CdsNotificationAlert` | 🟠 Мост миграции на `CdsToast`; внутри `CdsNotification` (`variant="important"`); будет удалён | [CdsNotificationAlert](#cdsnotificationalert) |
|
|
591
|
+
| `CdsRadioButton` | 🔁 Переименован в `CdsRadioGroup`; ✨ новые пропсы | [CdsRadioButton](#cdsradiobutton) |
|
|
592
|
+
| `CdsDropdown` | 🔁 Переименован в `CdsSelect`; ⚠️ нативный `CdsSelect` (CDS 3) теперь через `native-select` | [CdsSelect](#cdsselect) |
|
|
593
|
+
| `CdsProgress` | 🔁 Переименован в `CdsProgressBar`; ✨ новые пропсы стилизации | [CdsProgress](#cdsprogress) |
|
|
594
|
+
| `CdsSlideGroup` | 🔁 `prependIcon`/`appendIcon`→`prevIcon`/`nextIcon` (новая система иконок) | [CdsSlideGroup](#cdsslidegroup) |
|
|
595
|
+
| `CdsSlideView` | ⚠️ дефолты иконок стрелок `chevron-left`/`chevron-right`→`prev`/`next` (новая система иконок) | [CdsSlideView](#cdsslideview) |
|
|
596
|
+
| `CdsStatus` | 🔁 значение `status="error"`→`"danger"`; ⚠️ булев `icon`→`variant="text"` | [CdsStatus](#cdsstatus) |
|
|
597
|
+
| `CdsSteps` | ⚠️ дефолт `interactive` изменён `true`→`false`; ✨ проп `items`, контентная часть и кнопки навигации | [CdsSteps](#cdssteps) |
|
|
598
|
+
| `CdsTabsV2` | 🔁 Переименован в `CdsTabs`; 🔁 `prependIcon`/`appendIcon`→`prevIcon`/`nextIcon`; ✨ новые пропсы | [CdsTabsV2](#cdstabsv2) |
|
|
599
|
+
| `CdsTag` | 🔁 `remove`→`click:close`; ⚠️ удалён слот `text`; иконки → `IconValue`; ✨ новые пропсы | [CdsTag](#cdstag) |
|
|
600
|
+
| `CdsTextArea` | ⚠️ удалён `limit`; ⚠️ изменён exposed-API; | [CdsTextArea](#cdstextarea) |
|
|
601
|
+
| `CdsTextInput` | ⚠️ удалён `limit`; ⚠️ удалён `persistentMessages`, `messages` теперь видны всегда; ⚠️ изменён exposed-API; иконки → `IconValue` | [CdsTextInput](#cdstextinput) |
|
|
602
|
+
| `CdsTooltip` | ⚠️ hover на контент закрывает подсказку; интерактивный контент — через новый проп `interactive`; изменён exposed-API | [CdsTooltip](#cdstooltip) |
|
|
603
|
+
| `CdsContainer` | ⚠️ Компонент удален; | [CdsContainer](#cdscontainer) |
|
|
604
|
+
|
|
605
|
+
### CdsNotification
|
|
606
|
+
|
|
607
|
+
#### Новое значение `flat` у `variant`; `important` получил тень
|
|
608
|
+
|
|
609
|
+
> ✨ **NEW** — набор вариантов CDS 3 сохранён (`default` / `compact` / `important`, по умолчанию `default`), добавлено значение `flat` — уведомление без рамки. Вариант `important` (в CDS 3 не имел собственных стилей) теперь воспроизводит вид `CdsNotificationAlert`: нейтральный фон (`surface-elevated`) и тень (`cds-shadow-bottom-300`), статус задаёт только цвета контента и рамки.
|
|
610
|
+
|
|
611
|
+
**Было (CDS 3):**
|
|
612
|
+
|
|
613
|
+
```html
|
|
614
|
+
<!-- CDS 3 — variant: 'default' | 'compact' | 'important' (default 'default') -->
|
|
615
|
+
<cds-notification title="Заголовок" text="Описание уведомления" />
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
**Стало (CDS 4):**
|
|
619
|
+
|
|
620
|
+
```html
|
|
621
|
+
<!-- CDS 4 — variant: 'default' | 'flat' | 'compact' | 'important' (default 'default') -->
|
|
622
|
+
<CdsNotification variant="flat" title="Заголовок" text="Описание уведомления" />
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
**Действие:** миграция не требуется — существующие значения работают как раньше. Учтите, что `variant="important"` теперь визуально отличается (нейтральный фон + тень, как у тоста `CdsNotificationAlert` в CDS 3).
|
|
626
|
+
|
|
627
|
+
<!-- entry-meta: id=cdsnotification-variant-flat-important; severity=new; component=CdsNotification -->
|
|
628
|
+
|
|
629
|
+
#### Значение `status="error"` переименовано в `status="danger"`
|
|
630
|
+
|
|
631
|
+
> 🔁 **RENAMED** — как и у `CdsStatus`, набор статусов выровнен с токенами `--cds-color-status-*`.
|
|
632
|
+
|
|
633
|
+
**Было (CDS 3):**
|
|
634
|
+
|
|
635
|
+
```html
|
|
636
|
+
<!-- CDS 3 — status: 'info' | 'success' | 'warning' | 'error' | 'progress' -->
|
|
637
|
+
<cds-notification status="error" title="Ошибка" text="Что-то пошло не так" />
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
**Стало (CDS 4):**
|
|
641
|
+
|
|
642
|
+
```html
|
|
643
|
+
<!-- CDS 4 — status: 'info' | 'success' | 'warning' | 'danger' | 'progress' -->
|
|
644
|
+
<CdsNotification status="danger" title="Ошибка" text="Что-то пошло не так" />
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
**Действие:** заменить `status="error"` на `status="danger"`. Поиск: `grep -rnE "(cds-notification|CdsNotification)[^>]*status=\"error\"" src/`.
|
|
648
|
+
|
|
649
|
+
<!-- entry-meta: id=cdsnotification-status-error-to-danger; severity=renamed; component=CdsNotification -->
|
|
650
|
+
|
|
651
|
+
#### Проп `customIcon` удалён
|
|
652
|
+
|
|
653
|
+
> ⚠️ **BREAKING** — своя иконка задаётся через единый проп `icon` (`false` — скрыть иконку; по умолчанию иконка берётся из `status`).
|
|
654
|
+
|
|
655
|
+
**Было (CDS 3):**
|
|
656
|
+
|
|
657
|
+
```html
|
|
658
|
+
<!-- CDS 3 — отдельные пропсы icon (false | имя) и customIcon -->
|
|
659
|
+
<cds-notification custom-icon="bookmark" title="Заголовок" text="Описание уведомления" />
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
**Стало (CDS 4):**
|
|
663
|
+
|
|
664
|
+
```html
|
|
665
|
+
<!-- CDS 4 — только icon: false | IconValue -->
|
|
666
|
+
<CdsNotification icon="bookmark" title="Заголовок" text="Описание уведомления" />
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
**Действие:** заменить `custom-icon` / `customIcon` на `icon`. Поиск: `grep -rnE "custom-icon|customIcon" src/`.
|
|
670
|
+
|
|
671
|
+
<!-- entry-meta: id=cdsnotification-customicon-removed; severity=breaking; component=CdsNotification -->
|
|
672
|
+
|
|
673
|
+
#### Новые пропсы `bgColor` / `textColor`
|
|
674
|
+
|
|
675
|
+
> ✨ **NEW** — цвет фона и контента можно переопределить через `useColor`; без них действуют цвета статуса (миграция не требуется).
|
|
676
|
+
|
|
677
|
+
**Было (CDS 3):**
|
|
678
|
+
|
|
679
|
+
```html
|
|
680
|
+
<!-- CDS 3 — цвета жёстко привязаны к status -->
|
|
681
|
+
<cds-notification status="info" title="Заголовок" text="Описание уведомления" />
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
**Стало (CDS 4):**
|
|
685
|
+
|
|
686
|
+
```html
|
|
687
|
+
<!-- CDS 4 — фон и текст можно переопределить (alias-токен или raw CSS-цвет) -->
|
|
688
|
+
<CdsNotification bg-color="brand-primary" text-color="content-on-dark" title="Заголовок" text="Описание уведомления" />
|
|
689
|
+
```
|
|
690
|
+
|
|
691
|
+
**Действие:** миграция не требуется. Alias-цвета резолвятся в tier `fill` (фон) и `content` (текст); raw CSS-цвета применяются инлайн-стилем.
|
|
692
|
+
|
|
693
|
+
<!-- entry-meta: id=cdsnotification-bgcolor-textcolor; severity=new; component=CdsNotification -->
|
|
694
|
+
|
|
695
|
+
### CdsBadge
|
|
696
|
+
|
|
697
|
+
#### Пропс `count` переименован в `content`
|
|
698
|
+
|
|
699
|
+
> 🔁 **RENAMED** — пропс приходит из общей фабрики `defineTextProps()` и теперь называется `content`.
|
|
700
|
+
|
|
701
|
+
**Было (CDS 3):**
|
|
702
|
+
|
|
703
|
+
```html
|
|
704
|
+
<!-- CDS 3 -->
|
|
705
|
+
<CdsBadge :count="5" />
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
**Стало (CDS 4):**
|
|
709
|
+
|
|
710
|
+
```html
|
|
711
|
+
<!-- CDS 4 -->
|
|
712
|
+
<CdsBadge :content="5" />
|
|
713
|
+
```
|
|
714
|
+
|
|
715
|
+
**Действие:** заменить `:count` на `:content`. Поиск использований: `grep -rn "CdsBadge[^/>]*\bcount=" src/`.
|
|
716
|
+
|
|
717
|
+
<!-- entry-meta: id=cdsbadge-count-to-content; severity=renamed; component=CdsBadge -->
|
|
718
|
+
|
|
719
|
+
#### Пропс `limited` заменён на `max` со значением
|
|
720
|
+
|
|
721
|
+
> 🔁 **RENAMED** — вместо булева флага теперь явное число-порог.
|
|
722
|
+
|
|
723
|
+
**Было (CDS 3):**
|
|
724
|
+
|
|
725
|
+
```html
|
|
726
|
+
<!-- CDS 3 — limited отрезал значение по фиксированному порогу (99) -->
|
|
727
|
+
<CdsBadge :count="120" limited />
|
|
728
|
+
```
|
|
729
|
+
|
|
730
|
+
**Стало (CDS 4):**
|
|
731
|
+
|
|
732
|
+
```html
|
|
733
|
+
<!-- CDS 4 — порог задаётся явно через max -->
|
|
734
|
+
<CdsBadge :content="120" :max="99" />
|
|
735
|
+
```
|
|
736
|
+
|
|
737
|
+
**Действие:** заменить `limited` на `:max="<число>"`. В CDS 3 порог по умолчанию был `99` — оставьте это значение, чтобы поведение не изменилось.
|
|
738
|
+
|
|
739
|
+
<!-- entry-meta: id=cdsbadge-limited-to-max; severity=renamed; component=CdsBadge -->
|
|
740
|
+
|
|
741
|
+
#### Пропс `invertColor` удалён
|
|
742
|
+
|
|
743
|
+
> ⚠️ **BREAKING** — в CDS 3 был помечен `deprecated`, в CDS 4 удалён.
|
|
744
|
+
|
|
745
|
+
**Было (CDS 3):**
|
|
746
|
+
|
|
747
|
+
```html
|
|
748
|
+
<!-- CDS 3 -->
|
|
749
|
+
<CdsBadge :count="5" invert-color />
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
**Стало (CDS 4):**
|
|
753
|
+
|
|
754
|
+
```html
|
|
755
|
+
<!-- CDS 4 — для смены цвета используются color / textColor -->
|
|
756
|
+
<CdsBadge :content="5" color="surface-primary" text-color="content-on-primary" />
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
**Действие:** удалить использования `invert-color` / `invertColor`. Если нужен инвертированный вид — задайте `color` и `textColor` явно.
|
|
760
|
+
|
|
761
|
+
<!-- entry-meta: id=cdsbadge-invertcolor-removed; severity=breaking; component=CdsBadge -->
|
|
762
|
+
|
|
763
|
+
#### Дефолт пропса `inline` изменён с `true` на `undefined`
|
|
764
|
+
|
|
765
|
+
> ⚠️ **BREAKING** — без явного `inline` бейдж теперь позиционируется абсолютно (`location: 'top end'`), а не как inline-блок.
|
|
766
|
+
|
|
767
|
+
**Было (CDS 3):**
|
|
768
|
+
|
|
769
|
+
```html
|
|
770
|
+
<!-- CDS 3 — по умолчанию inline=true: бейдж рендерился inline-блоком рядом с контентом -->
|
|
771
|
+
<CdsBadge :content="5">
|
|
772
|
+
<CdsFunctionalButton icon="notification" />
|
|
773
|
+
</CdsBadge>
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
**Стало (CDS 4):**
|
|
777
|
+
|
|
778
|
+
```html
|
|
779
|
+
<!-- CDS 4 — по умолчанию inline=false: бейдж абсолютно позиционируется над контентом.
|
|
780
|
+
Чтобы вернуть прежнее поведение — указать inline явно. -->
|
|
781
|
+
<CdsBadge :content="5" inline>
|
|
782
|
+
<CdsFunctionalButton icon="notification" />
|
|
783
|
+
</CdsBadge>
|
|
784
|
+
```
|
|
785
|
+
|
|
786
|
+
**Действие:** проверить все использования `CdsBadge` без явного `inline`. Если требуется прежнее inline-поведение — добавить пропс `inline`. Если нужен бейдж-«накладка» — оставить как есть (теперь это поведение по умолчанию, см. `defineLocationProps({ location: 'top end' })`).
|
|
787
|
+
|
|
788
|
+
<!-- entry-meta: id=cdsbadge-inline-default-changed; severity=breaking; component=CdsBadge -->
|
|
789
|
+
|
|
790
|
+
### CdsBreadcrumbsItem
|
|
791
|
+
|
|
792
|
+
#### Пропс `text` переименован в `title`
|
|
793
|
+
|
|
794
|
+
> 🔁 **RENAMED**
|
|
795
|
+
|
|
796
|
+
**Было (CDS 3):**
|
|
797
|
+
|
|
798
|
+
```html
|
|
799
|
+
<!-- CDS 3 -->
|
|
800
|
+
<cds-breadcrumbs-item text="Каталог" to="/catalog" />
|
|
801
|
+
```
|
|
802
|
+
|
|
803
|
+
**Стало (CDS 4):**
|
|
804
|
+
|
|
805
|
+
```html
|
|
806
|
+
<!-- CDS 4 -->
|
|
807
|
+
<cds-breadcrumbs-item title="Каталог" to="/catalog" />
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
**Действие:** переименуйте пропс `text` → `title` на всех использованиях `CdsBreadcrumbsItem`. Найти: `grep -rn "cds-breadcrumbs-item" | grep "text="`.
|
|
811
|
+
|
|
812
|
+
<!-- entry-meta: id=cdsbreadcrumbsitem-text-to-title; severity=renamed; component=CdsBreadcrumbsItem -->
|
|
813
|
+
|
|
814
|
+
#### Удалён устаревший пропс `currentPage`
|
|
815
|
+
|
|
816
|
+
> ⚠️ **BREAKING**
|
|
817
|
+
|
|
818
|
+
**Было (CDS 3):**
|
|
819
|
+
|
|
820
|
+
```html
|
|
821
|
+
<!-- CDS 3 -->
|
|
822
|
+
<cds-breadcrumbs-item text="Текущая страница" current-page />
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
**Стало (CDS 4):**
|
|
826
|
+
|
|
827
|
+
```html
|
|
828
|
+
<!-- CDS 4 -->
|
|
829
|
+
<cds-breadcrumbs-item title="Текущая страница" disabled />
|
|
830
|
+
```
|
|
831
|
+
|
|
832
|
+
**Действие:** замените `current-page` на `disabled` (неактивная/текущая страница) либо `active` (подсветка текущего маршрута). В CDS 3 пропс уже выводил `[CDS UPGRADE]` warning через `deprecate('currentPage', 'disabled')`; в CDS 4 он удалён полностью.
|
|
833
|
+
|
|
834
|
+
<!-- entry-meta: id=cdsbreadcrumbsitem-currentpage-removed; severity=breaking; component=CdsBreadcrumbsItem -->
|
|
835
|
+
|
|
836
|
+
### CdsButton
|
|
837
|
+
|
|
838
|
+
#### Удалён автоматический отступ между соседними кнопками
|
|
839
|
+
|
|
840
|
+
> ⚠️ **BREAKING** — глобальное CSS-правило, добавлявшее `margin-left` между соседними кнопками, было помечено `@deprecated` ещё в CDS 3 и в CDS 4 удалено полностью.
|
|
841
|
+
|
|
842
|
+
**Было (CDS 3):**
|
|
843
|
+
|
|
844
|
+
```scss
|
|
845
|
+
// CDS 3 — глобальное правило в CdsButton.scss (@deprecated)
|
|
846
|
+
.cds-button + .cds-button:not(.cds-functional-button) {
|
|
847
|
+
margin-left: var(--cds-spacing-200);
|
|
848
|
+
}
|
|
849
|
+
```
|
|
850
|
+
|
|
851
|
+
**Стало (CDS 4):**
|
|
852
|
+
|
|
853
|
+
```html
|
|
854
|
+
<!-- CDS 4 — отступ задаёт контейнер -->
|
|
855
|
+
<div style="display: flex; gap: var(--cds-spacing-200)">
|
|
856
|
+
<CdsButton>Отменить</CdsButton>
|
|
857
|
+
<CdsButton>Сохранить</CdsButton>
|
|
858
|
+
</div>
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
**Действие:** найдите группы соседних кнопок, полагавшиеся на автоматический отступ, и задайте расстояние явно на контейнере (`display: flex` + `gap`). Поиск кандидатов: `rg -lU '</(cds-button|CdsButton)>\s*<(cds-button|CdsButton)' src/`.
|
|
862
|
+
|
|
863
|
+
<!-- entry-meta: id=cdsbutton-adjacent-margin-removed; severity=breaking; component=CdsButton -->
|
|
864
|
+
|
|
865
|
+
### CdsCard
|
|
866
|
+
|
|
867
|
+
#### Удалены пропсы `interactive` / `selected`
|
|
868
|
+
|
|
869
|
+
> ⚠️ **BREAKING** — модель кликабельности и выбора переработана. Кликабельность теперь включается пропсом `link` (или автоматически при `href` / `to` / членстве в `CdsCardGroup`), а выбранное состояние управляется только через `CdsCardGroup` + `value`.
|
|
870
|
+
|
|
871
|
+
**Было (CDS 3):**
|
|
872
|
+
|
|
873
|
+
```html
|
|
874
|
+
<!-- CDS 3 — interactive делал карточку кликабельной, selected — выбранной -->
|
|
875
|
+
<cds-card interactive :selected="isSelected" @click="onClick">…</cds-card>
|
|
876
|
+
|
|
877
|
+
<!-- выбор в группе -->
|
|
878
|
+
<cds-card-group v-model="selected" multiple>
|
|
879
|
+
<cds-card :value="1">…</cds-card>
|
|
880
|
+
</cds-card-group>
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
**Стало (CDS 4):**
|
|
884
|
+
|
|
885
|
+
```html
|
|
886
|
+
<!-- CDS 4 — кликабельность через link (или href/to/членство в группе) -->
|
|
887
|
+
<CdsCard link @click="onClick">…</CdsCard>
|
|
888
|
+
|
|
889
|
+
<!-- выбор управляется CdsCardGroup + value; standalone-проп selected удалён -->
|
|
890
|
+
<CdsCardGroup v-model="selected" multiple>
|
|
891
|
+
<CdsCard :value="1">…</CdsCard>
|
|
892
|
+
</CdsCardGroup>
|
|
893
|
+
```
|
|
894
|
+
|
|
895
|
+
**Действие:** заменить `interactive` на `link` (либо положиться на `href` / `to` / членство в `CdsCardGroup` — карточка станет кликабельной автоматически). Убрать standalone-проп `selected`: выбранное состояние теперь задаётся группой `CdsCardGroup` через `v-model` + `value` (визуально — класс из `selectedClass`). Нативный `@click` на `CdsCard` продолжает работать. Поиск: `grep -rnE "cds-card[^>]*(interactive|selected)" src/`.
|
|
896
|
+
|
|
897
|
+
> ℹ️ Событие `group:selected` убрано из публичного API `CdsCard` (в CDS 3 было объявлено в `emits`, в CDS 4 отсутствует в типах / `meta.json`), но всё ещё эмитится общим composable `useGroupItem` — существующие слушатели `@group:selected` продолжают срабатывать. Рекомендуется наблюдать за выбором на уровне группы: через `v-model` (`update:modelValue`) на `CdsCardGroup`.
|
|
898
|
+
|
|
899
|
+
<!-- entry-meta: id=cdscard-interactive-selected-removed; severity=breaking; component=CdsCard -->
|
|
900
|
+
|
|
901
|
+
### CdsCheckbox
|
|
902
|
+
|
|
903
|
+
#### Компонент-обёртка `CdsCheckboxGroup` удалён
|
|
904
|
+
|
|
905
|
+
> ⚠️ **BREAKING** — отдельного компонента `CdsCheckboxGroup` больше нет. Группа собирается из `CdsLabel`, `CdsDescription` и нескольких `CdsCheckbox` с общим `v-model`-массивом.
|
|
906
|
+
|
|
907
|
+
**Было (CDS 3):**
|
|
908
|
+
|
|
909
|
+
```html
|
|
910
|
+
<!-- CDS 3 -->
|
|
911
|
+
<script setup lang="ts">
|
|
912
|
+
import { ref } from 'vue';
|
|
913
|
+
|
|
914
|
+
const selected = ref(['first']);
|
|
915
|
+
</script>
|
|
916
|
+
|
|
917
|
+
<template>
|
|
918
|
+
<cds-checkbox-group
|
|
919
|
+
v-model="selected"
|
|
920
|
+
label="Заголовок группы чекбоксов"
|
|
921
|
+
description="Вспомогательное описание"
|
|
922
|
+
>
|
|
923
|
+
<cds-checkbox label="Значение чекбокса 1" value="first" />
|
|
924
|
+
<cds-checkbox label="Значение чекбокса 2" value="second" />
|
|
925
|
+
<cds-checkbox label="Значение чекбокса 3" value="third" />
|
|
926
|
+
</cds-checkbox-group>
|
|
927
|
+
<div>{{ selected }}</div>
|
|
928
|
+
</template>
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
**Стало (CDS 4):**
|
|
932
|
+
|
|
933
|
+
```html
|
|
934
|
+
<!-- CDS 4 -->
|
|
935
|
+
<script setup lang="ts">
|
|
936
|
+
import { ref } from 'vue';
|
|
937
|
+
|
|
938
|
+
const selected = ref(['first']);
|
|
939
|
+
</script>
|
|
940
|
+
|
|
941
|
+
<template>
|
|
942
|
+
<div class="w-full">
|
|
943
|
+
<CdsLabel class="mb-1">Заголовок группы чекбоксов</CdsLabel>
|
|
944
|
+
<CdsDescription class="mb-1">Вспомогательное описание</CdsDescription>
|
|
945
|
+
<div class="flex flex-col gap-2">
|
|
946
|
+
<CdsCheckbox v-model="selected" label="Значение чекбокса 1" hide-details value="first" />
|
|
947
|
+
<CdsCheckbox v-model="selected" label="Значение чекбокса 2" hide-details value="second" />
|
|
948
|
+
<CdsCheckbox v-model="selected" label="Значение чекбокса 3" hide-details value="third" />
|
|
949
|
+
</div>
|
|
950
|
+
<p>{{ selected }}</p>
|
|
951
|
+
</div>
|
|
952
|
+
</template>
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
**Действие:** убрать обёртку `<cds-checkbox-group>` и заменить её связкой `CdsLabel` + `CdsDescription` + flex-контейнер с обычными `CdsCheckbox`. На каждом чекбоксе укажите общий массив в `v-model`, уникальный `value` и `hide-details`, чтобы убрать индивидуальные слоты описаний. Пример — `packages/components/src/components/CdsCheckbox/docs/CdsCheckbox.stories.ts` (story `Group`). Поиск использований: `grep -rn "cds-checkbox-group\|CdsCheckboxGroup" src/`.
|
|
956
|
+
|
|
957
|
+
<!-- entry-meta: id=cdscheckbox-checkboxgroup-removed; severity=breaking; component=CdsCheckbox -->
|
|
958
|
+
|
|
959
|
+
#### Изменён exposed-API
|
|
960
|
+
|
|
961
|
+
> ⚠️ **BREAKING** — вместо `id` / `isGroup` / `validationRef` компонент отдаёт унифицированный validation-API.
|
|
962
|
+
|
|
963
|
+
**Было (CDS 3):**
|
|
964
|
+
|
|
965
|
+
```ts
|
|
966
|
+
// CDS 3
|
|
967
|
+
const cb = ref();
|
|
968
|
+
cb.value.validationRef; // инстанс CdsInput
|
|
969
|
+
cb.value.isGroup; // находится ли чекбокс в группе
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
**Стало (CDS 4):**
|
|
973
|
+
|
|
974
|
+
```ts
|
|
975
|
+
// CDS 4 — методы и флаги валидации
|
|
976
|
+
const cb = ref();
|
|
977
|
+
cb.value.validate(); // запуск валидации
|
|
978
|
+
cb.value.reset(); // сброс значения
|
|
979
|
+
cb.value.resetValidation(); // сброс ошибок
|
|
980
|
+
cb.value.isValid; // Ref<boolean | null>
|
|
981
|
+
```
|
|
982
|
+
|
|
983
|
+
**Действие:** заменить обращения к `ref.id` / `ref.isGroup` / `ref.validationRef` на методы и флаги валидации (`validate`, `reset`, `resetValidation`, `isValid`, `isDirty`, `isValidating`, `isDisabled`, `isReadonly`, `isPure`).
|
|
984
|
+
|
|
985
|
+
<!-- entry-meta: id=cdscheckbox-exposed-api-changed; severity=breaking; component=CdsCheckbox -->
|
|
986
|
+
|
|
987
|
+
### CdsContentSwitcher
|
|
988
|
+
|
|
989
|
+
#### Компонент `CdsContentSwitcher` удалён — используйте `CdsTabs`
|
|
990
|
+
|
|
991
|
+
> ⚠️ **BREAKING** — `CdsContentSwitcher` (и `CdsContentSwitcherItem`) был помечен `deprecated` ещё в CDS 3 (обёртка над табами) и удалён в CDS 4. Замена — `CdsTabs` / `CdsTab` (бывший `CdsTabsV2`, см. [CdsTabsV2](#cdstabsv2)).
|
|
992
|
+
|
|
993
|
+
**Было (CDS 3):**
|
|
994
|
+
|
|
995
|
+
```html
|
|
996
|
+
<!-- CDS 3 — CdsContentSwitcher был помечен deprecated -->
|
|
997
|
+
<script setup lang="ts">
|
|
998
|
+
import { CdsContentSwitcher, CdsContentSwitcherItem } from '@central-design-system/components';
|
|
999
|
+
import { ref } from 'vue';
|
|
1000
|
+
|
|
1001
|
+
const model = ref(0);
|
|
1002
|
+
</script>
|
|
1003
|
+
|
|
1004
|
+
<template>
|
|
1005
|
+
<cds-content-switcher v-model="model">
|
|
1006
|
+
<cds-content-switcher-item>Россия</cds-content-switcher-item>
|
|
1007
|
+
<cds-content-switcher-item>Египет</cds-content-switcher-item>
|
|
1008
|
+
<cds-content-switcher-item>Аргентина</cds-content-switcher-item>
|
|
1009
|
+
</cds-content-switcher>
|
|
1010
|
+
</template>
|
|
1011
|
+
```
|
|
1012
|
+
|
|
1013
|
+
**Стало (CDS 4):**
|
|
1014
|
+
|
|
1015
|
+
```html
|
|
1016
|
+
<!-- CDS 4 — вместо CdsContentSwitcher используйте CdsTabs + CdsTab -->
|
|
1017
|
+
<script setup lang="ts">
|
|
1018
|
+
import { CdsTabs, CdsTab } from '@central-design-system/components';
|
|
1019
|
+
import { ref } from 'vue';
|
|
1020
|
+
|
|
1021
|
+
const model = ref('ru');
|
|
1022
|
+
</script>
|
|
1023
|
+
|
|
1024
|
+
<template>
|
|
1025
|
+
<CdsTabs v-model="model" grow>
|
|
1026
|
+
<CdsTab value="ru">Россия</CdsTab>
|
|
1027
|
+
<CdsTab value="eg">Египет</CdsTab>
|
|
1028
|
+
<CdsTab value="ar">Аргентина</CdsTab>
|
|
1029
|
+
</CdsTabs>
|
|
1030
|
+
</template>
|
|
1031
|
+
```
|
|
1032
|
+
|
|
1033
|
+
**Действие:** заменить `CdsContentSwitcher` → `CdsTabs` и `CdsContentSwitcherItem` → `CdsTab` (включая kebab-case `cds-content-switcher` → `cds-tabs`, `cds-content-switcher-item` → `cds-tab`). Чтобы табы занимали всё доступное пространство, как `CdsContentSwitcher` по умолчанию, добавьте проп `grow`. В CDS 3 компонент выводил в консоль `[CDS UPGRADE]` warning (`deprecate()`); в CDS 4 он удалён. Поиск: `grep -rnE "CdsContentSwitcher|cds-content-switcher" src/`.
|
|
1034
|
+
|
|
1035
|
+
<!-- entry-meta: id=cdscontentswitcher-removed; severity=breaking; component=CdsContentSwitcher -->
|
|
1036
|
+
|
|
1037
|
+
### CdsForm
|
|
1038
|
+
|
|
1039
|
+
#### Изменён exposed-API — убраны обёртки `form` / `formRef`
|
|
1040
|
+
|
|
1041
|
+
> ⚠️ **BREAKING** — методы валидации и состояние доступны напрямую через ref.
|
|
1042
|
+
|
|
1043
|
+
**Было (CDS 3):**
|
|
1044
|
+
|
|
1045
|
+
```ts
|
|
1046
|
+
// CDS 3
|
|
1047
|
+
const formRef = ref();
|
|
1048
|
+
// exposed: { ...form, form, formRef }
|
|
1049
|
+
formRef.value.validate();
|
|
1050
|
+
formRef.value.form; // объект формы
|
|
1051
|
+
formRef.value.formRef; // ссылка на <form>
|
|
1052
|
+
```
|
|
1053
|
+
|
|
1054
|
+
**Стало (CDS 4):**
|
|
1055
|
+
|
|
1056
|
+
```ts
|
|
1057
|
+
// CDS 4
|
|
1058
|
+
const formRef = ref();
|
|
1059
|
+
// плоский набор — без обёрток form / formRef
|
|
1060
|
+
formRef.value.validate();
|
|
1061
|
+
formRef.value.reset();
|
|
1062
|
+
formRef.value.resetValidation();
|
|
1063
|
+
formRef.value.isValid; // isValidating / isDisabled / isReadonly, errors / items
|
|
1064
|
+
```
|
|
1065
|
+
|
|
1066
|
+
**Действие:** убрать обращения к `formRef.value.form` и `formRef.value.formRef` — методы (`validate` / `reset` / `resetValidation`) и состояние (`isValid` / `isValidating` / `isDisabled` / `isReadonly`, `errors` / `items`) доступны прямо на ref формы. Поиск: `grep -rnE "\.(form|formRef)\b" src/`.
|
|
1067
|
+
|
|
1068
|
+
<!-- entry-meta: id=cdsform-exposed-api; severity=breaking; component=CdsForm -->
|
|
1069
|
+
|
|
1070
|
+
### CdsIcon
|
|
1071
|
+
|
|
1072
|
+
#### Удалён устаревший пропс `invertColor`
|
|
1073
|
+
|
|
1074
|
+
> ⚠️ **BREAKING** — инверсия цвета через `invertColor` убрана; цвет иконки задаётся цветовыми пропсами.
|
|
1075
|
+
|
|
1076
|
+
**Было (CDS 3):**
|
|
1077
|
+
|
|
1078
|
+
```html
|
|
1079
|
+
<!-- CDS 3 -->
|
|
1080
|
+
<CdsIcon name="add" invert-color />
|
|
1081
|
+
```
|
|
1082
|
+
|
|
1083
|
+
**Стало (CDS 4):**
|
|
1084
|
+
|
|
1085
|
+
```html
|
|
1086
|
+
<!-- CDS 4 -->
|
|
1087
|
+
<CdsIcon icon="add" color="content-inverse" />
|
|
1088
|
+
```
|
|
1089
|
+
|
|
1090
|
+
**Действие:** убрать проп `invertColor` у `CdsIcon` и задавать цвет через `color` / `baseColor` / `textColor`. Поиск: `grep -rnE "<[Cc]ds[- ]?[Ii]con[^>]*invert-?[Cc]olor" src/`.
|
|
1091
|
+
|
|
1092
|
+
<!-- entry-meta: id=cdsicon-invertcolor-removed; severity=breaking; component=CdsIcon -->
|
|
1093
|
+
|
|
1094
|
+
### CdsList
|
|
1095
|
+
|
|
1096
|
+
#### Удалён устаревший пропс `invertColor`
|
|
1097
|
+
|
|
1098
|
+
> ⚠️ **BREAKING** — инверсия цвета через `invertColor` убрана; цвет списка задаётся цветовыми пропсами.
|
|
1099
|
+
|
|
1100
|
+
**Было (CDS 3):**
|
|
1101
|
+
|
|
1102
|
+
```html
|
|
1103
|
+
<!-- CDS 3 -->
|
|
1104
|
+
<cds-list invert-color :items="items" />
|
|
1105
|
+
```
|
|
1106
|
+
|
|
1107
|
+
**Стало (CDS 4):**
|
|
1108
|
+
|
|
1109
|
+
```html
|
|
1110
|
+
<!-- CDS 4 — цвет задаётся цветовыми пропсами -->
|
|
1111
|
+
<CdsList :items="items" color="content-inverse" bg-color="surface-primary" />
|
|
1112
|
+
```
|
|
1113
|
+
|
|
1114
|
+
**Действие:** убрать `invert-color` / `invertColor` у `CdsList`; для инверсного/произвольного оформления использовать `color` / `baseColor` / `bgColor` / `textColor`. Поиск: `grep -rnE "cds-list[^>]*invert-?[Cc]olor|CdsList[^>]*invertColor" src/`.
|
|
1115
|
+
|
|
1116
|
+
<!-- entry-meta: id=cdslist-invertcolor-removed; severity=breaking; component=CdsList -->
|
|
1117
|
+
|
|
1118
|
+
#### `CdsListItem`: удалён пропс `isClickable`
|
|
1119
|
+
|
|
1120
|
+
> ⚠️ **BREAKING** — принудительная кликабельность через `isClickable` убрана; теперь включается пропсом `link` (либо автоматически при `href` / `to` или наличии `value` внутри списка).
|
|
1121
|
+
|
|
1122
|
+
**Было (CDS 3):**
|
|
1123
|
+
|
|
1124
|
+
```html
|
|
1125
|
+
<!-- CDS 3 — isClickable принудительно делал элемент кликабельным -->
|
|
1126
|
+
<cds-list-item is-clickable title="Пункт" @click="onClick" />
|
|
1127
|
+
```
|
|
1128
|
+
|
|
1129
|
+
**Стало (CDS 4):**
|
|
1130
|
+
|
|
1131
|
+
```html
|
|
1132
|
+
<!-- CDS 4 — кликабельность через link -->
|
|
1133
|
+
<CdsListItem link title="Пункт" @click="onClick" />
|
|
1134
|
+
```
|
|
1135
|
+
|
|
1136
|
+
**Действие:** заменить `is-clickable` / `isClickable` на `link`. Если у элемента есть `href` / `to` или `value` внутри `CdsList` — он станет кликабельным автоматически. Поиск: `grep -rnE "cds-list-item[^>]*is-clickable|CdsListItem[^>]*isClickable" src/`.
|
|
1137
|
+
|
|
1138
|
+
<!-- entry-meta: id=cdslistitem-isclickable-removed; severity=breaking; component=CdsListItem -->
|
|
1139
|
+
|
|
1140
|
+
#### `CdsListItem`: изменён exposed-API
|
|
1141
|
+
|
|
1142
|
+
> ⚠️ **BREAKING** — вместо `isActive` / `isIndeterminate` компонент отдаёт `isActivated` / `activate`; поле `isIndeterminate` удалено.
|
|
1143
|
+
|
|
1144
|
+
**Было (CDS 3):**
|
|
1145
|
+
|
|
1146
|
+
```ts
|
|
1147
|
+
// CDS 3 — exposed: isActive, isSelected, isIndeterminate, select
|
|
1148
|
+
const item = ref();
|
|
1149
|
+
item.value.isActive;
|
|
1150
|
+
item.value.isIndeterminate;
|
|
1151
|
+
```
|
|
1152
|
+
|
|
1153
|
+
**Стало (CDS 4):**
|
|
1154
|
+
|
|
1155
|
+
```ts
|
|
1156
|
+
// CDS 4 — isActive → isActivated, добавлен activate(); isIndeterminate удалён
|
|
1157
|
+
const item = ref();
|
|
1158
|
+
item.value.isActivated;
|
|
1159
|
+
item.value.activate(true);
|
|
1160
|
+
item.value.isSelected;
|
|
1161
|
+
item.value.select(true);
|
|
1162
|
+
```
|
|
1163
|
+
|
|
1164
|
+
**Действие:** заменить обращения к `isActive` на `isActivated`, для смены активного состояния использовать `activate(value)`; `isIndeterminate` больше не экспонируется. Дополнительно доступны `isGroupActivator` и контексты `list` / `root`.
|
|
1165
|
+
|
|
1166
|
+
<!-- entry-meta: id=cdslistitem-exposed-api-changed; severity=breaking; component=CdsListItem -->
|
|
1167
|
+
|
|
1168
|
+
#### `CdsListGroup`: удалён слот `title`, изменён смысл пропа `title`
|
|
1169
|
+
|
|
1170
|
+
> ⚠️ **BREAKING** — В CDS 3 `title` (и слот `#title`) рисовал **отдельную статичную некликабельную подпись** над активатором (блок `.cds-list-group__title`). В CDS 4 этот блок и слот удалены, а проп `title` стал **текстом кликабельного активатора**. Статичная подпись группы теперь делается компонентом `CdsListSubheader`.
|
|
1171
|
+
|
|
1172
|
+
**Было (CDS 3):**
|
|
1173
|
+
|
|
1174
|
+
```html
|
|
1175
|
+
<!-- CDS 3 — title/#title = статичная подпись над кликабельным #activator -->
|
|
1176
|
+
<cds-list-group>
|
|
1177
|
+
<template #title>Заголовок группы</template>
|
|
1178
|
+
<template #activator="{ props }">
|
|
1179
|
+
<cds-list-item v-bind="props" title="Раскрыть" />
|
|
1180
|
+
</template>
|
|
1181
|
+
<cds-list-item title="Пункт" />
|
|
1182
|
+
</cds-list-group>
|
|
1183
|
+
```
|
|
1184
|
+
|
|
1185
|
+
**Стало (CDS 4):**
|
|
1186
|
+
|
|
1187
|
+
```html
|
|
1188
|
+
<!-- CDS 4 — статичная подпись через CdsListSubheader; title = текст активатора -->
|
|
1189
|
+
<CdsListSubheader title="Заголовок группы" />
|
|
1190
|
+
<CdsListGroup title="Раскрыть">
|
|
1191
|
+
<CdsListItem title="Пункт" />
|
|
1192
|
+
</CdsListGroup>
|
|
1193
|
+
```
|
|
1194
|
+
|
|
1195
|
+
**Действие:** статичную подпись группы (бывший блок `.cds-list-group__title` / слот `#title`) вынести в отдельный `<CdsListSubheader title="…" />`. Учтите, что проп `title` у `CdsListGroup` теперь задаёт текст кликабельного активатора, а не статичную подпись; для полностью кастомного активатора используйте слот `#activator`. Поиск: `grep -rn "cds-list-group" src/`.
|
|
1196
|
+
|
|
1197
|
+
<!-- entry-meta: id=cdslistgroup-title-slot-removed; severity=breaking; component=CdsListGroup -->
|
|
1198
|
+
|
|
1199
|
+
#### `CdsListGroup`: изменён exposed-API
|
|
1200
|
+
|
|
1201
|
+
> ⚠️ **BREAKING** — вместо `id` / `isExpandable` группа отдаёт только `isOpen`.
|
|
1202
|
+
|
|
1203
|
+
**Было (CDS 3):**
|
|
1204
|
+
|
|
1205
|
+
```ts
|
|
1206
|
+
// CDS 3 — exposed: id, isOpen, isExpandable
|
|
1207
|
+
const group = ref();
|
|
1208
|
+
group.value.id;
|
|
1209
|
+
group.value.isExpandable;
|
|
1210
|
+
```
|
|
1211
|
+
|
|
1212
|
+
**Стало (CDS 4):**
|
|
1213
|
+
|
|
1214
|
+
```ts
|
|
1215
|
+
// CDS 4 — только isOpen
|
|
1216
|
+
const group = ref();
|
|
1217
|
+
group.value.isOpen;
|
|
1218
|
+
```
|
|
1219
|
+
|
|
1220
|
+
**Действие:** убрать обращения к `id` / `isExpandable` у `CdsListGroup` — публично экспонируется только `isOpen`.
|
|
1221
|
+
|
|
1222
|
+
<!-- entry-meta: id=cdslistgroup-exposed-api-changed; severity=breaking; component=CdsListGroup -->
|
|
1223
|
+
|
|
1224
|
+
#### Изменён payload событий `click:open` / `click:select`
|
|
1225
|
+
|
|
1226
|
+
> ⚠️ **BREAKING** — из payload убрано поле `event`; передаётся `{ id, value, path }`.
|
|
1227
|
+
|
|
1228
|
+
**Было (CDS 3):**
|
|
1229
|
+
|
|
1230
|
+
```ts
|
|
1231
|
+
// CDS 3 — payload: { id, value, path, event }
|
|
1232
|
+
function onOpen({ id, value, path, event }) {}
|
|
1233
|
+
```
|
|
1234
|
+
|
|
1235
|
+
**Стало (CDS 4):**
|
|
1236
|
+
|
|
1237
|
+
```ts
|
|
1238
|
+
// CDS 4 — payload без event: { id, value, path }
|
|
1239
|
+
function onOpen({ id, value, path }) {}
|
|
1240
|
+
```
|
|
1241
|
+
|
|
1242
|
+
**Действие:** убрать обращение к полю `event` в обработчиках `@click:open` / `@click:select` у `CdsList`. Поиск: `grep -rnE "click:(open|select)" src/`.
|
|
1243
|
+
|
|
1244
|
+
<!-- entry-meta: id=cdslist-click-events-payload-changed; severity=breaking; component=CdsList -->
|
|
1245
|
+
|
|
1246
|
+
### CdsModal
|
|
1247
|
+
|
|
1248
|
+
#### Удалены пропсы `loading` и `dismissBtn` (и слот `dismissBtn`)
|
|
1249
|
+
|
|
1250
|
+
> ⚠️ **BREAKING** — `dismissBtn` был помечен deprecated ещё в CDS 3; `loading` удалён вместе с ним. Лоадер и кнопка закрытия добавляются в контент вручную. Остальной API (`fullscreen`, `scrollable`, `size`, `persistent`, активаторы) совместим с CDS 3.
|
|
1251
|
+
|
|
1252
|
+
**Было (CDS 3):**
|
|
1253
|
+
|
|
1254
|
+
```html
|
|
1255
|
+
<!-- CDS 3 — лоадер и кнопка закрытия рендерились самим компонентом -->
|
|
1256
|
+
<cds-modal v-model="modal" :loading="isLoading" dismiss-btn>
|
|
1257
|
+
<h4>Заголовок</h4>
|
|
1258
|
+
<p>Контент модального окна</p>
|
|
1259
|
+
</cds-modal>
|
|
1260
|
+
```
|
|
1261
|
+
|
|
1262
|
+
**Стало (CDS 4):**
|
|
1263
|
+
|
|
1264
|
+
```html
|
|
1265
|
+
<!-- CDS 4 — добавьте CdsLoader и CdsFunctionalButton в контент сами -->
|
|
1266
|
+
<CdsModal v-model="modal">
|
|
1267
|
+
<CdsLoader v-if="isLoading" fixed overlay />
|
|
1268
|
+
|
|
1269
|
+
<div class="flex items-center justify-between">
|
|
1270
|
+
<span class="h4">Заголовок</span>
|
|
1271
|
+
<CdsFunctionalButton icon="remove" @click="modal = false" />
|
|
1272
|
+
</div>
|
|
1273
|
+
|
|
1274
|
+
<p>Контент модального окна</p>
|
|
1275
|
+
</CdsModal>
|
|
1276
|
+
```
|
|
1277
|
+
|
|
1278
|
+
**Действие:** удалить `loading` / `dismiss-btn` (и слот `#dismissBtn`) из использований `CdsModal`; лоадер (`CdsLoader fixed overlay`) и кнопку закрытия (`CdsFunctionalButton icon="remove"`) разместить в контенте модалки. Поиск: `grep -rnE "cds-modal[^>]*(loading|dismiss-btn)|CdsModal[^>]*(loading|dismissBtn)" src/`.
|
|
1279
|
+
|
|
1280
|
+
<!-- entry-meta: id=cdsmodal-loading-dismissbtn-removed; severity=breaking; component=CdsModal -->
|
|
1281
|
+
|
|
1282
|
+
#### Изменён exposed-API
|
|
1283
|
+
|
|
1284
|
+
> ⚠️ **BREAKING** — вместо ссылки `overlay` компонент отдаёт элементы и методы оверлея напрямую.
|
|
1285
|
+
|
|
1286
|
+
**Было (CDS 3):**
|
|
1287
|
+
|
|
1288
|
+
```ts
|
|
1289
|
+
// CDS 3
|
|
1290
|
+
const modal = ref();
|
|
1291
|
+
modal.value.overlay; // инстанс CdsOverlay
|
|
1292
|
+
```
|
|
1293
|
+
|
|
1294
|
+
**Стало (CDS 4):**
|
|
1295
|
+
|
|
1296
|
+
```ts
|
|
1297
|
+
// CDS 4
|
|
1298
|
+
const modal = ref();
|
|
1299
|
+
modal.value.contentEl; // DOM-элемент контента
|
|
1300
|
+
modal.value.activatorEl; // DOM-элемент активатора
|
|
1301
|
+
modal.value.updateLocation?.(e); // пересчёт позиции
|
|
1302
|
+
```
|
|
1303
|
+
|
|
1304
|
+
**Действие:** заменить обращения к `ref.overlay` на новые exposed-поля (`contentEl`, `activatorEl`, `rootEl`, `updateLocation`, `animateClick`).
|
|
1305
|
+
|
|
1306
|
+
<!-- entry-meta: id=cdsmodal-exposed-api-changed; severity=breaking; component=CdsModal -->
|
|
1307
|
+
|
|
1308
|
+
### CdsNotificationAlert
|
|
1309
|
+
|
|
1310
|
+
#### Компонент-обёртка `CdsNotificationAlert` — временный мост, мигрируйте на `CdsToast`
|
|
1311
|
+
|
|
1312
|
+
> 🟠 **DEPRECATED** — в CDS 4 компонент перенесён как мост для плавной миграции: сохранён API-стиль (`timeout`, `location`, `status`, `title`, `text`, `closable`, слоты `activator` / `actions`), но внутри теперь рендерит `CdsNotification` (`variant="important"`) в `CdsOverlay`. Работает в 4.x, будет удалён в 5.x.
|
|
1313
|
+
|
|
1314
|
+
**Было (CDS 3):**
|
|
1315
|
+
|
|
1316
|
+
```html
|
|
1317
|
+
<!-- CDS 3 — обёртка-тост поверх CdsNotification -->
|
|
1318
|
+
<cds-notification-alert v-model="active" title="Заголовок" text="Описание уведомления" status="info" location="top left" :timeout="5000" closable>
|
|
1319
|
+
<template #actions>
|
|
1320
|
+
<cds-button>Кнопка</cds-button>
|
|
1321
|
+
</template>
|
|
1322
|
+
</cds-notification-alert>
|
|
1323
|
+
```
|
|
1324
|
+
|
|
1325
|
+
**Стало (CDS 4):**
|
|
1326
|
+
|
|
1327
|
+
```html
|
|
1328
|
+
<!-- CDS 4 — рекомендуется CdsToast (для очереди/стека — CdsToastQueue) -->
|
|
1329
|
+
<CdsToast v-model="active" title="Заголовок" text="Описание уведомления" status="info" location="top left" :timeout="5000">
|
|
1330
|
+
<template #actions="{ isActive }">
|
|
1331
|
+
<CdsButton @click="isActive.value = false">Кнопка</CdsButton>
|
|
1332
|
+
</template>
|
|
1333
|
+
</CdsToast>
|
|
1334
|
+
```
|
|
1335
|
+
|
|
1336
|
+
**Действие:** `CdsNotificationAlert` продолжает работать в 4.x (рендерит `CdsNotification variant="important"` внутри `CdsOverlay`), но в dev-консоли выводит `[CDS UPGRADE] 'CdsNotificationAlert' is deprecated, use 'CdsToast' instead.` (см. `deprecate()` в `src/utils/dom/console.ts`) и будет удалён. Перейдите на `CdsToast`; для вертикального стека нескольких уведомлений используйте `CdsToast` + `CdsToastQueue`. Поиск: `grep -rnE "CdsNotificationAlert|cds-notification-alert" src/`.
|
|
1337
|
+
|
|
1338
|
+
<!-- entry-meta: id=cdsnotificationalert-deprecated-use-cdstoast; severity=deprecation; component=CdsNotificationAlert -->
|
|
1339
|
+
|
|
1340
|
+
### CdsRadioButton
|
|
1341
|
+
|
|
1342
|
+
#### Компонент `CdsRadioButton` переименован в `CdsRadioGroup`
|
|
1343
|
+
|
|
1344
|
+
> 🔁 **RENAMED** — публичный API (пропсы, слоты, события) не изменился, переименовано только имя компонента-обёртки и путь импорта/тега.
|
|
1345
|
+
|
|
1346
|
+
**Было (CDS 3):**
|
|
1347
|
+
|
|
1348
|
+
```html
|
|
1349
|
+
<!-- CDS 3 -->
|
|
1350
|
+
<script setup lang="ts">
|
|
1351
|
+
import { CdsRadio, CdsRadioButton } from '@central-design-system/components';
|
|
1352
|
+
import { ref } from 'vue';
|
|
1353
|
+
|
|
1354
|
+
const selected = ref('val-1');
|
|
1355
|
+
</script>
|
|
1356
|
+
|
|
1357
|
+
<template>
|
|
1358
|
+
<CdsRadioButton v-model="selected" label="Заголовок" description="Описание">
|
|
1359
|
+
<CdsRadio label="Значение радио-кнопки 1" value="val-1" />
|
|
1360
|
+
<CdsRadio label="Значение радио-кнопки 2" value="val-2" />
|
|
1361
|
+
<CdsRadio label="Значение радио-кнопки 3" value="val-3" />
|
|
1362
|
+
</CdsRadioButton>
|
|
1363
|
+
</template>
|
|
1364
|
+
```
|
|
1365
|
+
|
|
1366
|
+
**Стало (CDS 4):**
|
|
1367
|
+
|
|
1368
|
+
```html
|
|
1369
|
+
<!-- CDS 4 -->
|
|
1370
|
+
<script setup lang="ts">
|
|
1371
|
+
import { CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
1372
|
+
import { ref } from 'vue';
|
|
1373
|
+
|
|
1374
|
+
const selected = ref('val-1');
|
|
1375
|
+
</script>
|
|
1376
|
+
|
|
1377
|
+
<template>
|
|
1378
|
+
<CdsRadioGroup v-model="selected" label="Заголовок" description="Описание">
|
|
1379
|
+
<CdsRadio label="Значение радио-кнопки 1" value="val-1" />
|
|
1380
|
+
<CdsRadio label="Значение радио-кнопки 2" value="val-2" />
|
|
1381
|
+
<CdsRadio label="Значение радио-кнопки 3" value="val-3" />
|
|
1382
|
+
</CdsRadioGroup>
|
|
1383
|
+
</template>
|
|
1384
|
+
```
|
|
1385
|
+
|
|
1386
|
+
**Действие:** заменить импорт и тег `CdsRadioButton` → `CdsRadioGroup` (включая kebab-case вариант `cds-radio-button` → `cds-radio-group`). Поиск использований: `grep -rnE "CdsRadioButton|cds-radio-button" src/`. Дочерние `<CdsRadio>` остаются без изменений.
|
|
1387
|
+
|
|
1388
|
+
<!-- entry-meta: id=cdsradiogroup-renamed-from-cdsradiobutton; severity=renamed; component=CdsRadioGroup -->
|
|
1389
|
+
|
|
1390
|
+
#### Новые пропсы (цвета, иконки, inline, size)
|
|
1391
|
+
|
|
1392
|
+
> ✨ **NEW** — помимо переименования компонент получил аддитивные пропсы из унифицированного input-API (миграция не требуется).
|
|
1393
|
+
|
|
1394
|
+
**Было (CDS 3):**
|
|
1395
|
+
|
|
1396
|
+
```html
|
|
1397
|
+
<!-- CDS 3 -->
|
|
1398
|
+
<CdsRadioButton v-model="selected" label="Заголовок" description="Описание" />
|
|
1399
|
+
```
|
|
1400
|
+
|
|
1401
|
+
**Стало (CDS 4):**
|
|
1402
|
+
|
|
1403
|
+
```html
|
|
1404
|
+
<!-- CDS 4 -->
|
|
1405
|
+
<CdsRadioGroup
|
|
1406
|
+
v-model="selected"
|
|
1407
|
+
label="Заголовок"
|
|
1408
|
+
description="Описание"
|
|
1409
|
+
color="surface-primary"
|
|
1410
|
+
inline
|
|
1411
|
+
size="lg"
|
|
1412
|
+
/>
|
|
1413
|
+
```
|
|
1414
|
+
|
|
1415
|
+
**Действие:** миграция не требуется. Новые возможности: цветовые пропсы `color` / `baseColor` / `activeColor` / `textColor` / `iconColor`, иконочные `prependIcon` / `appendIcon` / `trueIcon` / `falseIcon`, `inline`, `size` и exposed-методы валидации (`validate` / `reset` / `resetValidation`).
|
|
1416
|
+
|
|
1417
|
+
<!-- entry-meta: id=cdsradiogroup-new-props; severity=new; component=CdsRadioGroup -->
|
|
1418
|
+
|
|
1419
|
+
### CdsSelect
|
|
1420
|
+
|
|
1421
|
+
#### Компонент `CdsDropdown` переименован в `CdsSelect`
|
|
1422
|
+
|
|
1423
|
+
> 🔁 **RENAMED** — богатый выпадающий список с кастомным меню (`CdsMenu`), множественным выбором и фильтрацией из CDS 3 `CdsDropdown` теперь называется `CdsSelect`.
|
|
1424
|
+
|
|
1425
|
+
**Было (CDS 3):**
|
|
1426
|
+
|
|
1427
|
+
```html
|
|
1428
|
+
<!-- CDS 3 -->
|
|
1429
|
+
<script setup lang="ts">
|
|
1430
|
+
import { CdsDropdown } from '@central-design-system/components';
|
|
1431
|
+
import { ref } from 'vue';
|
|
1432
|
+
|
|
1433
|
+
const selected = ref(null);
|
|
1434
|
+
const items = ref(['Первый', 'Второй', 'Третий']);
|
|
1435
|
+
</script>
|
|
1436
|
+
|
|
1437
|
+
<template>
|
|
1438
|
+
<CdsDropdown v-model="selected" :items="items" label="Выберите значение" />
|
|
1439
|
+
</template>
|
|
1440
|
+
```
|
|
1441
|
+
|
|
1442
|
+
**Стало (CDS 4):**
|
|
1443
|
+
|
|
1444
|
+
```html
|
|
1445
|
+
<!-- CDS 4 -->
|
|
1446
|
+
<script setup lang="ts">
|
|
1447
|
+
import { CdsSelect } from '@central-design-system/components';
|
|
1448
|
+
import { ref } from 'vue';
|
|
1449
|
+
|
|
1450
|
+
const selected = ref(null);
|
|
1451
|
+
const items = ref(['Первый', 'Второй', 'Третий']);
|
|
1452
|
+
</script>
|
|
1453
|
+
|
|
1454
|
+
<template>
|
|
1455
|
+
<CdsSelect v-model="selected" :items="items" label="Выберите значение" />
|
|
1456
|
+
</template>
|
|
1457
|
+
```
|
|
1458
|
+
|
|
1459
|
+
**Действие:** заменить импорт и тег `CdsDropdown` → `CdsSelect` (включая kebab-case `cds-dropdown` → `cds-select`). Поиск использований: `grep -rnE "CdsDropdown|cds-dropdown" src/`.
|
|
1460
|
+
|
|
1461
|
+
<!-- entry-meta: id=cdsselect-renamed-from-cdsdropdown; severity=renamed; component=CdsSelect -->
|
|
1462
|
+
|
|
1463
|
+
#### Нативный `CdsSelect` (CDS 3) заменён пропсом `native-select`
|
|
1464
|
+
|
|
1465
|
+
> ⚠️ **BREAKING** — старый `CdsSelect` из CDS 3 (обёртка над нативным HTML `<select>`, был помечен deprecated) удалён. Его имя теперь занимает бывший `CdsDropdown`. Чтобы получить нативный выпадающий список, используйте новый `CdsSelect` с пропсом `native-select`.
|
|
1466
|
+
|
|
1467
|
+
**Было (CDS 3):**
|
|
1468
|
+
|
|
1469
|
+
```html
|
|
1470
|
+
<!-- CDS 3 — CdsSelect рендерил нативный <select> -->
|
|
1471
|
+
<script setup lang="ts">
|
|
1472
|
+
import { CdsSelect } from '@central-design-system/components';
|
|
1473
|
+
import { ref } from 'vue';
|
|
1474
|
+
|
|
1475
|
+
const selected = ref(null);
|
|
1476
|
+
const items = ref(['Первый', 'Второй', 'Третий']);
|
|
1477
|
+
</script>
|
|
1478
|
+
|
|
1479
|
+
<template>
|
|
1480
|
+
<CdsSelect v-model="selected" :items="items" label="Выберите значение" />
|
|
1481
|
+
</template>
|
|
1482
|
+
```
|
|
1483
|
+
|
|
1484
|
+
**Стало (CDS 4):**
|
|
1485
|
+
|
|
1486
|
+
```html
|
|
1487
|
+
<!-- CDS 4 — нативный список доступен через native-select -->
|
|
1488
|
+
<script setup lang="ts">
|
|
1489
|
+
import { CdsSelect } from '@central-design-system/components';
|
|
1490
|
+
import { ref } from 'vue';
|
|
1491
|
+
|
|
1492
|
+
const selected = ref(null);
|
|
1493
|
+
const items = ref(['Первый', 'Второй', 'Третий']);
|
|
1494
|
+
</script>
|
|
1495
|
+
|
|
1496
|
+
<template>
|
|
1497
|
+
<CdsSelect v-model="selected" :items="items" native-select label="Выберите значение" />
|
|
1498
|
+
</template>
|
|
1499
|
+
```
|
|
1500
|
+
|
|
1501
|
+
**Действие:** использования старого `CdsSelect` из CDS 3 дополнить пропсом `native-select`, чтобы сохранить нативное поведение `<select>`. Без этого пропса `CdsSelect` в CDS 4 — это богатый список с кастомным меню (бывший `CdsDropdown`). Проверьте каждое использование `CdsSelect` и решите, какое поведение требуется: `grep -rnE "CdsSelect|cds-select" src/`.
|
|
1502
|
+
|
|
1503
|
+
<!-- entry-meta: id=cdsselect-native-select-prop; severity=breaking; component=CdsSelect -->
|
|
1504
|
+
|
|
1505
|
+
### CdsProgress
|
|
1506
|
+
|
|
1507
|
+
#### Компонент `CdsProgress` переименован в `CdsProgressBar`
|
|
1508
|
+
|
|
1509
|
+
> 🔁 **RENAMED** — публичный API (пропсы, слоты, события) не изменился, переименовано только имя компонента и путь импорта/тега.
|
|
1510
|
+
|
|
1511
|
+
**Было (CDS 3):**
|
|
1512
|
+
|
|
1513
|
+
```html
|
|
1514
|
+
<!-- CDS 3 -->
|
|
1515
|
+
<script setup lang="ts">
|
|
1516
|
+
import { CdsProgress } from '@central-design-system/components';
|
|
1517
|
+
import { ref } from 'vue';
|
|
1518
|
+
|
|
1519
|
+
const value = ref(35);
|
|
1520
|
+
</script>
|
|
1521
|
+
|
|
1522
|
+
<template>
|
|
1523
|
+
<CdsProgress v-model="value" />
|
|
1524
|
+
</template>
|
|
1525
|
+
```
|
|
1526
|
+
|
|
1527
|
+
**Стало (CDS 4):**
|
|
1528
|
+
|
|
1529
|
+
```html
|
|
1530
|
+
<!-- CDS 4 -->
|
|
1531
|
+
<script setup lang="ts">
|
|
1532
|
+
import { CdsProgressBar } from '@central-design-system/components';
|
|
1533
|
+
import { ref } from 'vue';
|
|
1534
|
+
|
|
1535
|
+
const value = ref(35);
|
|
1536
|
+
</script>
|
|
1537
|
+
|
|
1538
|
+
<template>
|
|
1539
|
+
<CdsProgressBar v-model="value" />
|
|
1540
|
+
</template>
|
|
1541
|
+
```
|
|
1542
|
+
|
|
1543
|
+
**Действие:** заменить импорт и тег `CdsProgress` → `CdsProgressBar` (включая kebab-case вариант `cds-progress` → `cds-progress-bar`). Поиск использований: `grep -rnE "CdsProgress|cds-progress-bar" src/`.
|
|
1544
|
+
|
|
1545
|
+
<!-- entry-meta: id=cdsprogressbar-renamed-from-cdsprogress; severity=renamed; component=CdsProgressBar -->
|
|
1546
|
+
|
|
1547
|
+
#### Новые пропсы стилизации
|
|
1548
|
+
|
|
1549
|
+
> ✨ **NEW** — помимо переименования компонент получил набор аддитивных пропсов (миграция не требуется).
|
|
1550
|
+
|
|
1551
|
+
**Было (CDS 3):**
|
|
1552
|
+
|
|
1553
|
+
```html
|
|
1554
|
+
<!-- CDS 3 — базовый прогресс-бар -->
|
|
1555
|
+
<cds-progress v-model="value" :buffer-value="60" />
|
|
1556
|
+
```
|
|
1557
|
+
|
|
1558
|
+
**Стало (CDS 4):**
|
|
1559
|
+
|
|
1560
|
+
```html
|
|
1561
|
+
<!-- CDS 4 — цвета, буфер, сегменты, полосы -->
|
|
1562
|
+
<CdsProgressBar
|
|
1563
|
+
v-model="value"
|
|
1564
|
+
color="surface-primary"
|
|
1565
|
+
base-color="surface-tertiary"
|
|
1566
|
+
buffer-color="surface-secondary"
|
|
1567
|
+
variant="split"
|
|
1568
|
+
:chunk-count="10"
|
|
1569
|
+
striped
|
|
1570
|
+
rounded-bar
|
|
1571
|
+
/>
|
|
1572
|
+
```
|
|
1573
|
+
|
|
1574
|
+
**Действие:** миграция не требуется. Новые возможности: цветовые пропсы `color` / `baseColor` / `activeColor` / `textColor`, стилизация буфера `bufferColor` / `bufferOpacity`, сегментный режим `variant: 'split'` (`chunkCount` / `chunkGap` / `chunkWidth`), а также `striped` / `roundedBar` / `opacity`.
|
|
1575
|
+
|
|
1576
|
+
<!-- entry-meta: id=cdsprogressbar-styling-props; severity=new; component=CdsProgressBar -->
|
|
1577
|
+
|
|
1578
|
+
### CdsSlideGroup
|
|
1579
|
+
|
|
1580
|
+
#### Пропсы иконок стрелок прокрутки переименованы
|
|
1581
|
+
|
|
1582
|
+
> 🔁 **RENAMED** — иконки кнопок прокрутки задаются через `prevIcon` / `nextIcon` вместо `prependIcon` / `appendIcon`.
|
|
1583
|
+
|
|
1584
|
+
**Было (CDS 3):**
|
|
1585
|
+
|
|
1586
|
+
```html
|
|
1587
|
+
<!-- CDS 3 -->
|
|
1588
|
+
<CdsSlideGroup prepend-icon="arrow-left" append-icon="arrow-right">
|
|
1589
|
+
<CdsSlideGroupItem v-for="i in items" :key="i" :value="i">{{ i }}</CdsSlideGroupItem>
|
|
1590
|
+
</CdsSlideGroup>
|
|
1591
|
+
```
|
|
1592
|
+
|
|
1593
|
+
**Стало (CDS 4):**
|
|
1594
|
+
|
|
1595
|
+
```html
|
|
1596
|
+
<!-- CDS 4 -->
|
|
1597
|
+
<CdsSlideGroup prev-icon="prev" next-icon="next">
|
|
1598
|
+
<CdsSlideGroupItem v-for="i in items" :key="i" :value="i">{{ i }}</CdsSlideGroupItem>
|
|
1599
|
+
</CdsSlideGroup>
|
|
1600
|
+
```
|
|
1601
|
+
|
|
1602
|
+
**Действие:** заменить `prepend-icon` / `append-icon` на `prev-icon` / `next-icon` у `CdsSlideGroup`; учесть, что дефолтные иконки изменены `arrow-left` / `arrow-right` → `prev` / `next` (новая система иконок `IconValue`). Поиск: `grep -rnE "CdsSlideGroup[^>]*(prepend-icon|append-icon)" src/`.
|
|
1603
|
+
|
|
1604
|
+
<!-- entry-meta: id=cdsslidegroup-arrow-icon-props-renamed; severity=renamed; component=CdsSlideGroup -->
|
|
1605
|
+
|
|
1606
|
+
### CdsSlideView
|
|
1607
|
+
|
|
1608
|
+
#### Иконки стрелок `prevIcon` / `nextIcon` переведены на новую систему иконок
|
|
1609
|
+
|
|
1610
|
+
> ⚠️ **BREAKING** — имена пропсов `prevIcon` / `nextIcon` не изменились, но дефолтные иконки заменены `chevron-left` / `chevron-right` → `prev` / `next`, а тип пропа теперь `IconValue` (без валидации по `allowedIcons`). Явно переданные старые имена (`chevron-left` / `chevron-right`) в новом наборе иконок не резолвятся.
|
|
1611
|
+
|
|
1612
|
+
**Было (CDS 3):**
|
|
1613
|
+
|
|
1614
|
+
```html
|
|
1615
|
+
<!-- CDS 3 — дефолты chevron-left / chevron-right, имя валидируется по allowedIcons -->
|
|
1616
|
+
<CdsSlideView prev-icon="chevron-left" next-icon="chevron-right">
|
|
1617
|
+
<CdsSlideViewItem v-for="i in items" :key="i" :value="i">{{ i }}</CdsSlideViewItem>
|
|
1618
|
+
</CdsSlideView>
|
|
1619
|
+
```
|
|
1620
|
+
|
|
1621
|
+
**Стало (CDS 4):**
|
|
1622
|
+
|
|
1623
|
+
```html
|
|
1624
|
+
<!-- CDS 4 — дефолты prev / next, тип IconValue -->
|
|
1625
|
+
<CdsSlideView prev-icon="prev" next-icon="next">
|
|
1626
|
+
<CdsSlideViewItem v-for="i in items" :key="i" :value="i">{{ i }}</CdsSlideViewItem>
|
|
1627
|
+
</CdsSlideView>
|
|
1628
|
+
```
|
|
1629
|
+
|
|
1630
|
+
**Действие:** если полагались на дефолтные стрелки — проверьте вид (иконки изменены `chevron-left` / `chevron-right` → `prev` / `next`). Явные `prev-icon="chevron-left"` / `next-icon="chevron-right"` замените на имена из активного iconpack (или на `prev` / `next`). Поиск: `grep -rnE "CdsSlideView[^>]*(prev-icon|next-icon)" src/`.
|
|
1631
|
+
|
|
1632
|
+
<!-- entry-meta: id=cdsslideview-arrow-icons-iconvalue; severity=breaking; component=CdsSlideView -->
|
|
1633
|
+
|
|
1634
|
+
### CdsStatus
|
|
1635
|
+
|
|
1636
|
+
#### Значение `status="error"` переименовано в `status="danger"`
|
|
1637
|
+
|
|
1638
|
+
> 🔁 **RENAMED** — набор статусов выровнен с токенами `--cds-color-status-*`: вместо `error` теперь `danger`.
|
|
1639
|
+
|
|
1640
|
+
**Было (CDS 3):**
|
|
1641
|
+
|
|
1642
|
+
```html
|
|
1643
|
+
<!-- CDS 3 — status: 'info' | 'success' | 'warning' | 'error' | 'progress' -->
|
|
1644
|
+
<cds-status status="error" text="Ошибка" />
|
|
1645
|
+
```
|
|
1646
|
+
|
|
1647
|
+
**Стало (CDS 4):**
|
|
1648
|
+
|
|
1649
|
+
```html
|
|
1650
|
+
<!-- CDS 4 — status: 'info' | 'success' | 'warning' | 'danger' | 'progress' -->
|
|
1651
|
+
<CdsStatus status="danger" text="Ошибка" />
|
|
1652
|
+
```
|
|
1653
|
+
|
|
1654
|
+
**Действие:** заменить `status="error"` на `status="danger"`. Поиск: `grep -rnE "cds-status[^>]*status=\"error\"|CdsStatus[^>]*status=\"error\"" src/`.
|
|
1655
|
+
|
|
1656
|
+
<!-- entry-meta: id=cdsstatus-status-error-to-danger; severity=renamed; component=CdsStatus -->
|
|
1657
|
+
|
|
1658
|
+
#### Булев проп `icon` заменён на `variant`
|
|
1659
|
+
|
|
1660
|
+
> ⚠️ **BREAKING** — вместо булева флага режима отображения теперь проп `variant: 'fill' | 'text'` (по умолчанию `fill`).
|
|
1661
|
+
|
|
1662
|
+
**Было (CDS 3):**
|
|
1663
|
+
|
|
1664
|
+
```html
|
|
1665
|
+
<!-- CDS 3 — icon переключал режим: без него заливка-бейдж, с ним — иконка + нейтральный текст -->
|
|
1666
|
+
<cds-status status="success" text="Готово" />
|
|
1667
|
+
<cds-status icon status="success" text="Готово" />
|
|
1668
|
+
```
|
|
1669
|
+
|
|
1670
|
+
**Стало (CDS 4):**
|
|
1671
|
+
|
|
1672
|
+
```html
|
|
1673
|
+
<!-- CDS 4 — режим задаётся через variant -->
|
|
1674
|
+
<CdsStatus status="success" text="Готово" />
|
|
1675
|
+
<CdsStatus variant="text" status="success" text="Готово" />
|
|
1676
|
+
```
|
|
1677
|
+
|
|
1678
|
+
**Действие:** заменить булев `icon` на `variant="text"`. Заливку-бейдж (когда `icon` отсутствовал) менять не нужно — это дефолт `variant="fill"`. Поиск: `grep -rnE "cds-status[^>]*\bicon\b|CdsStatus[^>]*\bicon\b" src/`.
|
|
1679
|
+
|
|
1680
|
+
<!-- entry-meta: id=cdsstatus-icon-to-variant; severity=breaking; component=CdsStatus -->
|
|
1681
|
+
|
|
1682
|
+
### CdsSteps
|
|
1683
|
+
|
|
1684
|
+
#### Дефолт пропса `interactive` изменён с `true` на `false`
|
|
1685
|
+
|
|
1686
|
+
> ⚠️ **BREAKING** — по умолчанию шаги больше не кликабельны. В CDS 3 переход по клику работал из коробки, а отключался через `:interactive="false"`.
|
|
1687
|
+
|
|
1688
|
+
**Было (CDS 3):**
|
|
1689
|
+
|
|
1690
|
+
```html
|
|
1691
|
+
<!-- CDS 3 — interactive по умолчанию true: шаги кликабельны из коробки -->
|
|
1692
|
+
<cds-steps v-model="step">
|
|
1693
|
+
<cds-steps-item title="ФИО" text="Имя и фамилия" />
|
|
1694
|
+
<cds-steps-item title="Подтверждение" text="Код из смс" />
|
|
1695
|
+
</cds-steps>
|
|
1696
|
+
```
|
|
1697
|
+
|
|
1698
|
+
**Стало (CDS 4):**
|
|
1699
|
+
|
|
1700
|
+
```html
|
|
1701
|
+
<!-- CDS 4 — interactive по умолчанию false: для кликов укажите проп явно -->
|
|
1702
|
+
<CdsSteps v-model="step" interactive>
|
|
1703
|
+
<CdsStepsItem title="ФИО" text="Имя и фамилия" />
|
|
1704
|
+
<CdsStepsItem title="Подтверждение" text="Код из смс" />
|
|
1705
|
+
</CdsSteps>
|
|
1706
|
+
```
|
|
1707
|
+
|
|
1708
|
+
**Действие:** проверить все использования `CdsSteps`: где нужен переход по клику — добавить проп `interactive`; явные `:interactive="false"` можно удалить (теперь это поведение по умолчанию). Поиск: `grep -rnE "cds-steps|CdsSteps" src/`.
|
|
1709
|
+
|
|
1710
|
+
<!-- entry-meta: id=cdssteps-interactive-default-false; severity=breaking; component=CdsSteps -->
|
|
1711
|
+
|
|
1712
|
+
#### Проп `items`, контентная часть и кнопки навигации
|
|
1713
|
+
|
|
1714
|
+
> ✨ **NEW** — помимо шапки появились контентная часть (`CdsStepsView` / `CdsStepsViewItem`) и кнопки «Назад»/«Далее» (`CdsStepsActions`). Прежний способ с default-слотом и `CdsStepsItem` продолжает работать без изменений.
|
|
1715
|
+
|
|
1716
|
+
**Было (CDS 3):**
|
|
1717
|
+
|
|
1718
|
+
```html
|
|
1719
|
+
<!-- CDS 3 — компонент рендерил только шапку шагов; контент и навигацию собирали вручную -->
|
|
1720
|
+
<cds-steps v-model="step">
|
|
1721
|
+
<cds-steps-item title="ФИО" text="Имя и фамилия" />
|
|
1722
|
+
<cds-steps-item title="Подтверждение" text="Код из смс" />
|
|
1723
|
+
</cds-steps>
|
|
1724
|
+
<div v-if="step === 0">Контент первого шага</div>
|
|
1725
|
+
<button @click="step++">Далее</button>
|
|
1726
|
+
```
|
|
1727
|
+
|
|
1728
|
+
**Стало (CDS 4):**
|
|
1729
|
+
|
|
1730
|
+
```html
|
|
1731
|
+
<!-- CDS 4 — при передаче items рендерятся шапка, контент шагов и кнопки навигации -->
|
|
1732
|
+
<CdsSteps
|
|
1733
|
+
v-model="step"
|
|
1734
|
+
:items="[
|
|
1735
|
+
{ title: 'ФИО', text: 'Имя и фамилия' },
|
|
1736
|
+
{ title: 'Подтверждение', text: 'Код из смс' }
|
|
1737
|
+
]"
|
|
1738
|
+
>
|
|
1739
|
+
<template #item.1>Контент первого шага</template>
|
|
1740
|
+
<template #item.2>Контент второго шага</template>
|
|
1741
|
+
</CdsSteps>
|
|
1742
|
+
```
|
|
1743
|
+
|
|
1744
|
+
**Действие:** миграция не требуется — использование с default-слотом совместимо (без `items` контентная часть и кнопки не рендерятся). Новые возможности: пропсы `items` / `itemTitle` / `itemText` / `itemValue` / `itemProps`, `hideActions`, `prevText` / `nextText`, слоты `header-item(.{value})`, `item(.{value})`, `actions`, `prev`, `next`, методы `prev()` / `next()` через ref, субкомпоненты `CdsStepsView` / `CdsStepsViewItem` / `CdsStepsActions`.
|
|
1745
|
+
|
|
1746
|
+
<!-- entry-meta: id=cdssteps-items-view-actions; severity=new; component=CdsSteps -->
|
|
1747
|
+
|
|
1748
|
+
### CdsTabsV2
|
|
1749
|
+
|
|
1750
|
+
#### Компонент `CdsTabsV2` переименован в `CdsTabs`
|
|
1751
|
+
#### Компонент `CdsTabV2` переименован в `CdsTab`
|
|
1752
|
+
|
|
1753
|
+
> 🔁 **RENAMED** — публичный API (пропсы, слоты, события) не изменился, переименовано только имя компонента и путь импорта/тега.
|
|
1754
|
+
|
|
1755
|
+
**Было (CDS 3):**
|
|
1756
|
+
|
|
1757
|
+
```html
|
|
1758
|
+
<!-- CDS 3 -->
|
|
1759
|
+
<script setup lang="ts">
|
|
1760
|
+
import { CdsTabsV2, CdsTabV2 } from '@central-design-system/components';
|
|
1761
|
+
</script>
|
|
1762
|
+
|
|
1763
|
+
<template>
|
|
1764
|
+
<CdsTabsV2>
|
|
1765
|
+
<CdsTabV2>Элемент 1</CdsTabV2>
|
|
1766
|
+
<CdsTabV2>Элемент 2</CdsTabV2>
|
|
1767
|
+
<CdsTabV2>Элемент 3</CdsTabV2>
|
|
1768
|
+
</CdsTabsV2>
|
|
1769
|
+
</template>
|
|
1770
|
+
```
|
|
1771
|
+
|
|
1772
|
+
**Стало (CDS 4):**
|
|
1773
|
+
|
|
1774
|
+
```html
|
|
1775
|
+
<!-- CDS 4 -->
|
|
1776
|
+
<script setup lang="ts">
|
|
1777
|
+
import { CdsTabs, CdsTab } from '@central-design-system/components';
|
|
1778
|
+
</script>
|
|
1779
|
+
|
|
1780
|
+
<template>
|
|
1781
|
+
<CdsTabs>
|
|
1782
|
+
<CdsTab>Элемент 1</CdsTab>
|
|
1783
|
+
<CdsTab>Элемент 2</CdsTab>
|
|
1784
|
+
<CdsTab>Элемент 3</CdsTab>
|
|
1785
|
+
</CdsTabs>
|
|
1786
|
+
</template>
|
|
1787
|
+
```
|
|
1788
|
+
|
|
1789
|
+
**Действие:** заменить импорт и тег `CdsTabV2` → `CdsTab` (включая kebab-case вариант `cds-tabs-v2` → `cds-tabs`). Поиск использований: `grep -rnE "CdsTabsV2|cds-tabs-v2" src/`.
|
|
1790
|
+
**Действие:** заменить импорт и тег `CdsTabV2` → `CdsTab` (включая kebab-case вариант `cds-tab-v2` → `cds-tab`). Поиск использований: `grep -rnE "CdsTabV2|cds-tab-v2" src/`.
|
|
1791
|
+
|
|
1792
|
+
<!-- entry-meta: id=cdstabs-renamed-from-cdstabsv2; severity=renamed; component=CdsTabs -->
|
|
1793
|
+
|
|
1794
|
+
#### Пропсы иконок стрелок прокрутки переименованы
|
|
1795
|
+
|
|
1796
|
+
> 🔁 **RENAMED** — иконки кнопок прокрутки табов задаются через `prevIcon` / `nextIcon` вместо `prependIcon` / `appendIcon`.
|
|
1797
|
+
|
|
1798
|
+
**Было (CDS 3):**
|
|
1799
|
+
|
|
1800
|
+
```html
|
|
1801
|
+
<!-- CDS 3 -->
|
|
1802
|
+
<CdsTabsV2 prepend-icon="chevron-left" append-icon="chevron-right" :items="items" />
|
|
1803
|
+
```
|
|
1804
|
+
|
|
1805
|
+
**Стало (CDS 4):**
|
|
1806
|
+
|
|
1807
|
+
```html
|
|
1808
|
+
<!-- CDS 4 -->
|
|
1809
|
+
<CdsTabs prev-icon="chevron-left" next-icon="chevron-right" :items="items" />
|
|
1810
|
+
```
|
|
1811
|
+
|
|
1812
|
+
**Действие:** заменить `prepend-icon` / `append-icon` на `prev-icon` / `next-icon` у `CdsTabs`. Поиск: `grep -rnE "CdsTabs(V2)?[^>]*(prepend-icon|append-icon)" src/`.
|
|
1813
|
+
|
|
1814
|
+
<!-- entry-meta: id=cdstabs-arrow-icon-props-renamed; severity=renamed; component=CdsTabs -->
|
|
1815
|
+
|
|
1816
|
+
#### Новые пропсы (цвета, слайдер, режимы, слоты)
|
|
1817
|
+
|
|
1818
|
+
> ✨ **NEW** — помимо переименования компонент существенно расширен (миграция не требуется).
|
|
1819
|
+
|
|
1820
|
+
**Было (CDS 3):**
|
|
1821
|
+
|
|
1822
|
+
```html
|
|
1823
|
+
<!-- CDS 3 -->
|
|
1824
|
+
<CdsTabsV2 :items="items" grow />
|
|
1825
|
+
```
|
|
1826
|
+
|
|
1827
|
+
**Стало (CDS 4):**
|
|
1828
|
+
|
|
1829
|
+
```html
|
|
1830
|
+
<!-- CDS 4 -->
|
|
1831
|
+
<CdsTabs
|
|
1832
|
+
:items="items"
|
|
1833
|
+
color="surface-primary"
|
|
1834
|
+
slider-transition="grow"
|
|
1835
|
+
inset
|
|
1836
|
+
center-active
|
|
1837
|
+
>
|
|
1838
|
+
<template #view>…</template>
|
|
1839
|
+
</CdsTabs>
|
|
1840
|
+
```
|
|
1841
|
+
|
|
1842
|
+
**Действие:** миграция не требуется. Новые возможности: цветовые пропсы `color` / `baseColor` / `activeColor` / `textColor`, настройка слайдера `hideSlider` / `sliderTransition` / `sliderTransitionDuration`, режимы `inset` / `fixedTabs` / `centerActive` / `mobile`, слоты `tab` / `item` / `view`.
|
|
1843
|
+
|
|
1844
|
+
<!-- entry-meta: id=cdstabs-new-props; severity=new; component=CdsTabs -->
|
|
1845
|
+
|
|
1846
|
+
### CdsTag
|
|
1847
|
+
|
|
1848
|
+
#### Событие `remove` переименовано в `click:close`
|
|
1849
|
+
|
|
1850
|
+
> 🔁 **RENAMED** — кнопку удаления теперь эмитит унифицированное событие `click:close`; проп `removable` сохранён как псевдоним `closable`.
|
|
1851
|
+
|
|
1852
|
+
**Было (CDS 3):**
|
|
1853
|
+
|
|
1854
|
+
```html
|
|
1855
|
+
<!-- CDS 3 -->
|
|
1856
|
+
<CdsTag removable @remove="onRemove">Тег</CdsTag>
|
|
1857
|
+
```
|
|
1858
|
+
|
|
1859
|
+
**Стало (CDS 4):**
|
|
1860
|
+
|
|
1861
|
+
```html
|
|
1862
|
+
<!-- CDS 4 — removable = closable; событие переименовано -->
|
|
1863
|
+
<CdsTag closable @click:close="onRemove">Тег</CdsTag>
|
|
1864
|
+
```
|
|
1865
|
+
|
|
1866
|
+
**Действие:** заменить `@remove` на `@click:close`. Поиск: `grep -rnE "(cds-tag|CdsTag)[^>]*@remove" src/`. Дополнительно тегом теперь можно управлять через `v-model` (проп `modelValue`, при `false` тег скрыт).
|
|
1867
|
+
|
|
1868
|
+
<!-- entry-meta: id=cdstag-remove-to-clickclose; severity=renamed; component=CdsTag -->
|
|
1869
|
+
|
|
1870
|
+
#### Удалён слот `text`
|
|
1871
|
+
|
|
1872
|
+
> ⚠️ **BREAKING** — отдельного слота `text` больше нет; текст задаётся пропсами `text` / `content` или слотом по умолчанию.
|
|
1873
|
+
|
|
1874
|
+
**Было (CDS 3):**
|
|
1875
|
+
|
|
1876
|
+
```html
|
|
1877
|
+
<!-- CDS 3 -->
|
|
1878
|
+
<CdsTag>
|
|
1879
|
+
<template #text>Метка</template>
|
|
1880
|
+
</CdsTag>
|
|
1881
|
+
```
|
|
1882
|
+
|
|
1883
|
+
**Стало (CDS 4):**
|
|
1884
|
+
|
|
1885
|
+
```html
|
|
1886
|
+
<!-- CDS 4 — проп text/content или слот по умолчанию -->
|
|
1887
|
+
<CdsTag text="Метка" />
|
|
1888
|
+
<CdsTag>Метка</CdsTag>
|
|
1889
|
+
```
|
|
1890
|
+
|
|
1891
|
+
**Действие:** заменить `<template #text>` на проп `text` (или `content`), либо на слот по умолчанию. Поиск: `grep -rn "cds-tag" src/ | grep "#text"`.
|
|
1892
|
+
|
|
1893
|
+
<!-- entry-meta: id=cdstag-text-slot-removed; severity=breaking; component=CdsTag -->
|
|
1894
|
+
|
|
1895
|
+
#### Иконки `prependIcon` / `appendIcon` переведены на новую систему иконок
|
|
1896
|
+
|
|
1897
|
+
> ⚠️ **BREAKING** — вместо строкового имени с валидацией по `allowedIcons` пропсы принимают `IconValue` и резолвятся через iconpacks (см. раздел [«Иконки»](#2-иконки)).
|
|
1898
|
+
|
|
1899
|
+
**Было (CDS 3):**
|
|
1900
|
+
|
|
1901
|
+
```html
|
|
1902
|
+
<!-- CDS 3 — имя иконки валидировалось по allowedIcons -->
|
|
1903
|
+
<CdsTag prepend-icon="bookmark" text="Метка" />
|
|
1904
|
+
```
|
|
1905
|
+
|
|
1906
|
+
**Стало (CDS 4):**
|
|
1907
|
+
|
|
1908
|
+
```html
|
|
1909
|
+
<!-- CDS 4 — IconValue: имя из iconpack, компонент или булево -->
|
|
1910
|
+
<CdsTag prepend-icon="bookmark" text="Метка" />
|
|
1911
|
+
```
|
|
1912
|
+
|
|
1913
|
+
**Действие:** убедиться, что используемые имена иконок есть в подключённом iconpack (см. раздел «Иконки»). Синтаксис использования не меняется, но резолвинг и валидация теперь идут через новую систему иконок.
|
|
1914
|
+
|
|
1915
|
+
<!-- entry-meta: id=cdstag-icons-iconvalue; severity=breaking; component=CdsTag -->
|
|
1916
|
+
|
|
1917
|
+
### CdsTextArea
|
|
1918
|
+
|
|
1919
|
+
#### Удалён пропс `limit`
|
|
1920
|
+
|
|
1921
|
+
> ⚠️ **BREAKING** — в CDS 3 `limit` задавал одновременно ограничение ввода (`maxlength`) и максимум счётчика. В CDS 4 он удалён: ограничение ввода — нативный атрибут `maxlength`, счётчик — проп `counter` / `counterValue`.
|
|
1922
|
+
|
|
1923
|
+
**Было (CDS 3):**
|
|
1924
|
+
|
|
1925
|
+
```html
|
|
1926
|
+
<!-- CDS 3 — limit = maxlength + максимум счётчика -->
|
|
1927
|
+
<cds-text-area v-model="text" :limit="200" counter />
|
|
1928
|
+
```
|
|
1929
|
+
|
|
1930
|
+
**Стало (CDS 4):**
|
|
1931
|
+
|
|
1932
|
+
```html
|
|
1933
|
+
<!-- CDS 4 — maxlength ограничивает ввод, counter задаёт счётчик и его максимум -->
|
|
1934
|
+
<CdsTextArea v-model="text" maxlength="200" :counter="200" />
|
|
1935
|
+
```
|
|
1936
|
+
|
|
1937
|
+
**Действие:** убрать `:limit="N"`; ограничение ввода задать нативным `maxlength="N"`, а счётчик — пропсом `counter` (`boolean | number | string`; число/строка задаёт максимум) или `counterValue`. Поиск: `grep -rnE "cds-text-area[^>]*limit|CdsTextArea[^>]*limit" src/`.
|
|
1938
|
+
|
|
1939
|
+
<!-- entry-meta: id=cdstextarea-limit-removed; severity=breaking; component=CdsTextArea -->
|
|
1940
|
+
|
|
1941
|
+
#### Изменён exposed-API
|
|
1942
|
+
|
|
1943
|
+
> ⚠️ **BREAKING** — вместо `id` / `isFocused` / `fieldRef` / `textareaRef` / `validationRef` / `sizerRef` / `focus` / `blur` компонент отдаёт унифицированный validation-API и `controlRef` (как у `CdsInput`).
|
|
1944
|
+
|
|
1945
|
+
**Было (CDS 3):**
|
|
1946
|
+
|
|
1947
|
+
```ts
|
|
1948
|
+
// CDS 3 — exposed: id, isFocused, fieldRef, textareaRef, validationRef, sizerRef, focus, blur
|
|
1949
|
+
const area = ref();
|
|
1950
|
+
area.value.textareaRef; // <textarea>
|
|
1951
|
+
area.value.validationRef; // инстанс CdsInput
|
|
1952
|
+
area.value.focus();
|
|
1953
|
+
```
|
|
1954
|
+
|
|
1955
|
+
**Стало (CDS 4):**
|
|
1956
|
+
|
|
1957
|
+
```ts
|
|
1958
|
+
// CDS 4 — методы и флаги валидации + controlRef
|
|
1959
|
+
const area = ref();
|
|
1960
|
+
area.value.validate(); // запуск валидации
|
|
1961
|
+
area.value.reset(); // сброс значения
|
|
1962
|
+
area.value.resetValidation(); // сброс ошибок
|
|
1963
|
+
area.value.isValid; // isDirty / isDisabled / isReadonly / isPure / isValidating
|
|
1964
|
+
area.value.controlRef; // DOM-элемент контрола (<textarea>)
|
|
1965
|
+
```
|
|
1966
|
+
|
|
1967
|
+
**Действие:** заменить обращения к `ref.textareaRef` / `ref.validationRef` / `ref.fieldRef` / `ref.sizerRef` / `ref.focus()` / `ref.blur()` на validation-API (`validate` / `reset` / `resetValidation`, флаги `isValid` / `isDirty` / `isValidating` / `isDisabled` / `isReadonly` / `isPure`) и `controlRef` для доступа к DOM-элементу поля.
|
|
1968
|
+
|
|
1969
|
+
<!-- entry-meta: id=cdstextarea-exposed-api-changed; severity=breaking; component=CdsTextArea -->
|
|
1970
|
+
|
|
1971
|
+
|
|
1972
|
+
### CdsTextInput
|
|
1973
|
+
|
|
1974
|
+
#### Удалён пропс `limit`
|
|
1975
|
+
|
|
1976
|
+
> ⚠️ **BREAKING** — в CDS 3 `limit` задавал одновременно ограничение ввода (`maxlength`) и максимум счётчика. В CDS 4 он удалён: ограничение ввода — нативный атрибут `maxlength`, счётчик — проп `counter` / `counterValue`.
|
|
1977
|
+
|
|
1978
|
+
**Было (CDS 3):**
|
|
1979
|
+
|
|
1980
|
+
```html
|
|
1981
|
+
<!-- CDS 3 — limit = maxlength + максимум счётчика -->
|
|
1982
|
+
<cds-text-input v-model="text" :limit="60" counter />
|
|
1983
|
+
```
|
|
1984
|
+
|
|
1985
|
+
**Стало (CDS 4):**
|
|
1986
|
+
|
|
1987
|
+
```html
|
|
1988
|
+
<!-- CDS 4 — maxlength ограничивает ввод, counter задаёт счётчик и его максимум -->
|
|
1989
|
+
<CdsTextInput v-model="text" maxlength="60" :counter="60" />
|
|
1990
|
+
```
|
|
1991
|
+
|
|
1992
|
+
**Действие:** убрать `:limit="N"`; ограничение ввода задать нативным `maxlength="N"`, а счётчик — пропсом `counter` (`boolean | number | string`; число/строка задаёт максимум) или `counterValue`. Поиск: `grep -rnE "cds-text-input[^>]*limit|CdsTextInput[^>]*limit" src/`.
|
|
1993
|
+
|
|
1994
|
+
<!-- entry-meta: id=cdstextinput-limit-removed; severity=breaking; component=CdsTextInput -->
|
|
1995
|
+
|
|
1996
|
+
#### Удалён пропс `persistentMessages`, а `messages` видны всегда
|
|
1997
|
+
|
|
1998
|
+
> ⚠️ **BREAKING** — роли разошлись. В CDS 3 `messages` показывались только в фокусе, а `persistentMessages` их закреплял. В CDS 4 `messages` видны **всегда**, поэтому `persistentMessages` удалён за ненадобностью, а «только в фокусе» — это отдельный пропс `hint` (с `persistentHint`, если подсказку нужно закрепить).
|
|
1999
|
+
|
|
2000
|
+
**Было (CDS 3):**
|
|
2001
|
+
|
|
2002
|
+
```html
|
|
2003
|
+
<!-- CDS 3 -->
|
|
2004
|
+
<cds-text-input v-model="text" :messages="hint" persistent-messages />
|
|
2005
|
+
<cds-text-input v-model="text" :messages="hint" />
|
|
2006
|
+
```
|
|
2007
|
+
|
|
2008
|
+
**Стало (CDS 4):**
|
|
2009
|
+
|
|
2010
|
+
```html
|
|
2011
|
+
<!-- CDS 4 — messages видны всегда; показ по фокусу даёт hint -->
|
|
2012
|
+
<CdsTextInput v-model="text" :messages="hint" />
|
|
2013
|
+
<CdsTextInput v-model="text" :hint="hint" />
|
|
2014
|
+
```
|
|
2015
|
+
|
|
2016
|
+
**Действие:** там, где стоял `persistent-messages`, достаточно удалить пропс — `messages` и так видны всегда, переносить текст в `hint` не нужно. Там, где `messages` использовались **без** него, перенести текст в `hint`: иначе подсказка, которая раньше появлялась по фокусу, после апгрейда будет висеть постоянно — код не сломается, но поле станет выглядеть иначе. Поиск: `grep -rnE "persistent-messages|persistentMessages|:messages|messages=" src/`. Начиная с CDS 3.11.0 оба случая предупреждают в консоли (`[CDS UPGRADE]`), а `hint` / `persistent-hint` там уже работают — переписать можно до апгрейда.
|
|
2017
|
+
|
|
2018
|
+
<!-- entry-meta: id=cdstextinput-persistentmessages-removed; severity=breaking; component=CdsTextInput -->
|
|
2019
|
+
|
|
2020
|
+
#### Изменён exposed-API
|
|
2021
|
+
|
|
2022
|
+
> ⚠️ **BREAKING** — вместо `fieldRef` / `inputRef` / `validationRef` / `focus` / `blur` компонент отдаёт унифицированный validation-API и `controlRef` (как у `CdsInput`).
|
|
2023
|
+
|
|
2024
|
+
**Было (CDS 3):**
|
|
2025
|
+
|
|
2026
|
+
```ts
|
|
2027
|
+
// CDS 3 — exposed: fieldRef, inputRef, validationRef, focus, blur
|
|
2028
|
+
const input = ref();
|
|
2029
|
+
input.value.inputRef; // <input>
|
|
2030
|
+
input.value.validationRef; // инстанс CdsInput
|
|
2031
|
+
input.value.focus();
|
|
2032
|
+
```
|
|
2033
|
+
|
|
2034
|
+
**Стало (CDS 4):**
|
|
2035
|
+
|
|
2036
|
+
```ts
|
|
2037
|
+
// CDS 4 — методы и флаги валидации + controlRef
|
|
2038
|
+
const input = ref();
|
|
2039
|
+
input.value.validate(); // запуск валидации
|
|
2040
|
+
input.value.reset(); // сброс значения
|
|
2041
|
+
input.value.resetValidation(); // сброс ошибок
|
|
2042
|
+
input.value.isValid; // isDirty / isDisabled / isReadonly / isPure / isValidating
|
|
2043
|
+
input.value.controlRef; // DOM-элемент контрола (<input>)
|
|
2044
|
+
```
|
|
2045
|
+
|
|
2046
|
+
**Действие:** заменить обращения к `ref.inputRef` / `ref.fieldRef` / `ref.validationRef` / `ref.focus()` / `ref.blur()` на validation-API (`validate` / `reset` / `resetValidation`, флаги `isValid` / `isDirty` / `isValidating` / `isDisabled` / `isReadonly` / `isPure`) и `controlRef` для доступа к DOM-элементу поля.
|
|
2047
|
+
|
|
2048
|
+
<!-- entry-meta: id=cdstextinput-exposed-api-changed; severity=breaking; component=CdsTextInput -->
|
|
2049
|
+
|
|
2050
|
+
|
|
2051
|
+
### CdsTooltip
|
|
2052
|
+
|
|
2053
|
+
#### Наведение на контент подсказки теперь закрывает её — интерактивность через проп `interactive`
|
|
2054
|
+
|
|
2055
|
+
> ⚠️ **BREAKING** — по умолчанию контент подсказки получил `pointer-events: none`: при переносе курсора с активатора на контент подсказка закрывается. В CDS 3 подсказка оставалась открытой, и внутри можно было кликать ссылки и кнопки без дополнительных пропсов.
|
|
2056
|
+
|
|
2057
|
+
**Было (CDS 3):**
|
|
2058
|
+
|
|
2059
|
+
```html
|
|
2060
|
+
<!-- CDS 3 — контент подсказки был интерактивен по умолчанию -->
|
|
2061
|
+
<cds-tooltip v-model="active" location="end" open-on-click :open-on-hover="false">
|
|
2062
|
+
<template #activator="{ props }">
|
|
2063
|
+
<cds-button appearance="tertiary" icon="comment" v-bind="props" @click="active = true" />
|
|
2064
|
+
</template>
|
|
2065
|
+
<p>Текст подсказки</p>
|
|
2066
|
+
<cds-link href="/docs" text="Узнать больше" />
|
|
2067
|
+
</cds-tooltip>
|
|
2068
|
+
```
|
|
2069
|
+
|
|
2070
|
+
**Стало (CDS 4):**
|
|
2071
|
+
|
|
2072
|
+
```html
|
|
2073
|
+
<!-- CDS 4 — для кликабельного контента нужен проп interactive -->
|
|
2074
|
+
<CdsTooltip v-model="active" interactive location="end" open-on-click :open-on-hover="false">
|
|
2075
|
+
<template #activator="{ props }">
|
|
2076
|
+
<CdsButton appearance="tertiary" icon="comment" v-bind="props" @click="active = true" />
|
|
2077
|
+
</template>
|
|
2078
|
+
<p>Текст подсказки</p>
|
|
2079
|
+
<a href="/docs">Узнать больше</a>
|
|
2080
|
+
</CdsTooltip>
|
|
2081
|
+
```
|
|
2082
|
+
|
|
2083
|
+
**Действие:** найти тултипы с интерактивным контентом (ссылки, кнопки, выделяемый текст) и добавить им проп `interactive`. Простые текстовые подсказки менять не нужно. Поиск кандидатов: `grep -rnE "cds-tooltip|CdsTooltip" src/` — проверить те, у кого в default-слоте есть `<a>`, `CdsButton` и т. п.
|
|
2084
|
+
|
|
2085
|
+
<!-- entry-meta: id=cdstooltip-interactive-prop-required; severity=breaking; component=CdsTooltip -->
|
|
2086
|
+
|
|
2087
|
+
#### Изменён exposed-API
|
|
2088
|
+
|
|
2089
|
+
> ⚠️ **BREAKING** — вместо `id` / `overlay` компонент отдаёт элементы и методы оверлея напрямую.
|
|
2090
|
+
|
|
2091
|
+
**Было (CDS 3):**
|
|
2092
|
+
|
|
2093
|
+
```ts
|
|
2094
|
+
// CDS 3
|
|
2095
|
+
const tip = ref();
|
|
2096
|
+
tip.value.overlay; // инстанс CdsOverlay
|
|
2097
|
+
tip.value.id; // id подсказки
|
|
2098
|
+
```
|
|
2099
|
+
|
|
2100
|
+
**Стало (CDS 4):**
|
|
2101
|
+
|
|
2102
|
+
```ts
|
|
2103
|
+
// CDS 4
|
|
2104
|
+
const tip = ref();
|
|
2105
|
+
tip.value.contentEl; // DOM-элемент контента
|
|
2106
|
+
tip.value.activatorEl; // DOM-элемент активатора
|
|
2107
|
+
tip.value.updateLocation?.(e); // пересчёт позиции
|
|
2108
|
+
```
|
|
2109
|
+
|
|
2110
|
+
**Действие:** заменить обращения к `ref.overlay` / `ref.id` на новые exposed-поля (`contentEl`, `activatorEl`, `rootEl`, `targetEl`, `updateLocation`, `animateClick`).
|
|
2111
|
+
|
|
2112
|
+
<!-- entry-meta: id=cdstooltip-exposed-api-changed; severity=breaking; component=CdsTooltip -->
|
|
2113
|
+
|
|
2114
|
+
### CdsContainer
|
|
2115
|
+
|
|
2116
|
+
> ⚠️ **BREAKING** — Компонент `CdsContainer` (и `CdsContainerItem`) был помечен `deprecated` ещё в CDS 3 и удалён в CDS 4. Способ миграции зависит от того, как контейнер использовался: обычный/вложенный → нативный `<div>`; выбираемый/множественный → `CdsCard` + `CdsCardGroup`; кликабельный → `CdsCard` со ссылкой.
|
|
2117
|
+
|
|
2118
|
+
#### Обычный и вложенный контейнер → нативный `<div>`
|
|
2119
|
+
|
|
2120
|
+
**Было (CDS 3):**
|
|
2121
|
+
|
|
2122
|
+
```html
|
|
2123
|
+
<!-- CDS 3 -->
|
|
2124
|
+
<CdsContainer>
|
|
2125
|
+
<CdsContainerItem>
|
|
2126
|
+
<div class="h6 cds-mb-xs">Заголовок контейнера</div>
|
|
2127
|
+
<p>Используется в качестве элемента, где вся область контейнера — это интерактивное состояние.</p>
|
|
2128
|
+
</CdsContainerItem>
|
|
2129
|
+
</CdsContainer>
|
|
2130
|
+
```
|
|
2131
|
+
|
|
2132
|
+
**Стало (CDS 4):**
|
|
2133
|
+
|
|
2134
|
+
```html
|
|
2135
|
+
<!-- CDS 4 — обычный div + утилиты Tailwind и токены CDS -->
|
|
2136
|
+
<div class="rounded-200 bg-surface-primary p-4">
|
|
2137
|
+
<div class="h6 mb-1">Заголовок контейнера</div>
|
|
2138
|
+
<p>Используется в качестве элемента, где вся область контейнера — это интерактивное состояние.</p>
|
|
2139
|
+
</div>
|
|
2140
|
+
```
|
|
2141
|
+
|
|
2142
|
+
**Действие:** заменить `CdsContainer` / `<div class="cds-container-default …">` обычным `<div>` с утилитарными классами. В CDS 3 этот же совет давался прямо в сторибуке (`CdsContainer/stories/features.stories.ts`, story «Обычный контейнер»/«Вложенные контейнеры»), а в CDS 4 он тем более уместен — доступны Tailwind v4 и design-токены как утилиты (`bg-surface-*`, `rounded-200`, см. раздел «Интеграция с Tailwind CSS v4»). Поиск: `grep -rnE "CdsContainer|cds-container|cds-container-default" src/`.
|
|
2143
|
+
|
|
2144
|
+
#### Выбираемый и множественный контейнер → `CdsCard` + `CdsCardGroup`
|
|
2145
|
+
|
|
2146
|
+
**Было (CDS 3):**
|
|
2147
|
+
|
|
2148
|
+
```html
|
|
2149
|
+
<!-- CDS 3 — выбираемые контейнеры через CdsContainer + CdsContainerItem -->
|
|
2150
|
+
<script setup lang="ts">
|
|
2151
|
+
import { CdsContainer, CdsContainerItem } from '@central-design-system/components';
|
|
2152
|
+
import { ref } from 'vue';
|
|
2153
|
+
|
|
2154
|
+
const model = ref(1); // множественный: ref([2]) + проп multiple
|
|
2155
|
+
</script>
|
|
2156
|
+
|
|
2157
|
+
<template>
|
|
2158
|
+
<cds-container v-model="model" required>
|
|
2159
|
+
<cds-container-item :value="1">
|
|
2160
|
+
<h6>Заголовок контейнера</h6>
|
|
2161
|
+
<p>Используется в качестве элемента, где вся область контейнера — это интерактивное состояние.</p>
|
|
2162
|
+
</cds-container-item>
|
|
2163
|
+
<cds-container-item :value="2">…</cds-container-item>
|
|
2164
|
+
<cds-container-item :value="3">…</cds-container-item>
|
|
2165
|
+
</cds-container>
|
|
2166
|
+
</template>
|
|
2167
|
+
```
|
|
2168
|
+
|
|
2169
|
+
**Стало (CDS 4):**
|
|
2170
|
+
|
|
2171
|
+
```html
|
|
2172
|
+
<!-- CDS 4 — та же логика выбора на CdsCardGroup + CdsCard -->
|
|
2173
|
+
<script setup lang="ts">
|
|
2174
|
+
import { CdsCard, CdsCardGroup } from '@central-design-system/components';
|
|
2175
|
+
import { ref } from 'vue';
|
|
2176
|
+
|
|
2177
|
+
const selected = ref(1); // множественный: ref([2]) + проп multiple на CdsCardGroup
|
|
2178
|
+
const items = [1, 2, 3];
|
|
2179
|
+
</script>
|
|
2180
|
+
|
|
2181
|
+
<template>
|
|
2182
|
+
<CdsCardGroup v-model="selected" required class="gap-4">
|
|
2183
|
+
<CdsCard
|
|
2184
|
+
v-for="item in items"
|
|
2185
|
+
:key="item"
|
|
2186
|
+
title="Заголовок карточки"
|
|
2187
|
+
text="Используется в качестве элемента, где вся область карточки — это интерактивное состояние."
|
|
2188
|
+
:value="item"
|
|
2189
|
+
/>
|
|
2190
|
+
</CdsCardGroup>
|
|
2191
|
+
</template>
|
|
2192
|
+
```
|
|
2193
|
+
|
|
2194
|
+
**Действие:** заменить `CdsContainer` c `v-model` на `CdsCardGroup`, а каждый `CdsContainerItem` — на `CdsCard` с `:value`. Пропсы `required` и `multiple` переносятся на `CdsCardGroup` без изменений (одиночный выбор — `v-model` числом, множественный — массивом + `multiple`). Готовые примеры: `packages/components/src/components/CdsCard/docs/CdsCard.stories.ts` — story `Group` (выбираемая группа) и `Multiselectable` (множественный выбор).
|
|
2195
|
+
|
|
2196
|
+
#### Кликабельный контейнер → `CdsCard` со ссылкой
|
|
2197
|
+
|
|
2198
|
+
**Было (CDS 3):**
|
|
2199
|
+
|
|
2200
|
+
```html
|
|
2201
|
+
<!-- CDS 3 — кликабельный контейнер-ссылка через обёртку CdsLink -->
|
|
2202
|
+
<cds-container>
|
|
2203
|
+
<cds-link href="#">
|
|
2204
|
+
<cds-container-item>
|
|
2205
|
+
<h6>Заголовок контейнера</h6>
|
|
2206
|
+
<p>Используется в качестве элемента, где вся область контейнера — это интерактивное состояние.</p>
|
|
2207
|
+
</cds-container-item>
|
|
2208
|
+
</cds-link>
|
|
2209
|
+
</cds-container>
|
|
2210
|
+
```
|
|
2211
|
+
|
|
2212
|
+
**Стало (CDS 4):**
|
|
2213
|
+
|
|
2214
|
+
```html
|
|
2215
|
+
<!-- CDS 4 — CdsCard сам становится ссылкой через href / to -->
|
|
2216
|
+
<CdsCard
|
|
2217
|
+
title="Заголовок карточки"
|
|
2218
|
+
text="Используется в качестве элемента, где вся область карточки — это интерактивное состояние."
|
|
2219
|
+
href="#"
|
|
2220
|
+
/>
|
|
2221
|
+
```
|
|
2222
|
+
|
|
2223
|
+
**Действие:** заменить связку `CdsContainer` + `CdsLink` + `CdsContainerItem` одним `CdsCard` со свойством `href` (внешняя ссылка) или `to` (vue-router). Пример: `CdsCard.stories.ts`, story `Link`.
|
|
2224
|
+
|
|
2225
|
+
<!-- entry-meta: id=cdscontainer-removed; severity=breaking; component=CdsContainer -->
|