@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,652 @@
|
|
|
1
|
+
# CdsCard — 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 card gathers related content — a title, text, an image, actions — into one bordered block. Use it when an object (a product, a plan, a document) should read as a whole: a card can act as a link and as a selectable item in a group.
|
|
7
|
+
|
|
8
|
+
## Content
|
|
9
|
+
|
|
10
|
+
There are three ways to fill a card: the `title`, `subtitle` and `text` props for typical cases; the slots of the same name when you need your own markup instead of a string; the `CdsCardItem`, `CdsCardTitle`, `CdsCardSubtitle` and `CdsCardText` components when you need full control over the structure. The `divider` prop adds a divider between the header and the text.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import {
|
|
17
|
+
CdsCard,
|
|
18
|
+
CdsCardDivider,
|
|
19
|
+
CdsCardItem,
|
|
20
|
+
CdsCardSubtitle,
|
|
21
|
+
CdsCardText,
|
|
22
|
+
CdsCardTitle,
|
|
23
|
+
CdsIcon
|
|
24
|
+
} from '@central-design-system/components';
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<template>
|
|
28
|
+
<div class="cds-row">
|
|
29
|
+
<div class="cds-col">
|
|
30
|
+
<CdsCard
|
|
31
|
+
title="Заголовок карточки"
|
|
32
|
+
subtitle="Подзаголовок карточки"
|
|
33
|
+
text="Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi, ratione debitis quis est labore voluptatibus! Eaque cupiditate minima, at placeat totam, magni doloremque veniam neque porro libero rerum unde voluptatem!"
|
|
34
|
+
append-icon="add"
|
|
35
|
+
divider
|
|
36
|
+
/>
|
|
37
|
+
<div class="flex justify-center my-2">Использование Props</div>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<div class="cds-col">
|
|
41
|
+
<CdsCard divider>
|
|
42
|
+
<template #title>Заголовок карточки</template>
|
|
43
|
+
<template #subtitle>Подзаголовок карточки</template>
|
|
44
|
+
<template #text>
|
|
45
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi, ratione debitis quis est labore
|
|
46
|
+
voluptatibus! Eaque cupiditate minima, at placeat totam, magni doloremque veniam neque porro libero rerum unde
|
|
47
|
+
voluptatem!
|
|
48
|
+
</template>
|
|
49
|
+
<template #append>
|
|
50
|
+
<CdsIcon icon="add" />
|
|
51
|
+
</template>
|
|
52
|
+
</CdsCard>
|
|
53
|
+
<div class="flex justify-center my-2">Использование Slots</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<div class="cds-col">
|
|
57
|
+
<CdsCard>
|
|
58
|
+
<CdsCardItem>
|
|
59
|
+
<CdsCardTitle>Заголовок карточки</CdsCardTitle>
|
|
60
|
+
<CdsCardSubtitle>Подзаголовок карточки</CdsCardSubtitle>
|
|
61
|
+
<template #append>
|
|
62
|
+
<CdsIcon icon="add" />
|
|
63
|
+
</template>
|
|
64
|
+
</CdsCardItem>
|
|
65
|
+
|
|
66
|
+
<CdsCardDivider />
|
|
67
|
+
|
|
68
|
+
<CdsCardText>
|
|
69
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi, ratione debitis quis est labore
|
|
70
|
+
voluptatibus! Eaque cupiditate minima, at placeat totam, magni doloremque veniam neque porro libero rerum unde
|
|
71
|
+
voluptatem!
|
|
72
|
+
</CdsCardText>
|
|
73
|
+
</CdsCard>
|
|
74
|
+
<div class="flex justify-center my-2">Использование Компонентов</div>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</template>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Header
|
|
81
|
+
|
|
82
|
+
The `prepend-icon` and `append-icon` props put an icon at the edges of the header, `prepend-avatar` and `append-avatar` put an avatar by image URL. By default the prepend and append areas are pinned to the top of the header; `item-align="center"` centers them against the title and the subtitle (on `CdsCardItem` this prop is called `align`).
|
|
83
|
+
|
|
84
|
+
**Example (SFC):**
|
|
85
|
+
|
|
86
|
+
```vue
|
|
87
|
+
<script setup lang="ts">
|
|
88
|
+
import { CdsCard } from '@central-design-system/components';
|
|
89
|
+
</script>
|
|
90
|
+
|
|
91
|
+
<template>
|
|
92
|
+
<div class="flex flex-wrap justify-center gap-4">
|
|
93
|
+
<CdsCard
|
|
94
|
+
width="320"
|
|
95
|
+
prepend-avatar="/images/temp/thumbnail.jpg"
|
|
96
|
+
title="Анна Смирнова"
|
|
97
|
+
subtitle="Менеджер проекта"
|
|
98
|
+
append-icon="overflow-menu-vertical"
|
|
99
|
+
item-align="center"
|
|
100
|
+
/>
|
|
101
|
+
|
|
102
|
+
<CdsCard
|
|
103
|
+
width="320"
|
|
104
|
+
prepend-icon="doc"
|
|
105
|
+
title="Договор поставки"
|
|
106
|
+
subtitle="Обновлён вчера"
|
|
107
|
+
append-icon="download"
|
|
108
|
+
item-align="center"
|
|
109
|
+
/>
|
|
110
|
+
</div>
|
|
111
|
+
</template>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Appearance
|
|
115
|
+
|
|
116
|
+
A clickable card — one with a link, a click handler, inside a group or with the `link` prop — highlights its border on hover by itself, you do not need to turn anything on. `borderless` removes the border — for cards on a surface or inside other containers.
|
|
117
|
+
|
|
118
|
+
**Example (SFC):**
|
|
119
|
+
|
|
120
|
+
```vue
|
|
121
|
+
<script setup lang="ts">
|
|
122
|
+
import { CdsCard } from '@central-design-system/components';
|
|
123
|
+
</script>
|
|
124
|
+
|
|
125
|
+
<template>
|
|
126
|
+
<div class="flex flex-wrap justify-center gap-4">
|
|
127
|
+
<CdsCard width="240" title="Обычная" text="Рамка по умолчанию отделяет карточку от фона." />
|
|
128
|
+
<CdsCard width="240" link title="Кликабельная" text="Наведите курсор — рамка подсветится." />
|
|
129
|
+
<CdsCard width="240" borderless title="Borderless" text="Без рамки — для карточек на подложке." />
|
|
130
|
+
</div>
|
|
131
|
+
</template>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Link
|
|
135
|
+
|
|
136
|
+
Pass `href` (or `to` with a vue-router route) and the card is rendered as an `a` tag and becomes clickable as a whole, keeping its appearance.
|
|
137
|
+
|
|
138
|
+
**Example (SFC):**
|
|
139
|
+
|
|
140
|
+
```vue
|
|
141
|
+
<script setup lang="ts">
|
|
142
|
+
import { CdsCard } from '@central-design-system/components';
|
|
143
|
+
</script>
|
|
144
|
+
|
|
145
|
+
<template>
|
|
146
|
+
<CdsCard
|
|
147
|
+
class="m-auto"
|
|
148
|
+
title="CDS Sandbox"
|
|
149
|
+
subtitle="Перейти на песочницу CDS"
|
|
150
|
+
href="https://magersoft.github.io/cds-sandbox"
|
|
151
|
+
target="_blank"
|
|
152
|
+
append-icon="external"
|
|
153
|
+
width="300"
|
|
154
|
+
/>
|
|
155
|
+
</template>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Images
|
|
159
|
+
|
|
160
|
+
An image at the top is a [CdsImage](../cds-image/api.md) component placed first inside the card. You can overlay content on top of it by putting the header into the image slot.
|
|
161
|
+
|
|
162
|
+
**Example (SFC):**
|
|
163
|
+
|
|
164
|
+
```vue
|
|
165
|
+
<script setup lang="ts">
|
|
166
|
+
import {
|
|
167
|
+
CdsButton,
|
|
168
|
+
CdsCard,
|
|
169
|
+
CdsCardActions,
|
|
170
|
+
CdsCardDivider,
|
|
171
|
+
CdsCardItem,
|
|
172
|
+
CdsCardSubtitle,
|
|
173
|
+
CdsCardText,
|
|
174
|
+
CdsCardTitle,
|
|
175
|
+
CdsImage
|
|
176
|
+
} from '@central-design-system/components';
|
|
177
|
+
</script>
|
|
178
|
+
|
|
179
|
+
<template>
|
|
180
|
+
<div class="flex flex-wrap justify-center gap-6">
|
|
181
|
+
<CdsCard width="400">
|
|
182
|
+
<CdsImage src="/images/temp/girl.webp" cover class="items-end" />
|
|
183
|
+
|
|
184
|
+
<CdsCardItem>
|
|
185
|
+
<CdsCardTitle>Заголовок карточки</CdsCardTitle>
|
|
186
|
+
<CdsCardSubtitle>Подзаголовок карточки</CdsCardSubtitle>
|
|
187
|
+
</CdsCardItem>
|
|
188
|
+
|
|
189
|
+
<CdsCardDivider />
|
|
190
|
+
|
|
191
|
+
<CdsCardText>
|
|
192
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi, ratione debitis quis est labore voluptatibus!
|
|
193
|
+
Eaque cupiditate minima, at placeat totam, magni doloremque veniam neque porro libero rerum unde voluptatem!
|
|
194
|
+
</CdsCardText>
|
|
195
|
+
|
|
196
|
+
<CdsCardActions class="justify-end">
|
|
197
|
+
<CdsButton>Действие</CdsButton>
|
|
198
|
+
</CdsCardActions>
|
|
199
|
+
</CdsCard>
|
|
200
|
+
|
|
201
|
+
<CdsCard width="400">
|
|
202
|
+
<CdsImage src="/images/temp/dark-city.webp" cover class="items-end">
|
|
203
|
+
<CdsCardItem>
|
|
204
|
+
<CdsCardTitle class="text-content-on-dark">Заголовок карточки</CdsCardTitle>
|
|
205
|
+
<CdsCardSubtitle class="text-content-on-dark opacity-80">Подзаголовок карточки</CdsCardSubtitle>
|
|
206
|
+
</CdsCardItem>
|
|
207
|
+
</CdsImage>
|
|
208
|
+
|
|
209
|
+
<CdsCardText>
|
|
210
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi, ratione debitis quis est labore voluptatibus!
|
|
211
|
+
Eaque cupiditate minima, at placeat totam, magni doloremque veniam neque porro libero rerum unde voluptatem!
|
|
212
|
+
</CdsCardText>
|
|
213
|
+
|
|
214
|
+
<CdsCardActions class="justify-end">
|
|
215
|
+
<CdsButton>Действие</CdsButton>
|
|
216
|
+
</CdsCardActions>
|
|
217
|
+
</CdsCard>
|
|
218
|
+
</div>
|
|
219
|
+
</template>
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Images
|
|
223
|
+
|
|
224
|
+
The `image` prop stretches the image as the background of the whole card. Take care of the contrast: set the text color through `color` and pick a dark image or a gradient.
|
|
225
|
+
|
|
226
|
+
**Example (SFC):**
|
|
227
|
+
|
|
228
|
+
```vue
|
|
229
|
+
<script setup lang="ts">
|
|
230
|
+
import { CdsButton, CdsCard, CdsCardActions } from '@central-design-system/components';
|
|
231
|
+
</script>
|
|
232
|
+
|
|
233
|
+
<template>
|
|
234
|
+
<CdsCard
|
|
235
|
+
class="m-auto"
|
|
236
|
+
title="Заголовок"
|
|
237
|
+
subtitle="Подзаголовок карточки"
|
|
238
|
+
color="content-on-dark"
|
|
239
|
+
text="Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi, ratione debitis quis est labore voluptatibus! Eaque cupiditate minima, at placeat totam, magni doloremque veniam neque porro libero rerum unde voluptatem!"
|
|
240
|
+
image="/images/temp/dark-city.webp"
|
|
241
|
+
width="400"
|
|
242
|
+
>
|
|
243
|
+
<CdsCardActions class="justify-end">
|
|
244
|
+
<CdsButton appearance="inverse">Действие</CdsButton>
|
|
245
|
+
</CdsCardActions>
|
|
246
|
+
</CdsCard>
|
|
247
|
+
</template>
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Group with selection
|
|
251
|
+
|
|
252
|
+
Wrap the cards in `CdsCardGroup` and give each of them a `value` — the group turns into a selection control with `v-model`, and the selected card gets a highlighted border. `required` forbids clearing the selection.
|
|
253
|
+
|
|
254
|
+
**Example (SFC):**
|
|
255
|
+
|
|
256
|
+
```vue
|
|
257
|
+
<script setup lang="ts">
|
|
258
|
+
import { CdsCard, CdsCardGroup } from '@central-design-system/components';
|
|
259
|
+
import { ref } from 'vue';
|
|
260
|
+
|
|
261
|
+
const selected = ref(1);
|
|
262
|
+
const items = [1, 2, 3];
|
|
263
|
+
</script>
|
|
264
|
+
|
|
265
|
+
<template>
|
|
266
|
+
<CdsCardGroup v-model="selected" required class="flex-wrap justify-center gap-4">
|
|
267
|
+
<CdsCard
|
|
268
|
+
v-for="item in items"
|
|
269
|
+
:key="item"
|
|
270
|
+
title="Заголовок карточки"
|
|
271
|
+
subtitle="Подзаголовок карточки"
|
|
272
|
+
text="Используется в качестве элемента, где вся область карточки — это интерактивное состояние."
|
|
273
|
+
:append-icon="selected === item ? 'check-fill' : undefined"
|
|
274
|
+
:value="item"
|
|
275
|
+
width="250"
|
|
276
|
+
/>
|
|
277
|
+
</CdsCardGroup>
|
|
278
|
+
</template>
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Group with selection
|
|
282
|
+
|
|
283
|
+
The `multiple` prop enables multiple selection — `v-model` then holds an array of values.
|
|
284
|
+
|
|
285
|
+
**Example (SFC):**
|
|
286
|
+
|
|
287
|
+
```vue
|
|
288
|
+
<script setup lang="ts">
|
|
289
|
+
import { CdsCard, CdsCardGroup } from '@central-design-system/components';
|
|
290
|
+
import { ref } from 'vue';
|
|
291
|
+
|
|
292
|
+
const selected = ref([2]);
|
|
293
|
+
const items = [1, 2, 3];
|
|
294
|
+
</script>
|
|
295
|
+
|
|
296
|
+
<template>
|
|
297
|
+
<CdsCardGroup v-model="selected" multiple class="flex-wrap justify-center gap-4">
|
|
298
|
+
<CdsCard
|
|
299
|
+
v-for="item in items"
|
|
300
|
+
:key="item"
|
|
301
|
+
title="Заголовок карточки"
|
|
302
|
+
subtitle="Подзаголовок карточки"
|
|
303
|
+
text="Используется в качестве элемента, где вся область карточки — это интерактивное состояние."
|
|
304
|
+
:append-icon="selected.includes(item) ? 'check-fill' : undefined"
|
|
305
|
+
:value="item"
|
|
306
|
+
width="250"
|
|
307
|
+
/>
|
|
308
|
+
</CdsCardGroup>
|
|
309
|
+
</template>
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
## Choosing a plan
|
|
313
|
+
|
|
314
|
+
A group of cards replaces radio buttons when every option needs room for a price and a description. The `check-fill` icon in `append-icon` repeats the selection in the header, and the button below stays disabled until an option is picked.
|
|
315
|
+
|
|
316
|
+
**Example (SFC):**
|
|
317
|
+
|
|
318
|
+
```vue
|
|
319
|
+
<script setup lang="ts">
|
|
320
|
+
import { CdsButton, CdsCard, CdsCardGroup } from '@central-design-system/components';
|
|
321
|
+
import { ref } from 'vue';
|
|
322
|
+
|
|
323
|
+
const selected = ref<string>();
|
|
324
|
+
|
|
325
|
+
const plans = [
|
|
326
|
+
{ id: 'start', title: 'Старт', price: 'Бесплатно', description: '5 проектов и базовая аналитика.' },
|
|
327
|
+
{ id: 'team', title: 'Команда', price: '990 ₽ / мес', description: 'Совместная работа и роли доступа.' },
|
|
328
|
+
{
|
|
329
|
+
id: 'business',
|
|
330
|
+
title: 'Бизнес',
|
|
331
|
+
price: '2 900 ₽ / мес',
|
|
332
|
+
description: 'Без ограничений и с приоритетной поддержкой.'
|
|
333
|
+
}
|
|
334
|
+
];
|
|
335
|
+
</script>
|
|
336
|
+
|
|
337
|
+
<template>
|
|
338
|
+
<div class="flex flex-col items-center gap-4">
|
|
339
|
+
<CdsCardGroup v-model="selected" class="flex-wrap justify-center gap-4">
|
|
340
|
+
<CdsCard
|
|
341
|
+
v-for="plan in plans"
|
|
342
|
+
:key="plan.id"
|
|
343
|
+
:value="plan.id"
|
|
344
|
+
:title="plan.title"
|
|
345
|
+
:subtitle="plan.price"
|
|
346
|
+
:text="plan.description"
|
|
347
|
+
:append-icon="selected === plan.id ? 'check-fill' : undefined"
|
|
348
|
+
width="240"
|
|
349
|
+
/>
|
|
350
|
+
</CdsCardGroup>
|
|
351
|
+
|
|
352
|
+
<CdsButton :disabled="!selected" text="Продолжить" />
|
|
353
|
+
</div>
|
|
354
|
+
</template>
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
## Product cards
|
|
358
|
+
|
|
359
|
+
A storefront is assembled from ready-made blocks: [CdsImage](../cds-image/api.md) with the photo, a rating made of icons in `CdsCardText`, [CdsTag](../cds-tag/api.md) tags with the specs and a pair of actions in `CdsCardActions` — the main "add to cart" button and a secondary icon button for favorites that toggles the bookmark and tints it with a utility class. The `loading` and `disabled` props show the loading bar and protect the card from repeated clicks while the request runs — press «В корзину».
|
|
360
|
+
|
|
361
|
+
**Example (SFC):**
|
|
362
|
+
|
|
363
|
+
```vue
|
|
364
|
+
<script setup lang="ts">
|
|
365
|
+
import {
|
|
366
|
+
CdsButton,
|
|
367
|
+
CdsCard,
|
|
368
|
+
CdsCardActions,
|
|
369
|
+
CdsCardDivider,
|
|
370
|
+
CdsCardItem,
|
|
371
|
+
CdsCardSubtitle,
|
|
372
|
+
CdsCardText,
|
|
373
|
+
CdsCardTitle,
|
|
374
|
+
CdsIcon,
|
|
375
|
+
CdsImage,
|
|
376
|
+
CdsTag
|
|
377
|
+
} from '@central-design-system/components';
|
|
378
|
+
import { ref } from 'vue';
|
|
379
|
+
|
|
380
|
+
const loadingId = ref<string | null>(null);
|
|
381
|
+
|
|
382
|
+
const products = [
|
|
383
|
+
{
|
|
384
|
+
id: 'headphones',
|
|
385
|
+
title: 'Наушники Aura ANC',
|
|
386
|
+
category: 'Аудио',
|
|
387
|
+
image: 'https://images.unsplash.com/photo-1505740420928-5e560c06d30e?auto=format&fit=crop&w=600&q=80',
|
|
388
|
+
rating: 4.8,
|
|
389
|
+
stars: 5,
|
|
390
|
+
reviews: 214,
|
|
391
|
+
price: '12 990 ₽',
|
|
392
|
+
description: 'Беспроводные наушники с активным шумоподавлением и зарядом на 30 часов.',
|
|
393
|
+
tags: [
|
|
394
|
+
{
|
|
395
|
+
name: 'Хит',
|
|
396
|
+
color: 'green'
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
name: 'Доставка завтра',
|
|
400
|
+
color: 'purple'
|
|
401
|
+
}
|
|
402
|
+
]
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
id: 'watch',
|
|
406
|
+
title: 'Часы Meridian 40',
|
|
407
|
+
category: 'Аксессуары',
|
|
408
|
+
image: 'https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=600&q=80',
|
|
409
|
+
rating: 4.6,
|
|
410
|
+
stars: 5,
|
|
411
|
+
reviews: 98,
|
|
412
|
+
price: '24 490 ₽',
|
|
413
|
+
description: 'Классический корпус 40 мм, сапфировое стекло и ремешок из натуральной кожи.',
|
|
414
|
+
tags: [
|
|
415
|
+
{
|
|
416
|
+
name: 'Новинка',
|
|
417
|
+
color: 'cyan'
|
|
418
|
+
}
|
|
419
|
+
]
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
id: 'sneakers',
|
|
423
|
+
title: 'Кроссовки Vertex Run',
|
|
424
|
+
category: 'Обувь',
|
|
425
|
+
image: 'https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=600&q=80',
|
|
426
|
+
rating: 4.9,
|
|
427
|
+
stars: 5,
|
|
428
|
+
reviews: 531,
|
|
429
|
+
price: '8 790 ₽',
|
|
430
|
+
description: 'Лёгкая беговая пара с амортизирующей подошвой для ежедневных тренировок.',
|
|
431
|
+
tags: [
|
|
432
|
+
{
|
|
433
|
+
name: '−20%',
|
|
434
|
+
color: 'green'
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
name: 'Остался 42 размер',
|
|
438
|
+
color: 'red'
|
|
439
|
+
}
|
|
440
|
+
]
|
|
441
|
+
}
|
|
442
|
+
];
|
|
443
|
+
|
|
444
|
+
const addToCart = (id: string) => {
|
|
445
|
+
loadingId.value = id;
|
|
446
|
+
|
|
447
|
+
setTimeout(() => (loadingId.value = null), 2000);
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
const favorites = ref<string[]>([]);
|
|
451
|
+
|
|
452
|
+
const toggleFavorite = (id: string) => {
|
|
453
|
+
favorites.value = favorites.value.includes(id)
|
|
454
|
+
? favorites.value.filter((item) => item !== id)
|
|
455
|
+
: [...favorites.value, id];
|
|
456
|
+
};
|
|
457
|
+
</script>
|
|
458
|
+
|
|
459
|
+
<template>
|
|
460
|
+
<div class="flex flex-wrap justify-center gap-4">
|
|
461
|
+
<CdsCard
|
|
462
|
+
v-for="product in products"
|
|
463
|
+
:key="product.id"
|
|
464
|
+
width="280"
|
|
465
|
+
:loading="loadingId === product.id"
|
|
466
|
+
:disabled="loadingId === product.id"
|
|
467
|
+
>
|
|
468
|
+
<CdsImage :src="product.image" height="200" cover />
|
|
469
|
+
|
|
470
|
+
<CdsCardItem>
|
|
471
|
+
<CdsCardTitle>{{ product.title }}</CdsCardTitle>
|
|
472
|
+
<CdsCardSubtitle>{{ product.category }}</CdsCardSubtitle>
|
|
473
|
+
</CdsCardItem>
|
|
474
|
+
|
|
475
|
+
<CdsCardText>
|
|
476
|
+
<div class="flex items-center gap-1">
|
|
477
|
+
<CdsIcon
|
|
478
|
+
v-for="star in product.stars"
|
|
479
|
+
:key="star"
|
|
480
|
+
:icon="star <= Math.floor(product.rating) ? 'star-fill' : 'star'"
|
|
481
|
+
size="sm"
|
|
482
|
+
class="text-other-lemon-content"
|
|
483
|
+
/>
|
|
484
|
+
<span class="text-sm text-content-secondary">{{ product.rating }} ({{ product.reviews }})</span>
|
|
485
|
+
</div>
|
|
486
|
+
|
|
487
|
+
<div class="my-2 text-lg font-bold">{{ product.price }}</div>
|
|
488
|
+
|
|
489
|
+
<div>{{ product.description }}</div>
|
|
490
|
+
</CdsCardText>
|
|
491
|
+
|
|
492
|
+
<CdsCardDivider />
|
|
493
|
+
|
|
494
|
+
<div class="flex flex-wrap gap-1 px-4 pt-2">
|
|
495
|
+
<CdsTag v-for="tag in product.tags" :key="tag.name" :text="tag.name" :color="tag.color" size="sm" />
|
|
496
|
+
</div>
|
|
497
|
+
|
|
498
|
+
<CdsCardActions class="gap-2">
|
|
499
|
+
<CdsButton class="flex-1" text="В корзину" @click="addToCart(product.id)" />
|
|
500
|
+
<CdsButton
|
|
501
|
+
appearance="tertiary"
|
|
502
|
+
:icon="favorites.includes(product.id) ? 'bookmark-fill' : 'bookmark'"
|
|
503
|
+
:class="{ 'text-other-pink-content': favorites.includes(product.id) }"
|
|
504
|
+
:aria-label="favorites.includes(product.id) ? 'Убрать из избранного' : 'Добавить в избранное'"
|
|
505
|
+
@click="toggleFavorite(product.id)"
|
|
506
|
+
/>
|
|
507
|
+
</CdsCardActions>
|
|
508
|
+
</CdsCard>
|
|
509
|
+
</div>
|
|
510
|
+
</template>
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
## Expandable details
|
|
514
|
+
|
|
515
|
+
Hide secondary content behind an expander: a block with `v-if` is wrapped in `CdsTransitionExpand` for a smooth animation. Anything can trigger the expansion — a chevron icon or a button in the actions bar.
|
|
516
|
+
|
|
517
|
+
**Example (SFC):**
|
|
518
|
+
|
|
519
|
+
```vue
|
|
520
|
+
<script setup lang="ts">
|
|
521
|
+
import {
|
|
522
|
+
CdsButton,
|
|
523
|
+
CdsCard,
|
|
524
|
+
CdsCardActions,
|
|
525
|
+
CdsCardDivider,
|
|
526
|
+
CdsCardItem,
|
|
527
|
+
CdsCardSubtitle,
|
|
528
|
+
CdsCardText,
|
|
529
|
+
CdsCardTitle,
|
|
530
|
+
CdsFunctionalButton,
|
|
531
|
+
CdsTransitionExpand
|
|
532
|
+
} from '@central-design-system/components';
|
|
533
|
+
import { ref } from 'vue';
|
|
534
|
+
|
|
535
|
+
const expanded = ref(false);
|
|
536
|
+
const showFull = ref(false);
|
|
537
|
+
</script>
|
|
538
|
+
|
|
539
|
+
<template>
|
|
540
|
+
<div class="flex flex-col items-center gap-4">
|
|
541
|
+
<CdsCard width="400">
|
|
542
|
+
<CdsCardItem>
|
|
543
|
+
<CdsCardTitle>Расширяемая карточка</CdsCardTitle>
|
|
544
|
+
<CdsCardSubtitle>Просто нажмите на иконку стрелочки</CdsCardSubtitle>
|
|
545
|
+
</CdsCardItem>
|
|
546
|
+
|
|
547
|
+
<CdsCardActions class="justify-between">
|
|
548
|
+
<CdsButton appearance="tertiary">Действие</CdsButton>
|
|
549
|
+
<CdsFunctionalButton :icon="expanded ? 'chevron-up' : 'chevron-down'" @click="expanded = !expanded" />
|
|
550
|
+
</CdsCardActions>
|
|
551
|
+
|
|
552
|
+
<CdsTransitionExpand>
|
|
553
|
+
<div v-if="expanded">
|
|
554
|
+
<CdsCardDivider />
|
|
555
|
+
<CdsCardText>
|
|
556
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi, ratione debitis quis est labore
|
|
557
|
+
voluptatibus! Eaque cupiditate minima, at placeat totam, magni doloremque veniam neque porro libero rerum
|
|
558
|
+
unde voluptatem!
|
|
559
|
+
</CdsCardText>
|
|
560
|
+
</div>
|
|
561
|
+
</CdsTransitionExpand>
|
|
562
|
+
</CdsCard>
|
|
563
|
+
|
|
564
|
+
<CdsCard width="400">
|
|
565
|
+
<CdsCardItem>
|
|
566
|
+
<CdsCardTitle>Расширяемая карточка</CdsCardTitle>
|
|
567
|
+
<CdsCardSubtitle>Просто нажмите на кнопку</CdsCardSubtitle>
|
|
568
|
+
</CdsCardItem>
|
|
569
|
+
|
|
570
|
+
<CdsTransitionExpand>
|
|
571
|
+
<div v-if="showFull">
|
|
572
|
+
<CdsCardText>
|
|
573
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi, ratione debitis quis est labore
|
|
574
|
+
voluptatibus! Eaque cupiditate minima, at placeat totam, magni doloremque veniam neque porro libero rerum
|
|
575
|
+
unde voluptatem!
|
|
576
|
+
</CdsCardText>
|
|
577
|
+
</div>
|
|
578
|
+
</CdsTransitionExpand>
|
|
579
|
+
|
|
580
|
+
<CdsCardDivider />
|
|
581
|
+
|
|
582
|
+
<CdsCardActions class="justify-between">
|
|
583
|
+
<CdsButton appearance="tertiary" @click="showFull = !showFull">
|
|
584
|
+
{{ showFull ? 'Скрыть' : 'Показать' }}
|
|
585
|
+
</CdsButton>
|
|
586
|
+
</CdsCardActions>
|
|
587
|
+
</CdsCard>
|
|
588
|
+
</div>
|
|
589
|
+
</template>
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
## Gallery
|
|
593
|
+
|
|
594
|
+
Cards nest into each other: the outer one is an album with a header and a counter, the inner ones are photo tiles in a mosaic built on a CSS grid with a fixed row height; `col-span` / `row-span` make individual shots larger. The `absolute` mode of [CdsImage](../cds-image/api.md) stretches the photo across the whole tile, `borderless` removes the borders, and a gradient darkens the last tile under the counter of the remaining photos.
|
|
595
|
+
|
|
596
|
+
**Example (SFC):**
|
|
597
|
+
|
|
598
|
+
```vue
|
|
599
|
+
<script setup lang="ts">
|
|
600
|
+
import {
|
|
601
|
+
CdsCard,
|
|
602
|
+
CdsCardItem,
|
|
603
|
+
CdsCardSubtitle,
|
|
604
|
+
CdsCardTitle,
|
|
605
|
+
CdsFunctionalButton,
|
|
606
|
+
CdsImage
|
|
607
|
+
} from '@central-design-system/components';
|
|
608
|
+
|
|
609
|
+
const photos = [
|
|
610
|
+
{ src: '/images/temp/ny.webp', span: 'col-span-2 row-span-2' },
|
|
611
|
+
{ src: '/images/temp/space.webp', span: 'col-span-2' },
|
|
612
|
+
{ src: '/images/temp/cat.webp', span: '' },
|
|
613
|
+
{ src: '/images/temp/dark-city.webp', span: '' },
|
|
614
|
+
{ src: '/images/temp/girl.webp', span: '' },
|
|
615
|
+
{ src: '/images/temp/city.webp', span: 'col-span-2' },
|
|
616
|
+
{ src: '/images/temp/airbnb.webp', span: '', rest: 18 }
|
|
617
|
+
];
|
|
618
|
+
</script>
|
|
619
|
+
|
|
620
|
+
<template>
|
|
621
|
+
<CdsCard width="800" class="m-auto">
|
|
622
|
+
<CdsCardItem align="center">
|
|
623
|
+
<CdsCardTitle>Путешествия</CdsCardTitle>
|
|
624
|
+
<CdsCardSubtitle>25 фото · обновлён вчера</CdsCardSubtitle>
|
|
625
|
+
<template #append>
|
|
626
|
+
<div class="flex gap-1">
|
|
627
|
+
<CdsFunctionalButton icon="upload" aria-label="Загрузить фото" />
|
|
628
|
+
<CdsFunctionalButton icon="overflow-menu-vertical" aria-label="Действия с альбомом" />
|
|
629
|
+
</div>
|
|
630
|
+
</template>
|
|
631
|
+
</CdsCardItem>
|
|
632
|
+
|
|
633
|
+
<div class="grid grid-cols-4 auto-rows-[160px] gap-2 px-4 pb-4">
|
|
634
|
+
<CdsCard
|
|
635
|
+
v-for="photo in photos"
|
|
636
|
+
:key="photo.src"
|
|
637
|
+
link
|
|
638
|
+
borderless
|
|
639
|
+
:class="['flex items-center justify-center', photo.span]"
|
|
640
|
+
>
|
|
641
|
+
<CdsImage
|
|
642
|
+
:src="photo.src"
|
|
643
|
+
absolute
|
|
644
|
+
cover
|
|
645
|
+
:gradient="photo.rest ? 'to bottom, rgba(0,0,0,.55), rgba(0,0,0,.55)' : undefined"
|
|
646
|
+
/>
|
|
647
|
+
<span v-if="photo.rest" class="text-2xl font-bold text-content-on-dark">+{{ photo.rest }} фото</span>
|
|
648
|
+
</CdsCard>
|
|
649
|
+
</div>
|
|
650
|
+
</CdsCard>
|
|
651
|
+
</template>
|
|
652
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsCard — 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
|
+
| A clickable card means one action: its whole area leads to the same result. | Buttons inside a clickable card compete with the click on the card itself. |
|
|
9
|
+
| The actions bar holds one main action as primary; the rest are less prominent. | Several primary buttons in one card compete for attention. |
|
|
10
|
+
| The subtitle adds a new fact to the title — a place, a date, a price. | A subtitle that repeats the title in other words tells the reader nothing. |
|