@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,569 @@
|
|
|
1
|
+
# CdsExpandablePanel — 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 expandable panel hides the details behind a title: you see the list of topics and open only the one you need. Take it for FAQs, optional settings and long descriptions that turn a page into an endless feed.
|
|
7
|
+
|
|
8
|
+
## Panel group
|
|
9
|
+
|
|
10
|
+
`CdsExpandablePanel` does not work without the `CdsExpandablePanels` wrapper — the group is what handles expansion. A simple panel is built from the `title` and `text` props, without slots. By default one panel stays open: opening the next one collapses the previous.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsExpandablePanel, CdsExpandablePanels } from '@central-design-system/components';
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<CdsExpandablePanels class="m-auto max-w-[500px]">
|
|
21
|
+
<CdsExpandablePanel
|
|
22
|
+
title="Условия доставки"
|
|
23
|
+
text="Курьер привезёт заказ в течение трёх рабочих дней и позвонит за час до визита."
|
|
24
|
+
/>
|
|
25
|
+
<CdsExpandablePanel
|
|
26
|
+
title="Способы оплаты"
|
|
27
|
+
text="Оплатите картой онлайн или запросите счёт — он придёт на почту в течение часа."
|
|
28
|
+
/>
|
|
29
|
+
<CdsExpandablePanel
|
|
30
|
+
title="Возврат"
|
|
31
|
+
text="Вернуть товар можно в течение 14 дней после получения, если он не был в использовании."
|
|
32
|
+
/>
|
|
33
|
+
</CdsExpandablePanels>
|
|
34
|
+
</template>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Appearance
|
|
38
|
+
|
|
39
|
+
The `gap` prop changes the spacing between panels — it accepts a number or a string with CSS units.
|
|
40
|
+
|
|
41
|
+
**Example (SFC):**
|
|
42
|
+
|
|
43
|
+
```vue
|
|
44
|
+
<script setup lang="ts">
|
|
45
|
+
import { CdsExpandablePanel, CdsExpandablePanels } from '@central-design-system/components';
|
|
46
|
+
|
|
47
|
+
const appearances = ['primary', 'secondary', 'transparent'] as const;
|
|
48
|
+
|
|
49
|
+
const text = 'Курьер привезёт заказ в течение трёх рабочих дней и позвонит за час до визита.';
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<template>
|
|
53
|
+
<div class="m-auto flex max-w-[500px] flex-col gap-4">
|
|
54
|
+
<CdsExpandablePanels v-for="appearance in appearances" :key="appearance" :appearance="appearance">
|
|
55
|
+
<CdsExpandablePanel :title="`Внешний вид ${appearance}`" :text="text" />
|
|
56
|
+
<CdsExpandablePanel title="Способы оплаты" text="Оплатите картой онлайн или запросите счёт." />
|
|
57
|
+
</CdsExpandablePanels>
|
|
58
|
+
</div>
|
|
59
|
+
</template>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Layout
|
|
63
|
+
|
|
64
|
+
The `variant="accordion"` prop removes the spacing and glues the panels into a single block with shared rounded corners. A list of several questions then reads as one table instead of a set of cards.
|
|
65
|
+
|
|
66
|
+
**Example (SFC):**
|
|
67
|
+
|
|
68
|
+
```vue
|
|
69
|
+
<script setup lang="ts">
|
|
70
|
+
import { CdsExpandablePanel, CdsExpandablePanels } from '@central-design-system/components';
|
|
71
|
+
</script>
|
|
72
|
+
|
|
73
|
+
<template>
|
|
74
|
+
<CdsExpandablePanels variant="accordion" class="m-auto max-w-[500px]">
|
|
75
|
+
<CdsExpandablePanel
|
|
76
|
+
title="Условия доставки"
|
|
77
|
+
text="Курьер привезёт заказ в течение трёх рабочих дней и позвонит за час до визита."
|
|
78
|
+
/>
|
|
79
|
+
<CdsExpandablePanel
|
|
80
|
+
title="Способы оплаты"
|
|
81
|
+
text="Оплатите картой онлайн или запросите счёт — он придёт на почту в течение часа."
|
|
82
|
+
/>
|
|
83
|
+
<CdsExpandablePanel
|
|
84
|
+
title="Возврат"
|
|
85
|
+
text="Вернуть товар можно в течение 14 дней после получения, если он не был в использовании."
|
|
86
|
+
/>
|
|
87
|
+
</CdsExpandablePanels>
|
|
88
|
+
</template>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Expansion
|
|
92
|
+
|
|
93
|
+
The `multiple` prop allows several panels to stay open at once. Through `v-model` you read and set what is expanded: the index of the panel (or its `value`) in the regular mode, and an array in `multiple`. The `mandatory` prop forbids collapsing the last open panel, and `max` limits how many can be expanded at the same time.
|
|
94
|
+
|
|
95
|
+
**Example (SFC):**
|
|
96
|
+
|
|
97
|
+
```vue
|
|
98
|
+
<script setup lang="ts">
|
|
99
|
+
import { CdsExpandablePanel, CdsExpandablePanels } from '@central-design-system/components';
|
|
100
|
+
import { ref } from 'vue';
|
|
101
|
+
|
|
102
|
+
const opened = ref<number[]>([0]);
|
|
103
|
+
|
|
104
|
+
const sections = [
|
|
105
|
+
{ title: 'Условия доставки', text: 'Курьер привезёт заказ в течение трёх рабочих дней.' },
|
|
106
|
+
{ title: 'Способы оплаты', text: 'Оплатите картой онлайн или запросите счёт.' },
|
|
107
|
+
{ title: 'Возврат', text: 'Вернуть товар можно в течение 14 дней после получения.' }
|
|
108
|
+
];
|
|
109
|
+
</script>
|
|
110
|
+
|
|
111
|
+
<template>
|
|
112
|
+
<div class="m-auto flex max-w-[500px] flex-col gap-2">
|
|
113
|
+
<span class="text-content-secondary">Раскрыты: {{ opened }}</span>
|
|
114
|
+
|
|
115
|
+
<CdsExpandablePanels v-model="opened" multiple>
|
|
116
|
+
<CdsExpandablePanel
|
|
117
|
+
v-for="(section, index) in sections"
|
|
118
|
+
:key="index"
|
|
119
|
+
:value="index"
|
|
120
|
+
:title="section.title"
|
|
121
|
+
:text="section.text"
|
|
122
|
+
/>
|
|
123
|
+
</CdsExpandablePanels>
|
|
124
|
+
</div>
|
|
125
|
+
</template>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## States
|
|
129
|
+
|
|
130
|
+
The `disabled` prop blocks a single panel when set on the panel, and all of them when set on the group: the title stops responding and loses contrast. The `readonly` prop leaves the panels in their current state — use it in a view mode where the content has to be visible but there is nothing to toggle.
|
|
131
|
+
|
|
132
|
+
**Example (SFC):**
|
|
133
|
+
|
|
134
|
+
```vue
|
|
135
|
+
<script setup lang="ts">
|
|
136
|
+
import { CdsExpandablePanel, CdsExpandablePanels } from '@central-design-system/components';
|
|
137
|
+
|
|
138
|
+
const text = 'Курьер привезёт заказ в течение трёх рабочих дней и позвонит за час до визита.';
|
|
139
|
+
</script>
|
|
140
|
+
|
|
141
|
+
<template>
|
|
142
|
+
<div class="m-auto flex max-w-[500px] flex-col gap-4">
|
|
143
|
+
<CdsExpandablePanels>
|
|
144
|
+
<CdsExpandablePanel title="Доступная панель" :text="text" />
|
|
145
|
+
<CdsExpandablePanel disabled title="Заблокированная панель" :text="text" />
|
|
146
|
+
</CdsExpandablePanels>
|
|
147
|
+
|
|
148
|
+
<CdsExpandablePanels disabled>
|
|
149
|
+
<CdsExpandablePanel title="Вся группа заблокирована" :text="text" />
|
|
150
|
+
<CdsExpandablePanel title="Способы оплаты" text="Оплатите картой онлайн или запросите счёт." />
|
|
151
|
+
</CdsExpandablePanels>
|
|
152
|
+
|
|
153
|
+
<CdsExpandablePanels readonly :model-value="0">
|
|
154
|
+
<CdsExpandablePanel title="Только для чтения — панель раскрыта и не сворачивается" :text="text" />
|
|
155
|
+
</CdsExpandablePanels>
|
|
156
|
+
</div>
|
|
157
|
+
</template>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Icons
|
|
161
|
+
|
|
162
|
+
The state icon comes from the `expand-icon` and `collapse-icon` props — on the group, on the panel or on an individual title; the value from the closest level wins. The `action` slot of the title replaces the icon entirely and receives the state of the panel, and `hide-actions` removes it altogether.
|
|
163
|
+
|
|
164
|
+
**Example (SFC):**
|
|
165
|
+
|
|
166
|
+
```vue
|
|
167
|
+
<script setup lang="ts">
|
|
168
|
+
import {
|
|
169
|
+
CdsExpandablePanel,
|
|
170
|
+
CdsExpandablePanels,
|
|
171
|
+
CdsExpandablePanelTitle,
|
|
172
|
+
CdsIcon
|
|
173
|
+
} from '@central-design-system/components';
|
|
174
|
+
|
|
175
|
+
const text = 'Курьер привезёт заказ в течение трёх рабочих дней и позвонит за час до визита.';
|
|
176
|
+
</script>
|
|
177
|
+
|
|
178
|
+
<template>
|
|
179
|
+
<CdsExpandablePanels class="m-auto max-w-[500px]">
|
|
180
|
+
<CdsExpandablePanel title="Иконки на панели" expand-icon="add" collapse-icon="minus" :text="text" />
|
|
181
|
+
|
|
182
|
+
<CdsExpandablePanel :text="text">
|
|
183
|
+
<CdsExpandablePanelTitle expand-icon="chevron-right" collapse-icon="chevron-down">
|
|
184
|
+
Иконки на заголовке
|
|
185
|
+
</CdsExpandablePanelTitle>
|
|
186
|
+
</CdsExpandablePanel>
|
|
187
|
+
|
|
188
|
+
<CdsExpandablePanel :text="text">
|
|
189
|
+
<CdsExpandablePanelTitle>
|
|
190
|
+
Своя разметка в слоте action
|
|
191
|
+
|
|
192
|
+
<template #action="{ expanded }">
|
|
193
|
+
<CdsIcon :name="expanded ? 'visibility-off' : 'visibility-on'" />
|
|
194
|
+
</template>
|
|
195
|
+
</CdsExpandablePanelTitle>
|
|
196
|
+
</CdsExpandablePanel>
|
|
197
|
+
|
|
198
|
+
<CdsExpandablePanel hide-actions title="Без иконки" :text="text" />
|
|
199
|
+
</CdsExpandablePanels>
|
|
200
|
+
</template>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Slots
|
|
204
|
+
|
|
205
|
+
The `title` and `text` props are enough for a text panel. As soon as the title needs a counter, a status or an icon, assemble it from `CdsExpandablePanelTitle` and `CdsExpandablePanelContent`.
|
|
206
|
+
|
|
207
|
+
**Example (SFC):**
|
|
208
|
+
|
|
209
|
+
```vue
|
|
210
|
+
<script setup lang="ts">
|
|
211
|
+
import {
|
|
212
|
+
CdsBadge,
|
|
213
|
+
CdsExpandablePanel,
|
|
214
|
+
CdsExpandablePanelContent,
|
|
215
|
+
CdsExpandablePanels,
|
|
216
|
+
CdsExpandablePanelTitle,
|
|
217
|
+
CdsIcon,
|
|
218
|
+
CdsLink,
|
|
219
|
+
CdsTag
|
|
220
|
+
} from '@central-design-system/components';
|
|
221
|
+
</script>
|
|
222
|
+
|
|
223
|
+
<template>
|
|
224
|
+
<CdsExpandablePanels class="m-auto max-w-[500px]">
|
|
225
|
+
<CdsExpandablePanel>
|
|
226
|
+
<CdsExpandablePanelTitle>
|
|
227
|
+
<div class="flex w-full items-center gap-1">
|
|
228
|
+
<CdsIcon name="doc" />
|
|
229
|
+
<span>Документы</span>
|
|
230
|
+
<CdsBadge inline :content="12" />
|
|
231
|
+
</div>
|
|
232
|
+
</CdsExpandablePanelTitle>
|
|
233
|
+
|
|
234
|
+
<CdsExpandablePanelContent>
|
|
235
|
+
<div class="flex flex-col gap-1">
|
|
236
|
+
<CdsLink href="#" text="Договор поставки.pdf" />
|
|
237
|
+
<CdsLink href="#" text="Спецификация.xlsx" />
|
|
238
|
+
</div>
|
|
239
|
+
</CdsExpandablePanelContent>
|
|
240
|
+
</CdsExpandablePanel>
|
|
241
|
+
|
|
242
|
+
<CdsExpandablePanel>
|
|
243
|
+
<CdsExpandablePanelTitle>
|
|
244
|
+
<template #default="{ expanded }">
|
|
245
|
+
<div class="flex flex-col gap-0.5">
|
|
246
|
+
<span>Статус заявки</span>
|
|
247
|
+
<span v-if="!expanded" class="text-content-secondary">На согласовании у трёх участников</span>
|
|
248
|
+
</div>
|
|
249
|
+
</template>
|
|
250
|
+
</CdsExpandablePanelTitle>
|
|
251
|
+
|
|
252
|
+
<CdsExpandablePanelContent>
|
|
253
|
+
<div class="flex flex-wrap gap-1">
|
|
254
|
+
<CdsTag text="Иванов — согласовано" />
|
|
255
|
+
<CdsTag text="Петрова — в работе" />
|
|
256
|
+
<CdsTag text="Сидоров — ждёт" />
|
|
257
|
+
</div>
|
|
258
|
+
</CdsExpandablePanelContent>
|
|
259
|
+
</CdsExpandablePanel>
|
|
260
|
+
</CdsExpandablePanels>
|
|
261
|
+
</template>
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Questions and answers
|
|
265
|
+
|
|
266
|
+
The classic case for `accordion`: the whole list of questions stays visible and an answer opens on click. Only one answer is open at a time, so the reader does not lose their place in the list. The content renders only after the first expansion; if the answers have to show up in search results, turn on `eager`.
|
|
267
|
+
|
|
268
|
+
**Example (SFC):**
|
|
269
|
+
|
|
270
|
+
```vue
|
|
271
|
+
<script setup lang="ts">
|
|
272
|
+
import { CdsExpandablePanel, CdsExpandablePanels } from '@central-design-system/components';
|
|
273
|
+
|
|
274
|
+
const questions = [
|
|
275
|
+
{
|
|
276
|
+
title: 'Как оплатить заказ по счёту?',
|
|
277
|
+
text: 'Выберите оплату по счёту при оформлении — документ придёт на почту в течение часа. Заказ уйдёт в работу после поступления денег.'
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
title: 'Можно ли изменить состав заказа после оформления?',
|
|
281
|
+
text: 'Пока заказ не передан в доставку, состав можно изменить в личном кабинете. После передачи курьеру изменения принимает только служба поддержки.'
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
title: 'Сколько идёт доставка в регионы?',
|
|
285
|
+
text: 'От трёх до семи рабочих дней в зависимости от региона. Точный срок появится на странице заказа после сборки.'
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
title: 'Как вернуть товар?',
|
|
289
|
+
text: 'Оставьте заявку на возврат в течение 14 дней после получения. Деньги вернутся тем же способом, которым вы платили.'
|
|
290
|
+
}
|
|
291
|
+
];
|
|
292
|
+
</script>
|
|
293
|
+
|
|
294
|
+
<template>
|
|
295
|
+
<CdsExpandablePanels variant="accordion" class="m-auto max-w-[560px]">
|
|
296
|
+
<CdsExpandablePanel
|
|
297
|
+
v-for="question in questions"
|
|
298
|
+
:key="question.title"
|
|
299
|
+
:title="question.title"
|
|
300
|
+
:text="question.text"
|
|
301
|
+
/>
|
|
302
|
+
</CdsExpandablePanels>
|
|
303
|
+
</template>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Form with a summary
|
|
307
|
+
|
|
308
|
+
The title shows the current value, and the expanded panel holds the field that changes it. The `default` slot of the title receives `expanded`, so the caption can change on the fly. Such a form takes little space and keeps what has already been filled in visible.
|
|
309
|
+
|
|
310
|
+
**Example (SFC):**
|
|
311
|
+
|
|
312
|
+
```vue
|
|
313
|
+
<script setup lang="ts">
|
|
314
|
+
import {
|
|
315
|
+
CdsDatePicker,
|
|
316
|
+
CdsExpandablePanel,
|
|
317
|
+
CdsExpandablePanelContent,
|
|
318
|
+
CdsExpandablePanels,
|
|
319
|
+
CdsExpandablePanelTitle,
|
|
320
|
+
CdsSelect,
|
|
321
|
+
CdsTextInput
|
|
322
|
+
} from '@central-design-system/components';
|
|
323
|
+
import { computed, ref, unref } from 'vue';
|
|
324
|
+
|
|
325
|
+
const name = ref('На Байкал');
|
|
326
|
+
const selected = ref('third');
|
|
327
|
+
const dateRange = ref({ from: '01.01.2026', to: '10.01.2026' });
|
|
328
|
+
|
|
329
|
+
const items = ref([
|
|
330
|
+
{ title: 'Москва', value: 'first' },
|
|
331
|
+
{ title: 'Санкт-Петербург', value: 'second' },
|
|
332
|
+
{ title: 'Иркутск', value: 'third' }
|
|
333
|
+
]);
|
|
334
|
+
|
|
335
|
+
const cityName = computed(() => unref(items).find((item) => item.value === unref(selected))?.title);
|
|
336
|
+
</script>
|
|
337
|
+
|
|
338
|
+
<template>
|
|
339
|
+
<CdsExpandablePanels class="m-auto max-w-[500px]">
|
|
340
|
+
<CdsExpandablePanel>
|
|
341
|
+
<CdsExpandablePanelTitle expand-icon="edit" collapse-icon="minus">
|
|
342
|
+
<template #default="{ expanded }">
|
|
343
|
+
<div class="flex flex-col gap-0.5">
|
|
344
|
+
<span>Название путешествия</span>
|
|
345
|
+
<span :class="['text-content-secondary', { italic: expanded }]">{{ name }}</span>
|
|
346
|
+
</div>
|
|
347
|
+
</template>
|
|
348
|
+
</CdsExpandablePanelTitle>
|
|
349
|
+
|
|
350
|
+
<CdsExpandablePanelContent>
|
|
351
|
+
<CdsTextInput v-model="name" hide-messages label="Название" placeholder="Введите название" />
|
|
352
|
+
</CdsExpandablePanelContent>
|
|
353
|
+
</CdsExpandablePanel>
|
|
354
|
+
|
|
355
|
+
<CdsExpandablePanel>
|
|
356
|
+
<CdsExpandablePanelTitle expand-icon="pin" collapse-icon="minus">
|
|
357
|
+
<template #default="{ expanded }">
|
|
358
|
+
<div class="flex flex-col gap-0.5">
|
|
359
|
+
<span>Город поездки</span>
|
|
360
|
+
<span :class="['text-content-secondary', { italic: expanded }]">{{ cityName }}</span>
|
|
361
|
+
</div>
|
|
362
|
+
</template>
|
|
363
|
+
</CdsExpandablePanelTitle>
|
|
364
|
+
|
|
365
|
+
<CdsExpandablePanelContent>
|
|
366
|
+
<CdsSelect v-model="selected" :items="items" placeholder="Выберите город" hide-messages />
|
|
367
|
+
</CdsExpandablePanelContent>
|
|
368
|
+
</CdsExpandablePanel>
|
|
369
|
+
|
|
370
|
+
<CdsExpandablePanel>
|
|
371
|
+
<CdsExpandablePanelTitle expand-icon="clock" collapse-icon="minus">
|
|
372
|
+
<template #default="{ expanded }">
|
|
373
|
+
<div class="flex flex-col gap-0.5">
|
|
374
|
+
<span>Даты поездки</span>
|
|
375
|
+
<span :class="['text-content-secondary', { italic: expanded }]">
|
|
376
|
+
{{ dateRange.from }}—{{ dateRange.to }}
|
|
377
|
+
</span>
|
|
378
|
+
</div>
|
|
379
|
+
</template>
|
|
380
|
+
</CdsExpandablePanelTitle>
|
|
381
|
+
|
|
382
|
+
<CdsExpandablePanelContent>
|
|
383
|
+
<CdsDatePicker v-model="dateRange" range />
|
|
384
|
+
</CdsExpandablePanelContent>
|
|
385
|
+
</CdsExpandablePanel>
|
|
386
|
+
</CdsExpandablePanels>
|
|
387
|
+
</template>
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
## Filters in a sidebar
|
|
391
|
+
|
|
392
|
+
Groups of filters in a side panel: `multiple` keeps the needed sections open, `transparent` removes the extra background, and a badge in the title shows how many conditions are selected in a collapsed group.
|
|
393
|
+
|
|
394
|
+
**Example (SFC):**
|
|
395
|
+
|
|
396
|
+
```vue
|
|
397
|
+
<script setup lang="ts">
|
|
398
|
+
import {
|
|
399
|
+
CdsBadge,
|
|
400
|
+
CdsCheckbox,
|
|
401
|
+
CdsExpandablePanel,
|
|
402
|
+
CdsExpandablePanelContent,
|
|
403
|
+
CdsExpandablePanels,
|
|
404
|
+
CdsExpandablePanelTitle
|
|
405
|
+
} from '@central-design-system/components';
|
|
406
|
+
import { computed, ref } from 'vue';
|
|
407
|
+
|
|
408
|
+
const documents = [
|
|
409
|
+
{ name: 'Договор поставки № 14', type: 'Договор', status: 'Подписан' },
|
|
410
|
+
{ name: 'Счёт № 209', type: 'Счёт', status: 'Черновик' },
|
|
411
|
+
{ name: 'Акт сверки за июнь', type: 'Акт', status: 'Подписан' },
|
|
412
|
+
{ name: 'Договор аренды № 7', type: 'Договор', status: 'Черновик' },
|
|
413
|
+
{ name: 'Счёт № 218', type: 'Счёт', status: 'Подписан' }
|
|
414
|
+
];
|
|
415
|
+
|
|
416
|
+
const types = ['Договор', 'Счёт', 'Акт'];
|
|
417
|
+
const statuses = ['Подписан', 'Черновик'];
|
|
418
|
+
|
|
419
|
+
const selectedTypes = ref<string[]>(['Договор']);
|
|
420
|
+
const selectedStatuses = ref<string[]>([]);
|
|
421
|
+
|
|
422
|
+
const filtered = computed(() =>
|
|
423
|
+
documents.filter(
|
|
424
|
+
(document) =>
|
|
425
|
+
(!selectedTypes.value.length || selectedTypes.value.includes(document.type)) &&
|
|
426
|
+
(!selectedStatuses.value.length || selectedStatuses.value.includes(document.status))
|
|
427
|
+
)
|
|
428
|
+
);
|
|
429
|
+
</script>
|
|
430
|
+
|
|
431
|
+
<template>
|
|
432
|
+
<div class="m-auto flex w-[520px] max-w-full gap-4">
|
|
433
|
+
<CdsExpandablePanels appearance="transparent" multiple :model-value="[0, 1]" class="w-[220px] shrink-0">
|
|
434
|
+
<CdsExpandablePanel>
|
|
435
|
+
<CdsExpandablePanelTitle>
|
|
436
|
+
<div class="flex w-full items-center gap-1">
|
|
437
|
+
<span>Тип</span>
|
|
438
|
+
<CdsBadge v-if="selectedTypes.length" inline :content="selectedTypes.length" />
|
|
439
|
+
</div>
|
|
440
|
+
</CdsExpandablePanelTitle>
|
|
441
|
+
|
|
442
|
+
<CdsExpandablePanelContent>
|
|
443
|
+
<div class="flex flex-col gap-1">
|
|
444
|
+
<CdsCheckbox
|
|
445
|
+
v-for="type in types"
|
|
446
|
+
:key="type"
|
|
447
|
+
v-model="selectedTypes"
|
|
448
|
+
:value="type"
|
|
449
|
+
:label="type"
|
|
450
|
+
hide-messages
|
|
451
|
+
/>
|
|
452
|
+
</div>
|
|
453
|
+
</CdsExpandablePanelContent>
|
|
454
|
+
</CdsExpandablePanel>
|
|
455
|
+
|
|
456
|
+
<CdsExpandablePanel>
|
|
457
|
+
<CdsExpandablePanelTitle>
|
|
458
|
+
<div class="flex w-full items-center gap-1">
|
|
459
|
+
<span>Статус</span>
|
|
460
|
+
<CdsBadge v-if="selectedStatuses.length" inline :content="selectedStatuses.length" />
|
|
461
|
+
</div>
|
|
462
|
+
</CdsExpandablePanelTitle>
|
|
463
|
+
|
|
464
|
+
<CdsExpandablePanelContent>
|
|
465
|
+
<div class="flex flex-col gap-1">
|
|
466
|
+
<CdsCheckbox
|
|
467
|
+
v-for="status in statuses"
|
|
468
|
+
:key="status"
|
|
469
|
+
v-model="selectedStatuses"
|
|
470
|
+
:value="status"
|
|
471
|
+
:label="status"
|
|
472
|
+
hide-messages
|
|
473
|
+
/>
|
|
474
|
+
</div>
|
|
475
|
+
</CdsExpandablePanelContent>
|
|
476
|
+
</CdsExpandablePanel>
|
|
477
|
+
</CdsExpandablePanels>
|
|
478
|
+
|
|
479
|
+
<ul class="m-0 flex list-none flex-col gap-1 p-0">
|
|
480
|
+
<li v-for="document in filtered" :key="document.name">{{ document.name }}</li>
|
|
481
|
+
<li v-if="!filtered.length" class="text-content-secondary">Ничего не найдено</li>
|
|
482
|
+
</ul>
|
|
483
|
+
</div>
|
|
484
|
+
</template>
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
## Step-by-step filling
|
|
488
|
+
|
|
489
|
+
The group slot hands over `next` and `prev` — buttons inside a panel move the reader to the next step, while `mandatory` prevents closing all of the steps at once. For long wizards with per-step validation take [CdsSteps](../cds-steps/api.md).
|
|
490
|
+
|
|
491
|
+
**Example (SFC):**
|
|
492
|
+
|
|
493
|
+
```vue
|
|
494
|
+
<script setup lang="ts">
|
|
495
|
+
import {
|
|
496
|
+
CdsButton,
|
|
497
|
+
CdsExpandablePanel,
|
|
498
|
+
CdsExpandablePanelContent,
|
|
499
|
+
CdsExpandablePanels,
|
|
500
|
+
CdsExpandablePanelTitle,
|
|
501
|
+
CdsSelect,
|
|
502
|
+
CdsTextInput
|
|
503
|
+
} from '@central-design-system/components';
|
|
504
|
+
import { ref } from 'vue';
|
|
505
|
+
|
|
506
|
+
const step = ref(0);
|
|
507
|
+
|
|
508
|
+
const company = ref('');
|
|
509
|
+
const city = ref('first');
|
|
510
|
+
const contact = ref('');
|
|
511
|
+
|
|
512
|
+
const cities = [
|
|
513
|
+
{ title: 'Москва', value: 'first' },
|
|
514
|
+
{ title: 'Санкт-Петербург', value: 'second' },
|
|
515
|
+
{ title: 'Новосибирск', value: 'third' }
|
|
516
|
+
];
|
|
517
|
+
</script>
|
|
518
|
+
|
|
519
|
+
<template>
|
|
520
|
+
<CdsExpandablePanels
|
|
521
|
+
v-model="step"
|
|
522
|
+
v-slot="{ next, prev }"
|
|
523
|
+
variant="accordion"
|
|
524
|
+
mandatory
|
|
525
|
+
class="m-auto max-w-[500px]"
|
|
526
|
+
>
|
|
527
|
+
<CdsExpandablePanel>
|
|
528
|
+
<CdsExpandablePanelTitle>Шаг 1. Организация</CdsExpandablePanelTitle>
|
|
529
|
+
|
|
530
|
+
<CdsExpandablePanelContent>
|
|
531
|
+
<div class="flex flex-col items-start gap-2">
|
|
532
|
+
<CdsTextInput v-model="company" label="Название организации" hide-messages class="w-full" />
|
|
533
|
+
<CdsButton text="Далее" @click="next" />
|
|
534
|
+
</div>
|
|
535
|
+
</CdsExpandablePanelContent>
|
|
536
|
+
</CdsExpandablePanel>
|
|
537
|
+
|
|
538
|
+
<CdsExpandablePanel>
|
|
539
|
+
<CdsExpandablePanelTitle>Шаг 2. Адрес</CdsExpandablePanelTitle>
|
|
540
|
+
|
|
541
|
+
<CdsExpandablePanelContent>
|
|
542
|
+
<div class="flex flex-col items-start gap-2">
|
|
543
|
+
<CdsSelect v-model="city" :items="cities" label="Город" hide-messages class="w-full" />
|
|
544
|
+
|
|
545
|
+
<div class="flex gap-2">
|
|
546
|
+
<CdsButton appearance="secondary" text="Назад" @click="prev" />
|
|
547
|
+
<CdsButton text="Далее" @click="next" />
|
|
548
|
+
</div>
|
|
549
|
+
</div>
|
|
550
|
+
</CdsExpandablePanelContent>
|
|
551
|
+
</CdsExpandablePanel>
|
|
552
|
+
|
|
553
|
+
<CdsExpandablePanel>
|
|
554
|
+
<CdsExpandablePanelTitle>Шаг 3. Контакт</CdsExpandablePanelTitle>
|
|
555
|
+
|
|
556
|
+
<CdsExpandablePanelContent>
|
|
557
|
+
<div class="flex flex-col items-start gap-2">
|
|
558
|
+
<CdsTextInput v-model="contact" label="Контактное лицо" hide-messages class="w-full" />
|
|
559
|
+
|
|
560
|
+
<div class="flex gap-2">
|
|
561
|
+
<CdsButton appearance="secondary" text="Назад" @click="prev" />
|
|
562
|
+
<CdsButton text="Отправить" />
|
|
563
|
+
</div>
|
|
564
|
+
</div>
|
|
565
|
+
</CdsExpandablePanelContent>
|
|
566
|
+
</CdsExpandablePanel>
|
|
567
|
+
</CdsExpandablePanels>
|
|
568
|
+
</template>
|
|
569
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsExpandablePanel — 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 title names the content — you can tell what is inside before opening it. | «Section 1» and «More» promise nothing: people open the panels at random. |
|
|
9
|
+
| Hide the secondary things behind a panel. Required fields stay in plain sight. | Hidden required fields are easy to miss — the form gets submitted with an error. |
|
|
10
|
+
| One level of panels: all the sections are visible at once. | A panel inside a panel buries the content two clicks deep — make a separate section instead. |
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# CdsExpandablePanel — 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
|
+
## _CdsExpandablePanel.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
// CdsExpandablePanels
|
|
11
|
+
$expandable-panels-gap: var(--cds-spacing-400) !default;
|
|
12
|
+
$expandable-panels-border-radius: var(--cds-border-radius-200) !default;
|
|
13
|
+
$expandable-panels-divider-width: var(--cds-border-100) !default;
|
|
14
|
+
$expandable-panels-divider-color: rgb(var(--cds-color-line-tertiary)) !default;
|
|
15
|
+
$expandable-panels-shadow-border-width: var(--cds-border-100) !default;
|
|
16
|
+
$expandable-panels-shadow-border-color: rgb(var(--cds-color-line-elevated)) !default;
|
|
17
|
+
|
|
18
|
+
// CdsExpandablePanel
|
|
19
|
+
$expandable-panel-background-primary: rgb(var(--cds-color-surface-elevated)) !default;
|
|
20
|
+
$expandable-panel-background-secondary: rgb(var(--cds-color-surface-secondary)) !default;
|
|
21
|
+
$expandable-panel-color: rgb(var(--cds-color-content-primary)) !default;
|
|
22
|
+
$expandable-panel-disabled-color: rgb(var(--cds-color-content-disable)) !default;
|
|
23
|
+
|
|
24
|
+
// CdsExpandablePanelTitle
|
|
25
|
+
$expandable-panel-title-padding: var(--cds-spacing-200) var(--cds-spacing-400) !default;
|
|
26
|
+
$expandable-panel-title-gap: var(--cds-spacing-200) !default;
|
|
27
|
+
$expandable-panel-title-hover-color: rgb(var(--cds-color-fill-primary-hover)) !default;
|
|
28
|
+
$expandable-panel-title-focus-color: rgb(var(--cds-color-line-focus-outline)) !default;
|
|
29
|
+
$expandable-panel-title-outline: var(--cds-border-200) solid !default;
|
|
30
|
+
|
|
31
|
+
// CdsExpandablePanelContent
|
|
32
|
+
$expandable-panel-content-border-radius: 0 0 var(--cds-border-radius-200) var(--cds-border-radius-200) !default;
|
|
33
|
+
$expandable-panel-content-padding: var(--cds-spacing-200) var(--cds-spacing-400) !default;
|
|
34
|
+
```
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# CdsField — 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 frame of an input: the background, the border, the focus and error states, the inner icons, the clear button and the loading indicator. You put the control itself into the `default` slot — the text fields, selects and autocompletes of the design system are built on `CdsField`.
|
|
7
|
+
|
|
8
|
+
## CdsField
|
|
9
|
+
|
|
10
|
+
**Props**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Required | Description |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| `active` | `boolean \| undefined` | — | no | Active state of the field |
|
|
15
|
+
| `activeColor` | `string \| undefined` | — | no | Color of the component in its active state |
|
|
16
|
+
| `appendInnerIcon` | `IconValue \| undefined` | — | no | Icon in the inner append slot, after the content of the field |
|
|
17
|
+
| `baseColor` | `string \| undefined` | — | no | Color of the component in its inactive state |
|
|
18
|
+
| `bgColor` | `string \| undefined` | — | no | Background color of the component |
|
|
19
|
+
| `centerAffix` | `boolean \| undefined` | — | no | Vertically center the appendInner, prependInner, clearIcon and label elements. |
|
|
20
|
+
| `clearable` | `boolean \| undefined` | — | no | Shows the clear button |
|
|
21
|
+
| `clearIcon` | `IconValue \| undefined` | `'remove'` | no | Icon of the clear button |
|
|
22
|
+
| `color` | `string \| undefined` | — | no | Component color |
|
|
23
|
+
| `details` | `boolean \| undefined` | — | no | Reserves the space for hints and error messages under the field |
|
|
24
|
+
| `dirty` | `boolean \| undefined` | — | no | Marks that the value of the field was changed by the user |
|
|
25
|
+
| `disabled` | `boolean \| null \| undefined` | `null` | no | Disabled state |
|
|
26
|
+
| `error` | `boolean \| undefined` | — | no | Error state |
|
|
27
|
+
| `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. |
|
|
28
|
+
| `iconColor` | `string \| boolean \| undefined` | — | no | Icon color. Accepts a boolean or a color string |
|
|
29
|
+
| `id` | `string \| undefined` | — | no | Field identifier — the value of the `id` HTML attribute for the inner control |
|
|
30
|
+
| `loading` | `string \| boolean \| undefined` | — | no | Loading indicator for the component |
|
|
31
|
+
| `persistentClearable` | `boolean \| undefined` | — | no | Always show the clear button, not only on hover or focus |
|
|
32
|
+
| `prependInnerIcon` | `IconValue \| undefined` | — | no | Icon in the inner prepend slot, before the content of the field |
|
|
33
|
+
| `readonly` | `boolean \| null \| undefined` | `null` | no | Read-only state |
|
|
34
|
+
| `reverse` | `boolean \| undefined` | — | no | Reverses the order of the elements inside the field |
|
|
35
|
+
| `size` | `number \| "xs" \| "sm" \| "md" \| "lg" \| "xl" \| undefined` | `'md'` | no | Size of the component |
|
|
36
|
+
| `textColor` | `string \| undefined` | — | no | Text color of the component |
|
|
37
|
+
| `theme` | `string \| undefined` | — | no | Component theme |
|
|
38
|
+
|
|
39
|
+
**Events**
|
|
40
|
+
|
|
41
|
+
| Name | Type | Description |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| `click:clear` | `[e: MouseEvent]` | Click on the clear button (clearable prop) |
|
|
44
|
+
| `update:focused` | `[focused: boolean]` | Fires when the element gains or loses focus |
|
|
45
|
+
| `update:modelValue` | `[value: any]` | Fires when the model of the component changes |
|
|
46
|
+
|
|
47
|
+
**Slots**
|
|
48
|
+
|
|
49
|
+
| Name | Type | Description |
|
|
50
|
+
| --- | --- | --- |
|
|
51
|
+
| `append-inner` | `CdsInputDefaultSlot` | Slot added at the end of the input |
|
|
52
|
+
| `clear` | `CdsInputDefaultSlot & { props: Record<string, any>; }` | Slot for a custom clear icon (shown when the clearable prop is true). |
|
|
53
|
+
| `default` | `CdsFieldSlot` | Content inside the field |
|
|
54
|
+
| `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
|
|
55
|
+
| `prepend-inner` | `CdsInputDefaultSlot` | Slot added at the start of the input |
|
|
56
|
+
|
|
57
|
+
**Exposed**
|
|
58
|
+
|
|
59
|
+
| Name | Type | Description |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| `controlRef` | `HTMLElement \| undefined` | Ref to the control of the input |
|
|
62
|
+
| `fieldIconColor` | `string \| undefined` | Icon color |
|