@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,320 @@
|
|
|
1
|
+
# CdsRadioGroup — usage examples
|
|
2
|
+
|
|
3
|
+
> Extracted from Storybook stories (`docs/*.stories.ts`) by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> The full component contract is in [api.md](api.md). `v-bind="args"` in templates refers to the props from the **Args** block of the corresponding example.
|
|
5
|
+
|
|
6
|
+
A radio group is a choice of one option out of a short mutually exclusive set: a payment method, a plan, a report period. The group keeps the selected value, captions the set with a heading and a description, shows messages and errors; the options themselves are [CdsRadio](../cds-radio/api.md) components with their own `value`.
|
|
7
|
+
|
|
8
|
+
## Heading and description
|
|
9
|
+
|
|
10
|
+
The `label` prop names the group, `description` explains the choice. Every button has its own `label` and `description`: name the option briefly in the label and move the details — the price, the deadlines, the limits — into the description.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
17
|
+
import { ref } from 'vue';
|
|
18
|
+
|
|
19
|
+
const delivery = ref('pickup');
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<div class="w-[350px] m-auto">
|
|
24
|
+
<CdsRadioGroup v-model="delivery" label="Способ получения" description="Изменить способ можно до отправки заказа">
|
|
25
|
+
<CdsRadio value="pickup" label="Самовывоз" description="Бесплатно, завтра из пункта выдачи" />
|
|
26
|
+
<CdsRadio value="courier" label="Курьер" description="Завтра с 10:00 до 18:00, 300 ₽" />
|
|
27
|
+
<CdsRadio value="post" label="Почта" description="5–7 дней, 250 ₽" />
|
|
28
|
+
</CdsRadioGroup>
|
|
29
|
+
</div>
|
|
30
|
+
</template>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Direction
|
|
34
|
+
|
|
35
|
+
By default the buttons are stacked in a column. `direction="horizontal"` puts them in a row — handy for short sets of two or three options such as a period or a sort order.
|
|
36
|
+
|
|
37
|
+
**Example (SFC):**
|
|
38
|
+
|
|
39
|
+
```vue
|
|
40
|
+
<script setup lang="ts">
|
|
41
|
+
import { CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
42
|
+
import { ref } from 'vue';
|
|
43
|
+
|
|
44
|
+
const vertical = ref('year');
|
|
45
|
+
const horizontal = ref('year');
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<template>
|
|
49
|
+
<div class="flex flex-col gap-6 w-[350px] m-auto">
|
|
50
|
+
<CdsRadioGroup v-model="vertical" label="Вертикально — по умолчанию" hide-details>
|
|
51
|
+
<CdsRadio value="year" label="Год" />
|
|
52
|
+
<CdsRadio value="quarter" label="Квартал" />
|
|
53
|
+
<CdsRadio value="month" label="Месяц" />
|
|
54
|
+
</CdsRadioGroup>
|
|
55
|
+
|
|
56
|
+
<CdsRadioGroup v-model="horizontal" label="Горизонтально" direction="horizontal" hide-details>
|
|
57
|
+
<CdsRadio value="year" label="Год" />
|
|
58
|
+
<CdsRadio value="quarter" label="Квартал" />
|
|
59
|
+
<CdsRadio value="month" label="Месяц" />
|
|
60
|
+
</CdsRadioGroup>
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## States
|
|
66
|
+
|
|
67
|
+
`disabled` blocks the whole group and lowers the contrast, `readonly` forbids changing the choice but does not change the appearance. A single option is blocked by the `disabled` prop of the button itself.
|
|
68
|
+
|
|
69
|
+
**Example (SFC):**
|
|
70
|
+
|
|
71
|
+
```vue
|
|
72
|
+
<script setup lang="ts">
|
|
73
|
+
import { CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
74
|
+
import { ref } from 'vue';
|
|
75
|
+
|
|
76
|
+
const payment = ref('card');
|
|
77
|
+
</script>
|
|
78
|
+
|
|
79
|
+
<template>
|
|
80
|
+
<div class="flex flex-col gap-6 w-[350px] m-auto">
|
|
81
|
+
<CdsRadioGroup model-value="card" label="Disabled" disabled hide-details>
|
|
82
|
+
<CdsRadio value="card" label="Картой онлайн" />
|
|
83
|
+
<CdsRadio value="invoice" label="По счёту" />
|
|
84
|
+
</CdsRadioGroup>
|
|
85
|
+
|
|
86
|
+
<CdsRadioGroup model-value="card" label="Readonly" readonly hide-details>
|
|
87
|
+
<CdsRadio value="card" label="Картой онлайн" />
|
|
88
|
+
<CdsRadio value="invoice" label="По счёту" />
|
|
89
|
+
</CdsRadioGroup>
|
|
90
|
+
|
|
91
|
+
<CdsRadioGroup v-model="payment" label="Заблокирована одна кнопка" hide-details>
|
|
92
|
+
<CdsRadio value="card" label="Картой онлайн" />
|
|
93
|
+
<CdsRadio value="invoice" label="По счёту" />
|
|
94
|
+
<CdsRadio value="cash" label="Наличными при получении" disabled />
|
|
95
|
+
</CdsRadioGroup>
|
|
96
|
+
</div>
|
|
97
|
+
</template>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Messages and errors
|
|
101
|
+
|
|
102
|
+
`messages` shows a supporting text under the group, `error-messages` — a ready error message (the one coming from the server, for example) together with the error state on all the buttons. Validation rules through `rules` are in the "Submitting a form" scenario. `hide-details` removes the bottom block entirely.
|
|
103
|
+
|
|
104
|
+
**Example (SFC):**
|
|
105
|
+
|
|
106
|
+
```vue
|
|
107
|
+
<script setup lang="ts">
|
|
108
|
+
import { CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
109
|
+
import { ref } from 'vue';
|
|
110
|
+
|
|
111
|
+
const format = ref('pdf');
|
|
112
|
+
</script>
|
|
113
|
+
|
|
114
|
+
<template>
|
|
115
|
+
<div class="flex flex-col gap-6 w-[350px] m-auto">
|
|
116
|
+
<CdsRadioGroup v-model="format" label="Формат выгрузки" messages="Файл придёт на почту после формирования">
|
|
117
|
+
<CdsRadio value="pdf" label="PDF" />
|
|
118
|
+
<CdsRadio value="xlsx" label="Excel" />
|
|
119
|
+
</CdsRadioGroup>
|
|
120
|
+
|
|
121
|
+
<CdsRadioGroup label="Способ оплаты" error-messages="Выберите способ оплаты">
|
|
122
|
+
<CdsRadio value="card" label="Картой онлайн" />
|
|
123
|
+
<CdsRadio value="invoice" label="По счёту" />
|
|
124
|
+
</CdsRadioGroup>
|
|
125
|
+
</div>
|
|
126
|
+
</template>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Colors
|
|
130
|
+
|
|
131
|
+
`color` sets the color of the selected button, `base-color` — of the unselected ones. The values apply to all the buttons of the group at once.
|
|
132
|
+
|
|
133
|
+
**Example (SFC):**
|
|
134
|
+
|
|
135
|
+
```vue
|
|
136
|
+
<script setup lang="ts">
|
|
137
|
+
import { CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
138
|
+
</script>
|
|
139
|
+
|
|
140
|
+
<template>
|
|
141
|
+
<div class="flex flex-col gap-6 w-[350px] m-auto">
|
|
142
|
+
<CdsRadioGroup model-value="first" color="green" label="Зелёный при выборе (color)" hide-details>
|
|
143
|
+
<CdsRadio value="first" label="Выбранный вариант" />
|
|
144
|
+
<CdsRadio value="second" label="Невыбранный вариант" />
|
|
145
|
+
</CdsRadioGroup>
|
|
146
|
+
|
|
147
|
+
<CdsRadioGroup base-color="purple" label="Фиолетовый до выбора (base-color)" hide-details>
|
|
148
|
+
<CdsRadio value="first" label="Первый вариант" />
|
|
149
|
+
<CdsRadio value="second" label="Второй вариант" />
|
|
150
|
+
</CdsRadioGroup>
|
|
151
|
+
</div>
|
|
152
|
+
</template>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Slots
|
|
156
|
+
|
|
157
|
+
`CdsRadio` has its own `label` and `description` slots — to highlight a part of the text or add an icon, for example.
|
|
158
|
+
|
|
159
|
+
**Example (SFC):**
|
|
160
|
+
|
|
161
|
+
```vue
|
|
162
|
+
<script setup lang="ts">
|
|
163
|
+
import { CdsIcon, CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
164
|
+
import { ref } from 'vue';
|
|
165
|
+
|
|
166
|
+
const channel = ref('email');
|
|
167
|
+
</script>
|
|
168
|
+
|
|
169
|
+
<template>
|
|
170
|
+
<div class="w-[350px] m-auto">
|
|
171
|
+
<CdsRadioGroup v-model="channel">
|
|
172
|
+
<template #label>
|
|
173
|
+
<div>Уведомления о <span class="text-status-success-content font-bold">новых заказах</span></div>
|
|
174
|
+
</template>
|
|
175
|
+
<template #description>
|
|
176
|
+
<div>Канал можно поменять в настройках <cds-icon name="settings" /></div>
|
|
177
|
+
</template>
|
|
178
|
+
<CdsRadio value="email">
|
|
179
|
+
<template #label>Электронная почта</template>
|
|
180
|
+
</CdsRadio>
|
|
181
|
+
<CdsRadio value="telegram">
|
|
182
|
+
<template #label>Telegram</template>
|
|
183
|
+
<template #description>Сообщения приходят мгновенно</template>
|
|
184
|
+
</CdsRadio>
|
|
185
|
+
</CdsRadioGroup>
|
|
186
|
+
</div>
|
|
187
|
+
</template>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Submitting a form
|
|
191
|
+
|
|
192
|
+
The choice is required: a rule in `rules` returns the error text while no value is selected. The button starts the check through the `validate()` of the [CdsForm](../cds-form/api.md).
|
|
193
|
+
|
|
194
|
+
**Example (SFC):**
|
|
195
|
+
|
|
196
|
+
```vue
|
|
197
|
+
<script setup lang="ts">
|
|
198
|
+
import { CdsButton, CdsForm, CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
199
|
+
import { ref, unref } from 'vue';
|
|
200
|
+
|
|
201
|
+
const payment = ref<string | null>(null);
|
|
202
|
+
const sending = ref(false);
|
|
203
|
+
const formRef = ref<InstanceType<typeof CdsForm>>();
|
|
204
|
+
|
|
205
|
+
const rules = [(value: string | null) => !!value || 'Выберите способ оплаты'];
|
|
206
|
+
|
|
207
|
+
async function submit() {
|
|
208
|
+
const form = unref(formRef);
|
|
209
|
+
if (!form) return;
|
|
210
|
+
|
|
211
|
+
const { valid } = await form.validate();
|
|
212
|
+
if (!valid) return;
|
|
213
|
+
|
|
214
|
+
sending.value = true;
|
|
215
|
+
setTimeout(() => {
|
|
216
|
+
sending.value = false;
|
|
217
|
+
}, 1500);
|
|
218
|
+
}
|
|
219
|
+
</script>
|
|
220
|
+
|
|
221
|
+
<template>
|
|
222
|
+
<CdsForm ref="formRef" class="flex flex-col gap-2 w-[350px] m-auto">
|
|
223
|
+
<CdsRadioGroup v-model="payment" :rules="rules" label="Способ оплаты">
|
|
224
|
+
<CdsRadio value="card" label="Картой онлайн" />
|
|
225
|
+
<CdsRadio value="invoice" label="По счёту" description="Для юридических лиц" />
|
|
226
|
+
<CdsRadio value="cash" label="Наличными при получении" />
|
|
227
|
+
</CdsRadioGroup>
|
|
228
|
+
|
|
229
|
+
<CdsButton text="Оформить заказ" :loading="sending" @click="submit" />
|
|
230
|
+
</CdsForm>
|
|
231
|
+
</template>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Choosing a plan
|
|
235
|
+
|
|
236
|
+
The descriptions of the buttons state the conditions, and the computed total under the group is updated on every choice — the user sees the consequences right away.
|
|
237
|
+
|
|
238
|
+
**Example (SFC):**
|
|
239
|
+
|
|
240
|
+
```vue
|
|
241
|
+
<script setup lang="ts">
|
|
242
|
+
import { CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
243
|
+
import { computed, ref } from 'vue';
|
|
244
|
+
|
|
245
|
+
const tariffs = [
|
|
246
|
+
{ value: 'start', label: 'Старт', description: '5 пользователей и базовые отчёты', price: 0 },
|
|
247
|
+
{ value: 'business', label: 'Бизнес', description: '50 пользователей, отчёты и интеграции', price: 4900 },
|
|
248
|
+
{ value: 'corp', label: 'Корпорация', description: 'Без ограничений, персональный менеджер', price: 19900 }
|
|
249
|
+
];
|
|
250
|
+
|
|
251
|
+
const selected = ref('business');
|
|
252
|
+
|
|
253
|
+
const total = computed(() => {
|
|
254
|
+
const tariff = tariffs.find((item) => item.value === selected.value);
|
|
255
|
+
return tariff && tariff.price > 0 ? `${tariff.price.toLocaleString('ru-RU')} ₽/мес` : 'бесплатно';
|
|
256
|
+
});
|
|
257
|
+
</script>
|
|
258
|
+
|
|
259
|
+
<template>
|
|
260
|
+
<div class="flex flex-col gap-2 w-[350px] m-auto">
|
|
261
|
+
<CdsRadioGroup v-model="selected" label="Тариф" hide-details>
|
|
262
|
+
<CdsRadio
|
|
263
|
+
v-for="tariff in tariffs"
|
|
264
|
+
:key="tariff.value"
|
|
265
|
+
:value="tariff.value"
|
|
266
|
+
:label="tariff.label"
|
|
267
|
+
:description="tariff.description"
|
|
268
|
+
/>
|
|
269
|
+
</CdsRadioGroup>
|
|
270
|
+
|
|
271
|
+
<div>
|
|
272
|
+
Итого: <span class="font-bold">{{ total }}</span>
|
|
273
|
+
</div>
|
|
274
|
+
</div>
|
|
275
|
+
</template>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Sorting a list
|
|
279
|
+
|
|
280
|
+
A horizontal group with `hide-details` works as a sorting panel: the selected value rebuilds the list on the fly through a computed.
|
|
281
|
+
|
|
282
|
+
**Example (SFC):**
|
|
283
|
+
|
|
284
|
+
```vue
|
|
285
|
+
<script setup lang="ts">
|
|
286
|
+
import { CdsList, CdsRadio, CdsRadioGroup } from '@central-design-system/components';
|
|
287
|
+
import { computed, ref } from 'vue';
|
|
288
|
+
|
|
289
|
+
const products = [
|
|
290
|
+
{ name: 'Монитор', price: 25400, added: '2026-05-14' },
|
|
291
|
+
{ name: 'Ноутбук', price: 82000, added: '2026-07-02' },
|
|
292
|
+
{ name: 'Клавиатура', price: 4300, added: '2026-06-20' },
|
|
293
|
+
{ name: 'Док-станция', price: 11900, added: '2026-04-08' }
|
|
294
|
+
];
|
|
295
|
+
|
|
296
|
+
const sort = ref('new');
|
|
297
|
+
|
|
298
|
+
const items = computed(() =>
|
|
299
|
+
[...products]
|
|
300
|
+
.sort((a, b) => {
|
|
301
|
+
if (sort.value === 'cheap') return a.price - b.price;
|
|
302
|
+
if (sort.value === 'name') return a.name.localeCompare(b.name);
|
|
303
|
+
return b.added.localeCompare(a.added);
|
|
304
|
+
})
|
|
305
|
+
.map((product) => ({ title: `${product.name} — ${product.price.toLocaleString('ru-RU')} ₽` }))
|
|
306
|
+
);
|
|
307
|
+
</script>
|
|
308
|
+
|
|
309
|
+
<template>
|
|
310
|
+
<div class="flex flex-col gap-2 w-[350px] m-auto">
|
|
311
|
+
<CdsRadioGroup v-model="sort" label="Сортировка" direction="horizontal" hide-details>
|
|
312
|
+
<CdsRadio value="new" label="Сначала новые" />
|
|
313
|
+
<CdsRadio value="cheap" label="Дешевле" />
|
|
314
|
+
<CdsRadio value="name" label="По алфавиту" />
|
|
315
|
+
</CdsRadioGroup>
|
|
316
|
+
|
|
317
|
+
<CdsList :items="items" />
|
|
318
|
+
</div>
|
|
319
|
+
</template>
|
|
320
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsRadioGroup — guidelines
|
|
2
|
+
|
|
3
|
+
> Extracted from `docs/demos/Guidelines.vue` by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> The full component contract is in [api.md](api.md).
|
|
5
|
+
|
|
6
|
+
| ✅ Do | ❌ Don't |
|
|
7
|
+
| --- | --- |
|
|
8
|
+
| Radio buttons are for mutually exclusive options: exactly one can be selected. | Radio buttons do not fit independent options that are turned on together — use checkboxes. |
|
|
9
|
+
| Preselect a default option — usually the most common or the safest one. | A group with no selected value makes the user guess what the form will submit if nothing is picked. |
|
|
10
|
+
| Up to five options — radio buttons: the whole set is visible and the choice takes one click. | A long list bloats the form — fold it into CdsSelect. |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# CdsRadioGroup — tokens (level 3)
|
|
2
|
+
|
|
3
|
+
> Copy of the component's `styles/*.variables.scss`, taken by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> `--cds-*` are global level-2 tokens whose values come from the active theme: see [themes.md](../../tokens/themes.md).
|
|
5
|
+
> Variables marked `!default` can be overridden at build time via SCSS.
|
|
6
|
+
|
|
7
|
+
## _CdsRadioGroup.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
@use "../../../styles/tools";
|
|
11
|
+
|
|
12
|
+
$radio-group-gap-vertical: var(--cds-spacing-100) !default;
|
|
13
|
+
$radio-group-gap-horizontal: var(--cds-spacing-300) !default;
|
|
14
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# CdsResponsive — API
|
|
2
|
+
|
|
3
|
+
> Generated from meta.json by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> Examples: [examples.md](examples.md) · Guidelines: [guidelines.md](guidelines.md) · Tokens: [tokens.md](tokens.md)
|
|
5
|
+
|
|
6
|
+
A frame with constant proportions. Set `aspect-ratio` and the height of the block is calculated from its width on any screen. Anything that needs a fixed shape goes inside: a video, a map, an `iframe`, a category tile. The space for the content is taken right away, so the layout does not jump while it loads.
|
|
7
|
+
|
|
8
|
+
## CdsResponsive
|
|
9
|
+
|
|
10
|
+
**Props**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Required | Description |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| `aspectRatio` | `string \| number \| undefined` | — | no | Aspect ratio of the content. For example `1.7778` (16/9) or `'4/3'`. |
|
|
15
|
+
| `contentClass` | `any` | — | no | CSS class applied to the content wrapper. |
|
|
16
|
+
| `height` | `string \| number \| undefined` | — | no | Component height |
|
|
17
|
+
| `inline` | `boolean \| undefined` | — | no | Renders the component as an inline block (`inline-flex`) instead of a block one. |
|
|
18
|
+
| `maxHeight` | `string \| number \| undefined` | — | no | Maximum component height |
|
|
19
|
+
| `maxWidth` | `string \| number \| undefined` | — | no | Maximum component width |
|
|
20
|
+
| `minHeight` | `string \| number \| undefined` | — | no | Minimum component height |
|
|
21
|
+
| `minWidth` | `string \| number \| undefined` | — | no | Minimum component width |
|
|
22
|
+
| `width` | `string \| number \| undefined` | — | no | Component width |
|
|
23
|
+
|
|
24
|
+
**Slots**
|
|
25
|
+
|
|
26
|
+
| Name | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| `additional` | `any` | Extra content rendered on top of the sizer, outside the content wrapper. |
|
|
29
|
+
| `default` | `any` | The main content of the component, wrapped so the aspect ratio is kept. |
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# CdsResponsive — usage examples
|
|
2
|
+
|
|
3
|
+
> Extracted from Storybook stories (`docs/*.stories.ts`) by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> The full component contract is in [api.md](api.md). `v-bind="args"` in templates refers to the props from the **Args** block of the corresponding example.
|
|
5
|
+
|
|
6
|
+
A frame with constant proportions. Set `aspect-ratio` and the height of the block is calculated from its width on any screen. Anything that needs a fixed shape goes inside: a video, a map, an `iframe`, a category tile. The space for the content is taken right away, so the layout does not jump while it loads.
|
|
7
|
+
|
|
8
|
+
## Aspect ratio
|
|
9
|
+
|
|
10
|
+
The `aspect-ratio` prop accepts a fraction (`16/9`) or a number (`1.7778`). The width comes from the parent, the height is calculated by the component itself — and recalculated on every change of the width. The calculated height works as a minimum: content that does not fit into it stretches the frame and breaks the proportions.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsResponsive } from '@central-design-system/components';
|
|
17
|
+
|
|
18
|
+
const ratios = ['16/9', '4/3', '1'];
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<div class="flex flex-wrap items-start justify-center gap-4">
|
|
23
|
+
<div v-for="ratio in ratios" :key="ratio" class="w-[180px]">
|
|
24
|
+
<CdsResponsive :aspect-ratio="ratio">
|
|
25
|
+
<div class="flex h-full items-center justify-center rounded-200 bg-surface-secondary text-content-secondary">
|
|
26
|
+
{{ ratio }}
|
|
27
|
+
</div>
|
|
28
|
+
</CdsResponsive>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</template>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Sizes
|
|
35
|
+
|
|
36
|
+
By default the frame takes the whole width of its parent. The `width`, `max-width` and `min-width` props limit it, and `height`, `max-height` and `min-height` limit its height; numbers turn into pixels, strings go into CSS as they are.
|
|
37
|
+
|
|
38
|
+
**Example (SFC):**
|
|
39
|
+
|
|
40
|
+
```vue
|
|
41
|
+
<script setup lang="ts">
|
|
42
|
+
import { CdsResponsive } from '@central-design-system/components';
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<template>
|
|
46
|
+
<div class="m-auto flex w-[420px] flex-col gap-4">
|
|
47
|
+
<div>
|
|
48
|
+
<CdsResponsive aspect-ratio="16/9">
|
|
49
|
+
<div class="flex h-full items-center justify-center rounded-200 bg-surface-secondary text-content-secondary">
|
|
50
|
+
Во всю ширину родителя
|
|
51
|
+
</div>
|
|
52
|
+
</CdsResponsive>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<div>
|
|
56
|
+
<CdsResponsive aspect-ratio="16/9" max-width="260">
|
|
57
|
+
<div class="flex h-full items-center justify-center rounded-200 bg-surface-secondary text-content-secondary">
|
|
58
|
+
max-width 260
|
|
59
|
+
</div>
|
|
60
|
+
</CdsResponsive>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div>
|
|
64
|
+
<CdsResponsive aspect-ratio="16/9" width="160">
|
|
65
|
+
<div class="flex h-full items-center justify-center rounded-200 bg-surface-secondary text-content-secondary">
|
|
66
|
+
width 160
|
|
67
|
+
</div>
|
|
68
|
+
</CdsResponsive>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</template>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Layout
|
|
75
|
+
|
|
76
|
+
The `inline` prop turns the frame into `inline-flex` — it stops stretching and stands in a row with its neighbors. Set the width yourself in this case: it will not take it from the content.
|
|
77
|
+
|
|
78
|
+
**Example (SFC):**
|
|
79
|
+
|
|
80
|
+
```vue
|
|
81
|
+
<script setup lang="ts">
|
|
82
|
+
import { CdsResponsive } from '@central-design-system/components';
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
<template>
|
|
86
|
+
<div class="m-auto flex w-[360px] flex-col gap-4">
|
|
87
|
+
<div>
|
|
88
|
+
<CdsResponsive aspect-ratio="4/1">
|
|
89
|
+
<div class="flex h-full items-center justify-center rounded-200 bg-surface-secondary text-content-secondary">
|
|
90
|
+
Блочный
|
|
91
|
+
</div>
|
|
92
|
+
</CdsResponsive>
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
<div class="flex flex-wrap gap-4">
|
|
96
|
+
<CdsResponsive inline aspect-ratio="4/1" width="160">
|
|
97
|
+
<div class="flex h-full items-center justify-center rounded-200 bg-surface-secondary text-content-secondary">
|
|
98
|
+
inline
|
|
99
|
+
</div>
|
|
100
|
+
</CdsResponsive>
|
|
101
|
+
|
|
102
|
+
<CdsResponsive inline aspect-ratio="4/1" width="120">
|
|
103
|
+
<div class="flex h-full items-center justify-center rounded-200 bg-surface-secondary text-content-secondary">
|
|
104
|
+
inline
|
|
105
|
+
</div>
|
|
106
|
+
</CdsResponsive>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
</template>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Slots
|
|
113
|
+
|
|
114
|
+
The `content-class` prop puts classes on the wrapper of the `default` slot — that is how the inner paddings and the layout are set. The root of the component is positioned (`position: relative`), so the elements from `additional` can be placed absolutely relative to the frame.
|
|
115
|
+
|
|
116
|
+
**Example (SFC):**
|
|
117
|
+
|
|
118
|
+
```vue
|
|
119
|
+
<script setup lang="ts">
|
|
120
|
+
import { CdsResponsive } from '@central-design-system/components';
|
|
121
|
+
</script>
|
|
122
|
+
|
|
123
|
+
<template>
|
|
124
|
+
<div class="m-auto w-[360px]">
|
|
125
|
+
<CdsResponsive aspect-ratio="16/9" class="rounded-200" content-class="flex items-end p-3">
|
|
126
|
+
<template #additional>
|
|
127
|
+
<div class="absolute inset-0 bg-surface-secondary" />
|
|
128
|
+
<span class="absolute right-3 top-3 rounded-200 bg-brand-primary px-2 py-1 text-xs text-content-on-dark">
|
|
129
|
+
02:14
|
|
130
|
+
</span>
|
|
131
|
+
</template>
|
|
132
|
+
|
|
133
|
+
<p class="text-content-primary">Подпись поверх подложки</p>
|
|
134
|
+
</CdsResponsive>
|
|
135
|
+
</div>
|
|
136
|
+
</template>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## An embedded map or video
|
|
140
|
+
|
|
141
|
+
Maps and video players arrive in an `iframe` with proportions of their own. Wrap the `iframe` into a `CdsResponsive` with the right `aspect-ratio` and stretch it with the `h-full w-full` classes — the player will look the same on a wide monitor and on a phone.
|
|
142
|
+
|
|
143
|
+
**Example (SFC):**
|
|
144
|
+
|
|
145
|
+
```vue
|
|
146
|
+
<script setup lang="ts">
|
|
147
|
+
import { CdsIcon, CdsResponsive } from '@central-design-system/components';
|
|
148
|
+
</script>
|
|
149
|
+
|
|
150
|
+
<template>
|
|
151
|
+
<div class="m-auto w-full max-w-[480px]">
|
|
152
|
+
<CdsResponsive aspect-ratio="16/9" class="rounded-200">
|
|
153
|
+
<div
|
|
154
|
+
class="flex h-full flex-col items-center justify-center gap-2 bg-surface-secondary text-content-secondary"
|
|
155
|
+
role="img"
|
|
156
|
+
aria-label="Карта офиса"
|
|
157
|
+
>
|
|
158
|
+
<CdsIcon icon="location" size="lg" />
|
|
159
|
+
<span class="text-sm">Здесь будет карта — iframe на всю рамку</span>
|
|
160
|
+
</div>
|
|
161
|
+
</CdsResponsive>
|
|
162
|
+
</div>
|
|
163
|
+
</template>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## A grid of tiles
|
|
167
|
+
|
|
168
|
+
In a grid of categories the tiles have to be square regardless of the length of the caption. The `aspect-ratio="1"` value gives a square, and the width of every tile comes from the grid column — the number of columns changes the size, not the shape.
|
|
169
|
+
|
|
170
|
+
**Example (SFC):**
|
|
171
|
+
|
|
172
|
+
```vue
|
|
173
|
+
<script setup lang="ts">
|
|
174
|
+
import { CdsIcon, CdsResponsive } from '@central-design-system/components';
|
|
175
|
+
|
|
176
|
+
const categories = [
|
|
177
|
+
{ icon: 'truck', title: 'Логистика' },
|
|
178
|
+
{ icon: 'tool', title: 'Оборудование' },
|
|
179
|
+
{ icon: 'doc', title: 'Услуги' },
|
|
180
|
+
{ icon: 'education', title: 'Обучение' }
|
|
181
|
+
];
|
|
182
|
+
</script>
|
|
183
|
+
|
|
184
|
+
<template>
|
|
185
|
+
<div class="m-auto grid w-full max-w-[480px] grid-cols-2 gap-4 sm:grid-cols-4">
|
|
186
|
+
<CdsResponsive v-for="category in categories" :key="category.title" aspect-ratio="1" class="rounded-200">
|
|
187
|
+
<button
|
|
188
|
+
type="button"
|
|
189
|
+
class="flex h-full w-full flex-col items-center justify-center gap-2 border-0 bg-surface-secondary text-content-secondary"
|
|
190
|
+
>
|
|
191
|
+
<CdsIcon :icon="category.icon" size="lg" />
|
|
192
|
+
<span class="text-sm">{{ category.title }}</span>
|
|
193
|
+
</button>
|
|
194
|
+
</CdsResponsive>
|
|
195
|
+
</div>
|
|
196
|
+
</template>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Space for a widget while it loads
|
|
200
|
+
|
|
201
|
+
A report, a chart or a map arrives from the server a second or two later. A frame with proportions takes their place right away: while the loader spins inside, the caption and the buttons below the widget stay exactly where they will end up after the loading.
|
|
202
|
+
|
|
203
|
+
**Example (SFC):**
|
|
204
|
+
|
|
205
|
+
```vue
|
|
206
|
+
<script setup lang="ts">
|
|
207
|
+
import { CdsButton, CdsLoader, CdsResponsive } from '@central-design-system/components';
|
|
208
|
+
import { onMounted, ref } from 'vue';
|
|
209
|
+
|
|
210
|
+
const loading = ref(true);
|
|
211
|
+
|
|
212
|
+
const load = () => {
|
|
213
|
+
loading.value = true;
|
|
214
|
+
|
|
215
|
+
setTimeout(() => {
|
|
216
|
+
loading.value = false;
|
|
217
|
+
}, 2000);
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
onMounted(load);
|
|
221
|
+
</script>
|
|
222
|
+
|
|
223
|
+
<template>
|
|
224
|
+
<div class="m-auto flex w-full max-w-[420px] flex-col gap-3">
|
|
225
|
+
<CdsResponsive aspect-ratio="16/9" class="rounded-200">
|
|
226
|
+
<div class="flex h-full items-center justify-center bg-surface-secondary text-content-secondary">
|
|
227
|
+
<CdsLoader v-if="loading" description="Загружаем отчёт" />
|
|
228
|
+
<span v-else class="text-sm">Отчёт за июль: 128 закупок</span>
|
|
229
|
+
</div>
|
|
230
|
+
</CdsResponsive>
|
|
231
|
+
|
|
232
|
+
<p class="text-sm text-content-secondary">Подпись под виджетом остаётся на месте всё время загрузки.</p>
|
|
233
|
+
|
|
234
|
+
<CdsButton class="self-start" appearance="tertiary" text="Загрузить заново" :disabled="loading" @click="load" />
|
|
235
|
+
</div>
|
|
236
|
+
</template>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Switching the proportions
|
|
240
|
+
|
|
241
|
+
The `aspect-ratio` value is reactive and the change of the height is animated — a crop switcher does not jerk the neighboring blocks.
|
|
242
|
+
|
|
243
|
+
**Example (SFC):**
|
|
244
|
+
|
|
245
|
+
```vue
|
|
246
|
+
<script setup lang="ts">
|
|
247
|
+
import { CdsButton, CdsButtonToggle, CdsResponsive } from '@central-design-system/components';
|
|
248
|
+
import { computed, ref } from 'vue';
|
|
249
|
+
|
|
250
|
+
const ratios = ['16/9', '4/3', '1'];
|
|
251
|
+
const selected = ref(0);
|
|
252
|
+
|
|
253
|
+
const ratio = computed(() => ratios[selected.value]);
|
|
254
|
+
</script>
|
|
255
|
+
|
|
256
|
+
<template>
|
|
257
|
+
<div class="m-auto flex w-full max-w-[420px] flex-col items-center gap-4">
|
|
258
|
+
<CdsButtonToggle v-model="selected" appearance="tertiary" mandatory>
|
|
259
|
+
<CdsButton v-for="item in ratios" :key="item" :text="item" />
|
|
260
|
+
</CdsButtonToggle>
|
|
261
|
+
|
|
262
|
+
<div class="w-full">
|
|
263
|
+
<CdsResponsive :aspect-ratio="ratio" class="rounded-200">
|
|
264
|
+
<div class="flex h-full items-center justify-center bg-surface-secondary text-content-secondary">
|
|
265
|
+
{{ ratio }}
|
|
266
|
+
</div>
|
|
267
|
+
</CdsResponsive>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
</template>
|
|
271
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsResponsive — guidelines
|
|
2
|
+
|
|
3
|
+
> Extracted from `docs/demos/Guidelines.vue` by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> The full component contract is in [api.md](api.md).
|
|
5
|
+
|
|
6
|
+
| ✅ Do | ❌ Don't |
|
|
7
|
+
| --- | --- |
|
|
8
|
+
| The proportions are set in advance — the space for the widget is taken and the text below it is already in place. | A placeholder shorter than the future widget: when it arrives, everything below jumps down. |
|
|
9
|
+
| For images take CdsImage — it can do proportions, lazy loading and a placeholder. | An img tag inside CdsResponsive repeats CdsImage by hand and stays without lazy loading. |
|
|
10
|
+
| The content is stretched to the full height of the frame — the proportions hold. | Content taller than the frame stretches it: the set proportions are lost and the neighboring blocks stop lining up. |
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# CdsResponsive — tokens (level 3)
|
|
2
|
+
|
|
3
|
+
> Copy of the component's `styles/*.variables.scss`, taken by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> `--cds-*` are global level-2 tokens whose values come from the active theme: see [themes.md](../../tokens/themes.md).
|
|
5
|
+
> Variables marked `!default` can be overridden at build time via SCSS.
|
|
6
|
+
|
|
7
|
+
## _CdsResponsive.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
@use '../../../styles/settings';
|
|
11
|
+
|
|
12
|
+
$responsive-sizer-transition: padding-bottom 0.2s settings.$standard-easing !default;
|
|
13
|
+
```
|