@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,610 @@
|
|
|
1
|
+
# CdsTabs — 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
|
+
Tabs split the screen into sections of equal weight and switch between them in place, without going to another page. The bar is built from `CdsTab` components or from an `items` array, and the content of the sections is switched by `CdsTabsView` and `CdsTabsViewItem`.
|
|
7
|
+
|
|
8
|
+
## Tabs and content
|
|
9
|
+
|
|
10
|
+
Sections are declared with `CdsTab` components in the default slot, and the content with `CdsTabsViewItem` components inside `CdsTabsView`. The `value` props bind a tab to its content, and a shared `v-model` keeps the bar and the content area in sync.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsTab, CdsTabs, CdsTabsView, CdsTabsViewItem } from '@central-design-system/components';
|
|
17
|
+
import { ref } from 'vue';
|
|
18
|
+
|
|
19
|
+
const tab = ref('overview');
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<div class="m-auto max-w-[470px]">
|
|
24
|
+
<CdsTabs v-model="tab">
|
|
25
|
+
<CdsTab value="overview">Обзор</CdsTab>
|
|
26
|
+
<CdsTab value="docs">Документы</CdsTab>
|
|
27
|
+
<CdsTab value="history">История</CdsTab>
|
|
28
|
+
</CdsTabs>
|
|
29
|
+
|
|
30
|
+
<CdsTabsView v-model="tab" class="mt-2">
|
|
31
|
+
<CdsTabsViewItem value="overview"> Сводка по проекту: статус, ответственные и ближайшие сроки. </CdsTabsViewItem>
|
|
32
|
+
<CdsTabsViewItem value="docs"> Договоры, акты и счета — всего 8 документов. </CdsTabsViewItem>
|
|
33
|
+
<CdsTabsViewItem value="history"> Хронология изменений за последние 30 дней. </CdsTabsViewItem>
|
|
34
|
+
</CdsTabsView>
|
|
35
|
+
</div>
|
|
36
|
+
</template>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Tabs from an array
|
|
40
|
+
|
|
41
|
+
Pass an array of strings or `{ text, value }` objects into `items` — the tabs and the content area are rendered automatically. The content of a section comes from the `item.{value}` slots, the label of a tab from the `tab.{value}` slots.
|
|
42
|
+
|
|
43
|
+
**Example (SFC):**
|
|
44
|
+
|
|
45
|
+
```vue
|
|
46
|
+
<script setup lang="ts">
|
|
47
|
+
import { CdsTabs } from '@central-design-system/components';
|
|
48
|
+
import { ref } from 'vue';
|
|
49
|
+
|
|
50
|
+
const tab = ref('requests');
|
|
51
|
+
const items = [
|
|
52
|
+
{ text: 'Заявки', value: 'requests' },
|
|
53
|
+
{ text: 'Договоры', value: 'contracts' },
|
|
54
|
+
{ text: 'Акты', value: 'acts' }
|
|
55
|
+
];
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<template>
|
|
59
|
+
<div class="m-auto max-w-[470px]">
|
|
60
|
+
<CdsTabs v-model="tab" :items="items">
|
|
61
|
+
<template #[`item.requests`]>
|
|
62
|
+
<p class="py-2">Открытые заявки за последний месяц.</p>
|
|
63
|
+
</template>
|
|
64
|
+
<template #[`item.contracts`]>
|
|
65
|
+
<p class="py-2">Действующие договоры с контрагентами.</p>
|
|
66
|
+
</template>
|
|
67
|
+
<template #[`item.acts`]>
|
|
68
|
+
<p class="py-2">Акты, ожидающие подписания.</p>
|
|
69
|
+
</template>
|
|
70
|
+
</CdsTabs>
|
|
71
|
+
</div>
|
|
72
|
+
</template>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Alignment
|
|
76
|
+
|
|
77
|
+
The `align` prop pushes the tabs to the start of the bar (the default), to the center or to the end.
|
|
78
|
+
|
|
79
|
+
**Example (SFC):**
|
|
80
|
+
|
|
81
|
+
```vue
|
|
82
|
+
<script setup lang="ts">
|
|
83
|
+
import { CdsRadio, CdsRadioGroup, CdsTab, CdsTabs } from '@central-design-system/components';
|
|
84
|
+
import { ref } from 'vue';
|
|
85
|
+
|
|
86
|
+
const align = ref<'start' | 'center' | 'end'>('start');
|
|
87
|
+
</script>
|
|
88
|
+
|
|
89
|
+
<template>
|
|
90
|
+
<div class="flex flex-col items-center gap-2">
|
|
91
|
+
<CdsRadioGroup v-model="align" label="Позиционирование (align)" direction="horizontal">
|
|
92
|
+
<CdsRadio label="start" value="start" />
|
|
93
|
+
<CdsRadio label="center" value="center" />
|
|
94
|
+
<CdsRadio label="end" value="end" />
|
|
95
|
+
</CdsRadioGroup>
|
|
96
|
+
|
|
97
|
+
<CdsTabs :align="align" class="w-full">
|
|
98
|
+
<CdsTab>Москва</CdsTab>
|
|
99
|
+
<CdsTab>Лиссабон</CdsTab>
|
|
100
|
+
<CdsTab>Нью-Йорк</CdsTab>
|
|
101
|
+
</CdsTabs>
|
|
102
|
+
</div>
|
|
103
|
+
</template>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Layout
|
|
107
|
+
|
|
108
|
+
The `grow` prop stretches the tabs across the whole width of the bar — every tab takes an equal share of the free space.
|
|
109
|
+
|
|
110
|
+
**Example (SFC):**
|
|
111
|
+
|
|
112
|
+
```vue
|
|
113
|
+
<script setup lang="ts">
|
|
114
|
+
import { CdsTab, CdsTabs } from '@central-design-system/components';
|
|
115
|
+
</script>
|
|
116
|
+
|
|
117
|
+
<template>
|
|
118
|
+
<CdsTabs grow>
|
|
119
|
+
<CdsTab>Актуальные</CdsTab>
|
|
120
|
+
<CdsTab>Последние</CdsTab>
|
|
121
|
+
<CdsTab>Архивные</CdsTab>
|
|
122
|
+
</CdsTabs>
|
|
123
|
+
</template>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Layout
|
|
127
|
+
|
|
128
|
+
The `fixed-tabs` prop also equalizes the width of the tabs, but caps it at 300px and centers the group.
|
|
129
|
+
|
|
130
|
+
**Example (SFC):**
|
|
131
|
+
|
|
132
|
+
```vue
|
|
133
|
+
<script setup lang="ts">
|
|
134
|
+
import { CdsTab, CdsTabs } from '@central-design-system/components';
|
|
135
|
+
</script>
|
|
136
|
+
|
|
137
|
+
<template>
|
|
138
|
+
<CdsTabs fixed-tabs>
|
|
139
|
+
<CdsTab>Все</CdsTab>
|
|
140
|
+
<CdsTab>Входящие</CdsTab>
|
|
141
|
+
<CdsTab>Отправленные</CdsTab>
|
|
142
|
+
<CdsTab>Удаленные</CdsTab>
|
|
143
|
+
</CdsTabs>
|
|
144
|
+
</template>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Layout
|
|
148
|
+
|
|
149
|
+
The `direction="vertical"` prop turns the bar into a column — handy for settings and sections with a long list. The content area is placed next to it with a regular flex row.
|
|
150
|
+
|
|
151
|
+
**Example (SFC):**
|
|
152
|
+
|
|
153
|
+
```vue
|
|
154
|
+
<script setup lang="ts">
|
|
155
|
+
import { CdsCard, CdsCardText, CdsTab, CdsTabs, CdsTabsView, CdsTabsViewItem } from '@central-design-system/components';
|
|
156
|
+
import { ref } from 'vue';
|
|
157
|
+
|
|
158
|
+
const tab = ref('company');
|
|
159
|
+
</script>
|
|
160
|
+
|
|
161
|
+
<template>
|
|
162
|
+
<CdsCard class="m-auto max-w-[560px]">
|
|
163
|
+
<div class="flex">
|
|
164
|
+
<CdsTabs v-model="tab" direction="vertical">
|
|
165
|
+
<CdsTab value="company" prepend-icon="company">Компания</CdsTab>
|
|
166
|
+
<CdsTab value="employees" prepend-icon="user-group">Сотрудники</CdsTab>
|
|
167
|
+
<CdsTab value="requisites" prepend-icon="card-bank">Реквизиты</CdsTab>
|
|
168
|
+
</CdsTabs>
|
|
169
|
+
|
|
170
|
+
<CdsTabsView v-model="tab">
|
|
171
|
+
<CdsTabsViewItem value="company">
|
|
172
|
+
<CdsCardText> Название, сфера деятельности и контакты — эти данные видят поставщики в каталоге. </CdsCardText>
|
|
173
|
+
</CdsTabsViewItem>
|
|
174
|
+
|
|
175
|
+
<CdsTabsViewItem value="employees">
|
|
176
|
+
<CdsCardText> В организации 14 сотрудников. Пригласите коллег и настройте им права доступа. </CdsCardText>
|
|
177
|
+
</CdsTabsViewItem>
|
|
178
|
+
|
|
179
|
+
<CdsTabsViewItem value="requisites">
|
|
180
|
+
<CdsCardText> ИНН, КПП и расчётный счёт подставляются в документы автоматически. </CdsCardText>
|
|
181
|
+
</CdsTabsViewItem>
|
|
182
|
+
</CdsTabsView>
|
|
183
|
+
</div>
|
|
184
|
+
</CdsCard>
|
|
185
|
+
</template>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Icons
|
|
189
|
+
|
|
190
|
+
A tab accepts the same content props as a button: `prepend-icon` and `append-icon` add an icon next to the text, `icon` leaves only the icon. For an icon tab do not forget `aria-label` — without text it stays the only name of the section.
|
|
191
|
+
|
|
192
|
+
**Example (SFC):**
|
|
193
|
+
|
|
194
|
+
```vue
|
|
195
|
+
<script setup lang="ts">
|
|
196
|
+
import { CdsTab, CdsTabs } from '@central-design-system/components';
|
|
197
|
+
</script>
|
|
198
|
+
|
|
199
|
+
<template>
|
|
200
|
+
<div class="flex flex-col items-center gap-2">
|
|
201
|
+
<CdsTabs>
|
|
202
|
+
<CdsTab prepend-icon="doc">Документы</CdsTab>
|
|
203
|
+
<CdsTab prepend-icon="comment">Обсуждение</CdsTab>
|
|
204
|
+
<CdsTab prepend-icon="settings">Настройки</CdsTab>
|
|
205
|
+
</CdsTabs>
|
|
206
|
+
|
|
207
|
+
<CdsTabs>
|
|
208
|
+
<CdsTab icon="list" aria-label="Списком" />
|
|
209
|
+
<CdsTab icon="data-cards" aria-label="Карточками" />
|
|
210
|
+
</CdsTabs>
|
|
211
|
+
</div>
|
|
212
|
+
</template>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Icons
|
|
216
|
+
|
|
217
|
+
The `stacked` prop puts the icon above the text — the tab becomes taller and more noticeable. Such a layout works well with `align="center"` in mobile scenarios.
|
|
218
|
+
|
|
219
|
+
**Example (SFC):**
|
|
220
|
+
|
|
221
|
+
```vue
|
|
222
|
+
<script setup lang="ts">
|
|
223
|
+
import { CdsTab, CdsTabs, CdsTabsView, CdsTabsViewItem } from '@central-design-system/components';
|
|
224
|
+
import { ref } from 'vue';
|
|
225
|
+
|
|
226
|
+
const tab = ref('recent');
|
|
227
|
+
</script>
|
|
228
|
+
|
|
229
|
+
<template>
|
|
230
|
+
<div class="m-auto max-w-[470px]">
|
|
231
|
+
<CdsTabs v-model="tab" stacked align="center">
|
|
232
|
+
<CdsTab value="recent" prepend-icon="clock">Недавние</CdsTab>
|
|
233
|
+
<CdsTab value="favorites" prepend-icon="star">Избранное</CdsTab>
|
|
234
|
+
<CdsTab value="nearby" prepend-icon="location">Рядом</CdsTab>
|
|
235
|
+
</CdsTabs>
|
|
236
|
+
|
|
237
|
+
<CdsTabsView v-model="tab" class="mt-2">
|
|
238
|
+
<CdsTabsViewItem value="recent"> Поставщики, с которыми вы работали за последний месяц. </CdsTabsViewItem>
|
|
239
|
+
<CdsTabsViewItem value="favorites"> Компании, которые вы добавили в избранное. </CdsTabsViewItem>
|
|
240
|
+
<CdsTabsViewItem value="nearby"> Поставщики в вашем регионе с доставкой за один день. </CdsTabsViewItem>
|
|
241
|
+
</CdsTabsView>
|
|
242
|
+
</div>
|
|
243
|
+
</template>
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## States
|
|
247
|
+
|
|
248
|
+
The `disabled` prop turns a tab off, `loading` shows a loading indicator instead of the content.
|
|
249
|
+
|
|
250
|
+
**Example (SFC):**
|
|
251
|
+
|
|
252
|
+
```vue
|
|
253
|
+
<script setup lang="ts">
|
|
254
|
+
import { CdsTab, CdsTabs } from '@central-design-system/components';
|
|
255
|
+
</script>
|
|
256
|
+
|
|
257
|
+
<template>
|
|
258
|
+
<div class="flex justify-center">
|
|
259
|
+
<CdsTabs>
|
|
260
|
+
<CdsTab>Активные</CdsTab>
|
|
261
|
+
<CdsTab disabled>Черновики</CdsTab>
|
|
262
|
+
<CdsTab loading>Архив</CdsTab>
|
|
263
|
+
</CdsTabs>
|
|
264
|
+
</div>
|
|
265
|
+
</template>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Colors
|
|
269
|
+
|
|
270
|
+
Tabs accept the color aliases of the palette (`neutral`, `red`, `green`, `cyan`, `purple`…) or any CSS color. The `color` prop paints the text of the tabs, `active-color` the slider of the selected tab, `bg-color` the background of the whole bar, and `base-color` the background of the unselected tabs.
|
|
271
|
+
|
|
272
|
+
**Example (SFC):**
|
|
273
|
+
|
|
274
|
+
```vue
|
|
275
|
+
<script setup lang="ts">
|
|
276
|
+
import { CdsTab, CdsTabs } from '@central-design-system/components';
|
|
277
|
+
</script>
|
|
278
|
+
|
|
279
|
+
<template>
|
|
280
|
+
<div class="flex flex-col items-center gap-2">
|
|
281
|
+
<CdsTabs color="purple" active-color="purple">
|
|
282
|
+
<CdsTab>Обзор</CdsTab>
|
|
283
|
+
<CdsTab>Аналитика</CdsTab>
|
|
284
|
+
<CdsTab>Отчёты</CdsTab>
|
|
285
|
+
</CdsTabs>
|
|
286
|
+
|
|
287
|
+
<CdsTabs bg-color="cyan">
|
|
288
|
+
<CdsTab>Обзор</CdsTab>
|
|
289
|
+
<CdsTab>Аналитика</CdsTab>
|
|
290
|
+
<CdsTab>Отчёты</CdsTab>
|
|
291
|
+
</CdsTabs>
|
|
292
|
+
</div>
|
|
293
|
+
</template>
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## Scrolling
|
|
297
|
+
|
|
298
|
+
When the tabs do not fit into the bar, it scrolls. The `show-arrows` prop adds scroll arrows, `center-active` keeps the selected tab in the center of the bar.
|
|
299
|
+
|
|
300
|
+
**Example (SFC):**
|
|
301
|
+
|
|
302
|
+
```vue
|
|
303
|
+
<script setup lang="ts">
|
|
304
|
+
import { CdsTab, CdsTabs } from '@central-design-system/components';
|
|
305
|
+
</script>
|
|
306
|
+
|
|
307
|
+
<template>
|
|
308
|
+
<CdsTabs center-active show-arrows>
|
|
309
|
+
<CdsTab v-for="i of 20" :key="i">Раздел {{ i }}</CdsTab>
|
|
310
|
+
</CdsTabs>
|
|
311
|
+
</template>
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## Slider
|
|
315
|
+
|
|
316
|
+
The `slider-transition` prop picks the animation of the slider under the selected tab: `shift` (the default) moves it to the new tab, `grow` grows it in place, `fade` fades it in. The duration is set through `slider-transition-duration`, and `hide-slider` removes the slider entirely.
|
|
317
|
+
|
|
318
|
+
**Example (SFC):**
|
|
319
|
+
|
|
320
|
+
```vue
|
|
321
|
+
<script setup lang="ts">
|
|
322
|
+
import { CdsRadio, CdsRadioGroup, CdsTab, CdsTabs } from '@central-design-system/components';
|
|
323
|
+
import { ref } from 'vue';
|
|
324
|
+
|
|
325
|
+
const transition = ref<'shift' | 'grow' | 'fade'>('shift');
|
|
326
|
+
</script>
|
|
327
|
+
|
|
328
|
+
<template>
|
|
329
|
+
<div class="flex flex-col items-center gap-2">
|
|
330
|
+
<CdsRadioGroup v-model="transition" label="Анимация (slider-transition)" direction="horizontal">
|
|
331
|
+
<CdsRadio label="shift" value="shift" />
|
|
332
|
+
<CdsRadio label="grow" value="grow" />
|
|
333
|
+
<CdsRadio label="fade" value="fade" />
|
|
334
|
+
</CdsRadioGroup>
|
|
335
|
+
|
|
336
|
+
<CdsTabs :slider-transition="transition">
|
|
337
|
+
<CdsTab>Обзор</CdsTab>
|
|
338
|
+
<CdsTab>Аналитика</CdsTab>
|
|
339
|
+
<CdsTab>Отчёты</CdsTab>
|
|
340
|
+
</CdsTabs>
|
|
341
|
+
</div>
|
|
342
|
+
</template>
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
## Slots
|
|
346
|
+
|
|
347
|
+
The `tab` and `item` slots receive the array element and replace the whole component — return `CdsTab` and `CdsTabsViewItem` with your own `value` from them. The `tab.{value}` and `item.{value}` slots replace the content only.
|
|
348
|
+
|
|
349
|
+
**Example (SFC):**
|
|
350
|
+
|
|
351
|
+
```vue
|
|
352
|
+
<script setup lang="ts">
|
|
353
|
+
import { CdsTab, CdsTabs, CdsTabsViewItem } from '@central-design-system/components';
|
|
354
|
+
import { ref } from 'vue';
|
|
355
|
+
|
|
356
|
+
const tab = ref('profile');
|
|
357
|
+
const items = [
|
|
358
|
+
{ text: 'Профиль', value: 'profile', icon: 'user-avatar' },
|
|
359
|
+
{ text: 'Уведомления', value: 'notifications', icon: 'notification' },
|
|
360
|
+
{ text: 'Безопасность', value: 'security', icon: 'locked' }
|
|
361
|
+
];
|
|
362
|
+
</script>
|
|
363
|
+
|
|
364
|
+
<template>
|
|
365
|
+
<div class="m-auto max-w-[420px]">
|
|
366
|
+
<CdsTabs v-model="tab" :items="items">
|
|
367
|
+
<template #tab="{ item }">
|
|
368
|
+
<CdsTab :value="item.value" :prepend-icon="item.icon">{{ item.text }}</CdsTab>
|
|
369
|
+
</template>
|
|
370
|
+
|
|
371
|
+
<template #item="{ item }">
|
|
372
|
+
<CdsTabsViewItem :value="item.value">
|
|
373
|
+
<p class="py-2">Раздел «{{ item.text }}»</p>
|
|
374
|
+
</CdsTabsViewItem>
|
|
375
|
+
</template>
|
|
376
|
+
</CdsTabs>
|
|
377
|
+
</div>
|
|
378
|
+
</template>
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## Card sections
|
|
382
|
+
|
|
383
|
+
Classic tabs: a product card with sections and a shared `v-model`. The review counter is a `CdsBadge` with the `inline` prop right inside the tab slot.
|
|
384
|
+
|
|
385
|
+
**Example (SFC):**
|
|
386
|
+
|
|
387
|
+
```vue
|
|
388
|
+
<script setup lang="ts">
|
|
389
|
+
import {
|
|
390
|
+
CdsBadge,
|
|
391
|
+
CdsCard,
|
|
392
|
+
CdsCardText,
|
|
393
|
+
CdsTab,
|
|
394
|
+
CdsTabs,
|
|
395
|
+
CdsTabsView,
|
|
396
|
+
CdsTabsViewItem
|
|
397
|
+
} from '@central-design-system/components';
|
|
398
|
+
import { ref } from 'vue';
|
|
399
|
+
|
|
400
|
+
const tab = ref('description');
|
|
401
|
+
</script>
|
|
402
|
+
|
|
403
|
+
<template>
|
|
404
|
+
<CdsCard class="m-auto max-w-[560px]">
|
|
405
|
+
<CdsTabs v-model="tab">
|
|
406
|
+
<CdsTab value="description">Описание</CdsTab>
|
|
407
|
+
<CdsTab value="specs">Характеристики</CdsTab>
|
|
408
|
+
<CdsTab value="reviews">
|
|
409
|
+
Отзывы
|
|
410
|
+
|
|
411
|
+
<template #append>
|
|
412
|
+
<CdsBadge content="12" inline />
|
|
413
|
+
</template>
|
|
414
|
+
</CdsTab>
|
|
415
|
+
</CdsTabs>
|
|
416
|
+
|
|
417
|
+
<CdsCardText>
|
|
418
|
+
<CdsTabsView v-model="tab">
|
|
419
|
+
<CdsTabsViewItem value="description">
|
|
420
|
+
Офисное кресло с регулируемой спинкой и поясничной поддержкой. Подходит для работы за компьютером дольше
|
|
421
|
+
восьми часов в день.
|
|
422
|
+
</CdsTabsViewItem>
|
|
423
|
+
|
|
424
|
+
<CdsTabsViewItem value="specs">
|
|
425
|
+
<dl class="grid grid-cols-2 gap-x-2 gap-y-1">
|
|
426
|
+
<dt class="text-content-secondary">Максимальная нагрузка</dt>
|
|
427
|
+
<dd>120 кг</dd>
|
|
428
|
+
<dt class="text-content-secondary">Материал обивки</dt>
|
|
429
|
+
<dd>Сетка, ткань</dd>
|
|
430
|
+
<dt class="text-content-secondary">Гарантия</dt>
|
|
431
|
+
<dd>3 года</dd>
|
|
432
|
+
</dl>
|
|
433
|
+
</CdsTabsViewItem>
|
|
434
|
+
|
|
435
|
+
<CdsTabsViewItem value="reviews">
|
|
436
|
+
«Собирается за десять минут, спинка держит отлично» — и ещё 11 отзывов со средней оценкой 4,8.
|
|
437
|
+
</CdsTabsViewItem>
|
|
438
|
+
</CdsTabsView>
|
|
439
|
+
</CdsCardText>
|
|
440
|
+
</CdsCard>
|
|
441
|
+
</template>
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
## List filter
|
|
445
|
+
|
|
446
|
+
Tabs work without a content area too: `v-model` holds the selected status and the list is filtered by it through a `computed`. There is a single content area — only the selection changes.
|
|
447
|
+
|
|
448
|
+
**Example (SFC):**
|
|
449
|
+
|
|
450
|
+
```vue
|
|
451
|
+
<script setup lang="ts">
|
|
452
|
+
import { CdsList, CdsListItem, CdsTab, CdsTabs, CdsTag } from '@central-design-system/components';
|
|
453
|
+
import { computed, ref } from 'vue';
|
|
454
|
+
|
|
455
|
+
const status = ref('all');
|
|
456
|
+
|
|
457
|
+
const orders = [
|
|
458
|
+
{ id: 1, title: 'Поставка канцелярии', company: 'ООО «Ромашка»', status: 'active', label: 'В работе' },
|
|
459
|
+
{ id: 2, title: 'Ремонт офиса', company: 'ООО «Василёк»', status: 'done', label: 'Завершён' },
|
|
460
|
+
{ id: 3, title: 'Закупка ноутбуков', company: 'АО «Полюс»', status: 'active', label: 'В работе' },
|
|
461
|
+
{ id: 4, title: 'Клининг склада', company: 'ООО «Чисто»', status: 'done', label: 'Завершён' }
|
|
462
|
+
];
|
|
463
|
+
|
|
464
|
+
const filtered = computed(() =>
|
|
465
|
+
status.value === 'all' ? orders : orders.filter((order) => order.status === status.value)
|
|
466
|
+
);
|
|
467
|
+
</script>
|
|
468
|
+
|
|
469
|
+
<template>
|
|
470
|
+
<div class="m-auto flex w-[420px] flex-col gap-2">
|
|
471
|
+
<CdsTabs v-model="status">
|
|
472
|
+
<CdsTab value="all">Все</CdsTab>
|
|
473
|
+
<CdsTab value="active">В работе</CdsTab>
|
|
474
|
+
<CdsTab value="done">Завершённые</CdsTab>
|
|
475
|
+
</CdsTabs>
|
|
476
|
+
|
|
477
|
+
<CdsList lines="two">
|
|
478
|
+
<CdsListItem
|
|
479
|
+
v-for="order of filtered"
|
|
480
|
+
:key="order.id"
|
|
481
|
+
:value="order.id"
|
|
482
|
+
:title="order.title"
|
|
483
|
+
:subtitle="order.company"
|
|
484
|
+
>
|
|
485
|
+
<template #append>
|
|
486
|
+
<CdsTag size="sm" :text="order.label" />
|
|
487
|
+
</template>
|
|
488
|
+
</CdsListItem>
|
|
489
|
+
</CdsList>
|
|
490
|
+
</div>
|
|
491
|
+
</template>
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
## Lazy loading of sections
|
|
495
|
+
|
|
496
|
+
A heavy section loads on the first open: a `watch` on `v-model` fires the request, `CdsSkeletonLoader` stands in for the content while it loads, and the already loaded sections open instantly.
|
|
497
|
+
|
|
498
|
+
**Example (SFC):**
|
|
499
|
+
|
|
500
|
+
```vue
|
|
501
|
+
<script setup lang="ts">
|
|
502
|
+
import { CdsSkeletonLoader, CdsTab, CdsTabs, CdsTabsView, CdsTabsViewItem } from '@central-design-system/components';
|
|
503
|
+
import { ref, watch } from 'vue';
|
|
504
|
+
|
|
505
|
+
const tab = ref('summary');
|
|
506
|
+
const loaded = ref(['summary']);
|
|
507
|
+
const loading = ref(false);
|
|
508
|
+
|
|
509
|
+
watch(tab, async (value) => {
|
|
510
|
+
if (loaded.value.includes(value as string)) return;
|
|
511
|
+
|
|
512
|
+
loading.value = true;
|
|
513
|
+
await new Promise((resolve) => setTimeout(resolve, 900));
|
|
514
|
+
loaded.value = [...loaded.value, value as string];
|
|
515
|
+
loading.value = false;
|
|
516
|
+
});
|
|
517
|
+
</script>
|
|
518
|
+
|
|
519
|
+
<template>
|
|
520
|
+
<div class="m-auto max-w-[560px]">
|
|
521
|
+
<CdsTabs v-model="tab">
|
|
522
|
+
<CdsTab value="summary">Сводка</CdsTab>
|
|
523
|
+
<CdsTab value="analytics">Аналитика</CdsTab>
|
|
524
|
+
<CdsTab value="reports">Отчёты</CdsTab>
|
|
525
|
+
</CdsTabs>
|
|
526
|
+
|
|
527
|
+
<div class="pt-2">
|
|
528
|
+
<CdsSkeletonLoader v-if="loading" type="article" />
|
|
529
|
+
|
|
530
|
+
<CdsTabsView v-else v-model="tab">
|
|
531
|
+
<CdsTabsViewItem value="summary"> Выручка за квартал выросла на 12%, средний чек — на 4%. </CdsTabsViewItem>
|
|
532
|
+
<CdsTabsViewItem value="analytics"> Данные аналитики загрузились и закешировались. </CdsTabsViewItem>
|
|
533
|
+
<CdsTabsViewItem value="reports"> Отчёты сформированы и готовы к выгрузке. </CdsTabsViewItem>
|
|
534
|
+
</CdsTabsView>
|
|
535
|
+
</div>
|
|
536
|
+
</div>
|
|
537
|
+
</template>
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
## Sections in a "More" menu
|
|
541
|
+
|
|
542
|
+
When there are more sections than fit into the bar, the rare ones hide into a [CdsMenu](../cds-menu/api.md) whose activator is a regular "More" tab in the same bar. A click on "More" immediately shows the first section from the menu, the selected item takes the place of the first visible tab (the displaced one moves into the menu), and if the menu is closed without a choice, the bar and the content return to the current section.
|
|
543
|
+
|
|
544
|
+
**Example (SFC):**
|
|
545
|
+
|
|
546
|
+
```vue
|
|
547
|
+
<script setup lang="ts">
|
|
548
|
+
import {
|
|
549
|
+
CdsList,
|
|
550
|
+
CdsListItem,
|
|
551
|
+
CdsMenu,
|
|
552
|
+
CdsTab,
|
|
553
|
+
CdsTabs,
|
|
554
|
+
CdsTabsView,
|
|
555
|
+
CdsTabsViewItem
|
|
556
|
+
} from '@central-design-system/components';
|
|
557
|
+
import { computed, nextTick, ref, watch } from 'vue';
|
|
558
|
+
|
|
559
|
+
const tab = ref('Сводка');
|
|
560
|
+
const visible = ref(['Сводка', 'Продажи', 'Закупки']);
|
|
561
|
+
const more = ref(['Логистика', 'Финансы', 'Персонал']);
|
|
562
|
+
|
|
563
|
+
const menu = ref(false);
|
|
564
|
+
let lastSection = tab.value;
|
|
565
|
+
|
|
566
|
+
const section = computed(() => (visible.value.includes(tab.value) ? tab.value : more.value[0]));
|
|
567
|
+
|
|
568
|
+
watch(tab, (value) => {
|
|
569
|
+
if (visible.value.includes(value)) lastSection = value;
|
|
570
|
+
});
|
|
571
|
+
|
|
572
|
+
watch(menu, (open) => {
|
|
573
|
+
if (!open && !visible.value.includes(tab.value)) tab.value = lastSection;
|
|
574
|
+
});
|
|
575
|
+
|
|
576
|
+
async function select(item: string) {
|
|
577
|
+
const replaced = visible.value.shift();
|
|
578
|
+
visible.value.push(item);
|
|
579
|
+
more.value = more.value.filter((section) => section !== item);
|
|
580
|
+
if (replaced) more.value.push(replaced);
|
|
581
|
+
|
|
582
|
+
await nextTick();
|
|
583
|
+
tab.value = item;
|
|
584
|
+
}
|
|
585
|
+
</script>
|
|
586
|
+
|
|
587
|
+
<template>
|
|
588
|
+
<div class="m-auto max-w-[560px]">
|
|
589
|
+
<CdsTabs v-model="tab">
|
|
590
|
+
<CdsTab v-for="item in visible" :key="item" :value="item">{{ item }}</CdsTab>
|
|
591
|
+
|
|
592
|
+
<CdsMenu v-if="more.length" v-model="menu">
|
|
593
|
+
<template #activator="{ props }">
|
|
594
|
+
<CdsTab append-icon="chevron-down" v-bind="props">Ещё</CdsTab>
|
|
595
|
+
</template>
|
|
596
|
+
|
|
597
|
+
<CdsList>
|
|
598
|
+
<CdsListItem v-for="item in more" :key="item" :title="item" @click="select(item)" />
|
|
599
|
+
</CdsList>
|
|
600
|
+
</CdsMenu>
|
|
601
|
+
</CdsTabs>
|
|
602
|
+
|
|
603
|
+
<CdsTabsView :model-value="section" class="mt-2">
|
|
604
|
+
<CdsTabsViewItem v-for="item in [...visible, ...more]" :key="item" :value="item">
|
|
605
|
+
Показатели раздела «{{ item }}» за текущий квартал.
|
|
606
|
+
</CdsTabsViewItem>
|
|
607
|
+
</CdsTabsView>
|
|
608
|
+
</div>
|
|
609
|
+
</template>
|
|
610
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsTabs — 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 tab name is a short noun: the section is easy to scan. | Sentence-long names stretch the bar and read slower. |
|
|
9
|
+
| Two to six tabs: every section is visible at once and the choice is obvious. | A dozen tabs cannot be scanned — merge adjacent sections or move the rare ones into a menu. |
|
|
10
|
+
| Tabs are sections of equal weight that are switched in any order. | For a sequential process take CdsSteps: tabs show neither order nor progress. |
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# CdsTabs — 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
|
+
## _CdsTabs.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
// CdsTabs
|
|
11
|
+
$tabs-gap: var(--cds-spacing-100) !default;
|
|
12
|
+
$tabs-height: 24px !default;
|
|
13
|
+
$tabs-stacked-height: 72px !default;
|
|
14
|
+
$tabs-inner-padding: var(--cds-spacing-100) !default;
|
|
15
|
+
$tabs-border-radius: var(--cds-border-radius-300) !default;
|
|
16
|
+
$tabs-color: (
|
|
17
|
+
'background': rgb(var(--cds-color-fill-secondary), 0.5)
|
|
18
|
+
) !default;
|
|
19
|
+
|
|
20
|
+
// CdsTab
|
|
21
|
+
$tab-max-width: 360px !default;
|
|
22
|
+
$tab-fixed-max-width: 300px !default;
|
|
23
|
+
$tab-min-width: 16px !default;
|
|
24
|
+
$tab-padding: 0 var(--cds-spacing-300) !default;
|
|
25
|
+
$tab-border-radius: var(--cds-border-radius-200) !default;
|
|
26
|
+
$tab-color: (
|
|
27
|
+
'default': (
|
|
28
|
+
'background': transparent,
|
|
29
|
+
'content': rgb(var(--cds-color-content-primary))
|
|
30
|
+
),
|
|
31
|
+
'hover': (
|
|
32
|
+
'background': rgb(var(--cds-color-fill-primary-hover)),
|
|
33
|
+
'content': rgb(var(--cds-color-content-primary))
|
|
34
|
+
),
|
|
35
|
+
'selected': (
|
|
36
|
+
'background': rgb(var(--cds-color-fill-elevated)),
|
|
37
|
+
'content': rgb(var(--cds-color-content-primary))
|
|
38
|
+
)
|
|
39
|
+
) !default;
|
|
40
|
+
```
|