@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,158 @@
|
|
|
1
|
+
# CdsCombobox — API
|
|
2
|
+
|
|
3
|
+
> Generated from meta.json by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> Examples: [examples.md](examples.md) · Guidelines: [guidelines.md](guidelines.md) · Tokens: [tokens.md](tokens.md)
|
|
5
|
+
|
|
6
|
+
A combobox is a field with a dropdown list and free input: the value can be picked from the offered ones or typed in — the text itself becomes the value. The field is built on [CdsTextInput](../cds-text-input/api.md), and the menu and the list are the same as in [CdsSelect](../cds-select/api.md), so the label, the messages, validation and the menu behave identically.
|
|
7
|
+
|
|
8
|
+
## CdsCombobox
|
|
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
|
+
| `alwaysFilter` | `boolean \| undefined` | — | no | Filters the list even when the search query has not changed since the last selection. |
|
|
17
|
+
| `appendIcon` | `IconValue \| undefined` | — | no | Icon in the append slot, after the content |
|
|
18
|
+
| `appendInnerIcon` | `IconValue \| undefined` | — | no | Icon in the inner append slot, after the content of the field |
|
|
19
|
+
| `autocomplete` | `string \| undefined` | `'off'` | no | Helps to influence browser suggestions. The `suppress` value changes the name attribute of the fields, and `off` relies on the browser to stop suggesting values on its own. Any other value is passed to the built-in autocomplete of the corresponding element. |
|
|
20
|
+
| `autofocus` | `boolean \| undefined` | — | no | Enables autofocus |
|
|
21
|
+
| `autoSelectFirst` | `boolean \| "exact" \| undefined` | — | no | Highlights the first matching item as you type; Enter or Tab select it. The `exact` value highlights it only on a full match of the search query with the item title. |
|
|
22
|
+
| `baseColor` | `string \| undefined` | — | no | Color of the component in its inactive state |
|
|
23
|
+
| `bgColor` | `string \| undefined` | — | no | Background color of the component |
|
|
24
|
+
| `centerAffix` | `boolean \| undefined` | — | no | Vertically center the appendInner, prependInner, clearIcon and label elements. |
|
|
25
|
+
| `chips` | `boolean \| undefined` | — | no | Shows the selected values as removable chips (CdsTag). |
|
|
26
|
+
| `clearable` | `boolean \| undefined` | — | no | Shows the clear button |
|
|
27
|
+
| `clearIcon` | `IconValue \| undefined` | `'remove'` | no | Icon of the clear button |
|
|
28
|
+
| `clearOnSelect` | `boolean \| undefined` | `true` | no | Clears the search query after an item is selected (relevant for `multiple`). |
|
|
29
|
+
| `closableChips` | `boolean \| undefined` | — | no | Adds a remove button to the chips (relevant together with `chips`). |
|
|
30
|
+
| `closeText` | `string \| undefined` | `'$cds.close'` | no | Text for screen readers describing the close action of the menu. |
|
|
31
|
+
| `color` | `string \| undefined` | — | no | Component color |
|
|
32
|
+
| `counter` | `string \| number \| boolean \| undefined` | — | no | Character counter. Accepts a boolean, a number or a string |
|
|
33
|
+
| `counterValue` | `number \| ((value: any) => number) \| undefined` | — | no | Custom counter value. Either a number or a function computing it from the current value |
|
|
34
|
+
| `customFilter` | `FilterFunction \| undefined` | — | no | Your own value filtering function. Receives the value, the search query and the item, returns a match or `-1` |
|
|
35
|
+
| `customKeyFilter` | `FilterKeyFunctions \| undefined` | — | no | Separate filtering functions for specific item keys — an object of the form `{ key: function }` |
|
|
36
|
+
| `delimiters` | `readonly string[] \| undefined` | — | no | Delimiter characters: typing or pasting a string containing them splits it into several values (for `multiple` only). |
|
|
37
|
+
| `description` | `string \| undefined` | — | no | Description of the component, shown under the label |
|
|
38
|
+
| `disabled` | `boolean \| null \| undefined` | `null` | no | Disabled state |
|
|
39
|
+
| `eager` | `boolean \| undefined` | — | no | Renders the menu content upfront, without waiting for the first opening. |
|
|
40
|
+
| `ellipsis` | `boolean \| undefined` | — | no | In multiple mode keeps the selected values on a single line with an ellipsis |
|
|
41
|
+
| `error` | `boolean \| undefined` | — | no | Error state |
|
|
42
|
+
| `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. |
|
|
43
|
+
| `filterKeys` | `FilterKeys \| undefined` | `['title']` | no | Item keys the search runs over. By default filtering goes by the item title |
|
|
44
|
+
| `filterMode` | `FilterMode \| undefined` | `'intersection'` | no | How the results of `customKeyFilter` and of the general filtering are combined: by intersection, by union or by replacement |
|
|
45
|
+
| `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. |
|
|
46
|
+
| `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 |
|
|
47
|
+
| `hideMessages` | `boolean \| undefined` | — | no | Hide the messages under the input |
|
|
48
|
+
| `hideNoData` | `boolean \| undefined` | `true` | no | Hides the menu and the "no data" placeholder when the item list is empty. |
|
|
49
|
+
| `hideSelected` | `boolean \| undefined` | — | no | Hides the already selected items from the menu list. |
|
|
50
|
+
| `hint` | `string \| undefined` | — | no | Hint text shown under the input |
|
|
51
|
+
| `iconColor` | `string \| boolean \| undefined` | — | no | Icon color. Accepts a boolean or a color string |
|
|
52
|
+
| `id` | `string \| undefined` | — | no | Unique identifier of the component |
|
|
53
|
+
| `isSelectAll` | `string \| boolean \| undefined` | `false` | no | Adds a "select all" entry as the first item of the list (for `multiple` only). `true` uses the default `$cds.selectAll` caption, a string sets your own caption. |
|
|
54
|
+
| `itemChildren` | `SelectItemKey` | `false` | no | Object field that holds the child items, or a function that returns them |
|
|
55
|
+
| `itemColor` | `string \| undefined` | — | no | Color of the selected items in the menu list. `color` is used by default. |
|
|
56
|
+
| `itemProps` | `SelectItemKey` | `'props'` | no | Object field that holds the props of the item, or a function that returns them |
|
|
57
|
+
| `items` | `any[] \| undefined` | `[]` | no | Array of items to display |
|
|
58
|
+
| `itemTitle` | `SelectItemKey` | `'title'` | no | Object field used as the item title, or a function that returns it |
|
|
59
|
+
| `itemType` | `SelectItemKey` | `'type'` | no | Object field that defines the item type (`item`, `divider`, `subheader`), or a function that returns it |
|
|
60
|
+
| `itemValue` | `SelectItemKey` | `'value'` | no | Object field used as the item value, or a function that returns it |
|
|
61
|
+
| `label` | `string \| undefined` | — | no | Label text of the component |
|
|
62
|
+
| `listProps` | `CdsListProps \| undefined` | — | no | Props passed through to the inner CdsList component. |
|
|
63
|
+
| `loading` | `string \| boolean \| undefined` | — | no | Loading indicator for the component |
|
|
64
|
+
| `maxErrors` | `string \| number \| undefined` | `1` | no | Maximum number of validation errors shown |
|
|
65
|
+
| `maxWidth` | `string \| number \| undefined` | — | no | Maximum component width |
|
|
66
|
+
| `menu` | `boolean \| undefined` | — | no | Controls the open state of the dropdown menu (v-model:menu). |
|
|
67
|
+
| `menuHeight` | `string \| number \| undefined` | `178` | no | Maximum height of the dropdown menu. |
|
|
68
|
+
| `menuIcon` | `IconValue \| undefined` | `'chevron-down'` | no | Icon indicating that the menu can be expanded. |
|
|
69
|
+
| `menuProps` | `CdsMenuProps \| undefined` | — | no | Props passed through to the inner CdsMenu component. |
|
|
70
|
+
| `messages` | `string \| readonly string[] \| undefined` | `[]` | no | Messages shown under the input |
|
|
71
|
+
| `minWidth` | `string \| number \| undefined` | — | no | Minimum component width |
|
|
72
|
+
| `modelModifiers` | `Record<string, boolean> \| undefined` | — | no | v-model modifiers passed by Vue to process the field value |
|
|
73
|
+
| `modelValue` | `any` | `null` | no | Value of the component in v-model. If the component supports the multiple prop, an empty array is used by default. |
|
|
74
|
+
| `multiple` | `boolean \| undefined` | — | no | Allows selecting several values. The selected items are shown as chips or as a list. |
|
|
75
|
+
| `name` | `string \| undefined` | — | no | Name of the input |
|
|
76
|
+
| `noDataText` | `string \| undefined` | `'$cds.noDataText'` | no | Text shown in the menu when the item list is empty. |
|
|
77
|
+
| `noFilter` | `boolean \| undefined` | — | no | Turns off the built-in filtering — the list is shown as is, the search is handled outside |
|
|
78
|
+
| `openOnClear` | `boolean \| undefined` | — | no | Opens the menu after the value is cleared. |
|
|
79
|
+
| `openText` | `string \| undefined` | `'$cds.open'` | no | Text for screen readers describing the open action of the menu. |
|
|
80
|
+
| `persistentClearable` | `boolean \| undefined` | — | no | Always show the clear button, not only on hover or focus |
|
|
81
|
+
| `persistentCounter` | `boolean \| undefined` | — | no | Always show the counter, not only while the field is in use |
|
|
82
|
+
| `persistentHint` | `boolean \| undefined` | — | no | Always show the hint, not only on focus |
|
|
83
|
+
| `persistentPlaceholder` | `boolean \| undefined` | — | no | Always show the placeholder instead of hiding it while the field is in use |
|
|
84
|
+
| `placeholder` | `string \| undefined` | — | no | Placeholder text shown in an empty field |
|
|
85
|
+
| `prefix` | `string \| undefined` | — | no | Text prefix shown before the field value |
|
|
86
|
+
| `prependIcon` | `IconValue \| undefined` | — | no | Icon in the prepend slot, before the content |
|
|
87
|
+
| `prependInnerIcon` | `IconValue \| undefined` | — | no | Icon in the inner prepend slot, before the content of the field |
|
|
88
|
+
| `readonly` | `boolean \| null \| undefined` | `null` | no | Read-only state |
|
|
89
|
+
| `returnObject` | `boolean \| undefined` | `true` | no | Return an object in the model value instead of an array |
|
|
90
|
+
| `reverse` | `boolean \| undefined` | — | no | Reverses the order of the elements inside the field |
|
|
91
|
+
| `role` | `string \| undefined` | `'combobox'` | no | ARIA role for the native input element |
|
|
92
|
+
| `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. |
|
|
93
|
+
| `size` | `number \| "xs" \| "sm" \| "md" \| "lg" \| "xl" \| undefined` | `'md'` | no | Size of the component |
|
|
94
|
+
| `suffix` | `string \| undefined` | — | no | Text suffix shown after the field value |
|
|
95
|
+
| `textColor` | `string \| undefined` | — | no | Text color of the component |
|
|
96
|
+
| `theme` | `string \| undefined` | — | no | Component theme |
|
|
97
|
+
| `transition` | `string \| boolean \| (TransitionProps & { component?: Component \| undefined; }) \| { component: Component; } \| null \| undefined` | `{ component: CdsModalTransition }` | no | Transition animation |
|
|
98
|
+
| `type` | `string \| undefined` | `'text'` | no | Type of the native input |
|
|
99
|
+
| `validateOn` | `ValidateOn \| undefined` | — | no | Changes the type of the event that triggers validation |
|
|
100
|
+
| `valueComparator` | `ValueComparator \| undefined` | — | no | Function that compares item values to determine the selected state |
|
|
101
|
+
| `width` | `string \| number \| undefined` | — | no | Component width |
|
|
102
|
+
|
|
103
|
+
**Events**
|
|
104
|
+
|
|
105
|
+
| Name | Type | Description |
|
|
106
|
+
| --- | --- | --- |
|
|
107
|
+
| `update:focused` | `[focused: boolean]` | The focus state of the component changed (v-model:focused). |
|
|
108
|
+
| `update:menu` | `[value: boolean]` | The open state of the dropdown menu changed (v-model:menu). |
|
|
109
|
+
| `update:modelValue` | `[value: any]` | The selected value changed (v-model). |
|
|
110
|
+
| `update:search` | `[value: string]` | The search query changed. |
|
|
111
|
+
| `update:selectedAll` | `[value: boolean]` | The "all selected" state changed (for `multiple` + `isSelectAll` only). |
|
|
112
|
+
|
|
113
|
+
**Slots**
|
|
114
|
+
|
|
115
|
+
| Name | Type | Description |
|
|
116
|
+
| --- | --- | --- |
|
|
117
|
+
| `append` | `CdsInputSlot` | Adds an element after the input |
|
|
118
|
+
| `append-inner` | `CdsInputDefaultSlot` | Slot added at the end of the input |
|
|
119
|
+
| `append-item` | `any` | Content after the item list in the menu. |
|
|
120
|
+
| `chip` | `{ item: any; internalItem: ListItem<any>; index: number; props: Record<string, unknown>; }` | Custom rendering of the chip of a selected value (relevant together with `chips`). |
|
|
121
|
+
| `clear` | `CdsInputDefaultSlot & { props: Record<string, any>; }` | Slot for a custom clear icon (shown when the clearable prop is true). |
|
|
122
|
+
| `description` | `{ description: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsDescription component |
|
|
123
|
+
| `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
|
|
124
|
+
| `divider` | `{ props: Record<string, unknown>; index: number; }` | Custom rendering of a divider in the menu list. |
|
|
125
|
+
| `item` | `{ item: any; internalItem: ListItem<any>; index: number; props: Record<string, unknown>; }` | Custom rendering of an item of the menu list. |
|
|
126
|
+
| `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
|
|
127
|
+
| `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
|
|
128
|
+
| `menu-footer` | `{ search: Ref<string \| undefined, string \| undefined>; filteredItems: ListItem<any>[]; }` | Content of the menu footer. Receives the current search query and the filtered items. |
|
|
129
|
+
| `menu-header` | `{ search: Ref<string \| undefined, string \| undefined>; filteredItems: ListItem<any>[]; }` | Content of the menu header. Receives the current search query and the filtered items. |
|
|
130
|
+
| `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
|
|
131
|
+
| `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
|
|
132
|
+
| `no-data` | `any` | Content shown in the menu when the item list is empty. |
|
|
133
|
+
| `prepend` | `CdsInputSlot` | Adds an element before the input |
|
|
134
|
+
| `prepend-inner` | `CdsInputDefaultSlot` | Slot added at the start of the input |
|
|
135
|
+
| `prepend-item` | `any` | Content before the item list in the menu. |
|
|
136
|
+
| `selection` | `{ item: any; internalItem: ListItem<any>; index: number; }` | Custom rendering of the selected value inside the field. |
|
|
137
|
+
| `subheader` | `{ props: Record<string, unknown>; index: number; }` | Custom rendering of a group subheader in the menu list. |
|
|
138
|
+
|
|
139
|
+
**Exposed**
|
|
140
|
+
|
|
141
|
+
| Name | Type | Description |
|
|
142
|
+
| --- | --- | --- |
|
|
143
|
+
| `controlRef` | `HTMLElement \| undefined` | Ref to the control of the input |
|
|
144
|
+
| `fieldIconColor` | `string \| undefined` | Icon color |
|
|
145
|
+
| `filteredItems` | `ListItem<any>[]` | Items filtered by the current search query. |
|
|
146
|
+
| `isDirty` | `boolean` | Whether the input is dirty |
|
|
147
|
+
| `isDisabled` | `boolean` | Whether the input is disabled |
|
|
148
|
+
| `isFocused` | `boolean` | Whether the component is focused. |
|
|
149
|
+
| `isPure` | `boolean` | Whether the search query has not changed since the last selection. |
|
|
150
|
+
| `isReadonly` | `boolean` | Whether the input is read-only |
|
|
151
|
+
| `isValid` | `boolean \| null` | Whether the input is valid |
|
|
152
|
+
| `isValidating` | `boolean` | Whether the input is being validated |
|
|
153
|
+
| `reset` | `() => Promise<void>` | Resets the input to its initial state |
|
|
154
|
+
| `resetValidation` | `() => Promise<void>` | Resets the validation of the input |
|
|
155
|
+
| `search` | `string` | Current value of the search query. |
|
|
156
|
+
| `selectAll` | `() => void` | Toggle the selection of all available items (for `multiple` + `isSelectAll` only). |
|
|
157
|
+
| `selectionIndex` | `number` | Index of the selected value highlighted by the arrow keys during navigation. |
|
|
158
|
+
| `validate` | `(silent?: boolean) => Promise<string[]>` | Validates the input |
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# CdsCombobox — usage examples
|
|
2
|
+
|
|
3
|
+
> Extracted from Storybook stories (`docs/*.stories.ts`) by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> The full component contract is in [api.md](api.md). `v-bind="args"` in templates refers to the props from the **Args** block of the corresponding example.
|
|
5
|
+
|
|
6
|
+
A combobox is a field with a dropdown list and free input: the value can be picked from the offered ones or typed in — the text itself becomes the value. The field is built on [CdsTextInput](../cds-text-input/api.md), and the menu and the list are the same as in [CdsSelect](../cds-select/api.md), so the label, the messages, validation and the menu behave identically.
|
|
7
|
+
|
|
8
|
+
## List items
|
|
9
|
+
|
|
10
|
+
The list is set by the `items` prop — an array of strings or of objects with the same interface as in [CdsList](../cds-list/api.md). The input filters the list but does not have to match an item: the typed text goes into the model right away — there is no need to press Enter or to pick an item.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsCombobox } from '@central-design-system/components';
|
|
17
|
+
import { ref } from 'vue';
|
|
18
|
+
|
|
19
|
+
const items = ['Git', 'GraphQL', 'Node.js', 'Python', 'TypeScript', 'Vue'];
|
|
20
|
+
|
|
21
|
+
const selected = ref(null);
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<div class="w-[350px] m-auto">
|
|
26
|
+
<CdsCombobox
|
|
27
|
+
v-model="selected"
|
|
28
|
+
:items="items"
|
|
29
|
+
label="Ключевой навык"
|
|
30
|
+
placeholder="Выберите или введите свой"
|
|
31
|
+
description="Введённый текст сам становится значением"
|
|
32
|
+
/>
|
|
33
|
+
</div>
|
|
34
|
+
</template>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Multiple selection and chips
|
|
38
|
+
|
|
39
|
+
The `multiple` prop allows selecting several values, `chips` shows them as [CdsTag](../cds-tag/api.md) tags, and `closable-chips` adds a cross — the value is removed right in the field. Your own value is added with the Enter key — like "Медиация" in the example, which is not in the list. The search query is cleared automatically after every selection (`clear-on-select` is on by default).
|
|
40
|
+
|
|
41
|
+
**Example (SFC):**
|
|
42
|
+
|
|
43
|
+
```vue
|
|
44
|
+
<script setup lang="ts">
|
|
45
|
+
import { CdsCombobox } from '@central-design-system/components';
|
|
46
|
+
import { ref } from 'vue';
|
|
47
|
+
|
|
48
|
+
const items = ref([
|
|
49
|
+
'C#',
|
|
50
|
+
'CSS',
|
|
51
|
+
'Docker',
|
|
52
|
+
'Figma',
|
|
53
|
+
'Git',
|
|
54
|
+
'GraphQL',
|
|
55
|
+
'HTML',
|
|
56
|
+
'Java',
|
|
57
|
+
'JavaScript',
|
|
58
|
+
'Kotlin',
|
|
59
|
+
'Node.js',
|
|
60
|
+
'PHP',
|
|
61
|
+
'Python',
|
|
62
|
+
'Rust',
|
|
63
|
+
'SQL',
|
|
64
|
+
'Swift',
|
|
65
|
+
'TypeScript',
|
|
66
|
+
'Vue'
|
|
67
|
+
]);
|
|
68
|
+
|
|
69
|
+
const selected = ref(['TypeScript', 'Медиация']);
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
<template>
|
|
73
|
+
<CdsCombobox
|
|
74
|
+
v-model="selected"
|
|
75
|
+
class="w-[350px] m-auto"
|
|
76
|
+
multiple
|
|
77
|
+
chips
|
|
78
|
+
closable-chips
|
|
79
|
+
:items="items"
|
|
80
|
+
label="Навыки"
|
|
81
|
+
placeholder="Введите значение и нажмите Enter"
|
|
82
|
+
/>
|
|
83
|
+
</template>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Delimiters
|
|
87
|
+
|
|
88
|
+
The `delimiters` prop sets the delimiter characters: typing or pasting a string containing them splits it into separate values. It works together with `multiple` only; a line break is always a delimiter, so a multiline list from the clipboard turns into a set of values even without any configuration.
|
|
89
|
+
|
|
90
|
+
**Example (SFC):**
|
|
91
|
+
|
|
92
|
+
```vue
|
|
93
|
+
<script setup lang="ts">
|
|
94
|
+
import { CdsCombobox } from '@central-design-system/components';
|
|
95
|
+
import { ref } from 'vue';
|
|
96
|
+
|
|
97
|
+
const items = ['аналитика', 'дизайн', 'разработка', 'тестирование'];
|
|
98
|
+
|
|
99
|
+
const selected = ref(['дизайн']);
|
|
100
|
+
</script>
|
|
101
|
+
|
|
102
|
+
<template>
|
|
103
|
+
<CdsCombobox
|
|
104
|
+
v-model="selected"
|
|
105
|
+
class="w-[350px] m-auto"
|
|
106
|
+
multiple
|
|
107
|
+
chips
|
|
108
|
+
closable-chips
|
|
109
|
+
:delimiters="[',', ';']"
|
|
110
|
+
:items="items"
|
|
111
|
+
label="Ключевые слова"
|
|
112
|
+
placeholder="Несколько значений — через запятую"
|
|
113
|
+
description="Вставьте список из буфера — он разобьётся на отдельные значения"
|
|
114
|
+
/>
|
|
115
|
+
</template>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Recipients of a letter
|
|
119
|
+
|
|
120
|
+
The combination of `multiple`, `chips` and `closable-chips` collects the recipients as tags, and `delimiters` splits a pasted list of addresses by commas and semicolons. `filter-keys` searches both by email and by name, `hide-selected` removes the already added ones from the list, and the `item` slot shows the avatar and the address. An address that is not in the reference book becomes a chip as is — external participants can be invited without being written into the contacts first.
|
|
121
|
+
|
|
122
|
+
**Example (SFC):**
|
|
123
|
+
|
|
124
|
+
```vue
|
|
125
|
+
<script setup lang="ts">
|
|
126
|
+
import { CdsAvatar, CdsCombobox, CdsListItem } from '@central-design-system/components';
|
|
127
|
+
import { ref } from 'vue';
|
|
128
|
+
|
|
129
|
+
const people = [
|
|
130
|
+
{ name: 'Анна Смирнова', email: 'a.smirnova@example.com', image: 'https://i.pravatar.cc/80?img=47' },
|
|
131
|
+
{ name: 'Дмитрий Орлов', email: 'd.orlov@example.com', image: 'https://i.pravatar.cc/80?img=12' },
|
|
132
|
+
{ name: 'Елена Васильева', email: 'e.vasileva@example.com', image: 'https://i.pravatar.cc/80?img=44' },
|
|
133
|
+
{ name: 'Игорь Крылов', email: 'i.krylov@example.com', image: 'https://i.pravatar.cc/80?img=32' },
|
|
134
|
+
{ name: 'Мария Соколова', email: 'm.sokolova@example.com', image: 'https://i.pravatar.cc/80?img=26' },
|
|
135
|
+
{ name: 'Павел Зайцев', email: 'p.zaycev@example.com', image: 'https://i.pravatar.cc/80?img=59' }
|
|
136
|
+
];
|
|
137
|
+
|
|
138
|
+
const selected = ref(['a.smirnova@example.com']);
|
|
139
|
+
</script>
|
|
140
|
+
|
|
141
|
+
<template>
|
|
142
|
+
<div class="w-[350px] m-auto">
|
|
143
|
+
<CdsCombobox
|
|
144
|
+
v-model="selected"
|
|
145
|
+
multiple
|
|
146
|
+
chips
|
|
147
|
+
closable-chips
|
|
148
|
+
hide-selected
|
|
149
|
+
:items="people"
|
|
150
|
+
item-title="email"
|
|
151
|
+
item-value="email"
|
|
152
|
+
:return-object="false"
|
|
153
|
+
:filter-keys="['title', 'raw.name']"
|
|
154
|
+
:delimiters="[',', ';']"
|
|
155
|
+
label="Получатели"
|
|
156
|
+
placeholder="Почта или имя коллеги"
|
|
157
|
+
>
|
|
158
|
+
<template #item="{ item, props }">
|
|
159
|
+
<CdsListItem v-bind="props" :title="item.name">
|
|
160
|
+
<template #prepend>
|
|
161
|
+
<CdsAvatar :image="item.image" size="sm" class="mr-3" />
|
|
162
|
+
</template>
|
|
163
|
+
<template #description>{{ item.email }}</template>
|
|
164
|
+
</CdsListItem>
|
|
165
|
+
</template>
|
|
166
|
+
</CdsCombobox>
|
|
167
|
+
</div>
|
|
168
|
+
</template>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Growing the reference book
|
|
172
|
+
|
|
173
|
+
The combobox extends the reference book gently: the user picks the usual values from the list and types the rare ones. The `@update:focused` handler adds the new value to `items` when the field is left — next time it will be found by search. Enter your own unit of measurement and click outside the field — the counter in the hint will grow.
|
|
174
|
+
|
|
175
|
+
**Example (SFC):**
|
|
176
|
+
|
|
177
|
+
```vue
|
|
178
|
+
<script setup lang="ts">
|
|
179
|
+
import { CdsCombobox } from '@central-design-system/components';
|
|
180
|
+
import { computed, ref } from 'vue';
|
|
181
|
+
|
|
182
|
+
const items = ref(['Килограмм', 'Литр', 'Метр', 'Упаковка', 'Штука']);
|
|
183
|
+
|
|
184
|
+
const selected = ref('Штука');
|
|
185
|
+
|
|
186
|
+
const messages = computed(() => `В справочнике ${items.value.length} единиц`);
|
|
187
|
+
|
|
188
|
+
function onFocused(focused: boolean) {
|
|
189
|
+
if (focused) return;
|
|
190
|
+
|
|
191
|
+
const value = selected.value?.trim();
|
|
192
|
+
if (value && !items.value.includes(value)) {
|
|
193
|
+
items.value = [...items.value, value].sort((a, b) => a.localeCompare(b));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
</script>
|
|
197
|
+
|
|
198
|
+
<template>
|
|
199
|
+
<div class="w-[350px] m-auto">
|
|
200
|
+
<CdsCombobox
|
|
201
|
+
v-model="selected"
|
|
202
|
+
:items="items"
|
|
203
|
+
:messages="messages"
|
|
204
|
+
label="Единица измерения"
|
|
205
|
+
placeholder="Выберите или введите свою"
|
|
206
|
+
@update:focused="onFocused"
|
|
207
|
+
/>
|
|
208
|
+
</div>
|
|
209
|
+
</template>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Submitting a form
|
|
213
|
+
|
|
214
|
+
The combobox takes part in [CdsForm](../cds-form/api.md) validation on a par with text fields: `rules` will not let the form through without a job title. Unlike in the autocomplete, it is exactly the typed text that is checked — the value goes into the model right away, picking a list item is not required.
|
|
215
|
+
|
|
216
|
+
**Example (SFC):**
|
|
217
|
+
|
|
218
|
+
```vue
|
|
219
|
+
<script setup lang="ts">
|
|
220
|
+
import { CdsButton, CdsCombobox, CdsForm, CdsTextInput } from '@central-design-system/components';
|
|
221
|
+
import { ref } from 'vue';
|
|
222
|
+
|
|
223
|
+
const positions = ['Аналитик', 'Дизайнер', 'Инженер', 'Менеджер проектов', 'Разработчик', 'Тестировщик'];
|
|
224
|
+
|
|
225
|
+
const valid = ref(false);
|
|
226
|
+
const position = ref(null);
|
|
227
|
+
const department = ref('');
|
|
228
|
+
const loading = ref(false);
|
|
229
|
+
const sent = ref(false);
|
|
230
|
+
|
|
231
|
+
const rules = [(value: string) => !!value || 'Укажите должность'];
|
|
232
|
+
|
|
233
|
+
async function submit() {
|
|
234
|
+
if (!valid.value) return;
|
|
235
|
+
|
|
236
|
+
try {
|
|
237
|
+
loading.value = true;
|
|
238
|
+
sent.value = false;
|
|
239
|
+
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
240
|
+
sent.value = true;
|
|
241
|
+
} finally {
|
|
242
|
+
loading.value = false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
</script>
|
|
246
|
+
|
|
247
|
+
<template>
|
|
248
|
+
<CdsForm v-model="valid" class="flex flex-col gap-2 w-[350px] m-auto" @submit.prevent="submit">
|
|
249
|
+
<CdsCombobox
|
|
250
|
+
v-model="position"
|
|
251
|
+
:items="positions"
|
|
252
|
+
:rules="rules"
|
|
253
|
+
label="Должность"
|
|
254
|
+
placeholder="Выберите или введите свою"
|
|
255
|
+
/>
|
|
256
|
+
|
|
257
|
+
<CdsTextInput v-model="department" label="Отдел" placeholder="Отдел разработки" />
|
|
258
|
+
|
|
259
|
+
<CdsButton type="submit" :loading="loading" text="Создать вакансию" />
|
|
260
|
+
|
|
261
|
+
<p v-if="sent" class="text-sm text-center">Вакансия создана</p>
|
|
262
|
+
</CdsForm>
|
|
263
|
+
</template>
|
|
264
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsCombobox — guidelines
|
|
2
|
+
|
|
3
|
+
> Extracted from `docs/demos/Guidelines.vue` by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> The full component contract is in [api.md](api.md).
|
|
5
|
+
|
|
6
|
+
| ✅ Do | ❌ Don't |
|
|
7
|
+
| --- | --- |
|
|
8
|
+
| A combobox fits when custom values are allowed: labels, keywords, units of measurement. | A strict reference book does not tolerate free input: typos create duplicates. Take CdsAutocomplete. |
|
|
9
|
+
| Tell the user that the field accepts custom values and how to add them. | A “Pick from the list” placeholder hides the main skill of a combobox — free input. |
|
|
10
|
+
| Chips with a cross show the collected values and let any of them be removed in one click. | Without chips the values merge into one string, and only the last one can be removed — with the Backspace key. |
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CdsCombobox — 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
|
+
## _CdsCombobox.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
@use '../../../styles/settings';
|
|
11
|
+
|
|
12
|
+
$combobox-content-border-radius: var(--cds-border-radius-200) !default;
|
|
13
|
+
$combobox-content-padding-inline: var(--cds-spacing-100) !default;
|
|
14
|
+
$combobox-focused-input-min-width: 64px !default;
|
|
15
|
+
$combobox-mask-background: rgb(var(--cds-color-content-placeholder)) !default;
|
|
16
|
+
$combobox-selection-inline-gap: var(--cds-spacing-50) !default;
|
|
17
|
+
$combobox-unselected-opacity: var(--cds-medium-emphasis-opacity) !default;
|
|
18
|
+
$combobox-transition: .2s settings.$standard-easing !default;
|
|
19
|
+
```
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# CdsCounter — 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 counter shows how many characters are already typed and how many are allowed: `42 / 100`. When the value exceeds the maximum, the counter turns red — the user sees the problem before submitting the form.
|
|
7
|
+
|
|
8
|
+
## CdsCounter
|
|
9
|
+
|
|
10
|
+
**Props**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Required | Description |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| `active` | `boolean \| undefined` | — | no | Active state |
|
|
15
|
+
| `disabled` | `boolean \| null \| undefined` | `null` | no | Disabled state |
|
|
16
|
+
| `max` | `string \| number \| undefined` | — | no | Maximum value |
|
|
17
|
+
| `transition` | `string \| boolean \| (TransitionProps & { component?: Component \| undefined; }) \| { component: Component; } \| null \| undefined` | `{ component: slide-transition-y }` | no | Transition animation |
|
|
18
|
+
| `value` | `string \| number \| undefined` | `0` | no | Value of the counter |
|
|
19
|
+
|
|
20
|
+
**Slots**
|
|
21
|
+
|
|
22
|
+
| Name | Type | Description |
|
|
23
|
+
| --- | --- | --- |
|
|
24
|
+
| `default` | `CdsCounterSlot` | Your own look for the counter. The slot props carry the ready counter string, the current and the maximum number of characters |
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# CdsCounter — 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
|
+
The counter shows how many characters are already typed and how many are allowed: `42 / 100`. When the value exceeds the maximum, the counter turns red — the user sees the problem before submitting the form.
|
|
7
|
+
|
|
8
|
+
## Value and maximum
|
|
9
|
+
|
|
10
|
+
The `value` prop sets the current number, `max` sets the limit. Without `max` the counter shows a single number, with `max` it shows a fraction. As soon as `value` is greater than `max`, the text turns red.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsCounter } from '@central-design-system/components';
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<div class="flex flex-wrap items-center justify-center gap-4">
|
|
21
|
+
<CdsCounter active value="42" />
|
|
22
|
+
<CdsCounter active value="42" max="100" />
|
|
23
|
+
<CdsCounter active value="120" max="100" />
|
|
24
|
+
</div>
|
|
25
|
+
</template>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Appearance
|
|
29
|
+
|
|
30
|
+
The counter is visible only with `active` — by default it is hidden. Showing and hiding are animated, and the animation is set by the `transition` prop.
|
|
31
|
+
|
|
32
|
+
**Example (SFC):**
|
|
33
|
+
|
|
34
|
+
```vue
|
|
35
|
+
<script setup lang="ts">
|
|
36
|
+
import { CdsButton, CdsCounter } from '@central-design-system/components';
|
|
37
|
+
import { ref } from 'vue';
|
|
38
|
+
|
|
39
|
+
const active = ref(true);
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
<template>
|
|
43
|
+
<div class="flex flex-col items-center gap-2">
|
|
44
|
+
<CdsCounter :active="active" value="42" max="100" />
|
|
45
|
+
|
|
46
|
+
<CdsButton size="sm" appearance="secondary" text="Показать / скрыть" @click="active = !active" />
|
|
47
|
+
</div>
|
|
48
|
+
</template>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Slot
|
|
52
|
+
|
|
53
|
+
The `default` slot replaces the text of the counter and receives `value`, `max` and the ready `counter` string.
|
|
54
|
+
|
|
55
|
+
**Example (SFC):**
|
|
56
|
+
|
|
57
|
+
```vue
|
|
58
|
+
<script setup lang="ts">
|
|
59
|
+
import { CdsCounter } from '@central-design-system/components';
|
|
60
|
+
</script>
|
|
61
|
+
|
|
62
|
+
<template>
|
|
63
|
+
<div class="flex justify-center">
|
|
64
|
+
<CdsCounter v-slot="{ value, max }" active value="42" max="100">
|
|
65
|
+
Осталось {{ Number(max) - Number(value) }} символов
|
|
66
|
+
</CdsCounter>
|
|
67
|
+
</div>
|
|
68
|
+
</template>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Character limit of a field
|
|
72
|
+
|
|
73
|
+
The `details` slot of an input is the place for a counter next to the messages. Count the length of the value yourself and pass it into `value`: when the text outgrows the limit, the counter turns red.
|
|
74
|
+
|
|
75
|
+
**Example (SFC):**
|
|
76
|
+
|
|
77
|
+
```vue
|
|
78
|
+
<script setup lang="ts">
|
|
79
|
+
import { CdsCounter, CdsTextInput } from '@central-design-system/components';
|
|
80
|
+
import { ref } from 'vue';
|
|
81
|
+
|
|
82
|
+
const max = 40;
|
|
83
|
+
const title = ref('Поставка канцелярских товаров');
|
|
84
|
+
</script>
|
|
85
|
+
|
|
86
|
+
<template>
|
|
87
|
+
<CdsTextInput v-model="title" label="Название закупки" placeholder="Введите название" class="w-[350px] m-auto">
|
|
88
|
+
<template #details>
|
|
89
|
+
<CdsCounter active :value="title.length" :max="max" />
|
|
90
|
+
</template>
|
|
91
|
+
</CdsTextInput>
|
|
92
|
+
</template>
|
|
93
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# CdsCounter — 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
|
+
## _CdsCounter.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
$counter-transition-duration: 150ms !default;
|
|
11
|
+
```
|