@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,30 @@
|
|
|
1
|
+
# CdsIcon — 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
|
+
## _CdsIcon.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
@use '../../../styles/tools';
|
|
11
|
+
|
|
12
|
+
$icon-size: 1em !default;
|
|
13
|
+
$icon-opacity: 1 !default;
|
|
14
|
+
$icon-letter-spacing: normal !default;
|
|
15
|
+
$icon-line-height: 1 !default;
|
|
16
|
+
$icon-margin-end: var(--cds-spacing-100) !default;
|
|
17
|
+
$icon-margin-start: var(--cds-spacing-100) !default;
|
|
18
|
+
$icon-left-margin-left: var(--cds-spacing-200) !default;
|
|
19
|
+
$icon-vertical-align: middle !default;
|
|
20
|
+
$icon-text-indent: 0 !default;
|
|
21
|
+
|
|
22
|
+
// Sizes
|
|
23
|
+
$icon-sizes: (
|
|
24
|
+
'xs': tools.to-rem(12px),
|
|
25
|
+
'sm': tools.to-rem(14px),
|
|
26
|
+
'md': tools.to-rem(16px),
|
|
27
|
+
'lg': tools.to-rem(20px),
|
|
28
|
+
'xl': tools.to-rem(24px),
|
|
29
|
+
) !default;
|
|
30
|
+
```
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# CdsImage — 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
|
+
An image that knows how to wait. The component reserves space in the layout according to the given proportions, loads the file when the picture enters the viewport, and shows a placeholder while it is on its way. Over the image you can lay a gradient and any content — a caption, a tag, a button.
|
|
7
|
+
|
|
8
|
+
## CdsImage
|
|
9
|
+
|
|
10
|
+
**Props**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Required | Description |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| `absolute` | `boolean \| undefined` | — | no | Positions the image with `position: absolute`, filling its parent. |
|
|
15
|
+
| `alt` | `string \| undefined` | — | no | Alternative text of the image (the `alt` attribute). |
|
|
16
|
+
| `aspectRatio` | `string \| number \| undefined` | — | no | Aspect ratio of the content. For example `1.7778` (16/9) or `'4/3'`. |
|
|
17
|
+
| `color` | `string \| undefined` | — | no | Background color of the placeholder shown while loading. |
|
|
18
|
+
| `contentClass` | `any` | — | no | CSS class applied to the content wrapper. |
|
|
19
|
+
| `cover` | `boolean \| undefined` | — | no | Scales the image so that it covers the whole container (`object-fit: cover`). |
|
|
20
|
+
| `crossorigin` | `"" \| "anonymous" \| "use-credentials" \| undefined` | — | no | Value of the `crossorigin` attribute. |
|
|
21
|
+
| `draggable` | `boolean \| "true" \| "false" \| undefined` | — | no | Controls whether the image can be dragged (the `draggable` attribute). |
|
|
22
|
+
| `eager` | `boolean \| undefined` | — | no | Loads the image immediately instead of waiting for it to enter the viewport. |
|
|
23
|
+
| `gradient` | `string \| undefined` | — | no | CSS gradient laid over the image. For example `'to top, rgba(0,0,0,.4), transparent'`. |
|
|
24
|
+
| `height` | `string \| number \| undefined` | — | no | Component height |
|
|
25
|
+
| `imageClass` | `any` | — | no | CSS class applied to the inner `<img>` element. |
|
|
26
|
+
| `inline` | `boolean \| undefined` | — | no | Renders the component as an inline block (`inline-flex`) instead of a block one. |
|
|
27
|
+
| `lazySrc` | `string \| undefined` | — | no | Source of the low-quality placeholder image shown until the main one loads. |
|
|
28
|
+
| `maxHeight` | `string \| number \| undefined` | — | no | Maximum component height |
|
|
29
|
+
| `maxWidth` | `string \| number \| undefined` | — | no | Maximum component width |
|
|
30
|
+
| `minHeight` | `string \| number \| undefined` | — | no | Minimum component height |
|
|
31
|
+
| `minWidth` | `string \| number \| undefined` | — | no | Minimum component width |
|
|
32
|
+
| `options` | `IntersectionObserverInit \| undefined` | `{}` | no | `IntersectionObserver` options for lazy loading. |
|
|
33
|
+
| `position` | `string \| undefined` | — | no | Value of `object-position` that places the image inside the container. |
|
|
34
|
+
| `referrerpolicy` | `"origin" \| "no-referrer" \| "no-referrer-when-downgrade" \| "origin-when-cross-origin" \| "same-origin" \| "strict-origin" \| "strict-origin-when-cross-origin" \| "unsafe-url" \| undefined` | — | no | Value of the `referrerpolicy` attribute. |
|
|
35
|
+
| `sizes` | `string \| undefined` | — | no | Value of the `sizes` attribute for responsive images. |
|
|
36
|
+
| `src` | `string \| CdsImageSrcObject \| undefined` | `''` | no | Image source. A string or an object with `src`/`srcset`/`lazySrc`/`aspect`. |
|
|
37
|
+
| `srcset` | `string \| undefined` | — | no | Set of image sources for different resolutions (the `srcset` attribute). |
|
|
38
|
+
| `theme` | `string \| undefined` | — | no | Component theme |
|
|
39
|
+
| `transition` | `string \| boolean \| (TransitionProps & { component?: Component \| undefined; }) \| null \| undefined` | `'fade-transition'` | no | Transition animation |
|
|
40
|
+
| `width` | `string \| number \| undefined` | — | no | Component width |
|
|
41
|
+
|
|
42
|
+
**Events**
|
|
43
|
+
|
|
44
|
+
| Name | Type | Description |
|
|
45
|
+
| --- | --- | --- |
|
|
46
|
+
| `error` | `[value: string \| undefined]` | Fires when the image fails to load. |
|
|
47
|
+
| `load` | `[value: string \| undefined]` | Fires after the image has loaded successfully. |
|
|
48
|
+
| `loadstart` | `[value: string \| undefined]` | Fires when the image starts loading. |
|
|
49
|
+
|
|
50
|
+
**Slots**
|
|
51
|
+
|
|
52
|
+
| Name | Type | Description |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| `default` | `any` | Content shown over the image. |
|
|
55
|
+
| `error` | `any` | Content shown when the image fails to load. |
|
|
56
|
+
| `placeholder` | `any` | Content shown while the image is loading. |
|
|
57
|
+
| `sources` | `any` | Extra `<source>` elements for the `<picture>` tag. |
|
|
58
|
+
|
|
59
|
+
**Exposed**
|
|
60
|
+
|
|
61
|
+
| Name | Type | Description |
|
|
62
|
+
| --- | --- | --- |
|
|
63
|
+
| `currentSrc` | `string` | Actual address of the loaded image — taking `srcset` and the density chosen by the browser into account. |
|
|
64
|
+
| `image` | `HTMLImageElement \| undefined` | Reference to the `img` DOM element. |
|
|
65
|
+
| `naturalHeight` | `number \| undefined` | Natural height of the loaded image in pixels. |
|
|
66
|
+
| `naturalWidth` | `number \| undefined` | Natural width of the loaded image in pixels. |
|
|
67
|
+
| `state` | `"error" \| "loading" \| "idle" \| "loaded"` | Loading state of the image: idle, loading, success or error. |
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
# CdsImage — 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
|
+
An image that knows how to wait. The component reserves space in the layout according to the given proportions, loads the file when the picture enters the viewport, and shows a placeholder while it is on its way. Over the image you can lay a gradient and any content — a caption, a tag, a button.
|
|
7
|
+
|
|
8
|
+
## Size and proportions
|
|
9
|
+
|
|
10
|
+
The minimum needed to show a picture is `src` and one size constraint: `width`, `height`, `max-width` or `max-height`. The `alt` prop describes the image for readers with screen readers and goes into the `aria-label` of the container.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsImage } from '@central-design-system/components';
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<CdsImage class="m-auto" src="/images/temp/wallpaper.webp" alt="Туман над лесным озером на рассвете" width="480" />
|
|
21
|
+
</template>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Size and proportions
|
|
25
|
+
|
|
26
|
+
The `aspect-ratio` prop reserves the space for the image before it loads — the neighboring content will not jump. The value is accepted both as the fraction `16/9` and as the number `1.7778`. Without it the component waits for the file and takes the proportions from its own dimensions — and if the file fails to open, the space for the picture collapses.
|
|
27
|
+
|
|
28
|
+
**Example (SFC):**
|
|
29
|
+
|
|
30
|
+
```vue
|
|
31
|
+
<script setup lang="ts">
|
|
32
|
+
import { CdsImage } from '@central-design-system/components';
|
|
33
|
+
|
|
34
|
+
const ratios = ['16/9', '4/3', '1'];
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<template>
|
|
38
|
+
<div class="flex flex-wrap items-start justify-center gap-4">
|
|
39
|
+
<div v-for="ratio in ratios" :key="ratio" class="flex flex-col items-center gap-1">
|
|
40
|
+
<CdsImage src="/images/temp/desert.webp" alt="Столовые горы на закате" width="200" :aspect-ratio="ratio" cover />
|
|
41
|
+
<span class="text-100 text-content-secondary">aspect-ratio="{{ ratio }}"</span>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</template>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Filling the container
|
|
48
|
+
|
|
49
|
+
By default the image fits into the container as a whole (`object-fit: contain`) and leaves margins when the proportions do not match. The `cover` prop does the opposite: it fills the frame and crops the excess — this way photos of different sizes line up into an even grid.
|
|
50
|
+
|
|
51
|
+
**Example (SFC):**
|
|
52
|
+
|
|
53
|
+
```vue
|
|
54
|
+
<script setup lang="ts">
|
|
55
|
+
import { CdsImage } from '@central-design-system/components';
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<template>
|
|
59
|
+
<div class="flex flex-wrap items-start justify-center gap-6">
|
|
60
|
+
<div class="flex flex-col items-center gap-1">
|
|
61
|
+
<CdsImage
|
|
62
|
+
class="bg-surface-secondary"
|
|
63
|
+
src="/images/temp/ny.webp"
|
|
64
|
+
alt="Люди идут по улице Нью-Йорка на закате"
|
|
65
|
+
width="280"
|
|
66
|
+
aspect-ratio="16/9"
|
|
67
|
+
/>
|
|
68
|
+
<span class="text-100 text-content-secondary">По умолчанию — изображение видно целиком</span>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="flex flex-col items-center gap-1">
|
|
72
|
+
<CdsImage
|
|
73
|
+
class="bg-surface-secondary"
|
|
74
|
+
src="/images/temp/ny.webp"
|
|
75
|
+
alt="Люди идут по улице Нью-Йорка на закате"
|
|
76
|
+
width="280"
|
|
77
|
+
aspect-ratio="16/9"
|
|
78
|
+
cover
|
|
79
|
+
/>
|
|
80
|
+
<span class="text-100 text-content-secondary">cover — рамка заполнена, края обрезаны</span>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</template>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Filling the container
|
|
87
|
+
|
|
88
|
+
The `position` prop sets which part of the frame stays visible when cropping. It accepts any `object-position` value, including pairs like `left top` and percentages.
|
|
89
|
+
|
|
90
|
+
**Example (SFC):**
|
|
91
|
+
|
|
92
|
+
```vue
|
|
93
|
+
<script setup lang="ts">
|
|
94
|
+
import { CdsImage } from '@central-design-system/components';
|
|
95
|
+
|
|
96
|
+
const positions = ['top', 'center', 'bottom'];
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
<template>
|
|
100
|
+
<div class="flex flex-wrap items-start justify-center gap-4">
|
|
101
|
+
<div v-for="position in positions" :key="position" class="flex flex-col items-center gap-1">
|
|
102
|
+
<CdsImage
|
|
103
|
+
src="/images/temp/ny.webp"
|
|
104
|
+
alt="Люди идут по улице Нью-Йорка на закате"
|
|
105
|
+
width="220"
|
|
106
|
+
aspect-ratio="16/9"
|
|
107
|
+
:position="position"
|
|
108
|
+
cover
|
|
109
|
+
/>
|
|
110
|
+
<span class="text-100 text-content-secondary">position="{{ position }}"</span>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</template>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Loading
|
|
117
|
+
|
|
118
|
+
While the file is on its way, the component shows `lazy-src` — a thumbnail of the same frame, stretched and blurred — and the content of the `placeholder` slot. The `color` prop sets the color of the backdrop under them. The `loadstart` and `load` events report the progress of the loading.
|
|
119
|
+
|
|
120
|
+
**Example (SFC):**
|
|
121
|
+
|
|
122
|
+
```vue
|
|
123
|
+
<script setup lang="ts">
|
|
124
|
+
import { CdsButton, CdsImage, CdsProgressCircle } from '@central-design-system/components';
|
|
125
|
+
import { computed, ref } from 'vue';
|
|
126
|
+
|
|
127
|
+
const pending = ref(true);
|
|
128
|
+
|
|
129
|
+
// Пока файл не доехал, вместо него показываются lazy-src и слот placeholder
|
|
130
|
+
const src = computed(() =>
|
|
131
|
+
pending.value ? 'https://cdn.example.com/slow-image.webp' : '/images/temp/cyber-girl.webp'
|
|
132
|
+
);
|
|
133
|
+
</script>
|
|
134
|
+
|
|
135
|
+
<template>
|
|
136
|
+
<div class="flex flex-col items-center gap-3">
|
|
137
|
+
<CdsButton appearance="secondary" @click="pending = !pending">
|
|
138
|
+
{{ pending ? 'Завершить загрузку' : 'Начать заново' }}
|
|
139
|
+
</CdsButton>
|
|
140
|
+
|
|
141
|
+
<CdsImage
|
|
142
|
+
:src="src"
|
|
143
|
+
lazy-src="/images/temp/thumbnail.jpg"
|
|
144
|
+
alt="Девушка у панорамного окна с видом на ночной город"
|
|
145
|
+
width="480"
|
|
146
|
+
aspect-ratio="16/9"
|
|
147
|
+
cover
|
|
148
|
+
>
|
|
149
|
+
<template #placeholder>
|
|
150
|
+
<div class="flex h-full items-center justify-center">
|
|
151
|
+
<CdsProgressCircle indeterminate />
|
|
152
|
+
</div>
|
|
153
|
+
</template>
|
|
154
|
+
</CdsImage>
|
|
155
|
+
</div>
|
|
156
|
+
</template>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Loading error
|
|
160
|
+
|
|
161
|
+
If the file failed to open, the component shows the `error` slot and reports it with the `error` event. Without that slot the `placeholder` stays in place of the picture — so for an error it is better to give your own fallback with a clear text.
|
|
162
|
+
|
|
163
|
+
**Example (SFC):**
|
|
164
|
+
|
|
165
|
+
```vue
|
|
166
|
+
<script setup lang="ts">
|
|
167
|
+
import { CdsIcon, CdsImage } from '@central-design-system/components';
|
|
168
|
+
</script>
|
|
169
|
+
|
|
170
|
+
<template>
|
|
171
|
+
<CdsImage
|
|
172
|
+
class="m-auto"
|
|
173
|
+
src="https://cdn.example.com/broken.webp"
|
|
174
|
+
alt="Схема расположения складов"
|
|
175
|
+
width="360"
|
|
176
|
+
aspect-ratio="16/9"
|
|
177
|
+
cover
|
|
178
|
+
>
|
|
179
|
+
<template #error>
|
|
180
|
+
<div class="flex h-full flex-col items-center justify-center gap-1 bg-surface-secondary text-content-secondary">
|
|
181
|
+
<CdsIcon name="error" size="lg" />
|
|
182
|
+
<span class="text-100">Изображение недоступно</span>
|
|
183
|
+
</div>
|
|
184
|
+
</template>
|
|
185
|
+
</CdsImage>
|
|
186
|
+
</template>
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Gradient
|
|
190
|
+
|
|
191
|
+
The `gradient` prop lays a CSS gradient over the image — the value is passed as the arguments of `linear-gradient()`. Usually you need it to keep the text over a photo readable on any frame.
|
|
192
|
+
|
|
193
|
+
**Example (SFC):**
|
|
194
|
+
|
|
195
|
+
```vue
|
|
196
|
+
<script setup lang="ts">
|
|
197
|
+
import { CdsImage } from '@central-design-system/components';
|
|
198
|
+
</script>
|
|
199
|
+
|
|
200
|
+
<template>
|
|
201
|
+
<div class="flex flex-wrap items-start justify-center gap-6">
|
|
202
|
+
<div class="flex flex-col items-center gap-1">
|
|
203
|
+
<CdsImage
|
|
204
|
+
class="items-end"
|
|
205
|
+
src="/images/temp/villa.webp"
|
|
206
|
+
alt="Вилла с бассейном в вечернем свете"
|
|
207
|
+
width="280"
|
|
208
|
+
aspect-ratio="16/9"
|
|
209
|
+
cover
|
|
210
|
+
>
|
|
211
|
+
<p class="w-full p-2 text-200 text-content-on-dark">Вилла Роза, Синтра</p>
|
|
212
|
+
</CdsImage>
|
|
213
|
+
<span class="text-100 text-content-secondary">Без градиента</span>
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
<div class="flex flex-col items-center gap-1">
|
|
217
|
+
<CdsImage
|
|
218
|
+
class="items-end"
|
|
219
|
+
src="/images/temp/villa.webp"
|
|
220
|
+
alt="Вилла с бассейном в вечернем свете"
|
|
221
|
+
width="280"
|
|
222
|
+
aspect-ratio="16/9"
|
|
223
|
+
gradient="to top, rgba(0, 0, 0, 0.75), transparent 55%"
|
|
224
|
+
cover
|
|
225
|
+
>
|
|
226
|
+
<p class="w-full p-2 text-200 text-content-on-dark">Вилла Роза, Синтра</p>
|
|
227
|
+
</CdsImage>
|
|
228
|
+
<span class="text-100 text-content-secondary">С градиентом</span>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
</template>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Content over the image
|
|
235
|
+
|
|
236
|
+
The default slot renders above the image and stretches over the whole container: you can put a caption, a tag or a button inside. Set the layout with utilities on the component itself (`items-end`, `justify-center`) or through `content-class`.
|
|
237
|
+
|
|
238
|
+
**Example (SFC):**
|
|
239
|
+
|
|
240
|
+
```vue
|
|
241
|
+
<script setup lang="ts">
|
|
242
|
+
import { CdsImage, CdsTag } from '@central-design-system/components';
|
|
243
|
+
</script>
|
|
244
|
+
|
|
245
|
+
<template>
|
|
246
|
+
<CdsImage
|
|
247
|
+
class="m-auto"
|
|
248
|
+
src="/images/temp/cat.webp"
|
|
249
|
+
alt="Кот с разноцветной шерстью"
|
|
250
|
+
width="280"
|
|
251
|
+
aspect-ratio="1"
|
|
252
|
+
gradient="to top, rgba(0, 0, 0, 0.7), transparent 45%"
|
|
253
|
+
cover
|
|
254
|
+
>
|
|
255
|
+
<div class="flex h-full flex-col items-start justify-between p-2">
|
|
256
|
+
<CdsTag color="green" size="sm">Новинка</CdsTag>
|
|
257
|
+
<span class="text-200 text-content-on-dark">Радужный кот, холст, 40 × 60</span>
|
|
258
|
+
</div>
|
|
259
|
+
</CdsImage>
|
|
260
|
+
</template>
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Responsive sources
|
|
264
|
+
|
|
265
|
+
The `srcset` and `sizes` props go straight into the `img` tag — the browser picks the file for the pixel density and the width of the place itself. When a narrow screen needs not just a smaller file but a different frame, add `<source>` elements into the `sources` slot: the component wraps the image into `<picture>`. Narrow the window — in the example the wide panorama gives way to a vertical frame.
|
|
266
|
+
|
|
267
|
+
**Example (SFC):**
|
|
268
|
+
|
|
269
|
+
```vue
|
|
270
|
+
<script setup lang="ts">
|
|
271
|
+
import { CdsImage } from '@central-design-system/components';
|
|
272
|
+
</script>
|
|
273
|
+
|
|
274
|
+
<template>
|
|
275
|
+
<CdsImage
|
|
276
|
+
class="m-auto"
|
|
277
|
+
src="/images/temp/city.webp"
|
|
278
|
+
alt="Панорама города на закате"
|
|
279
|
+
width="100%"
|
|
280
|
+
max-width="560"
|
|
281
|
+
aspect-ratio="16/9"
|
|
282
|
+
cover
|
|
283
|
+
>
|
|
284
|
+
<template #sources>
|
|
285
|
+
<source media="(max-width: 700px)" srcset="/images/temp/ny.webp" />
|
|
286
|
+
</template>
|
|
287
|
+
</CdsImage>
|
|
288
|
+
</template>
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Catalog cards
|
|
292
|
+
|
|
293
|
+
Listing covers come from different sources and almost never match in size. A shared `aspect-ratio` and `cover` bring them to one frame, `color` holds a neutral backdrop while the file is loading, and the default slot leaves a tag in the corner of the cover.
|
|
294
|
+
|
|
295
|
+
**Example (SFC):**
|
|
296
|
+
|
|
297
|
+
```vue
|
|
298
|
+
<script setup lang="ts">
|
|
299
|
+
import {
|
|
300
|
+
CdsButton,
|
|
301
|
+
CdsCard,
|
|
302
|
+
CdsCardActions,
|
|
303
|
+
CdsCardItem,
|
|
304
|
+
CdsCardSubtitle,
|
|
305
|
+
CdsCardTitle,
|
|
306
|
+
CdsImage,
|
|
307
|
+
CdsTag
|
|
308
|
+
} from '@central-design-system/components';
|
|
309
|
+
|
|
310
|
+
const listings = [
|
|
311
|
+
{
|
|
312
|
+
id: 'villa',
|
|
313
|
+
src: '/images/temp/villa.webp',
|
|
314
|
+
alt: 'Вилла с бассейном и садом на закате',
|
|
315
|
+
tag: 'Хит',
|
|
316
|
+
title: 'Вилла с бассейном',
|
|
317
|
+
subtitle: 'Португалия, Синтра · 6 гостей',
|
|
318
|
+
price: '18 400 ₽ за ночь'
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
id: 'jungle',
|
|
322
|
+
src: '/images/temp/airbnb.webp',
|
|
323
|
+
alt: 'Деревянный дом в джунглях рядом с водопадом',
|
|
324
|
+
tag: 'Новинка',
|
|
325
|
+
title: 'Дом у водопада',
|
|
326
|
+
subtitle: 'Бали, Убуд · 4 гостя',
|
|
327
|
+
price: '9 900 ₽ за ночь'
|
|
328
|
+
}
|
|
329
|
+
];
|
|
330
|
+
</script>
|
|
331
|
+
|
|
332
|
+
<template>
|
|
333
|
+
<div class="flex flex-wrap justify-center gap-4">
|
|
334
|
+
<CdsCard v-for="listing in listings" :key="listing.id" width="300">
|
|
335
|
+
<CdsImage
|
|
336
|
+
class="items-start"
|
|
337
|
+
:src="listing.src"
|
|
338
|
+
:alt="listing.alt"
|
|
339
|
+
aspect-ratio="4/3"
|
|
340
|
+
color="surface-secondary"
|
|
341
|
+
cover
|
|
342
|
+
>
|
|
343
|
+
<CdsTag class="m-2" color="green" size="sm">{{ listing.tag }}</CdsTag>
|
|
344
|
+
</CdsImage>
|
|
345
|
+
|
|
346
|
+
<CdsCardItem>
|
|
347
|
+
<CdsCardTitle>{{ listing.title }}</CdsCardTitle>
|
|
348
|
+
<CdsCardSubtitle>{{ listing.subtitle }}</CdsCardSubtitle>
|
|
349
|
+
</CdsCardItem>
|
|
350
|
+
|
|
351
|
+
<CdsCardActions class="justify-between">
|
|
352
|
+
<span class="text-200 text-content-primary">{{ listing.price }}</span>
|
|
353
|
+
<CdsButton size="sm" text="Забронировать" />
|
|
354
|
+
</CdsCardActions>
|
|
355
|
+
</CdsCard>
|
|
356
|
+
</div>
|
|
357
|
+
</template>
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## Page cover
|
|
361
|
+
|
|
362
|
+
A wide header with text over a photo: `height` sets the height of the band, `cover` and `position` crop the shot to fit it, and `gradient` darkens the bottom so that the title and the button stay readable. Such a picture needs `eager` — it is on the first screen and has no reason to wait for the viewport.
|
|
363
|
+
|
|
364
|
+
**Example (SFC):**
|
|
365
|
+
|
|
366
|
+
```vue
|
|
367
|
+
<script setup lang="ts">
|
|
368
|
+
import { CdsButton, CdsImage } from '@central-design-system/components';
|
|
369
|
+
</script>
|
|
370
|
+
|
|
371
|
+
<template>
|
|
372
|
+
<CdsImage
|
|
373
|
+
class="items-end"
|
|
374
|
+
src="/images/temp/wallpaper.webp"
|
|
375
|
+
alt="Туман над лесным озером на рассвете"
|
|
376
|
+
width="100%"
|
|
377
|
+
height="280"
|
|
378
|
+
gradient="to top, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.1) 70%"
|
|
379
|
+
position="center"
|
|
380
|
+
eager
|
|
381
|
+
cover
|
|
382
|
+
>
|
|
383
|
+
<div class="flex w-full flex-col items-start gap-2 p-4">
|
|
384
|
+
<p class="text-500 text-content-on-dark">Маршруты выходного дня</p>
|
|
385
|
+
<p class="max-w-md text-200 text-content-on-dark opacity-80">
|
|
386
|
+
Двенадцать озёр в двух часах езды от города — с картами, точками старта и списком снаряжения.
|
|
387
|
+
</p>
|
|
388
|
+
<CdsButton appearance="inverse" text="Открыть подборку" />
|
|
389
|
+
</div>
|
|
390
|
+
</CdsImage>
|
|
391
|
+
</template>
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
## Gallery with previews
|
|
395
|
+
|
|
396
|
+
A click on a thumbnail changes the `src` of the large image. The thumbnails get a shared `aspect-ratio` and `cover`, so the row stays even, and `color` holds the backdrop of the large frame while the new file is loading. If the frames also have to be flipped — with arrows or a swipe — take the ready-made [“Gallery with thumbnails”](../cds-carousel/api.md) scenario of CdsCarousel.
|
|
397
|
+
|
|
398
|
+
**Example (SFC):**
|
|
399
|
+
|
|
400
|
+
```vue
|
|
401
|
+
<script setup lang="ts">
|
|
402
|
+
import { CdsImage } from '@central-design-system/components';
|
|
403
|
+
import { computed, ref } from 'vue';
|
|
404
|
+
|
|
405
|
+
const photos = [
|
|
406
|
+
{ src: '/images/temp/villa.webp', alt: 'Вилла с бассейном и садом на закате' },
|
|
407
|
+
{ src: '/images/temp/airbnb.webp', alt: 'Деревянный дом в джунглях рядом с водопадом' },
|
|
408
|
+
{ src: '/images/temp/wallpaper.webp', alt: 'Туман над лесным озером на рассвете' },
|
|
409
|
+
{ src: '/images/temp/desert.webp', alt: 'Столовые горы на закате' },
|
|
410
|
+
{ src: '/images/temp/space.webp', alt: 'Человек в скафандре под звёздным небом' }
|
|
411
|
+
];
|
|
412
|
+
|
|
413
|
+
const active = ref(0);
|
|
414
|
+
const current = computed(() => photos[active.value]);
|
|
415
|
+
</script>
|
|
416
|
+
|
|
417
|
+
<template>
|
|
418
|
+
<div class="m-auto flex w-full max-w-[560px] flex-col gap-2">
|
|
419
|
+
<CdsImage :src="current.src" :alt="current.alt" color="surface-secondary" width="100%" aspect-ratio="16/9" cover />
|
|
420
|
+
|
|
421
|
+
<div class="flex flex-wrap gap-2">
|
|
422
|
+
<button
|
|
423
|
+
v-for="(photo, index) in photos"
|
|
424
|
+
:key="photo.src"
|
|
425
|
+
type="button"
|
|
426
|
+
class="cursor-pointer overflow-hidden rounded-200 border-2"
|
|
427
|
+
:class="index === active ? 'border-brand-primary' : 'border-transparent'"
|
|
428
|
+
:aria-label="photo.alt"
|
|
429
|
+
:aria-current="index === active"
|
|
430
|
+
@click="active = index"
|
|
431
|
+
>
|
|
432
|
+
<CdsImage :src="photo.src" alt="" width="88" aspect-ratio="1" cover />
|
|
433
|
+
</button>
|
|
434
|
+
</div>
|
|
435
|
+
</div>
|
|
436
|
+
</template>
|
|
437
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsImage — 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 same aspect-ratio and cover keep the row even, even when the sources differ in size. | Without set proportions every picture pulls its own height and the row falls apart. |
|
|
9
|
+
| Show diagrams, plans and logos in full — without cover. | cover crops the edges and part of the diagram is lost. |
|
|
10
|
+
| A gradient under the text holds the contrast on any picture. | Text placed straight on a photo blends into the light areas. |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# CdsImage — 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
|
+
## _CdsImage.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
// Токены 3-го уровня компонента CdsImage.
|
|
11
|
+
|
|
12
|
+
// Размытие изображения-заглушки (lazy-src), показываемого до загрузки основного.
|
|
13
|
+
$image-preload-filter: blur(4px) !default;
|
|
14
|
+
```
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# CdsInput — API
|
|
2
|
+
|
|
3
|
+
> Generated from meta.json by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> Examples: [examples.md](examples.md) · Tokens: [tokens.md](tokens.md)
|
|
5
|
+
|
|
6
|
+
The wrapper of an input: the label, the description, the outer icons, the block of messages and the validation by rules. You put the control itself into the `default` slot — usually a [CdsField](../cds-field/api.md) with your `input` inside.
|
|
7
|
+
|
|
8
|
+
## CdsInput
|
|
9
|
+
|
|
10
|
+
**Props**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Required | Description |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| `activeColor` | `string \| undefined` | — | no | Color of the component in its active state |
|
|
15
|
+
| `appendIcon` | `IconValue \| undefined` | — | no | Icon in the append slot, after the content |
|
|
16
|
+
| `baseColor` | `string \| undefined` | — | no | Color of the component in its inactive state |
|
|
17
|
+
| `bgColor` | `string \| undefined` | — | no | Background color of the component |
|
|
18
|
+
| `centerAffix` | `boolean \| undefined` | `true` | no | Vertically center the appendInner, prependInner, clearIcon and label elements. |
|
|
19
|
+
| `color` | `string \| undefined` | — | no | Component color |
|
|
20
|
+
| `description` | `string \| undefined` | — | no | Description of the component, shown under the label |
|
|
21
|
+
| `direction` | `"horizontal" \| "vertical" \| undefined` | `'horizontal'` | no | Switches the component between horizontal and vertical layout. |
|
|
22
|
+
| `disabled` | `boolean \| null \| undefined` | `null` | no | Disabled state |
|
|
23
|
+
| `error` | `boolean \| undefined` | — | no | Puts the component into the error state |
|
|
24
|
+
| `errorMessages` | `string \| readonly string[] \| null \| undefined` | `[]` | no | Puts the component into the error state and passes custom error messages. They are merged with any checks defined in the `rules` prop. This field does not trigger validation. |
|
|
25
|
+
| `focused` | `boolean \| undefined` | — | no | Controls the focus state of the component. When `true`, the component is considered focused and may apply the corresponding styles or behavior. |
|
|
26
|
+
| `hideDetails` | `boolean \| "auto" \| undefined` | — | no | Hides the details block (messages and hints). With the 'auto' value the block is hidden when there are no messages |
|
|
27
|
+
| `hideMessages` | `boolean \| undefined` | — | no | Hide the messages under the input |
|
|
28
|
+
| `hint` | `string \| undefined` | — | no | Hint text shown under the input |
|
|
29
|
+
| `iconColor` | `string \| boolean \| undefined` | — | no | Icon color. Accepts a boolean or a color string |
|
|
30
|
+
| `id` | `string \| undefined` | — | no | Unique identifier of the component |
|
|
31
|
+
| `label` | `string \| undefined` | — | no | Label text of the component |
|
|
32
|
+
| `maxErrors` | `string \| number \| undefined` | `1` | no | Maximum number of validation errors shown |
|
|
33
|
+
| `maxWidth` | `string \| number \| undefined` | — | no | Maximum component width |
|
|
34
|
+
| `messages` | `string \| readonly string[] \| undefined` | `[]` | no | Messages shown under the input |
|
|
35
|
+
| `minWidth` | `string \| number \| undefined` | — | no | Minimum component width |
|
|
36
|
+
| `modelValue` | `any` | — | no | Value of the component in v-model. If the component supports the multiple prop, an empty array is used by default. |
|
|
37
|
+
| `name` | `string \| undefined` | — | no | Name of the input |
|
|
38
|
+
| `persistentHint` | `boolean \| undefined` | — | no | Always show the hint, not only on focus |
|
|
39
|
+
| `prependIcon` | `IconValue \| undefined` | — | no | Icon in the prepend slot, before the content |
|
|
40
|
+
| `readonly` | `boolean \| null \| undefined` | `null` | no | Read-only state |
|
|
41
|
+
| `rules` | `readonly ValidationRule[] \| undefined` | `[]` | no | Accepts an array of items of different types: functions, booleans and strings. Functions take the input value as an argument and must return either true / false, or a string with an error message. The input goes into the error state if a function returns false (or any value in the array is false) or is a string. |
|
|
42
|
+
| `size` | `number \| "xs" \| "sm" \| "md" \| "lg" \| "xl" \| undefined` | `'md'` | no | Size of the component |
|
|
43
|
+
| `textColor` | `string \| undefined` | — | no | Text color of the component |
|
|
44
|
+
| `theme` | `string \| undefined` | — | no | Component theme |
|
|
45
|
+
| `validateOn` | `ValidateOn \| undefined` | — | no | Changes the type of the event that triggers validation |
|
|
46
|
+
| `validationValue` | `any` | — | no | Value used when applying the validation rules |
|
|
47
|
+
| `width` | `string \| number \| undefined` | — | no | Component width |
|
|
48
|
+
|
|
49
|
+
**Events**
|
|
50
|
+
|
|
51
|
+
| Name | Type | Description |
|
|
52
|
+
| --- | --- | --- |
|
|
53
|
+
| `update:modelValue` | `[value: any]` | Fires when the model of the component changes |
|
|
54
|
+
|
|
55
|
+
**Slots**
|
|
56
|
+
|
|
57
|
+
| Name | Type | Description |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| `append` | `CdsInputSlot` | Adds an element after the input |
|
|
60
|
+
| `default` | `CdsInputSlot` | Default slot |
|
|
61
|
+
| `description` | `{ description: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsDescription component |
|
|
62
|
+
| `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
|
|
63
|
+
| `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
|
|
64
|
+
| `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
|
|
65
|
+
| `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
|
|
66
|
+
| `prepend` | `CdsInputSlot` | Adds an element before the input |
|
|
67
|
+
|
|
68
|
+
**Exposed**
|
|
69
|
+
|
|
70
|
+
| Name | Type | Description |
|
|
71
|
+
| --- | --- | --- |
|
|
72
|
+
| `isDirty` | `boolean` | Whether the input is dirty |
|
|
73
|
+
| `isDisabled` | `boolean` | Whether the input is disabled |
|
|
74
|
+
| `isPure` | `boolean` | Whether the input is pure |
|
|
75
|
+
| `isReadonly` | `boolean` | Whether the input is read-only |
|
|
76
|
+
| `isValid` | `boolean \| null` | Whether the input is valid |
|
|
77
|
+
| `isValidating` | `boolean` | Whether the input is being validated |
|
|
78
|
+
| `reset` | `() => Promise<void>` | Resets the input to its initial state |
|
|
79
|
+
| `resetValidation` | `() => Promise<void>` | Resets the validation of the input |
|
|
80
|
+
| `validate` | `(silent?: boolean) => Promise<string[]>` | Validates the input |
|