@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,653 @@
|
|
|
1
|
+
# CdsList — 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 list shows a set of records of the same kind — menu sections, documents, employees, settings — so that the one you need is easy to find and pick. Build it from an `items` array in a single line, or from `CdsListItem` components when a row is more than a title with an icon.
|
|
7
|
+
|
|
8
|
+
## List data
|
|
9
|
+
|
|
10
|
+
The `items` prop takes an array of objects and builds the whole list out of it. The `title` field gives the heading, `value` — the value of the item (this is how the list knows what is selected), `props` — any props of `CdsListItem`.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsList } from '@central-design-system/components';
|
|
17
|
+
|
|
18
|
+
const items = [
|
|
19
|
+
{ title: 'Профиль', value: 'profile', props: { prependIcon: 'user-avatar' } },
|
|
20
|
+
{ title: 'Организация', value: 'company', props: { prependIcon: 'company' } },
|
|
21
|
+
{ title: 'Сотрудники', value: 'employees', props: { prependIcon: 'user-group' } },
|
|
22
|
+
{ title: 'Настройки', value: 'settings', props: { prependIcon: 'settings' } }
|
|
23
|
+
];
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<template>
|
|
27
|
+
<CdsList class="m-auto w-[200px]" :items="items" />
|
|
28
|
+
</template>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## List data
|
|
32
|
+
|
|
33
|
+
When the data arrives from the server in its own format, do not reshape it: `item-title`, `item-value` and `item-children` tell the list which fields to take. Each of them accepts both a field name and a function — that way, for example, `item-props` assembles the props of an item from several fields of the object.
|
|
34
|
+
|
|
35
|
+
**Example (SFC):**
|
|
36
|
+
|
|
37
|
+
```vue
|
|
38
|
+
<script setup lang="ts">
|
|
39
|
+
import { CdsList } from '@central-design-system/components';
|
|
40
|
+
|
|
41
|
+
const employees = [
|
|
42
|
+
{ id: 1, name: 'Анна Смирнова', role: 'Руководитель отдела закупок' },
|
|
43
|
+
{ id: 2, name: 'Дмитрий Орлов', role: 'Менеджер по тендерам' },
|
|
44
|
+
{ id: 3, name: 'Елена Васильева', role: 'Юрист' },
|
|
45
|
+
{ id: 4, name: 'Игорь Крылов', role: 'Бухгалтер' }
|
|
46
|
+
];
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
<template>
|
|
50
|
+
<CdsList
|
|
51
|
+
class="m-auto w-[250px]"
|
|
52
|
+
:items="employees"
|
|
53
|
+
item-title="name"
|
|
54
|
+
item-value="id"
|
|
55
|
+
:item-props="(item: Record<string, any>) => ({ subtitle: item.role, prependIcon: 'user-avatar' })"
|
|
56
|
+
lines="two"
|
|
57
|
+
/>
|
|
58
|
+
</template>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## List data
|
|
62
|
+
|
|
63
|
+
The `props` field configures a single item: adds icons, turns on the active state or disables the row.
|
|
64
|
+
|
|
65
|
+
**Example (SFC):**
|
|
66
|
+
|
|
67
|
+
```vue
|
|
68
|
+
<script setup lang="ts">
|
|
69
|
+
import { CdsList } from '@central-design-system/components';
|
|
70
|
+
|
|
71
|
+
const items = [
|
|
72
|
+
{ title: 'Черновик', value: 'draft', props: { prependIcon: 'doc' } },
|
|
73
|
+
{ title: 'На согласовании', value: 'review', props: { prependIcon: 'clock', appendIcon: 'chevron-right' } },
|
|
74
|
+
{ title: 'Опубликован', value: 'published', props: { prependIcon: 'check', active: true } },
|
|
75
|
+
{ title: 'В архиве', value: 'archived', props: { prependIcon: 'archive', disabled: true } }
|
|
76
|
+
];
|
|
77
|
+
</script>
|
|
78
|
+
|
|
79
|
+
<template>
|
|
80
|
+
<CdsList class="m-auto w-[280px]" :items="items" />
|
|
81
|
+
</template>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Item content
|
|
85
|
+
|
|
86
|
+
An item has three text blocks: `title` names the record, `subtitle` refines it, `description` adds an explanation. On the sides stand an icon (`prepend-icon`, `append-icon`) or an avatar (`prepend-avatar`, `append-avatar`).
|
|
87
|
+
|
|
88
|
+
**Example (SFC):**
|
|
89
|
+
|
|
90
|
+
```vue
|
|
91
|
+
<script setup lang="ts">
|
|
92
|
+
import { CdsList, CdsListItem } from '@central-design-system/components';
|
|
93
|
+
</script>
|
|
94
|
+
|
|
95
|
+
<template>
|
|
96
|
+
<CdsList class="m-auto w-[360px]" :lines="false">
|
|
97
|
+
<CdsListItem prepend-icon="doc" title="Счёт на оплату № 5512" />
|
|
98
|
+
|
|
99
|
+
<CdsListItem prepend-icon="doc" title="Договор аренды № 17" subtitle="ООО «Ромашка»" />
|
|
100
|
+
|
|
101
|
+
<CdsListItem
|
|
102
|
+
prepend-icon="doc"
|
|
103
|
+
append-icon="chevron-right"
|
|
104
|
+
title="Акт сверки за март"
|
|
105
|
+
subtitle="ООО «Ромашка»"
|
|
106
|
+
description="Ожидает подписания второй стороной"
|
|
107
|
+
/>
|
|
108
|
+
|
|
109
|
+
<CdsListItem
|
|
110
|
+
prepend-avatar="https://i.pravatar.cc/80?img=47"
|
|
111
|
+
title="Анна Смирнова"
|
|
112
|
+
subtitle="Руководитель отдела закупок"
|
|
113
|
+
/>
|
|
114
|
+
</CdsList>
|
|
115
|
+
</template>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Item content
|
|
119
|
+
|
|
120
|
+
The `lines` prop limits the subtitle and the description to one, two or three lines — the rest of the text is truncated with an ellipsis, and records with text of different length keep a common rhythm. With `three`, the icons in the `prepend` and `append` areas align to the top of the record instead of its center. `:lines="false"` removes the limit — the text takes as many lines as it needs.
|
|
121
|
+
|
|
122
|
+
**Example (SFC):**
|
|
123
|
+
|
|
124
|
+
```vue
|
|
125
|
+
<script setup lang="ts">
|
|
126
|
+
import { CdsList } from '@central-design-system/components';
|
|
127
|
+
|
|
128
|
+
const lines = ['one', 'two', 'three'] as const;
|
|
129
|
+
|
|
130
|
+
const items = [
|
|
131
|
+
{
|
|
132
|
+
title: 'Договор поставки № 42 от 14 марта',
|
|
133
|
+
value: 'supply',
|
|
134
|
+
props: {
|
|
135
|
+
prependIcon: 'doc',
|
|
136
|
+
subtitle:
|
|
137
|
+
'ООО «Ромашка» · поставка канцелярии и расходных материалов для филиалов в Москве и Санкт-Петербурге до конца квартала'
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
title: 'Акт сверки взаиморасчётов за март',
|
|
142
|
+
value: 'act',
|
|
143
|
+
props: {
|
|
144
|
+
prependIcon: 'doc',
|
|
145
|
+
subtitle: 'ООО «Василёк» · расхождений не выявлено, подписан обеими сторонами 12 марта'
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
];
|
|
149
|
+
</script>
|
|
150
|
+
|
|
151
|
+
<template>
|
|
152
|
+
<div class="m-auto flex flex-wrap justify-center gap-4">
|
|
153
|
+
<div v-for="line of lines" :key="line" class="flex w-[280px] flex-col gap-1">
|
|
154
|
+
<span class="text-100 text-content-secondary">lines="{{ line }}"</span>
|
|
155
|
+
<CdsList :items="items" :lines="line" />
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</template>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Structure
|
|
162
|
+
|
|
163
|
+
Items with `type: 'subheader'` and `type: 'divider'` split the list into sections: a subheader names a group of records, a divider separates blocks without a heading.
|
|
164
|
+
|
|
165
|
+
**Example (SFC):**
|
|
166
|
+
|
|
167
|
+
```vue
|
|
168
|
+
<script setup lang="ts">
|
|
169
|
+
import { CdsList } from '@central-design-system/components';
|
|
170
|
+
|
|
171
|
+
const items = [
|
|
172
|
+
{ type: 'subheader', title: 'Сегодня' },
|
|
173
|
+
{ title: 'Договор поставки № 42', value: 'supply', props: { prependIcon: 'doc' } },
|
|
174
|
+
{ title: 'Счёт на оплату № 5512', value: 'invoice', props: { prependIcon: 'doc' } },
|
|
175
|
+
{ type: 'divider' },
|
|
176
|
+
{ type: 'subheader', title: 'На прошлой неделе' },
|
|
177
|
+
{ title: 'Акт сверки за март', value: 'act', props: { prependIcon: 'doc' } },
|
|
178
|
+
{ title: 'Договор аренды № 17', value: 'rent', props: { prependIcon: 'doc' } },
|
|
179
|
+
{ title: 'Спецификация № 3', value: 'spec', props: { prependIcon: 'doc' } }
|
|
180
|
+
];
|
|
181
|
+
</script>
|
|
182
|
+
|
|
183
|
+
<template>
|
|
184
|
+
<CdsList class="m-auto w-[250px]" :items="items" />
|
|
185
|
+
</template>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Structure
|
|
189
|
+
|
|
190
|
+
A `children` array inside an item turns it into an expandable group — the list manages its state on its own, and `v-model:opened` lets you manage it from the outside. Nesting is not limited to a single level.
|
|
191
|
+
|
|
192
|
+
**Example (SFC):**
|
|
193
|
+
|
|
194
|
+
```vue
|
|
195
|
+
<script setup lang="ts">
|
|
196
|
+
import { CdsList } from '@central-design-system/components';
|
|
197
|
+
import { ref } from 'vue';
|
|
198
|
+
|
|
199
|
+
const opened = ref(['contracts']);
|
|
200
|
+
|
|
201
|
+
const items = [
|
|
202
|
+
{ title: 'Все документы', value: 'all', props: { prependIcon: 'directory' } },
|
|
203
|
+
{
|
|
204
|
+
title: 'Договоры',
|
|
205
|
+
value: 'contracts',
|
|
206
|
+
props: { prependIcon: 'directory' },
|
|
207
|
+
children: [
|
|
208
|
+
{ title: 'Поставка', value: 'supply', props: { prependIcon: 'doc' } },
|
|
209
|
+
{ title: 'Аренда', value: 'rent', props: { prependIcon: 'doc' } },
|
|
210
|
+
{
|
|
211
|
+
title: 'Услуги',
|
|
212
|
+
value: 'services',
|
|
213
|
+
props: { prependIcon: 'directory' },
|
|
214
|
+
children: [
|
|
215
|
+
{ title: 'Разовые', value: 'services-single', props: { prependIcon: 'doc' } },
|
|
216
|
+
{ title: 'Абонентские', value: 'services-regular', props: { prependIcon: 'doc' } }
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
title: 'Бухгалтерия',
|
|
223
|
+
value: 'accounting',
|
|
224
|
+
props: { prependIcon: 'directory' },
|
|
225
|
+
children: [
|
|
226
|
+
{ title: 'Счета', value: 'invoices', props: { prependIcon: 'doc' } },
|
|
227
|
+
{ title: 'Акты сверки', value: 'acts', props: { prependIcon: 'doc' } }
|
|
228
|
+
]
|
|
229
|
+
}
|
|
230
|
+
];
|
|
231
|
+
</script>
|
|
232
|
+
|
|
233
|
+
<template>
|
|
234
|
+
<CdsList v-model:opened="opened" class="m-auto w-[250px]" :items="items" />
|
|
235
|
+
</template>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Selection and activation
|
|
239
|
+
|
|
240
|
+
The `activatable` prop highlights one item as the current one — this is about navigation: "you are here". `selectable` turns on picking records — this is about data: "send these ones". Both states are read through `v-model:activated` and `v-model:selected`, and `select-strategy` sets how many items can be picked at once: `single-leaf` (the default) — one, `independent` — as many as you like.
|
|
241
|
+
|
|
242
|
+
**Example (SFC):**
|
|
243
|
+
|
|
244
|
+
```vue
|
|
245
|
+
<script setup lang="ts">
|
|
246
|
+
import { CdsList } from '@central-design-system/components';
|
|
247
|
+
import { ref } from 'vue';
|
|
248
|
+
|
|
249
|
+
const items = [
|
|
250
|
+
{ title: 'Договоры', value: 'contracts' },
|
|
251
|
+
{ title: 'Счета', value: 'invoices' },
|
|
252
|
+
{ title: 'Акты сверки', value: 'acts' },
|
|
253
|
+
{ title: 'Отчёты', value: 'reports' }
|
|
254
|
+
];
|
|
255
|
+
|
|
256
|
+
const activated = ref(['contracts']);
|
|
257
|
+
const selected = ref(['invoices', 'acts']);
|
|
258
|
+
</script>
|
|
259
|
+
|
|
260
|
+
<template>
|
|
261
|
+
<div class="m-auto flex flex-wrap justify-center gap-4">
|
|
262
|
+
<div class="flex w-[260px] flex-col gap-1">
|
|
263
|
+
<span class="text-100 text-content-secondary">activatable — один активный элемент</span>
|
|
264
|
+
<CdsList v-model:activated="activated" activatable :items="items" />
|
|
265
|
+
<span class="text-100 text-content-secondary">activated: {{ activated }}</span>
|
|
266
|
+
</div>
|
|
267
|
+
|
|
268
|
+
<div class="flex w-[260px] flex-col gap-1">
|
|
269
|
+
<span class="text-100 text-content-secondary">selectable + select-strategy="independent"</span>
|
|
270
|
+
<CdsList v-model:selected="selected" selectable select-strategy="independent" :items="items" />
|
|
271
|
+
<span class="text-100 text-content-secondary">selected: {{ selected }}</span>
|
|
272
|
+
</div>
|
|
273
|
+
</div>
|
|
274
|
+
</template>
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Appearance
|
|
278
|
+
|
|
279
|
+
`nav` rounds the corners of active items — the look of a side menu. `slim` removes the inner paddings when the list sits in a narrow panel or a dropdown. `color` sets the color of active items, `bg-color` — the background of the list.
|
|
280
|
+
|
|
281
|
+
**Example (SFC):**
|
|
282
|
+
|
|
283
|
+
```vue
|
|
284
|
+
<script setup lang="ts">
|
|
285
|
+
import { CdsList } from '@central-design-system/components';
|
|
286
|
+
|
|
287
|
+
const items = [
|
|
288
|
+
{ title: 'Профиль', value: 'profile', props: { prependIcon: 'user-avatar' } },
|
|
289
|
+
{ title: 'Организация', value: 'company', props: { prependIcon: 'company', active: true } },
|
|
290
|
+
{ title: 'Настройки', value: 'settings', props: { prependIcon: 'settings' } }
|
|
291
|
+
];
|
|
292
|
+
</script>
|
|
293
|
+
|
|
294
|
+
<template>
|
|
295
|
+
<div class="m-auto flex flex-wrap justify-center gap-4">
|
|
296
|
+
<div class="flex w-[240px] flex-col gap-1">
|
|
297
|
+
<span class="text-100 text-content-secondary">по умолчанию</span>
|
|
298
|
+
<CdsList :items="items" />
|
|
299
|
+
</div>
|
|
300
|
+
|
|
301
|
+
<div class="flex w-[240px] flex-col gap-1">
|
|
302
|
+
<span class="text-100 text-content-secondary">nav</span>
|
|
303
|
+
<CdsList nav :items="items" />
|
|
304
|
+
</div>
|
|
305
|
+
|
|
306
|
+
<div class="flex w-[240px] flex-col gap-1">
|
|
307
|
+
<span class="text-100 text-content-secondary">slim</span>
|
|
308
|
+
<CdsList slim :items="items" />
|
|
309
|
+
</div>
|
|
310
|
+
|
|
311
|
+
<div class="flex w-[240px] flex-col gap-1">
|
|
312
|
+
<span class="text-100 text-content-secondary">color="brand-primary"</span>
|
|
313
|
+
<CdsList color="brand-primary" :items="items" />
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
</template>
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## Assembling from components
|
|
320
|
+
|
|
321
|
+
When a row is more than a title with an icon, assemble it from `CdsListItem` by hand — the slots accept any components: tags, badges, avatars, buttons.
|
|
322
|
+
|
|
323
|
+
**Example (SFC):**
|
|
324
|
+
|
|
325
|
+
```vue
|
|
326
|
+
<script setup lang="ts">
|
|
327
|
+
import {
|
|
328
|
+
CdsAvatar,
|
|
329
|
+
CdsBadge,
|
|
330
|
+
CdsFunctionalButton,
|
|
331
|
+
CdsIcon,
|
|
332
|
+
CdsList,
|
|
333
|
+
CdsListItem,
|
|
334
|
+
CdsTag
|
|
335
|
+
} from '@central-design-system/components';
|
|
336
|
+
</script>
|
|
337
|
+
|
|
338
|
+
<template>
|
|
339
|
+
<CdsList class="m-auto w-[300px]" lines="two">
|
|
340
|
+
<CdsListItem value="supply">
|
|
341
|
+
<template #prepend>
|
|
342
|
+
<CdsIcon name="doc" />
|
|
343
|
+
</template>
|
|
344
|
+
<template #title>Договор поставки № 42</template>
|
|
345
|
+
<template #subtitle>ООО «Ромашка»</template>
|
|
346
|
+
<template #append>
|
|
347
|
+
<CdsTag size="sm" text="Подписан" color="green" />
|
|
348
|
+
</template>
|
|
349
|
+
</CdsListItem>
|
|
350
|
+
|
|
351
|
+
<CdsListItem value="act">
|
|
352
|
+
<template #prepend>
|
|
353
|
+
<CdsIcon name="doc" />
|
|
354
|
+
</template>
|
|
355
|
+
<template #title>Акт сверки за март</template>
|
|
356
|
+
<template #subtitle>ООО «Василёк»</template>
|
|
357
|
+
<template #append>
|
|
358
|
+
<CdsBadge inline content="3" />
|
|
359
|
+
</template>
|
|
360
|
+
</CdsListItem>
|
|
361
|
+
|
|
362
|
+
<CdsListItem value="manager">
|
|
363
|
+
<template #prepend>
|
|
364
|
+
<CdsAvatar size="sm" image="https://i.pravatar.cc/80?img=47" />
|
|
365
|
+
</template>
|
|
366
|
+
<template #title>Анна Смирнова</template>
|
|
367
|
+
<template #subtitle>Ответственная за закупку</template>
|
|
368
|
+
<template #append>
|
|
369
|
+
<CdsFunctionalButton icon="overflow-menu-vertical" aria-label="Ещё" />
|
|
370
|
+
</template>
|
|
371
|
+
</CdsListItem>
|
|
372
|
+
</CdsList>
|
|
373
|
+
</template>
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
## Assembling from components
|
|
377
|
+
|
|
378
|
+
The group passes the arrow to the activator as the default value for `append-icon`, and the `append` slot replaces that area entirely — so with your own content the arrow disappears. Bring it back with an empty `<CdsIcon />` next to it: the icon picks up the direction of the arrow from the defaults of the group and keeps toggling on expand.
|
|
379
|
+
|
|
380
|
+
**Example (SFC):**
|
|
381
|
+
|
|
382
|
+
```vue
|
|
383
|
+
<script setup lang="ts">
|
|
384
|
+
import { CdsBadge, CdsIcon, CdsList, CdsListGroup, CdsListItem } from '@central-design-system/components';
|
|
385
|
+
</script>
|
|
386
|
+
|
|
387
|
+
<template>
|
|
388
|
+
<CdsList class="m-auto w-[250px]">
|
|
389
|
+
<CdsListItem value="all">
|
|
390
|
+
<template #prepend>
|
|
391
|
+
<CdsIcon name="directory" />
|
|
392
|
+
</template>
|
|
393
|
+
<template #title>Все документы</template>
|
|
394
|
+
</CdsListItem>
|
|
395
|
+
|
|
396
|
+
<CdsListGroup value="contracts">
|
|
397
|
+
<template #activator="{ props }">
|
|
398
|
+
<CdsListItem v-bind="props" value="contracts">
|
|
399
|
+
<template #prepend>
|
|
400
|
+
<CdsIcon name="directory" />
|
|
401
|
+
</template>
|
|
402
|
+
<template #title>Договоры</template>
|
|
403
|
+
<template #append>
|
|
404
|
+
<CdsBadge class="mr-2" inline content="12" />
|
|
405
|
+
<CdsIcon />
|
|
406
|
+
</template>
|
|
407
|
+
</CdsListItem>
|
|
408
|
+
</template>
|
|
409
|
+
|
|
410
|
+
<CdsListItem value="supply">
|
|
411
|
+
<template #prepend>
|
|
412
|
+
<CdsIcon name="doc" />
|
|
413
|
+
</template>
|
|
414
|
+
<template #title>Поставка</template>
|
|
415
|
+
</CdsListItem>
|
|
416
|
+
|
|
417
|
+
<CdsListItem value="rent">
|
|
418
|
+
<template #prepend>
|
|
419
|
+
<CdsIcon name="doc" />
|
|
420
|
+
</template>
|
|
421
|
+
<template #title>Аренда</template>
|
|
422
|
+
</CdsListItem>
|
|
423
|
+
|
|
424
|
+
<CdsListGroup value="services" subgroup>
|
|
425
|
+
<template #activator="{ props }">
|
|
426
|
+
<CdsListItem v-bind="props" value="services">
|
|
427
|
+
<template #title>Услуги</template>
|
|
428
|
+
</CdsListItem>
|
|
429
|
+
</template>
|
|
430
|
+
|
|
431
|
+
<CdsListItem value="services-single">
|
|
432
|
+
<template #prepend>
|
|
433
|
+
<CdsIcon name="doc" />
|
|
434
|
+
</template>
|
|
435
|
+
<template #title>Разовые</template>
|
|
436
|
+
</CdsListItem>
|
|
437
|
+
|
|
438
|
+
<CdsListItem value="services-regular">
|
|
439
|
+
<template #prepend>
|
|
440
|
+
<CdsIcon name="doc" />
|
|
441
|
+
</template>
|
|
442
|
+
<template #title>Абонентские</template>
|
|
443
|
+
</CdsListItem>
|
|
444
|
+
</CdsListGroup>
|
|
445
|
+
</CdsListGroup>
|
|
446
|
+
|
|
447
|
+
<CdsListGroup value="accounting">
|
|
448
|
+
<template #activator="{ props }">
|
|
449
|
+
<CdsListItem v-bind="props" value="accounting">
|
|
450
|
+
<template #prepend>
|
|
451
|
+
<CdsIcon name="directory" />
|
|
452
|
+
</template>
|
|
453
|
+
<template #title>Бухгалтерия</template>
|
|
454
|
+
</CdsListItem>
|
|
455
|
+
</template>
|
|
456
|
+
|
|
457
|
+
<CdsListItem value="invoices">
|
|
458
|
+
<template #prepend>
|
|
459
|
+
<CdsIcon name="doc" />
|
|
460
|
+
</template>
|
|
461
|
+
<template #title>Счета</template>
|
|
462
|
+
</CdsListItem>
|
|
463
|
+
|
|
464
|
+
<CdsListItem value="acts">
|
|
465
|
+
<template #prepend>
|
|
466
|
+
<CdsIcon name="doc" />
|
|
467
|
+
</template>
|
|
468
|
+
<template #title>Акты сверки</template>
|
|
469
|
+
</CdsListItem>
|
|
470
|
+
</CdsListGroup>
|
|
471
|
+
</CdsList>
|
|
472
|
+
</template>
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
## Section menu
|
|
476
|
+
|
|
477
|
+
A side menu is `activatable` plus `nav`: exactly one entry is active, `mandatory` forbids clearing the selection, and `v-model:activated` keeps the current section in the application state. Subheaders split the entries into meaningful blocks.
|
|
478
|
+
|
|
479
|
+
**Example (SFC):**
|
|
480
|
+
|
|
481
|
+
```vue
|
|
482
|
+
<script setup lang="ts">
|
|
483
|
+
import { CdsList } from '@central-design-system/components';
|
|
484
|
+
import { computed, ref } from 'vue';
|
|
485
|
+
|
|
486
|
+
const activated = ref(['contracts']);
|
|
487
|
+
|
|
488
|
+
const items: { type?: string; title: string; value?: string; props?: Record<string, unknown> }[] = [
|
|
489
|
+
{ type: 'subheader', title: 'Работа' },
|
|
490
|
+
{ title: 'Закупки', value: 'purchases', props: { prependIcon: 'shopping-cart' } },
|
|
491
|
+
{ title: 'Договоры', value: 'contracts', props: { prependIcon: 'doc' } },
|
|
492
|
+
{ title: 'Поставщики', value: 'suppliers', props: { prependIcon: 'company' } },
|
|
493
|
+
{ type: 'subheader', title: 'Настройки' },
|
|
494
|
+
{ title: 'Сотрудники', value: 'employees', props: { prependIcon: 'user-group' } },
|
|
495
|
+
{ title: 'Уведомления', value: 'notifications', props: { prependIcon: 'notification' } }
|
|
496
|
+
];
|
|
497
|
+
|
|
498
|
+
const current = computed(() => items.find((item) => item.value === activated.value[0])?.title ?? 'ничего');
|
|
499
|
+
</script>
|
|
500
|
+
|
|
501
|
+
<template>
|
|
502
|
+
<div class="m-auto flex w-[250px] flex-col gap-2">
|
|
503
|
+
<CdsList v-model:activated="activated" activatable nav mandatory :items="items" />
|
|
504
|
+
|
|
505
|
+
<span class="text-100 text-content-secondary">Открыт раздел: {{ current }}</span>
|
|
506
|
+
</div>
|
|
507
|
+
</template>
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
## Document list with actions
|
|
511
|
+
|
|
512
|
+
The whole row stays clickable, and the action in the `append` area works on top of it — that is why the button has `@click.stop`, otherwise the click would reach the item and select it. The status next to the button is a regular [CdsTag](../cds-tag/api.md).
|
|
513
|
+
|
|
514
|
+
**Example (SFC):**
|
|
515
|
+
|
|
516
|
+
```vue
|
|
517
|
+
<script setup lang="ts">
|
|
518
|
+
import { CdsFunctionalButton, CdsList, CdsListItem, CdsTag } from '@central-design-system/components';
|
|
519
|
+
import { ref } from 'vue';
|
|
520
|
+
|
|
521
|
+
const documents = ref([
|
|
522
|
+
{ id: 1, title: 'Договор поставки № 42', company: 'ООО «Ромашка»', status: 'Подписан' },
|
|
523
|
+
{ id: 2, title: 'Акт сверки за март', company: 'ООО «Василёк»', status: 'На согласовании' },
|
|
524
|
+
{ id: 3, title: 'Счёт на оплату № 5512', company: 'ООО «Ромашка»', status: 'Черновик' }
|
|
525
|
+
]);
|
|
526
|
+
|
|
527
|
+
const removed = ref<string[]>([]);
|
|
528
|
+
|
|
529
|
+
function remove(id: number) {
|
|
530
|
+
const document = documents.value.find((item) => item.id === id);
|
|
531
|
+
if (!document) return;
|
|
532
|
+
|
|
533
|
+
removed.value = [...removed.value, document.title];
|
|
534
|
+
documents.value = documents.value.filter((item) => item.id !== id);
|
|
535
|
+
}
|
|
536
|
+
</script>
|
|
537
|
+
|
|
538
|
+
<template>
|
|
539
|
+
<div class="m-auto flex w-[380px] flex-col gap-2">
|
|
540
|
+
<CdsList lines="two">
|
|
541
|
+
<CdsListItem
|
|
542
|
+
v-for="document of documents"
|
|
543
|
+
:key="document.id"
|
|
544
|
+
:value="document.id"
|
|
545
|
+
prepend-icon="doc"
|
|
546
|
+
:title="document.title"
|
|
547
|
+
:subtitle="document.company"
|
|
548
|
+
>
|
|
549
|
+
<template #append>
|
|
550
|
+
<div class="flex items-center gap-2">
|
|
551
|
+
<CdsTag size="sm" :text="document.status" />
|
|
552
|
+
<CdsFunctionalButton icon="delete" aria-label="Удалить документ" @click.stop="remove(document.id)" />
|
|
553
|
+
</div>
|
|
554
|
+
</template>
|
|
555
|
+
</CdsListItem>
|
|
556
|
+
</CdsList>
|
|
557
|
+
|
|
558
|
+
<span v-if="removed.length" class="text-100 text-content-secondary">Удалено: {{ removed.join(', ') }}</span>
|
|
559
|
+
</div>
|
|
560
|
+
</template>
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
## Picking recipients
|
|
564
|
+
|
|
565
|
+
The `prepend` slot receives `isSelected` and `select` — the selection state and the function that changes it. This lets you show a checkbox while keeping the click on the whole row: `CdsListItemAction` aligns it to the grid of the item, and `CdsAvatar` stands next to it.
|
|
566
|
+
|
|
567
|
+
**Example (SFC):**
|
|
568
|
+
|
|
569
|
+
```vue
|
|
570
|
+
<script setup lang="ts">
|
|
571
|
+
import { CdsAvatar, CdsCheckbox, CdsList, CdsListItem, CdsListItemAction } from '@central-design-system/components';
|
|
572
|
+
import { computed, ref } from 'vue';
|
|
573
|
+
|
|
574
|
+
const people = [
|
|
575
|
+
{ name: 'Анна Смирнова', email: 'a.smirnova@example.com', image: 'https://i.pravatar.cc/80?img=47' },
|
|
576
|
+
{ name: 'Дмитрий Орлов', email: 'd.orlov@example.com', image: 'https://i.pravatar.cc/80?img=12' },
|
|
577
|
+
{ name: 'Елена Васильева', email: 'e.vasileva@example.com', image: 'https://i.pravatar.cc/80?img=44' },
|
|
578
|
+
{ name: 'Игорь Крылов', email: 'i.krylov@example.com', image: 'https://i.pravatar.cc/80?img=32' }
|
|
579
|
+
];
|
|
580
|
+
|
|
581
|
+
const selected = ref(['a.smirnova@example.com']);
|
|
582
|
+
|
|
583
|
+
const summary = computed(() =>
|
|
584
|
+
selected.value.length ? `Выбрано получателей: ${selected.value.length}` : 'Получатели не выбраны'
|
|
585
|
+
);
|
|
586
|
+
</script>
|
|
587
|
+
|
|
588
|
+
<template>
|
|
589
|
+
<div class="m-auto flex w-[300px] flex-col gap-2">
|
|
590
|
+
<CdsList v-model:selected="selected" selectable select-strategy="independent" lines="two">
|
|
591
|
+
<CdsListItem v-for="person of people" :key="person.email" :value="person.email" :title="person.name">
|
|
592
|
+
<template #prepend="{ isSelected, select }">
|
|
593
|
+
<CdsListItemAction start>
|
|
594
|
+
<CdsCheckbox :model-value="isSelected" hide-details tabindex="-1" @update:model-value="select" />
|
|
595
|
+
</CdsListItemAction>
|
|
596
|
+
|
|
597
|
+
<CdsAvatar size="sm" :image="person.image" />
|
|
598
|
+
</template>
|
|
599
|
+
|
|
600
|
+
<template #subtitle>{{ person.email }}</template>
|
|
601
|
+
</CdsListItem>
|
|
602
|
+
</CdsList>
|
|
603
|
+
|
|
604
|
+
<span class="text-100 text-content-secondary">{{ summary }}</span>
|
|
605
|
+
</div>
|
|
606
|
+
</template>
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
## Searching through a list
|
|
610
|
+
|
|
611
|
+
The list is rebuilt from the filtered array — it needs no logic of its own. When there are no matches, a [CdsEmptyState](../cds-empty-state/api.md) is shown instead of an empty list: the user understands that the reason is the query, not the loading.
|
|
612
|
+
|
|
613
|
+
**Example (SFC):**
|
|
614
|
+
|
|
615
|
+
```vue
|
|
616
|
+
<script setup lang="ts">
|
|
617
|
+
import { CdsEmptyState, CdsList, CdsTextInput } from '@central-design-system/components';
|
|
618
|
+
import { computed, ref } from 'vue';
|
|
619
|
+
|
|
620
|
+
const query = ref('');
|
|
621
|
+
|
|
622
|
+
const suppliers = [
|
|
623
|
+
{ title: 'ООО «Ромашка»', value: 'romashka', props: { prependIcon: 'company', subtitle: 'Канцелярия' } },
|
|
624
|
+
{ title: 'ООО «Василёк»', value: 'vasilek', props: { prependIcon: 'company', subtitle: 'Логистика' } },
|
|
625
|
+
{
|
|
626
|
+
title: 'АО «Северсталь-Комплект»',
|
|
627
|
+
value: 'severstal',
|
|
628
|
+
props: { prependIcon: 'company', subtitle: 'Металлопрокат' }
|
|
629
|
+
},
|
|
630
|
+
{ title: 'ИП Кузнецов А. В.', value: 'kuznecov', props: { prependIcon: 'company', subtitle: 'Ремонт техники' } }
|
|
631
|
+
];
|
|
632
|
+
|
|
633
|
+
const filtered = computed(() =>
|
|
634
|
+
suppliers.filter((supplier) => supplier.title.toLowerCase().includes(query.value.trim().toLowerCase()))
|
|
635
|
+
);
|
|
636
|
+
</script>
|
|
637
|
+
|
|
638
|
+
<template>
|
|
639
|
+
<div class="m-auto flex w-[300px] flex-col gap-2">
|
|
640
|
+
<CdsTextInput
|
|
641
|
+
v-model="query"
|
|
642
|
+
placeholder="Поиск по поставщикам"
|
|
643
|
+
prepend-inner-icon="search"
|
|
644
|
+
clearable
|
|
645
|
+
hide-details
|
|
646
|
+
/>
|
|
647
|
+
|
|
648
|
+
<CdsList v-if="filtered.length" :items="filtered" lines="two" />
|
|
649
|
+
|
|
650
|
+
<CdsEmptyState v-else title="Ничего не найдено" description="Проверьте написание или очистите запрос" />
|
|
651
|
+
</div>
|
|
652
|
+
</template>
|
|
653
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsList — 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 short title names the record — the eye compares items along a single trait. | A paragraph of text in a row turns the list into an article: scanning no longer finds anything. |
|
|
9
|
+
| A long enumeration is split by subheaders — it is clear where to look for the record you need. | A solid list with no grouping has to be read in full. |
|
|
10
|
+
| One action per row, the rest in a menu: the item as a whole stays clickable. | A row of buttons in every line overloads the list and makes the item itself hard to hit. |
|