@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,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
sourceHash: 5822739245a9c6095f09064c0b58dc326ac5c188
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Icons
|
|
6
|
+
|
|
7
|
+
CDS v4 supports many popular icon packs out of the box.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
You can pick one of the ready-made icon packs or plug in your own.
|
|
12
|
+
By default CDS uses the `cds` pack — it contains every icon the design system
|
|
13
|
+
components need.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { createCds } from '@central-design-system/components';
|
|
17
|
+
|
|
18
|
+
const cds = createCds({
|
|
19
|
+
icons: {
|
|
20
|
+
defaultSet: 'cds'
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
app.use(cds);
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
After that, use the icon in templates:
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<template>
|
|
31
|
+
<CdsIcon icon="add" />
|
|
32
|
+
</template>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Installing icon packs through UnoCSS
|
|
36
|
+
|
|
37
|
+
CDS integrates with [UnoCSS Preset Icons](https://unocss.dev/presets/icons), which
|
|
38
|
+
supports every icon pack available on [Iconify](https://icon-sets.iconify.design/).
|
|
39
|
+
|
|
40
|
+
Icons are tree-shaken, so only the icons you actually use end up in the final CSS
|
|
41
|
+
bundle. You can register several packs at once and freely mix icons from any of
|
|
42
|
+
them in your components.
|
|
43
|
+
|
|
44
|
+
### Icon packs
|
|
45
|
+
|
|
46
|
+
For the packs listed below, CDS ships iconsets with alias mappings — aliases for
|
|
47
|
+
the icons CDS components use (checkboxes, dropdowns, radio buttons and so on).
|
|
48
|
+
Pick one of them as the default pack (`defaultSet`); the alias mappings can be
|
|
49
|
+
overridden if needed.
|
|
50
|
+
Additional packs — without aliases — can be plugged in alongside and used freely
|
|
51
|
+
in your own templates.
|
|
52
|
+
|
|
53
|
+
| Icon library | Iconify package | Iconset import | Set name |
|
|
54
|
+
|------------------------------------------------------------------|------------------------|-----------------------------------------------------------|------------|
|
|
55
|
+
| [Remix Icon](https://remixicon.com/) | `@iconify-json/ri` | `@central-design-system/components/iconsets/remix` | `ri` |
|
|
56
|
+
| [Phosphor Icons](https://phosphoricons.com/) | `@iconify-json/ph` | `@central-design-system/components/iconsets/phosphor` | `phosphor` |
|
|
57
|
+
| [Lucide](https://lucide.dev/) | `@iconify-json/lucide` | `@central-design-system/components/iconsets/lucide` | `lucide` |
|
|
58
|
+
| [Carbon](https://carbondesignsystem.com/elements/icons/library/) | `@iconify-json/carbon` | `@central-design-system/components/iconsets/carbon` | `carbon` |
|
|
59
|
+
| [Material Design Icons](https://pictogrammers.com/library/mdi/) | `@iconify-json/mdi` | `@central-design-system/components/iconsets/mdi` | `mdi` |
|
|
60
|
+
|
|
61
|
+
Each module exports an object named after the pack: `icons` (the pack itself, for
|
|
62
|
+
`sets`) and `aliases` (the aliases, for `aliases`).
|
|
63
|
+
|
|
64
|
+
Install the pack you need from the table above:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm install @iconify-json/ri
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
> Icons from the table run through UnoCSS, so you have to install and configure
|
|
71
|
+
> UnoCSS first. See the [official documentation](https://unocss.dev/integrations/)
|
|
72
|
+
> for details.
|
|
73
|
+
|
|
74
|
+
Here is an example integration in a Vite project.
|
|
75
|
+
|
|
76
|
+
1. Install UnoCSS as a dev dependency (see the [Vite integration](https://unocss.dev/integrations/vite)):
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm install -D unocss
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
2. Add the UnoCSS plugin to your Vite config:
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
// vite.config.ts
|
|
86
|
+
import UnoCSS from 'unocss/vite'
|
|
87
|
+
import { defineConfig } from 'vite'
|
|
88
|
+
|
|
89
|
+
export default defineConfig({
|
|
90
|
+
plugins: [
|
|
91
|
+
UnoCSS(),
|
|
92
|
+
],
|
|
93
|
+
})
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
3. Create an **unocss.config.ts** file in the project root:
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
// unocss.config.ts
|
|
100
|
+
import { presetIcons, defineConfig } from 'unocss'
|
|
101
|
+
|
|
102
|
+
export default defineConfig({
|
|
103
|
+
presets: [
|
|
104
|
+
presetIcons({
|
|
105
|
+
processor(props) {
|
|
106
|
+
delete props.color
|
|
107
|
+
},
|
|
108
|
+
}),
|
|
109
|
+
],
|
|
110
|
+
})
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
> Nothing else needs to go into `unocss.config.ts`: CDS iconsets carry the
|
|
114
|
+
> `@unocss-include` marker, so UnoCSS scans them on its own — even though they
|
|
115
|
+
> live in `node_modules` as `.js` files, which are not part of
|
|
116
|
+
> `content.pipeline.include` by default.
|
|
117
|
+
|
|
118
|
+
4. Pass the icon pack to `createCds()`.
|
|
119
|
+
The example uses the **[Remix](https://remixicon.com/)** pack, but you can swap it
|
|
120
|
+
for any other pack from the table above:
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
import { createCds } from '@central-design-system/components';
|
|
124
|
+
import { remix } from '@central-design-system/components/iconsets/remix';
|
|
125
|
+
|
|
126
|
+
const cds = createCds({
|
|
127
|
+
icons: {
|
|
128
|
+
defaultSet: 'remix',
|
|
129
|
+
aliases: remix.aliases,
|
|
130
|
+
sets: {
|
|
131
|
+
remix: remix.icons,
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
app.use(cds);
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
> Import the pack through the `@central-design-system/components/iconsets/<pack>`
|
|
140
|
+
> subpath, not from the shared `iconsets` object. The shared object references all
|
|
141
|
+
> packs at once and is not tree-shaken — you would ship the JS and CSS of all five
|
|
142
|
+
> packs (≈370 KB instead of ≈70 KB for a single one).
|
|
143
|
+
|
|
144
|
+
After that, pick any icon from the pack — for example
|
|
145
|
+
[ri:settings-3-line](https://icon-sets.iconify.design/ri/?icon-filter=settings-3-line) —
|
|
146
|
+
and use it in templates:
|
|
147
|
+
|
|
148
|
+
```html
|
|
149
|
+
<CdsButton icon="i-ri:settings-3-line" />
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
> UnoCSS uses the `i-` prefix for icons. CDS uses the same prefix and already
|
|
153
|
+
> configures its aliases with it — don't change it, or the CDS aliases will stop
|
|
154
|
+
> working.
|
|
155
|
+
|
|
156
|
+
## Legacy icon pack from CDS v3
|
|
157
|
+
|
|
158
|
+
If you need the full icon pack from CDS v3, plug it in like this:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npm install @central-design-system/icons
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
import { icons } from '@central-design-system/icons';
|
|
166
|
+
|
|
167
|
+
const cds = createCds({
|
|
168
|
+
icons
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
app.use(cds);
|
|
172
|
+
```
|
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
---
|
|
2
|
+
sourceHash: 26c790bd53cd55729b9902cf5d1032b5c6457f6b
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Internationalization (i18n)
|
|
6
|
+
|
|
7
|
+
CDS components carry texts of their own: "No data available" in a select, the
|
|
8
|
+
table filter labels, the `aria-label` of a close button, the file counter. They
|
|
9
|
+
all go through the built-in localization layer, so you can translate them into
|
|
10
|
+
another language, override a single string for your product, or switch languages
|
|
11
|
+
on the fly — without rewriting components.
|
|
12
|
+
|
|
13
|
+
The library ships two dictionaries — Russian and English. `ru` is active by
|
|
14
|
+
default, so out of the box everything is in Russian.
|
|
15
|
+
|
|
16
|
+
## Setup
|
|
17
|
+
|
|
18
|
+
The locale is configured through the `locale` option of `createCds`. Switching to
|
|
19
|
+
the built-in English is a one-liner — you don't need to pass any dictionaries:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { createApp } from 'vue';
|
|
23
|
+
import '@central-design-system/components/styles';
|
|
24
|
+
import { createCds, components, directives } from '@central-design-system/components';
|
|
25
|
+
|
|
26
|
+
import App from './App.vue';
|
|
27
|
+
|
|
28
|
+
const cds = createCds({
|
|
29
|
+
components,
|
|
30
|
+
directives,
|
|
31
|
+
locale: {
|
|
32
|
+
locale: 'en'
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
createApp(App).use(cds);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Languages the library doesn't have are added as a dictionary in `messages`:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import de from './locales/cds-de';
|
|
43
|
+
|
|
44
|
+
createCds({
|
|
45
|
+
components,
|
|
46
|
+
directives,
|
|
47
|
+
locale: {
|
|
48
|
+
locale: 'de',
|
|
49
|
+
fallback: 'en',
|
|
50
|
+
messages: { de }
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
| Option | Type | Purpose |
|
|
56
|
+
| ------------------ | ------------------------- | ----------------------------------------------------------------------------- |
|
|
57
|
+
| `locale` | `string` | Active language; `ru` (default) and `en` are available out of the box |
|
|
58
|
+
| `fallback` | `string` | Language a string is taken from when the active one lacks it; `ru` by default |
|
|
59
|
+
| `messages` | `LocaleMessages` | Dictionaries of extra languages; a same-named built-in dictionary is replaced entirely |
|
|
60
|
+
| `decimalSeparator` | `string` | Decimal separator; derived from the active locale by default |
|
|
61
|
+
| `rtl` | `Record<string, boolean>` | Map of right-to-left languages (see [RTL](#rtl)) |
|
|
62
|
+
| `adapter` | `LocaleInstance` | Your own translation engine instead of the built-in one (see [Custom adapter](#custom-adapter)) |
|
|
63
|
+
|
|
64
|
+
The built-in dictionaries are available to you as well — they live in the
|
|
65
|
+
`locales` export. Use them as a base for your own language or to fix a couple of
|
|
66
|
+
strings:
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { locales } from '@central-design-system/components';
|
|
70
|
+
|
|
71
|
+
locales.ru; // Russian dictionary
|
|
72
|
+
locales.en; // English dictionary
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
For the full set of keys, see [Message keys](#message-keys).
|
|
76
|
+
|
|
77
|
+
## How components get their text
|
|
78
|
+
|
|
79
|
+
Component strings are keys prefixed with `$cds.` that the library runs through a
|
|
80
|
+
translation function. Some of the keys are declared as default prop values, so
|
|
81
|
+
you can see them in the API: `text` on `CdsFileUpload` is `$cds.fileUpload.browse`,
|
|
82
|
+
`closeLabel` on `CdsNotification` is `$cds.close`, `noDataText` on `CdsSelect` is
|
|
83
|
+
`$cds.noDataText`.
|
|
84
|
+
|
|
85
|
+
That gives you three ways to change a text.
|
|
86
|
+
|
|
87
|
+
**Switch the whole language** — with the `locale` option:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
createCds({ locale: { locale: 'en' } });
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Change wording across the product** — with a dictionary on top of the built-in
|
|
94
|
+
one:
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
import { createCds, locales } from '@central-design-system/components';
|
|
98
|
+
|
|
99
|
+
createCds({
|
|
100
|
+
locale: {
|
|
101
|
+
messages: {
|
|
102
|
+
en: { ...locales.en, noDataText: 'Nothing found' }
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Important.** A language dictionary is replaced entirely, not merged key by key.
|
|
109
|
+
Without the `...locales.en` spread, the English locale is left with a single key
|
|
110
|
+
and the rest of the strings turn into their own keys (`$cds.close` instead of
|
|
111
|
+
"Close"). Spread nested sections separately:
|
|
112
|
+
`table: { ...locales.en.table, emptyText: '…' }`.
|
|
113
|
+
|
|
114
|
+
**Change one label in one place** — with a prop:
|
|
115
|
+
|
|
116
|
+
```vue
|
|
117
|
+
<CdsSelect :items="items" no-data-text="No matching suppliers" />
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The same prop can be set as the default for every instance of the component — see
|
|
121
|
+
[global configuration](global-configuration.md):
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
createCds({
|
|
125
|
+
defaults: {
|
|
126
|
+
CdsSelect: { noDataText: 'Nothing found' }
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
The translation function also accepts plain text: a string without the `$cds.`
|
|
132
|
+
prefix is returned as is, with the parameters substituted. That's how props with
|
|
133
|
+
a localizable value work the same way with a key and with a ready-made phrase.
|
|
134
|
+
|
|
135
|
+
If a key is missing from both the active locale and the `fallback`, the component
|
|
136
|
+
shows the key itself, and in dev mode a
|
|
137
|
+
`[CDS: useLocale] Translation key … not found` warning appears in the console.
|
|
138
|
+
|
|
139
|
+
## Switching the language at runtime
|
|
140
|
+
|
|
141
|
+
`createCds` returns an instance whose locale lives in reactive refs — to switch
|
|
142
|
+
languages, just write to `current`:
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
const cds = createCds({ components, directives });
|
|
146
|
+
|
|
147
|
+
// for example, following the user's choice in profile settings
|
|
148
|
+
cds.locale.current.value = 'en';
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Inside components, the `useLocale` composable does the same:
|
|
152
|
+
|
|
153
|
+
```vue
|
|
154
|
+
<script setup lang="ts">
|
|
155
|
+
import { CdsButton, CdsButtonToggle, useLocale } from '@central-design-system/components';
|
|
156
|
+
|
|
157
|
+
const { current } = useLocale();
|
|
158
|
+
</script>
|
|
159
|
+
|
|
160
|
+
<template>
|
|
161
|
+
<CdsButtonToggle v-model="current" appearance="tertiary">
|
|
162
|
+
<CdsButton value="ru" text="Русский" />
|
|
163
|
+
<CdsButton value="en" text="English" />
|
|
164
|
+
</CdsButtonToggle>
|
|
165
|
+
</template>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Every mounted component recalculates its strings on its own — no page reload
|
|
169
|
+
needed.
|
|
170
|
+
|
|
171
|
+
## A locale for part of the application
|
|
172
|
+
|
|
173
|
+
A single subtree can get its own language — for example, an English-language
|
|
174
|
+
widget inside a Russian interface. Call `provideLocale` in a wrapper component:
|
|
175
|
+
it takes the locale from the context, applies the props you passed and provides
|
|
176
|
+
the result to the children.
|
|
177
|
+
|
|
178
|
+
```vue
|
|
179
|
+
<script setup lang="ts">
|
|
180
|
+
import { provideLocale } from '@central-design-system/components';
|
|
181
|
+
|
|
182
|
+
const props = defineProps<{ locale?: string; fallback?: string }>();
|
|
183
|
+
|
|
184
|
+
provideLocale(props);
|
|
185
|
+
</script>
|
|
186
|
+
|
|
187
|
+
<template>
|
|
188
|
+
<div>
|
|
189
|
+
<slot />
|
|
190
|
+
</div>
|
|
191
|
+
</template>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
```vue
|
|
195
|
+
<template>
|
|
196
|
+
<LocaleProvider locale="en">
|
|
197
|
+
<CdsSelect :items="items" />
|
|
198
|
+
</LocaleProvider>
|
|
199
|
+
</template>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Props you don't pass are inherited from the parent locale, so a wrapper with just
|
|
203
|
+
a `locale` loses neither the `fallback` nor the dictionaries.
|
|
204
|
+
|
|
205
|
+
## useLocale
|
|
206
|
+
|
|
207
|
+
The composable hands you the current locale and its functions — use it in your
|
|
208
|
+
own components so their texts live in the same dictionaries as the CDS ones.
|
|
209
|
+
|
|
210
|
+
```vue
|
|
211
|
+
<script setup lang="ts">
|
|
212
|
+
import { useLocale } from '@central-design-system/components';
|
|
213
|
+
|
|
214
|
+
const { t, n } = useLocale();
|
|
215
|
+
</script>
|
|
216
|
+
|
|
217
|
+
<template>
|
|
218
|
+
<p>{{ t('$cds.table.emptyText') }}</p>
|
|
219
|
+
<p>{{ n(1234.56) }}</p>
|
|
220
|
+
</template>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
| Property | Type | Purpose |
|
|
224
|
+
| ------------------ | ---------------------------------------------- | ------------------------------------------------------------- |
|
|
225
|
+
| `t` | `(key: string, ...params: unknown[]) => string` | Translation of a `$cds.…` key with parameter substitution |
|
|
226
|
+
| `n` | `(value: number) => string` | Number formatting for the active locale |
|
|
227
|
+
| `current` | `Ref<string>` | Active language; writing to it switches the language |
|
|
228
|
+
| `fallback` | `Ref<string>` | Fallback language |
|
|
229
|
+
| `messages` | `Ref<LocaleMessages>` | Dictionaries; can be extended at runtime |
|
|
230
|
+
| `decimalSeparator` | `ShallowRef<string>` | Decimal separator of the active locale |
|
|
231
|
+
|
|
232
|
+
Parameters in strings are numbered — `{0}`, `{1}`:
|
|
233
|
+
|
|
234
|
+
```ts
|
|
235
|
+
const { t } = useLocale();
|
|
236
|
+
|
|
237
|
+
t('$cds.carousel.delimiter', 3, 8); // "Slide 3 of 8"
|
|
238
|
+
t('Days left: {0}', 5); // "Days left: 5"
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Under the hood `n` is `Intl.NumberFormat` with the active locale and the
|
|
242
|
+
`fallback`, so group and decimal separators come from the browser. The library
|
|
243
|
+
derives `decimalSeparator` from the same locale (`,` for `ru`, `.` for `en`); if
|
|
244
|
+
your product uses a different one, set it explicitly in `createCds`.
|
|
245
|
+
|
|
246
|
+
## Dates
|
|
247
|
+
|
|
248
|
+
Month and weekday names live in separate date locales, shipped by `ru` and `en`.
|
|
249
|
+
Date and time components pick the date locale by the active language, so after
|
|
250
|
+
`current.value = 'en'` the calendar switches by itself.
|
|
251
|
+
|
|
252
|
+
A single component gets its language from the `locale` prop — `CdsDatePicker`,
|
|
253
|
+
`CdsDateInput` and `CdsTimePicker` all have it:
|
|
254
|
+
|
|
255
|
+
```vue
|
|
256
|
+
<CdsDatePicker v-model="value" locale="en" :first-day-of-week="0" header />
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
The prop accepts not only a language name but also your own date locale object
|
|
260
|
+
(type `TDateLocale`) — that's how you plug in a language the library doesn't
|
|
261
|
+
have. The built-in date locales, for reference and reuse, live in the same
|
|
262
|
+
`locales` export: `locales.ruDate`, `locales.enDate` and the `locales.dateLocales`
|
|
263
|
+
map.
|
|
264
|
+
|
|
265
|
+
```ts
|
|
266
|
+
const de = {
|
|
267
|
+
days: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
|
|
268
|
+
daysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
|
|
269
|
+
months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
|
270
|
+
monthsLong: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
|
271
|
+
monthsShort: 'Jan_Feb_Mär_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez'.split('_'),
|
|
272
|
+
today: 'Heute',
|
|
273
|
+
now: 'Jetzt',
|
|
274
|
+
firstDayOfWeek: 1,
|
|
275
|
+
format24h: true,
|
|
276
|
+
pluralDay: (day = 0) => (day === 1 ? 'Tag' : 'Tage')
|
|
277
|
+
};
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
```vue
|
|
281
|
+
<CdsDatePicker v-model="value" :locale="de" />
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Table
|
|
285
|
+
|
|
286
|
+
`CdsTable` builds its labels from the `$cds.table.*` keys, but it also accepts a
|
|
287
|
+
pinpoint override through the `locale` prop — which replaces only the strings you
|
|
288
|
+
pass:
|
|
289
|
+
|
|
290
|
+
```vue
|
|
291
|
+
<CdsTable :columns="columns" :data="data" :locale="{ emptyText: 'No requests yet' }" />
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## RTL
|
|
295
|
+
|
|
296
|
+
Right-to-left languages are described by the `rtl` map: the key is the language,
|
|
297
|
+
the value is the direction.
|
|
298
|
+
|
|
299
|
+
```ts
|
|
300
|
+
createCds({
|
|
301
|
+
locale: {
|
|
302
|
+
locale: 'ar',
|
|
303
|
+
messages: { ar },
|
|
304
|
+
rtl: { ar: true }
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
Components read the direction through `useRtl` and flip whatever depends on the
|
|
310
|
+
axis: the side menus and tooltips open to, the pagination arrows, the cell order
|
|
311
|
+
in `CdsOtpInput`, the fill of `CdsProgressBar`. Spacing and borders in the styles
|
|
312
|
+
are mostly written with logical properties (`margin-inline`, `inset-inline`) and
|
|
313
|
+
are mirrored by the browser itself — but the design system does not claim full
|
|
314
|
+
RTL support yet, and some places will need polishing on your side.
|
|
315
|
+
|
|
316
|
+
The library does not set the direction attribute for you — put it on the
|
|
317
|
+
application root yourself:
|
|
318
|
+
|
|
319
|
+
```vue
|
|
320
|
+
<script setup lang="ts">
|
|
321
|
+
import { useRtl } from '@central-design-system/components';
|
|
322
|
+
|
|
323
|
+
const { isRtl } = useRtl();
|
|
324
|
+
</script>
|
|
325
|
+
|
|
326
|
+
<template>
|
|
327
|
+
<div :dir="isRtl ? 'rtl' : 'ltr'">
|
|
328
|
+
<slot />
|
|
329
|
+
</div>
|
|
330
|
+
</template>
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
`useRtl` gives you `isRtl` and `rtlClasses` — a ready `cds-locale--is-rtl` /
|
|
334
|
+
`cds-locale--is-ltr` class for your own styles.
|
|
335
|
+
|
|
336
|
+
## Custom adapter
|
|
337
|
+
|
|
338
|
+
If your application already has an i18n library, hand the translations over to
|
|
339
|
+
it: the `adapter` option accepts any object implementing the `LocaleInstance`
|
|
340
|
+
interface. In that case `messages`, `locale` and `fallback` from `createCds` are
|
|
341
|
+
unused — your engine becomes the source of truth, and the CDS strings live in the
|
|
342
|
+
application's shared dictionaries under the `$cds` key.
|
|
343
|
+
|
|
344
|
+
```ts
|
|
345
|
+
import type { LocaleInstance, LocaleOptions } from '@central-design-system/components';
|
|
346
|
+
import { toRef } from 'vue';
|
|
347
|
+
import type { I18n } from 'vue-i18n';
|
|
348
|
+
|
|
349
|
+
export function createVueI18nAdapter(i18n: I18n<any, any, any, string, false>): LocaleInstance {
|
|
350
|
+
const format = (value: number) => i18n.global.n(value);
|
|
351
|
+
|
|
352
|
+
return {
|
|
353
|
+
name: 'vue-i18n',
|
|
354
|
+
current: i18n.global.locale,
|
|
355
|
+
fallback: i18n.global.fallbackLocale as never,
|
|
356
|
+
messages: i18n.global.messages as never,
|
|
357
|
+
decimalSeparator: toRef(() => (format(0.1).includes(',') ? ',' : '.')),
|
|
358
|
+
t: (key, ...params) => i18n.global.t(key, params as never),
|
|
359
|
+
n: format,
|
|
360
|
+
provide: () => createVueI18nAdapter(i18n)
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
```ts
|
|
366
|
+
import { createI18n } from 'vue-i18n';
|
|
367
|
+
|
|
368
|
+
const i18n = createI18n({
|
|
369
|
+
legacy: false,
|
|
370
|
+
locale: 'en',
|
|
371
|
+
messages: {
|
|
372
|
+
en: {
|
|
373
|
+
$cds: { noDataText: 'No data available' },
|
|
374
|
+
profile: { title: 'Profile' }
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
const cds = createCds({
|
|
380
|
+
components,
|
|
381
|
+
directives,
|
|
382
|
+
locale: {
|
|
383
|
+
adapter: createVueI18nAdapter(i18n)
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
Required members of `LocaleInstance`: `name` (that's how the adapter is
|
|
389
|
+
recognized), `current`, `fallback`, `messages`, `decimalSeparator`, `t`, `n` and
|
|
390
|
+
`provide` — a factory for a nested locale, used by `provideLocale`. If you don't
|
|
391
|
+
need "a locale in a subtree", `provide` can return the same instance, as in the
|
|
392
|
+
example above.
|
|
393
|
+
|
|
394
|
+
## Message keys
|
|
395
|
+
|
|
396
|
+
The built-in English dictionary is a template for translating into a new
|
|
397
|
+
language. Copy it, translate the values and pass it to `messages` under your
|
|
398
|
+
language's key; the Russian version is available as `locales.ru`.
|
|
399
|
+
|
|
400
|
+
```ts
|
|
401
|
+
export default {
|
|
402
|
+
badge: 'Badge',
|
|
403
|
+
noDataText: 'No data available',
|
|
404
|
+
selectAll: 'Select all',
|
|
405
|
+
close: 'Close',
|
|
406
|
+
open: 'Open',
|
|
407
|
+
dismiss: 'Dismiss',
|
|
408
|
+
confirmEdit: {
|
|
409
|
+
ok: 'OK',
|
|
410
|
+
cancel: 'Cancel'
|
|
411
|
+
},
|
|
412
|
+
carousel: {
|
|
413
|
+
prev: 'Previous slide',
|
|
414
|
+
next: 'Next slide',
|
|
415
|
+
delimiter: 'Slide {0} of {1}'
|
|
416
|
+
},
|
|
417
|
+
input: {
|
|
418
|
+
clear: 'Clear {0}',
|
|
419
|
+
otp: 'Please enter OTP character',
|
|
420
|
+
prependAction: '{0} prepended action',
|
|
421
|
+
appendAction: '{0} appended action'
|
|
422
|
+
},
|
|
423
|
+
fileInput: {
|
|
424
|
+
counter: '{0} files',
|
|
425
|
+
counterSize: '{0} files ({1} in total)'
|
|
426
|
+
},
|
|
427
|
+
fileUpload: {
|
|
428
|
+
title: 'Drag and drop files here',
|
|
429
|
+
divider: 'or',
|
|
430
|
+
browse: 'Browse files'
|
|
431
|
+
},
|
|
432
|
+
steps: {
|
|
433
|
+
prev: 'Back',
|
|
434
|
+
next: 'Next'
|
|
435
|
+
},
|
|
436
|
+
table: {
|
|
437
|
+
filterTitle: 'Filter menu',
|
|
438
|
+
filterConfirm: 'OK',
|
|
439
|
+
filterReset: 'Reset',
|
|
440
|
+
filterEmptyText: 'No filters',
|
|
441
|
+
filterCheckAll: 'Select all items',
|
|
442
|
+
filterSearchPlaceholder: 'Search in filters',
|
|
443
|
+
emptyText: 'No data',
|
|
444
|
+
selectAll: 'Select current page',
|
|
445
|
+
selectInvert: 'Invert current page',
|
|
446
|
+
selectNone: 'Clear all data',
|
|
447
|
+
selectionAll: 'Select all data',
|
|
448
|
+
sortTitle: 'Sort',
|
|
449
|
+
expand: 'Expand row',
|
|
450
|
+
collapse: 'Collapse row',
|
|
451
|
+
triggerDesc: 'Click to sort descending',
|
|
452
|
+
triggerAsc: 'Click to sort ascending',
|
|
453
|
+
cancelSort: 'Click to cancel sorting',
|
|
454
|
+
showed: 'Showed',
|
|
455
|
+
from: 'from',
|
|
456
|
+
rowOnPage: 'Row on page'
|
|
457
|
+
},
|
|
458
|
+
uploader: {
|
|
459
|
+
uploading: 'Uploading...',
|
|
460
|
+
uploadFile: 'Upload file',
|
|
461
|
+
downloadFile: 'Download file',
|
|
462
|
+
removeFile: 'Remove file',
|
|
463
|
+
uploadError: 'Upload error',
|
|
464
|
+
previewFile: 'Preview file'
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
The dictionary may stay incomplete: missing keys are taken from the `fallback` —
|
|
470
|
+
that is, from Russian by default.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# CDS 3 → CDS 4 migration (digest)
|
|
2
|
+
|
|
3
|
+
This is a short digest. **The full version with Before/After for every
|
|
4
|
+
change is `MIGRATION.md` at the root of the
|
|
5
|
+
`@central-design-system/components` npm package.**
|
|
6
|
+
|
|
7
|
+
## Severity legend
|
|
8
|
+
|
|
9
|
+
| Marker | Meaning |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| ⚠️ **BREAKING** | Breaks existing code — action required |
|
|
12
|
+
| 🔁 **RENAMED** | Rename — mechanical search & replace |
|
|
13
|
+
| 🟠 **DEPRECATED** | Works in 4.x, will be removed in 5.x |
|
|
14
|
+
| ✨ **NEW** | New capability, nothing breaks |
|
|
15
|
+
|
|
16
|
+
## Quick checklist
|
|
17
|
+
|
|
18
|
+
- [ ] Replace the CSS import: `@central-design-system/components/dist/cds.css` →
|
|
19
|
+
`@central-design-system/components/styles` (⚠️ breaking).
|
|
20
|
+
- [ ] If you use `@central-design-system/icons` — the package is 🟠 deprecated;
|
|
21
|
+
switch to iconpacks via `createCds({ icons })` (see [setup.md](setup.md)).
|
|
22
|
+
- [ ] Go through the component rename index below.
|
|
23
|
+
- [ ] Run the build and check the dev console: `[CDS UPGRADE]` warnings
|
|
24
|
+
point at deprecated props.
|
|
25
|
+
|
|
26
|
+
## Key breaking changes
|
|
27
|
+
|
|
28
|
+
- ⚠️ **CSS import path** — `dist/cds.css` is no longer a public entry point;
|
|
29
|
+
import `@central-design-system/components/styles` instead.
|
|
30
|
+
- ⚠️ **Legacy reset is off by default** — the global reset from CDS 3 is now
|
|
31
|
+
opt-in: `@use '@central-design-system/components/styles' with ($legacy-reset: true);`.
|
|
32
|
+
- ⚠️ **CSS architecture on ITCSS + CSS Layers** — the cascade is driven by
|
|
33
|
+
native `@layer`; global overrides of CDS styles without `!important` may
|
|
34
|
+
now resolve differently.
|
|
35
|
+
|
|
36
|
+
## Component rename and removal index
|
|
37
|
+
|
|
38
|
+
| CDS 3 | CDS 4 |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| `CdsDropdown` | 🔁 `CdsSelect` (the native `<select>` from CDS 3 — via the `native-select` prop) |
|
|
41
|
+
| `CdsRadioButton` | 🔁 `CdsRadioGroup` |
|
|
42
|
+
| `CdsProgress` | 🔁 `CdsProgressBar` |
|
|
43
|
+
| `CdsTabsV2` | 🔁 `CdsTabs` |
|
|
44
|
+
| `CdsCheckboxGroup` | ⚠️ removed (use `CdsCheckbox` on its own) |
|
|
45
|
+
| `CdsContainer` | ⚠️ removed |
|
|
46
|
+
| `CdsBadge` | 🔁 props: `count`→`content`, `limited`→`:max`; ⚠️ `invertColor` removed |
|
|
47
|
+
|
|
48
|
+
After renaming, double-check the `api.md` of the new component in
|
|
49
|
+
`../components/` — prop contracts may have changed.
|