@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,431 @@
|
|
|
1
|
+
# CdsLayout — usage examples
|
|
2
|
+
|
|
3
|
+
> Extracted from Storybook stories (`docs/*.stories.ts`) by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> The full component contract is in [api.md](api.md). `v-bind="args"` in templates refers to the props from the **Args** block of the corresponding example.
|
|
5
|
+
|
|
6
|
+
The frame of the application: `CdsLayout` places the header, the side drawers, the content and the footer, measures their sizes and takes the scrolling over. The parts of the layout know about each other — the content never slides under the header and never hides behind a drawer.
|
|
7
|
+
|
|
8
|
+
## The view scheme
|
|
9
|
+
|
|
10
|
+
The `view` prop describes the layout with three strings: top, middle, bottom. The letters are the parts of the layout: `h` — the header, `f` — the footer, `l` and `r` — the left and the right drawer, `p` — the page. The corner letters of the top and the bottom string settle the argument over the corners: `hhh` gives the whole width to the header, `lhh` gives the top left corner to the drawer.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import {
|
|
17
|
+
CdsDrawer,
|
|
18
|
+
CdsFooter,
|
|
19
|
+
CdsHeader,
|
|
20
|
+
CdsLayout,
|
|
21
|
+
CdsList,
|
|
22
|
+
CdsListItem,
|
|
23
|
+
CdsMain,
|
|
24
|
+
CdsPage,
|
|
25
|
+
CdsRadio,
|
|
26
|
+
CdsRadioGroup,
|
|
27
|
+
CdsToolbar,
|
|
28
|
+
CdsToolbarTitle
|
|
29
|
+
} from '@central-design-system/components';
|
|
30
|
+
import { ref } from 'vue';
|
|
31
|
+
|
|
32
|
+
const view = ref('hhh lpr fff');
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<template>
|
|
36
|
+
<div class="flex flex-col gap-4">
|
|
37
|
+
<CdsRadioGroup v-model="view" direction="horizontal" hide-details>
|
|
38
|
+
<CdsRadio value="hhh lpr fff" label="hhh lpr fff" />
|
|
39
|
+
<CdsRadio value="lhh lpr lff" label="lhh lpr lff" />
|
|
40
|
+
<CdsRadio value="lhh lpr fff" label="lhh lpr fff" />
|
|
41
|
+
</CdsRadioGroup>
|
|
42
|
+
|
|
43
|
+
<div class="h-[520px]">
|
|
44
|
+
<CdsLayout container :view="view">
|
|
45
|
+
<CdsHeader bordered>
|
|
46
|
+
<CdsToolbar>
|
|
47
|
+
<CdsToolbarTitle>Заголовок приложения</CdsToolbarTitle>
|
|
48
|
+
</CdsToolbar>
|
|
49
|
+
</CdsHeader>
|
|
50
|
+
|
|
51
|
+
<CdsDrawer permanent border>
|
|
52
|
+
<CdsList>
|
|
53
|
+
<CdsListItem title="Закупки" href="#" prepend-icon="shopping-cart" active />
|
|
54
|
+
<CdsListItem title="Договоры" href="#" prepend-icon="doc" />
|
|
55
|
+
<CdsListItem title="Контрагенты" href="#" prepend-icon="company" />
|
|
56
|
+
</CdsList>
|
|
57
|
+
</CdsDrawer>
|
|
58
|
+
|
|
59
|
+
<CdsMain>
|
|
60
|
+
<CdsPage padding>
|
|
61
|
+
<div class="rounded-200 bg-surface-secondary p-4 text-content-primary">
|
|
62
|
+
Схема <code>{{ view }}</code>
|
|
63
|
+
</div>
|
|
64
|
+
</CdsPage>
|
|
65
|
+
</CdsMain>
|
|
66
|
+
|
|
67
|
+
<CdsFooter bordered :height="40">
|
|
68
|
+
<div class="flex h-[40px] items-center px-4 text-content-secondary">Подвал</div>
|
|
69
|
+
</CdsFooter>
|
|
70
|
+
</CdsLayout>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</template>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Container mode
|
|
77
|
+
|
|
78
|
+
By default the layout takes the whole page and controls its scrolling. The `container` prop locks it inside its parent: the layout gets its own scroll area, and the header and the footer keep their places inside it. This is a handy way to show the application in a preview, to embed it into somebody else's page or to build a working area of a fixed height.
|
|
79
|
+
|
|
80
|
+
**Example (SFC):**
|
|
81
|
+
|
|
82
|
+
```vue
|
|
83
|
+
<script setup lang="ts">
|
|
84
|
+
import {
|
|
85
|
+
CdsFooter,
|
|
86
|
+
CdsHeader,
|
|
87
|
+
CdsLayout,
|
|
88
|
+
CdsMain,
|
|
89
|
+
CdsPage,
|
|
90
|
+
CdsToolbar,
|
|
91
|
+
CdsToolbarTitle
|
|
92
|
+
} from '@central-design-system/components';
|
|
93
|
+
</script>
|
|
94
|
+
|
|
95
|
+
<template>
|
|
96
|
+
<div class="h-[520px] overflow-hidden rounded-200 border border-line-primary">
|
|
97
|
+
<CdsLayout container>
|
|
98
|
+
<CdsHeader elevated>
|
|
99
|
+
<CdsToolbar>
|
|
100
|
+
<CdsToolbarTitle>Шапка остаётся на месте</CdsToolbarTitle>
|
|
101
|
+
</CdsToolbar>
|
|
102
|
+
</CdsHeader>
|
|
103
|
+
|
|
104
|
+
<CdsMain>
|
|
105
|
+
<CdsPage padding>
|
|
106
|
+
<div class="flex flex-col gap-2">
|
|
107
|
+
<div v-for="n in 12" :key="n" class="rounded-200 bg-surface-secondary p-4 text-content-primary">
|
|
108
|
+
Блок {{ n }} — прокрутите область, страница за ней не двигается
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</CdsPage>
|
|
112
|
+
</CdsMain>
|
|
113
|
+
|
|
114
|
+
<CdsFooter elevated :height="40">
|
|
115
|
+
<div class="flex h-[40px] items-center px-4 text-content-secondary">Подвал</div>
|
|
116
|
+
</CdsFooter>
|
|
117
|
+
</CdsLayout>
|
|
118
|
+
</div>
|
|
119
|
+
</template>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Events
|
|
123
|
+
|
|
124
|
+
The layout watches its scroll area and shares what it sees: `@scroll` gives the position, the direction and the turning point, `@resize` gives the new sizes, `@scroll-height` gives the height of the content. The floating header and footer are built on these events, but you can use them for your own logic too — to load the next page of a list, for example.
|
|
125
|
+
|
|
126
|
+
**Example (SFC):**
|
|
127
|
+
|
|
128
|
+
```vue
|
|
129
|
+
<script setup lang="ts">
|
|
130
|
+
import { CdsLayout, CdsMain, CdsPage } from '@central-design-system/components';
|
|
131
|
+
import { ref } from 'vue';
|
|
132
|
+
|
|
133
|
+
const top = ref(0);
|
|
134
|
+
const direction = ref<'up' | 'down' | 'left' | 'right'>('down');
|
|
135
|
+
const size = ref({ width: 0, height: 0 });
|
|
136
|
+
</script>
|
|
137
|
+
|
|
138
|
+
<template>
|
|
139
|
+
<div class="h-[520px]">
|
|
140
|
+
<CdsLayout
|
|
141
|
+
container
|
|
142
|
+
@scroll="
|
|
143
|
+
top = $event.position.top;
|
|
144
|
+
direction = $event.direction;
|
|
145
|
+
"
|
|
146
|
+
@resize="size = $event"
|
|
147
|
+
>
|
|
148
|
+
<CdsMain>
|
|
149
|
+
<CdsPage padding>
|
|
150
|
+
<div class="mb-2 rounded-200 bg-surface-secondary p-4 text-content-primary">
|
|
151
|
+
Прокручено: {{ Math.round(top) }} px · направление: {{ direction === 'down' ? 'вниз' : 'вверх' }} · ширина
|
|
152
|
+
содержимого: {{ Math.round(size.width) }} px
|
|
153
|
+
</div>
|
|
154
|
+
<div class="flex flex-col gap-2">
|
|
155
|
+
<div v-for="n in 15" :key="n" class="rounded-200 bg-surface-secondary p-4 text-content-secondary">
|
|
156
|
+
Блок {{ n }}
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</CdsPage>
|
|
160
|
+
</CdsMain>
|
|
161
|
+
</CdsLayout>
|
|
162
|
+
</div>
|
|
163
|
+
</template>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Application shell
|
|
167
|
+
|
|
168
|
+
The typical set: a header with `CdsToolbar`, permanent navigation in `CdsDrawer`, `CdsMain` → `CdsPage` with the content and a footer. A button in the header toggles `minified` — the drawer shrinks to icons and gives the width to the content, and on hover it expands back.
|
|
169
|
+
|
|
170
|
+
**Example (SFC):**
|
|
171
|
+
|
|
172
|
+
```vue
|
|
173
|
+
<script setup lang="ts">
|
|
174
|
+
import {
|
|
175
|
+
CdsAvatar,
|
|
176
|
+
CdsButton,
|
|
177
|
+
CdsCard,
|
|
178
|
+
CdsCardActions,
|
|
179
|
+
CdsCardSubtitle,
|
|
180
|
+
CdsCardText,
|
|
181
|
+
CdsCardTitle,
|
|
182
|
+
CdsDrawer,
|
|
183
|
+
CdsFooter,
|
|
184
|
+
CdsFunctionalButton,
|
|
185
|
+
CdsHeader,
|
|
186
|
+
CdsLayout,
|
|
187
|
+
CdsLink,
|
|
188
|
+
CdsList,
|
|
189
|
+
CdsListGroup,
|
|
190
|
+
CdsListItem,
|
|
191
|
+
CdsMain,
|
|
192
|
+
CdsPage,
|
|
193
|
+
CdsToolbar,
|
|
194
|
+
CdsToolbarTitle
|
|
195
|
+
} from '@central-design-system/components';
|
|
196
|
+
import { ref } from 'vue';
|
|
197
|
+
|
|
198
|
+
const minified = ref(false);
|
|
199
|
+
const stats = [
|
|
200
|
+
{ title: 'Активные закупки', value: '128', hint: '+12 за неделю' },
|
|
201
|
+
{ title: 'Заявки на рассмотрении', value: '34', hint: '8 требуют действия' },
|
|
202
|
+
{ title: 'Поставщики', value: '512', hint: '+5 новых' },
|
|
203
|
+
{ title: 'Сообщения', value: '17', hint: '3 непрочитанных' }
|
|
204
|
+
];
|
|
205
|
+
</script>
|
|
206
|
+
|
|
207
|
+
<template>
|
|
208
|
+
<div class="h-[640px]">
|
|
209
|
+
<CdsLayout container>
|
|
210
|
+
<CdsHeader bordered elevated :height="64">
|
|
211
|
+
<CdsToolbar>
|
|
212
|
+
<CdsFunctionalButton icon="menu" class="mr-2" aria-label="Свернуть навигацию" @click="minified = !minified" />
|
|
213
|
+
<CdsAvatar icon="company" class="mr-2" />
|
|
214
|
+
<CdsToolbarTitle>Портал закупок</CdsToolbarTitle>
|
|
215
|
+
|
|
216
|
+
<CdsFunctionalButton icon="search" aria-label="Поиск" />
|
|
217
|
+
<CdsFunctionalButton icon="notification" aria-label="Уведомления" />
|
|
218
|
+
<CdsAvatar icon="user-avatar" class="ml-2" />
|
|
219
|
+
</CdsToolbar>
|
|
220
|
+
</CdsHeader>
|
|
221
|
+
|
|
222
|
+
<CdsDrawer permanent border :minified="minified">
|
|
223
|
+
<CdsList>
|
|
224
|
+
<CdsListItem title="Дашборд" href="#" prepend-icon="category" active />
|
|
225
|
+
<CdsListItem title="Закупки" href="#" prepend-icon="shopping-cart" />
|
|
226
|
+
<CdsListItem title="Заявки" href="#" prepend-icon="doc" />
|
|
227
|
+
<CdsListGroup>
|
|
228
|
+
<template #activator="{ props }">
|
|
229
|
+
<CdsListItem title="Контрагенты" prepend-icon="company" v-bind="props" />
|
|
230
|
+
</template>
|
|
231
|
+
<CdsListItem title="Поставщики" href="#" prepend-icon="user-group" />
|
|
232
|
+
<CdsListItem title="Заказчики" href="#" prepend-icon="user-avatar" />
|
|
233
|
+
</CdsListGroup>
|
|
234
|
+
<CdsListItem title="Аналитика" href="#" prepend-icon="data-cards" />
|
|
235
|
+
<CdsListItem title="Настройки" href="#" prepend-icon="settings" />
|
|
236
|
+
</CdsList>
|
|
237
|
+
</CdsDrawer>
|
|
238
|
+
|
|
239
|
+
<CdsMain>
|
|
240
|
+
<CdsPage padding>
|
|
241
|
+
<CdsToolbar class="mb-4 gap-4 rounded-200">
|
|
242
|
+
<CdsToolbarTitle class="text-xl font-bold">Дашборд</CdsToolbarTitle>
|
|
243
|
+
<CdsButton appearance="tertiary" prepend-icon="filters">Фильтры</CdsButton>
|
|
244
|
+
<CdsButton prepend-icon="add">Создать закупку</CdsButton>
|
|
245
|
+
</CdsToolbar>
|
|
246
|
+
|
|
247
|
+
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
|
|
248
|
+
<CdsCard v-for="stat in stats" :key="stat.title" class="p-4">
|
|
249
|
+
<CdsCardSubtitle>{{ stat.title }}</CdsCardSubtitle>
|
|
250
|
+
<CdsCardTitle class="text-2xl font-bold">{{ stat.value }}</CdsCardTitle>
|
|
251
|
+
<CdsCardText class="text-content-secondary">{{ stat.hint }}</CdsCardText>
|
|
252
|
+
</CdsCard>
|
|
253
|
+
</div>
|
|
254
|
+
|
|
255
|
+
<CdsCard class="mt-4 p-4">
|
|
256
|
+
<CdsCardTitle>Последние закупки</CdsCardTitle>
|
|
257
|
+
<CdsCardText>
|
|
258
|
+
Прокрутите страницу, чтобы увидеть, как шапка и подвал остаются на месте, а содержимое страницы скроллится
|
|
259
|
+
внутри макета.
|
|
260
|
+
</CdsCardText>
|
|
261
|
+
<CdsList>
|
|
262
|
+
<CdsListItem
|
|
263
|
+
v-for="n in 12"
|
|
264
|
+
:key="n"
|
|
265
|
+
:title="'Закупка №' + (1000 + n)"
|
|
266
|
+
:subtitle="'Поставщик ООО «Компания ' + n + '»'"
|
|
267
|
+
href="#"
|
|
268
|
+
prepend-icon="shopping-cart"
|
|
269
|
+
append-icon="chevron-right"
|
|
270
|
+
/>
|
|
271
|
+
</CdsList>
|
|
272
|
+
<CdsCardActions class="justify-end">
|
|
273
|
+
<CdsButton appearance="tertiary">Показать все</CdsButton>
|
|
274
|
+
</CdsCardActions>
|
|
275
|
+
</CdsCard>
|
|
276
|
+
</CdsPage>
|
|
277
|
+
</CdsMain>
|
|
278
|
+
|
|
279
|
+
<CdsFooter bordered :height="48">
|
|
280
|
+
<div class="flex h-[48px] items-center justify-between px-4">
|
|
281
|
+
<span class="text-content-secondary">© 2026 Портал закупок</span>
|
|
282
|
+
<span class="flex items-center gap-4">
|
|
283
|
+
<CdsLink href="#">Помощь</CdsLink>
|
|
284
|
+
<CdsLink href="#">Конфиденциальность</CdsLink>
|
|
285
|
+
</span>
|
|
286
|
+
</div>
|
|
287
|
+
</CdsFooter>
|
|
288
|
+
</CdsLayout>
|
|
289
|
+
</div>
|
|
290
|
+
</template>
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## A header that hides on scroll
|
|
294
|
+
|
|
295
|
+
On long lists the space is worth more than the navigation. The `reveal` prop of the header and the footer hides them when scrolling down and brings them back when scrolling up; `reveal-offset` sets the zone near the top of the list where the header stays in place.
|
|
296
|
+
|
|
297
|
+
**Example (SFC):**
|
|
298
|
+
|
|
299
|
+
```vue
|
|
300
|
+
<script setup lang="ts">
|
|
301
|
+
import {
|
|
302
|
+
CdsFooter,
|
|
303
|
+
CdsHeader,
|
|
304
|
+
CdsLayout,
|
|
305
|
+
CdsMain,
|
|
306
|
+
CdsPage,
|
|
307
|
+
CdsToolbar,
|
|
308
|
+
CdsToolbarTitle
|
|
309
|
+
} from '@central-design-system/components';
|
|
310
|
+
import { ref } from 'vue';
|
|
311
|
+
|
|
312
|
+
const revealed = ref(true);
|
|
313
|
+
</script>
|
|
314
|
+
|
|
315
|
+
<template>
|
|
316
|
+
<div class="h-[500px]">
|
|
317
|
+
<CdsLayout container>
|
|
318
|
+
<CdsHeader reveal elevated :reveal-offset="80" @reveal="revealed = $event">
|
|
319
|
+
<CdsToolbar>
|
|
320
|
+
<CdsToolbarTitle>Каталог поставщиков</CdsToolbarTitle>
|
|
321
|
+
</CdsToolbar>
|
|
322
|
+
</CdsHeader>
|
|
323
|
+
|
|
324
|
+
<CdsMain>
|
|
325
|
+
<CdsPage padding>
|
|
326
|
+
<div class="mb-2 text-content-secondary">
|
|
327
|
+
Шапка {{ revealed ? 'видна' : 'скрыта' }} — прокрутите вниз, чтобы освободить место списку, и вверх, чтобы
|
|
328
|
+
вернуть её.
|
|
329
|
+
</div>
|
|
330
|
+
<div class="flex flex-col gap-2">
|
|
331
|
+
<div v-for="n in 20" :key="n" class="rounded-200 bg-surface-secondary p-4 text-content-primary">
|
|
332
|
+
Поставщик №{{ n }}
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
</CdsPage>
|
|
336
|
+
</CdsMain>
|
|
337
|
+
|
|
338
|
+
<CdsFooter reveal elevated :height="40">
|
|
339
|
+
<div class="flex h-[40px] items-center px-4 text-content-secondary">Найдено 20 поставщиков</div>
|
|
340
|
+
</CdsFooter>
|
|
341
|
+
</CdsLayout>
|
|
342
|
+
</div>
|
|
343
|
+
</template>
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
## Working area with filters
|
|
347
|
+
|
|
348
|
+
The `lhh lpr fff` scheme gives the top left corner to the navigation — it starts from the very top, and the header takes the remaining width. The right drawer with `temporary` slides over the content on a button click and closes on a click on the overlay, so it takes no place in the layout.
|
|
349
|
+
|
|
350
|
+
**Example (SFC):**
|
|
351
|
+
|
|
352
|
+
```vue
|
|
353
|
+
<script setup lang="ts">
|
|
354
|
+
import {
|
|
355
|
+
CdsButton,
|
|
356
|
+
CdsCheckbox,
|
|
357
|
+
CdsDrawer,
|
|
358
|
+
CdsHeader,
|
|
359
|
+
CdsLayout,
|
|
360
|
+
CdsList,
|
|
361
|
+
CdsListItem,
|
|
362
|
+
CdsMain,
|
|
363
|
+
CdsPage,
|
|
364
|
+
CdsToolbar,
|
|
365
|
+
CdsToolbarTitle
|
|
366
|
+
} from '@central-design-system/components';
|
|
367
|
+
import { ref } from 'vue';
|
|
368
|
+
|
|
369
|
+
const filters = ref(false);
|
|
370
|
+
const statuses = ref<string[]>(['active']);
|
|
371
|
+
</script>
|
|
372
|
+
|
|
373
|
+
<template>
|
|
374
|
+
<div class="h-[520px]">
|
|
375
|
+
<CdsLayout container view="lhh lpr fff">
|
|
376
|
+
<CdsHeader bordered>
|
|
377
|
+
<CdsToolbar>
|
|
378
|
+
<CdsToolbarTitle>Закупки</CdsToolbarTitle>
|
|
379
|
+
<CdsButton appearance="tertiary" prepend-icon="filters" @click="filters = !filters">Фильтры</CdsButton>
|
|
380
|
+
</CdsToolbar>
|
|
381
|
+
</CdsHeader>
|
|
382
|
+
|
|
383
|
+
<CdsDrawer permanent border>
|
|
384
|
+
<CdsList>
|
|
385
|
+
<CdsListItem title="Все закупки" href="#" prepend-icon="shopping-cart" active />
|
|
386
|
+
<CdsListItem title="Избранное" href="#" prepend-icon="star" />
|
|
387
|
+
<CdsListItem title="Архив" href="#" prepend-icon="archive" />
|
|
388
|
+
</CdsList>
|
|
389
|
+
</CdsDrawer>
|
|
390
|
+
|
|
391
|
+
<CdsDrawer v-model="filters" right temporary border>
|
|
392
|
+
<template #prepend>
|
|
393
|
+
<div class="font-bold text-content-primary">Фильтры</div>
|
|
394
|
+
</template>
|
|
395
|
+
|
|
396
|
+
<div class="flex flex-col gap-1">
|
|
397
|
+
<CdsCheckbox v-model="statuses" value="active" label="Активные" hide-details />
|
|
398
|
+
<CdsCheckbox v-model="statuses" value="draft" label="Черновики" hide-details />
|
|
399
|
+
<CdsCheckbox v-model="statuses" value="done" label="Завершённые" hide-details />
|
|
400
|
+
</div>
|
|
401
|
+
|
|
402
|
+
<template #append>
|
|
403
|
+
<CdsButton block @click="filters = false">Применить</CdsButton>
|
|
404
|
+
</template>
|
|
405
|
+
</CdsDrawer>
|
|
406
|
+
|
|
407
|
+
<CdsMain>
|
|
408
|
+
<CdsPage padding>
|
|
409
|
+
<div class="flex flex-col gap-2">
|
|
410
|
+
<div v-for="n in 8" :key="n" class="rounded-200 bg-surface-secondary p-4 text-content-primary">
|
|
411
|
+
Закупка №{{ 2400 + n }}
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
</CdsPage>
|
|
415
|
+
</CdsMain>
|
|
416
|
+
</CdsLayout>
|
|
417
|
+
</div>
|
|
418
|
+
</template>
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
## LayoutBuilder
|
|
422
|
+
|
|
423
|
+
Конструктор макета: шаблоны разметки, схема `view`, настройки частей и живое
|
|
424
|
+
превью с экспортом кода. Тот же компонент рендерит страница документации
|
|
425
|
+
Конструктор макета.
|
|
426
|
+
|
|
427
|
+
**Template:**
|
|
428
|
+
|
|
429
|
+
```html
|
|
430
|
+
<div style="padding: 16px"><LayoutBuilder /></div>
|
|
431
|
+
```
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# CdsLayout — guidelines
|
|
2
|
+
|
|
3
|
+
> Extracted from `docs/demos/Guidelines.vue` by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> The full component contract is in [api.md](api.md).
|
|
5
|
+
|
|
6
|
+
| ✅ Do | ❌ Don't |
|
|
7
|
+
| --- | --- |
|
|
8
|
+
| The content lives in CdsMain → CdsPage: the layout reserves the space for the header and the drawers itself. | Content placed directly inside CdsLayout slides under the header — nobody calculates the paddings. |
|
|
9
|
+
| The sections of the application belong in the side drawer: the list grows downwards and stays readable. | With every section in the header, they shrink as their number grows and stop fitting. |
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# CdsLayout — 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
|
+
## _CdsLayout.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
$layout-background: rgb(var(--cds-color-page-primary)) !default;
|
|
11
|
+
$layout-color: rgb(var(--cds-color-content-primary)) !default;
|
|
12
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# CdsLink — API
|
|
2
|
+
|
|
3
|
+
> Generated from meta.json by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> Examples: [examples.md](examples.md) · Guidelines: [guidelines.md](guidelines.md) · Tokens: [tokens.md](tokens.md)
|
|
5
|
+
|
|
6
|
+
A link sends the user somewhere else: to a neighboring page of the application, to an external service or to an email address. Inside the application the path comes from the `to` prop and vue-router takes over the navigation; for outside destinations the address goes into `href`.
|
|
7
|
+
|
|
8
|
+
## CdsLink
|
|
9
|
+
|
|
10
|
+
**Props**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Required | Description |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| `content` | `string \| number \| undefined` | — | no | Content displayed in the component. |
|
|
15
|
+
| `disabled` | `boolean \| undefined` | — | no | Disables the link: no navigation happens, aria-disabled and tabindex=-1 are set |
|
|
16
|
+
| `exact` | `boolean \| undefined` | — | no | If true, the active state applies only on an exact route match |
|
|
17
|
+
| `href` | `string \| undefined` | — | no | The `href` attribute of the link. When set, the component behaves as a regular link |
|
|
18
|
+
| `replace` | `boolean \| undefined` | — | no | If true, navigation replaces the current history entry instead of pushing a new one |
|
|
19
|
+
| `text` | `string \| number \| undefined` | — | no | Text displayed in the component. |
|
|
20
|
+
| `theme` | `string \| undefined` | — | no | Component theme |
|
|
21
|
+
| `to` | `LinkTo \| undefined` | — | no | Target route or route location object for RouterLink. When set, the component behaves as a RouterLink |
|
|
22
|
+
|
|
23
|
+
**Events**
|
|
24
|
+
|
|
25
|
+
| Name | Type | Description |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| `click` | `[e: MouseEvent]` | Click on the link |
|
|
28
|
+
|
|
29
|
+
**Slots**
|
|
30
|
+
|
|
31
|
+
| Name | Type | Description |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| `default` | `any` | Link content. Takes precedence over the text prop. |
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# CdsLink — 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 link sends the user somewhere else: to a neighboring page of the application, to an external service or to an email address. Inside the application the path comes from the `to` prop and vue-router takes over the navigation; for outside destinations the address goes into `href`.
|
|
7
|
+
|
|
8
|
+
## Link text
|
|
9
|
+
|
|
10
|
+
The `text` prop sets the label as a string, the `default` slot as arbitrary markup — text with an icon, for example. The slot wins over the prop.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsIcon, CdsLink } from '@central-design-system/components';
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<div class="flex flex-wrap items-center justify-center gap-4">
|
|
21
|
+
<CdsLink href="#" text="Текст из пропа text" />
|
|
22
|
+
|
|
23
|
+
<CdsLink href="#">Контент из слота default</CdsLink>
|
|
24
|
+
|
|
25
|
+
<CdsLink href="#">
|
|
26
|
+
<CdsIcon icon="doc-download" :size="16" start />
|
|
27
|
+
Скачать спецификацию
|
|
28
|
+
</CdsLink>
|
|
29
|
+
</div>
|
|
30
|
+
</template>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Address
|
|
34
|
+
|
|
35
|
+
The `href` prop renders a regular link. Attributes are written on the component just like on an `a` tag: `target="_blank"` opens the page in a new tab — mark such a link with an icon so that leaving the application does not come as a surprise. Visited links change color; anchors like `#section` stay as they are.
|
|
36
|
+
|
|
37
|
+
**Example (SFC):**
|
|
38
|
+
|
|
39
|
+
```vue
|
|
40
|
+
<script setup lang="ts">
|
|
41
|
+
import { CdsIcon, CdsLink } from '@central-design-system/components';
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<template>
|
|
45
|
+
<div class="flex flex-col items-center gap-3">
|
|
46
|
+
<CdsLink href="https://www.b2b-center.ru" text="Открыть сайт b2b-center.ru" />
|
|
47
|
+
|
|
48
|
+
<CdsLink href="https://www.b2b-center.ru" target="_blank" rel="noopener">
|
|
49
|
+
Открыть в новой вкладке
|
|
50
|
+
<CdsIcon icon="external" :size="16" end />
|
|
51
|
+
</CdsLink>
|
|
52
|
+
</div>
|
|
53
|
+
</template>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Disabled link
|
|
57
|
+
|
|
58
|
+
The `disabled` prop dims the color and removes the navigation: the component cancels the click, sets `aria-disabled` and takes the link out of the Tab order. Explain nearby why the navigation is unavailable — the gray state alone does not name the reason.
|
|
59
|
+
|
|
60
|
+
**Example (SFC):**
|
|
61
|
+
|
|
62
|
+
```vue
|
|
63
|
+
<script setup lang="ts">
|
|
64
|
+
import { CdsLink } from '@central-design-system/components';
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<template>
|
|
68
|
+
<div class="flex flex-wrap items-center justify-center gap-4">
|
|
69
|
+
<CdsLink href="https://www.b2b-center.ru" text="Доступная ссылка" />
|
|
70
|
+
|
|
71
|
+
<CdsLink href="https://www.b2b-center.ru" disabled text="Недоступная ссылка" />
|
|
72
|
+
</div>
|
|
73
|
+
</template>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## A link inside text
|
|
77
|
+
|
|
78
|
+
Inside a paragraph the link covers exactly the phrase that names the destination. A `@click.prevent` handler keeps the user on the page and reveals the details in place, while `href="mailto:…"` opens the mail client.
|
|
79
|
+
|
|
80
|
+
**Example (SFC):**
|
|
81
|
+
|
|
82
|
+
```vue
|
|
83
|
+
<script setup lang="ts">
|
|
84
|
+
import { CdsLink } from '@central-design-system/components';
|
|
85
|
+
import { ref } from 'vue';
|
|
86
|
+
|
|
87
|
+
const expanded = ref(false);
|
|
88
|
+
</script>
|
|
89
|
+
|
|
90
|
+
<template>
|
|
91
|
+
<div class="m-auto w-[420px] max-w-full">
|
|
92
|
+
<p class="m-0">
|
|
93
|
+
Заявка уходит на проверку сразу после отправки. Порядок рассмотрения описан в
|
|
94
|
+
<CdsLink href="#" text="регламенте закупок" @click.prevent="expanded = !expanded" />, а вопросы принимает
|
|
95
|
+
<CdsLink href="mailto:support@example.com" text="служба поддержки" />.
|
|
96
|
+
</p>
|
|
97
|
+
|
|
98
|
+
<p v-if="expanded" class="mt-3 mb-0">
|
|
99
|
+
Заявку проверяют три рабочих дня. Если данных не хватает, вы получите письмо с уточнениями и дополните заявку без
|
|
100
|
+
повторной подачи.
|
|
101
|
+
</p>
|
|
102
|
+
</div>
|
|
103
|
+
</template>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Result list
|
|
107
|
+
|
|
108
|
+
The titles of the found documents are links: the user scans the list and opens the one they need. The text comes from the `text` prop, and the `click` handler shows the selected document without leaving the page.
|
|
109
|
+
|
|
110
|
+
**Example (SFC):**
|
|
111
|
+
|
|
112
|
+
```vue
|
|
113
|
+
<script setup lang="ts">
|
|
114
|
+
import { CdsLink, CdsTextInput } from '@central-design-system/components';
|
|
115
|
+
import { computed, ref } from 'vue';
|
|
116
|
+
|
|
117
|
+
const documents = [
|
|
118
|
+
'Регламент закупок',
|
|
119
|
+
'Договор поставки № 114',
|
|
120
|
+
'Акт сверки за II квартал',
|
|
121
|
+
'Спецификация оборудования',
|
|
122
|
+
'Протокол разногласий'
|
|
123
|
+
];
|
|
124
|
+
|
|
125
|
+
const query = ref('');
|
|
126
|
+
const opened = ref<string | null>(null);
|
|
127
|
+
|
|
128
|
+
const results = computed(() =>
|
|
129
|
+
documents.filter((title) => title.toLowerCase().includes(query.value.trim().toLowerCase()))
|
|
130
|
+
);
|
|
131
|
+
</script>
|
|
132
|
+
|
|
133
|
+
<template>
|
|
134
|
+
<div class="m-auto flex w-[350px] max-w-full flex-col gap-2">
|
|
135
|
+
<CdsTextInput v-model="query" label="Поиск по документам" placeholder="Введите название" clearable />
|
|
136
|
+
|
|
137
|
+
<ul class="m-0 flex list-none flex-col gap-1 p-0">
|
|
138
|
+
<li v-for="title in results" :key="title">
|
|
139
|
+
<CdsLink href="#" :text="title" @click.prevent="opened = title" />
|
|
140
|
+
</li>
|
|
141
|
+
<li v-if="!results.length">Ничего не нашлось — измените запрос.</li>
|
|
142
|
+
</ul>
|
|
143
|
+
|
|
144
|
+
<p v-if="opened" class="m-0">Открыт документ «{{ opened }}».</p>
|
|
145
|
+
</div>
|
|
146
|
+
</template>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Documents with restricted access
|
|
150
|
+
|
|
151
|
+
The list shows all the documents of a procedure, but some of them are closed: `disabled` keeps their titles visible and blocks the navigation. The request access button lifts the restriction — the links come alive without reloading the list.
|
|
152
|
+
|
|
153
|
+
**Example (SFC):**
|
|
154
|
+
|
|
155
|
+
```vue
|
|
156
|
+
<script setup lang="ts">
|
|
157
|
+
import { CdsButton, CdsLink } from '@central-design-system/components';
|
|
158
|
+
import { ref } from 'vue';
|
|
159
|
+
|
|
160
|
+
const documents = [
|
|
161
|
+
{ title: 'Извещение о закупке', restricted: false },
|
|
162
|
+
{ title: 'Техническое задание', restricted: false },
|
|
163
|
+
{ title: 'Смета проекта', restricted: true },
|
|
164
|
+
{ title: 'Протокол комиссии', restricted: true }
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
const granted = ref(false);
|
|
168
|
+
const requesting = ref(false);
|
|
169
|
+
|
|
170
|
+
function requestAccess() {
|
|
171
|
+
requesting.value = true;
|
|
172
|
+
|
|
173
|
+
setTimeout(() => {
|
|
174
|
+
requesting.value = false;
|
|
175
|
+
granted.value = true;
|
|
176
|
+
}, 1000);
|
|
177
|
+
}
|
|
178
|
+
</script>
|
|
179
|
+
|
|
180
|
+
<template>
|
|
181
|
+
<div class="m-auto flex w-[350px] max-w-full flex-col gap-2">
|
|
182
|
+
<ul class="m-0 flex list-none flex-col gap-1 p-0">
|
|
183
|
+
<li v-for="document in documents" :key="document.title">
|
|
184
|
+
<CdsLink href="#" :disabled="document.restricted && !granted" :text="document.title" @click.prevent />
|
|
185
|
+
</li>
|
|
186
|
+
</ul>
|
|
187
|
+
|
|
188
|
+
<template v-if="!granted">
|
|
189
|
+
<p class="m-0">Смета и протокол открыты только участникам процедуры.</p>
|
|
190
|
+
|
|
191
|
+
<CdsButton appearance="secondary" text="Запросить доступ" :loading="requesting" @click="requestAccess" />
|
|
192
|
+
</template>
|
|
193
|
+
</div>
|
|
194
|
+
</template>
|
|
195
|
+
```
|