@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,516 @@
|
|
|
1
|
+
# CdsModal — 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 modal opens on top of the page and keeps the focus on a single task: confirm an action, fill in a short form, look at the details — without taking you away from the current screen. While the modal is open, the page behind it is dimmed, does not scroll and does not accept clicks.
|
|
7
|
+
|
|
8
|
+
## Activators
|
|
9
|
+
|
|
10
|
+
the page, even a distant one in the markup.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsButton, CdsModal } from '@central-design-system/components';
|
|
17
|
+
import { ref } from 'vue';
|
|
18
|
+
|
|
19
|
+
const slotModal = ref(false);
|
|
20
|
+
const parentModal = ref(false);
|
|
21
|
+
const siblingModal = ref(false);
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<div class="flex flex-wrap justify-center gap-2">
|
|
26
|
+
<CdsModal v-model="slotModal">
|
|
27
|
+
<template #activator="{ props }">
|
|
28
|
+
<CdsButton v-bind="props">Активатор в слоте</CdsButton>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<span class="h4">Заголовок</span>
|
|
32
|
+
<p>Модальное окно открыто активатором из слота</p>
|
|
33
|
+
|
|
34
|
+
<div class="mt-4 flex justify-end">
|
|
35
|
+
<CdsButton @click="slotModal = false">Закрыть</CdsButton>
|
|
36
|
+
</div>
|
|
37
|
+
</CdsModal>
|
|
38
|
+
|
|
39
|
+
<CdsButton>
|
|
40
|
+
Родительский элемент
|
|
41
|
+
|
|
42
|
+
<CdsModal v-model="parentModal" activator="parent">
|
|
43
|
+
<span class="h4">Заголовок</span>
|
|
44
|
+
<p>Модальное окно открыто родительским элементом</p>
|
|
45
|
+
|
|
46
|
+
<div class="mt-4 flex justify-end">
|
|
47
|
+
<CdsButton @click="parentModal = false">Закрыть</CdsButton>
|
|
48
|
+
</div>
|
|
49
|
+
</CdsModal>
|
|
50
|
+
</CdsButton>
|
|
51
|
+
|
|
52
|
+
<CdsButton id="modal-activator">Соседний элемент</CdsButton>
|
|
53
|
+
<CdsModal v-model="siblingModal" activator="#modal-activator">
|
|
54
|
+
<span class="h4">Заголовок</span>
|
|
55
|
+
<p>Модальное окно открыто соседним элементом по CSS-селектору</p>
|
|
56
|
+
|
|
57
|
+
<div class="mt-4 flex justify-end">
|
|
58
|
+
<CdsButton @click="siblingModal = false">Закрыть</CdsButton>
|
|
59
|
+
</div>
|
|
60
|
+
</CdsModal>
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Using v-model
|
|
66
|
+
|
|
67
|
+
The state of the modal can be controlled directly through `v-model` — without an activator. This is how you open a modal from code: on a server response, from a handler in a table, from a store.
|
|
68
|
+
|
|
69
|
+
**Example (SFC):**
|
|
70
|
+
|
|
71
|
+
```vue
|
|
72
|
+
<script setup lang="ts">
|
|
73
|
+
import { CdsButton, CdsFunctionalButton, CdsModal } from '@central-design-system/components';
|
|
74
|
+
import { ref } from 'vue';
|
|
75
|
+
|
|
76
|
+
const modal = ref(false);
|
|
77
|
+
</script>
|
|
78
|
+
|
|
79
|
+
<template>
|
|
80
|
+
<div class="flex flex-col items-center gap-4">
|
|
81
|
+
<CdsButton @click="modal = true">Открыть модальное окно</CdsButton>
|
|
82
|
+
|
|
83
|
+
<CdsModal v-model="modal">
|
|
84
|
+
<div class="flex items-center justify-between">
|
|
85
|
+
<span class="h4">Заголовок</span>
|
|
86
|
+
<CdsFunctionalButton icon="remove" aria-label="Закрыть" @click="modal = false" />
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<p>Модальное окно без активатора: состоянием управляет v-model</p>
|
|
90
|
+
</CdsModal>
|
|
91
|
+
|
|
92
|
+
<div class="text-content-primary"><strong>v-model:</strong> {{ modal }}</div>
|
|
93
|
+
</div>
|
|
94
|
+
</template>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Sizes
|
|
98
|
+
|
|
99
|
+
The `size` prop sets the width of the modal: `xs` (250), `sm` (350), `md` (500, the default), `lg` (700), `xl` — almost the full width of the screen. A number instead of an alias is an exact width in pixels. The height always adapts to the content, and `width` and `max-width` override the size when you need a non-standard grid.
|
|
100
|
+
|
|
101
|
+
**Example (SFC):**
|
|
102
|
+
|
|
103
|
+
```vue
|
|
104
|
+
<script setup lang="ts">
|
|
105
|
+
import { CdsButton, CdsModal, type Size } from '@central-design-system/components';
|
|
106
|
+
import { ref } from 'vue';
|
|
107
|
+
|
|
108
|
+
const sizes: Size[] = ['xs', 'sm', 'md', 'lg', 'xl'];
|
|
109
|
+
|
|
110
|
+
const size = ref<Size>('md');
|
|
111
|
+
const modal = ref(false);
|
|
112
|
+
|
|
113
|
+
const open = (value: Size) => {
|
|
114
|
+
size.value = value;
|
|
115
|
+
modal.value = true;
|
|
116
|
+
};
|
|
117
|
+
</script>
|
|
118
|
+
|
|
119
|
+
<template>
|
|
120
|
+
<div class="flex flex-wrap justify-center gap-2">
|
|
121
|
+
<CdsButton v-for="item in sizes" :key="item" appearance="secondary" @click="open(item)">
|
|
122
|
+
{{ item }}
|
|
123
|
+
</CdsButton>
|
|
124
|
+
|
|
125
|
+
<CdsModal v-model="modal" :size="size">
|
|
126
|
+
<span class="h4">Размер {{ size }}</span>
|
|
127
|
+
<p>Ширина окна задана пропом <code>size</code></p>
|
|
128
|
+
|
|
129
|
+
<div class="mt-4 flex justify-end">
|
|
130
|
+
<CdsButton @click="modal = false">Закрыть</CdsButton>
|
|
131
|
+
</div>
|
|
132
|
+
</CdsModal>
|
|
133
|
+
</div>
|
|
134
|
+
</template>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Persistent modals
|
|
138
|
+
|
|
139
|
+
The `persistent` prop turns off closing by a click outside the modal and by the `Esc` key — the modal can only be closed with the buttons inside it. A click outside shakes the modal, hinting that an answer is still required; the animation is removed by `no-click-animation`. Take `persistent` when closing would lose data or when the user has to make a choice.
|
|
140
|
+
|
|
141
|
+
**Example (SFC):**
|
|
142
|
+
|
|
143
|
+
```vue
|
|
144
|
+
<script setup lang="ts">
|
|
145
|
+
import { CdsButton, CdsModal } from '@central-design-system/components';
|
|
146
|
+
import { ref } from 'vue';
|
|
147
|
+
|
|
148
|
+
const modal = ref(false);
|
|
149
|
+
</script>
|
|
150
|
+
|
|
151
|
+
<template>
|
|
152
|
+
<div class="flex justify-center">
|
|
153
|
+
<CdsModal v-model="modal" persistent size="sm">
|
|
154
|
+
<template #activator="{ props }">
|
|
155
|
+
<CdsButton v-bind="props">Открыть модальное окно</CdsButton>
|
|
156
|
+
</template>
|
|
157
|
+
|
|
158
|
+
<span class="h4">Подтвердите действие</span>
|
|
159
|
+
<p>Клик мимо окна и клавиша <code>Esc</code> его не закроют — ответьте одной из кнопок.</p>
|
|
160
|
+
|
|
161
|
+
<div class="mt-4 flex justify-end gap-3">
|
|
162
|
+
<CdsButton appearance="tertiary" @click="modal = false">Отменить</CdsButton>
|
|
163
|
+
<CdsButton @click="modal = false">Подтвердить</CdsButton>
|
|
164
|
+
</div>
|
|
165
|
+
</CdsModal>
|
|
166
|
+
</div>
|
|
167
|
+
</template>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Scrolling inside the modal
|
|
171
|
+
|
|
172
|
+
By default long content scrolls together with the whole modal. The `scrollable` prop pins the header and the buttons and scrolls only the middle — for that the content is assembled from [CdsCard](../cds-card/api.md): the card becomes the surface of the modal, and the scrolling area is its `CdsCardText`.
|
|
173
|
+
|
|
174
|
+
**Example (SFC):**
|
|
175
|
+
|
|
176
|
+
```vue
|
|
177
|
+
<script setup lang="ts">
|
|
178
|
+
import {
|
|
179
|
+
CdsButton,
|
|
180
|
+
CdsCard,
|
|
181
|
+
CdsCardActions,
|
|
182
|
+
CdsCardText,
|
|
183
|
+
CdsDivider,
|
|
184
|
+
CdsModal,
|
|
185
|
+
CdsRadio,
|
|
186
|
+
CdsRadioGroup
|
|
187
|
+
} from '@central-design-system/components';
|
|
188
|
+
import { ref } from 'vue';
|
|
189
|
+
|
|
190
|
+
const modal = ref(false);
|
|
191
|
+
const country = ref(null);
|
|
192
|
+
|
|
193
|
+
const countries = [
|
|
194
|
+
'Австрия',
|
|
195
|
+
'Бельгия',
|
|
196
|
+
'Болгария',
|
|
197
|
+
'Венгрия',
|
|
198
|
+
'Германия',
|
|
199
|
+
'Греция',
|
|
200
|
+
'Дания',
|
|
201
|
+
'Ирландия',
|
|
202
|
+
'Испания',
|
|
203
|
+
'Италия',
|
|
204
|
+
'Латвия',
|
|
205
|
+
'Литва',
|
|
206
|
+
'Нидерланды',
|
|
207
|
+
'Норвегия',
|
|
208
|
+
'Польша',
|
|
209
|
+
'Португалия',
|
|
210
|
+
'Румыния',
|
|
211
|
+
'Сербия',
|
|
212
|
+
'Словакия',
|
|
213
|
+
'Финляндия',
|
|
214
|
+
'Франция',
|
|
215
|
+
'Хорватия',
|
|
216
|
+
'Чехия',
|
|
217
|
+
'Швейцария',
|
|
218
|
+
'Швеция',
|
|
219
|
+
'Эстония'
|
|
220
|
+
];
|
|
221
|
+
</script>
|
|
222
|
+
|
|
223
|
+
<template>
|
|
224
|
+
<div class="flex justify-center">
|
|
225
|
+
<CdsModal v-model="modal" scrollable size="sm">
|
|
226
|
+
<template #activator="{ props }">
|
|
227
|
+
<CdsButton v-bind="props">Выбрать страну</CdsButton>
|
|
228
|
+
</template>
|
|
229
|
+
|
|
230
|
+
<template #default="{ isActive }">
|
|
231
|
+
<CdsCard prepend-icon="search" title="Выберите страну">
|
|
232
|
+
<CdsDivider />
|
|
233
|
+
|
|
234
|
+
<CdsCardText class="h-[300px]">
|
|
235
|
+
<CdsRadioGroup v-model="country">
|
|
236
|
+
<CdsRadio v-for="item of countries" :key="item" :label="item" :value="item" />
|
|
237
|
+
</CdsRadioGroup>
|
|
238
|
+
</CdsCardText>
|
|
239
|
+
|
|
240
|
+
<CdsDivider />
|
|
241
|
+
|
|
242
|
+
<CdsCardActions class="justify-end gap-2">
|
|
243
|
+
<CdsButton text="Сохранить" @click="isActive.value = false" />
|
|
244
|
+
</CdsCardActions>
|
|
245
|
+
</CdsCard>
|
|
246
|
+
</template>
|
|
247
|
+
</CdsModal>
|
|
248
|
+
</div>
|
|
249
|
+
</template>
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Fullscreen
|
|
253
|
+
|
|
254
|
+
The `fullscreen` prop expands the modal to the whole screen: the size props are ignored, the paddings and the rounded corners are removed. It fits document viewing and complex forms on small screens.
|
|
255
|
+
|
|
256
|
+
**Example (SFC):**
|
|
257
|
+
|
|
258
|
+
```vue
|
|
259
|
+
<script setup lang="ts">
|
|
260
|
+
import { CdsButton, CdsFunctionalButton, CdsModal } from '@central-design-system/components';
|
|
261
|
+
import { ref } from 'vue';
|
|
262
|
+
|
|
263
|
+
const modal = ref(false);
|
|
264
|
+
</script>
|
|
265
|
+
|
|
266
|
+
<template>
|
|
267
|
+
<div class="flex justify-center">
|
|
268
|
+
<CdsModal v-model="modal" fullscreen>
|
|
269
|
+
<template #activator="{ props }">
|
|
270
|
+
<CdsButton v-bind="props">Открыть на весь экран</CdsButton>
|
|
271
|
+
</template>
|
|
272
|
+
|
|
273
|
+
<div class="flex items-center justify-between">
|
|
274
|
+
<span class="h4">Окно на весь экран</span>
|
|
275
|
+
<CdsFunctionalButton icon="remove" aria-label="Закрыть" @click="modal = false" />
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
<p class="mt-2">
|
|
279
|
+
Проп <code>fullscreen</code> разворачивает окно на весь экран: пропсы размеров игнорируются, скругления и
|
|
280
|
+
отступы от краёв убираются. Такой режим подходит для просмотра документов и сложных форм на небольших экранах.
|
|
281
|
+
</p>
|
|
282
|
+
|
|
283
|
+
<div class="mt-auto flex justify-end">
|
|
284
|
+
<CdsButton @click="modal = false">Закрыть</CdsButton>
|
|
285
|
+
</div>
|
|
286
|
+
</CdsModal>
|
|
287
|
+
</div>
|
|
288
|
+
</template>
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Animations
|
|
292
|
+
|
|
293
|
+
By default the modal grows out of the activator and shrinks back — so you can see where it came from. The `transition` prop changes the animation: the ready `modal-transition-top` and `modal-transition-bottom` slide the modal in from the edge of the screen, and any custom CSS animation works too.
|
|
294
|
+
|
|
295
|
+
**Example (SFC):**
|
|
296
|
+
|
|
297
|
+
```vue
|
|
298
|
+
<script setup lang="ts">
|
|
299
|
+
import { CdsButton, CdsModal } from '@central-design-system/components';
|
|
300
|
+
import { ref } from 'vue';
|
|
301
|
+
|
|
302
|
+
const modalTop = ref(false);
|
|
303
|
+
const modalBottom = ref(false);
|
|
304
|
+
</script>
|
|
305
|
+
|
|
306
|
+
<template>
|
|
307
|
+
<div class="flex flex-wrap justify-center gap-2">
|
|
308
|
+
<CdsModal v-model="modalTop" transition="modal-transition-top" size="sm">
|
|
309
|
+
<template #activator="{ props }">
|
|
310
|
+
<CdsButton v-bind="props">Сверху</CdsButton>
|
|
311
|
+
</template>
|
|
312
|
+
|
|
313
|
+
<span class="h4">Заголовок</span>
|
|
314
|
+
<p>Окно выезжает сверху</p>
|
|
315
|
+
|
|
316
|
+
<div class="mt-4 flex justify-end">
|
|
317
|
+
<CdsButton @click="modalTop = false">Закрыть</CdsButton>
|
|
318
|
+
</div>
|
|
319
|
+
</CdsModal>
|
|
320
|
+
|
|
321
|
+
<CdsModal v-model="modalBottom" transition="modal-transition-bottom" size="sm">
|
|
322
|
+
<template #activator="{ props }">
|
|
323
|
+
<CdsButton v-bind="props">Снизу</CdsButton>
|
|
324
|
+
</template>
|
|
325
|
+
|
|
326
|
+
<span class="h4">Заголовок</span>
|
|
327
|
+
<p>Окно выезжает снизу</p>
|
|
328
|
+
|
|
329
|
+
<div class="mt-4 flex justify-end">
|
|
330
|
+
<CdsButton @click="modalBottom = false">Закрыть</CdsButton>
|
|
331
|
+
</div>
|
|
332
|
+
</CdsModal>
|
|
333
|
+
</div>
|
|
334
|
+
</template>
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## Delete confirmation
|
|
338
|
+
|
|
339
|
+
An irreversible action is confirmed with a compact `size="sm"` modal: the title names the action, the text specifies what exactly will be deleted, the main button repeats the verb from the title. One modal serves the whole list — the selected record is put into it right before opening.
|
|
340
|
+
|
|
341
|
+
**Example (SFC):**
|
|
342
|
+
|
|
343
|
+
```vue
|
|
344
|
+
<script setup lang="ts">
|
|
345
|
+
import { CdsButton, CdsFunctionalButton, CdsList, CdsListItem, CdsModal } from '@central-design-system/components';
|
|
346
|
+
import { ref } from 'vue';
|
|
347
|
+
|
|
348
|
+
const initial = ['Договор поставки № 42', 'Смета на монтаж', 'Акт сверки за июнь'];
|
|
349
|
+
|
|
350
|
+
const drafts = ref([...initial]);
|
|
351
|
+
const modal = ref(false);
|
|
352
|
+
const pending = ref('');
|
|
353
|
+
|
|
354
|
+
const askDelete = (draft: string) => {
|
|
355
|
+
pending.value = draft;
|
|
356
|
+
modal.value = true;
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
const confirmDelete = () => {
|
|
360
|
+
drafts.value = drafts.value.filter((draft) => draft !== pending.value);
|
|
361
|
+
modal.value = false;
|
|
362
|
+
};
|
|
363
|
+
</script>
|
|
364
|
+
|
|
365
|
+
<template>
|
|
366
|
+
<div class="m-auto flex w-[360px] flex-col items-center gap-2">
|
|
367
|
+
<CdsList v-if="drafts.length" class="w-full">
|
|
368
|
+
<CdsListItem v-for="draft in drafts" :key="draft" :title="draft">
|
|
369
|
+
<template #append>
|
|
370
|
+
<CdsFunctionalButton icon="delete" :aria-label="`Удалить: ${draft}`" @click="askDelete(draft)" />
|
|
371
|
+
</template>
|
|
372
|
+
</CdsListItem>
|
|
373
|
+
</CdsList>
|
|
374
|
+
|
|
375
|
+
<CdsButton v-else appearance="secondary" @click="drafts = [...initial]">Восстановить список</CdsButton>
|
|
376
|
+
|
|
377
|
+
<CdsModal v-model="modal" size="sm">
|
|
378
|
+
<span class="h4">Удалить черновик?</span>
|
|
379
|
+
<p class="mt-2">«{{ pending }}» будет удалён без возможности восстановления.</p>
|
|
380
|
+
|
|
381
|
+
<div class="mt-4 flex justify-end gap-3">
|
|
382
|
+
<CdsButton appearance="tertiary" @click="modal = false">Отмена</CdsButton>
|
|
383
|
+
<CdsButton @click="confirmDelete">Удалить</CdsButton>
|
|
384
|
+
</div>
|
|
385
|
+
</CdsModal>
|
|
386
|
+
</div>
|
|
387
|
+
</template>
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
## A form in a modal
|
|
391
|
+
|
|
392
|
+
A short form is opened on top of the list so that the user is not taken away to a separate page. `persistent` protects what has been typed from an accidental click outside, the submit button shows `loading`, and "Cancel" is blocked while the request is running. The fields are reset in the `after-leave` event — after the closing animation, so that the values do not flash in a still visible modal.
|
|
393
|
+
|
|
394
|
+
**Example (SFC):**
|
|
395
|
+
|
|
396
|
+
```vue
|
|
397
|
+
<script setup lang="ts">
|
|
398
|
+
import {
|
|
399
|
+
CdsButton,
|
|
400
|
+
CdsCard,
|
|
401
|
+
CdsCardActions,
|
|
402
|
+
CdsCardText,
|
|
403
|
+
CdsDivider,
|
|
404
|
+
CdsForm,
|
|
405
|
+
CdsModal,
|
|
406
|
+
CdsTextInput
|
|
407
|
+
} from '@central-design-system/components';
|
|
408
|
+
import { ref } from 'vue';
|
|
409
|
+
|
|
410
|
+
const modal = ref(false);
|
|
411
|
+
const loading = ref(false);
|
|
412
|
+
const name = ref('');
|
|
413
|
+
const email = ref('');
|
|
414
|
+
|
|
415
|
+
const submit = async () => {
|
|
416
|
+
loading.value = true;
|
|
417
|
+
|
|
418
|
+
// Имитация запроса к серверу
|
|
419
|
+
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
420
|
+
|
|
421
|
+
loading.value = false;
|
|
422
|
+
modal.value = false;
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
const reset = () => {
|
|
426
|
+
name.value = '';
|
|
427
|
+
email.value = '';
|
|
428
|
+
};
|
|
429
|
+
</script>
|
|
430
|
+
|
|
431
|
+
<template>
|
|
432
|
+
<div class="flex justify-center">
|
|
433
|
+
<CdsModal v-model="modal" persistent size="sm" @after-leave="reset">
|
|
434
|
+
<template #activator="{ props }">
|
|
435
|
+
<CdsButton v-bind="props">Пригласить сотрудника</CdsButton>
|
|
436
|
+
</template>
|
|
437
|
+
|
|
438
|
+
<CdsForm @submit.prevent="submit">
|
|
439
|
+
<CdsCard title="Пригласить сотрудника">
|
|
440
|
+
<CdsDivider />
|
|
441
|
+
|
|
442
|
+
<CdsCardText class="flex flex-col gap-2">
|
|
443
|
+
<CdsTextInput v-model="name" label="Имя" />
|
|
444
|
+
<CdsTextInput v-model="email" label="Рабочая почта" placeholder="name@company.ru" />
|
|
445
|
+
</CdsCardText>
|
|
446
|
+
|
|
447
|
+
<CdsDivider />
|
|
448
|
+
|
|
449
|
+
<CdsCardActions class="justify-end gap-2">
|
|
450
|
+
<CdsButton appearance="tertiary" :disabled="loading" @click="modal = false">Отмена</CdsButton>
|
|
451
|
+
<CdsButton type="submit" :loading="loading">Отправить приглашение</CdsButton>
|
|
452
|
+
</CdsCardActions>
|
|
453
|
+
</CdsCard>
|
|
454
|
+
</CdsForm>
|
|
455
|
+
</CdsModal>
|
|
456
|
+
</div>
|
|
457
|
+
</template>
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
## An agreement with scrolling
|
|
461
|
+
|
|
462
|
+
A document that requires an explicit answer is shown in a modal with `persistent` and `scrollable`: the text scrolls, and the "Accept" and "Decline" buttons are always in sight. Closing the modal without answering is not possible — the decision is recorded only with the buttons.
|
|
463
|
+
|
|
464
|
+
**Example (SFC):**
|
|
465
|
+
|
|
466
|
+
```vue
|
|
467
|
+
<script setup lang="ts">
|
|
468
|
+
import {
|
|
469
|
+
CdsButton,
|
|
470
|
+
CdsCard,
|
|
471
|
+
CdsCardActions,
|
|
472
|
+
CdsCardText,
|
|
473
|
+
CdsDivider,
|
|
474
|
+
CdsModal
|
|
475
|
+
} from '@central-design-system/components';
|
|
476
|
+
import { ref } from 'vue';
|
|
477
|
+
|
|
478
|
+
const modal = ref(false);
|
|
479
|
+
const accepted = ref<boolean | null>(null);
|
|
480
|
+
|
|
481
|
+
const answer = (value: boolean) => {
|
|
482
|
+
accepted.value = value;
|
|
483
|
+
modal.value = false;
|
|
484
|
+
};
|
|
485
|
+
</script>
|
|
486
|
+
|
|
487
|
+
<template>
|
|
488
|
+
<div class="flex flex-col items-center gap-4">
|
|
489
|
+
<CdsButton @click="modal = true">Открыть условия</CdsButton>
|
|
490
|
+
|
|
491
|
+
<div v-if="accepted !== null" class="text-content-primary">
|
|
492
|
+
{{ accepted ? 'Условия приняты' : 'Условия отклонены' }}
|
|
493
|
+
</div>
|
|
494
|
+
|
|
495
|
+
<CdsModal v-model="modal" persistent scrollable size="sm">
|
|
496
|
+
<CdsCard title="Условия использования">
|
|
497
|
+
<CdsDivider />
|
|
498
|
+
|
|
499
|
+
<CdsCardText class="h-[300px]">
|
|
500
|
+
<p v-for="n in 6" :key="n" class="mb-2">
|
|
501
|
+
{{ n }}. Стороны признают юридическую силу документов, подписанных в системе, и обязуются соблюдать
|
|
502
|
+
конфиденциальность учётных данных. Оператор вправе обновлять условия, уведомив пользователей заранее.
|
|
503
|
+
</p>
|
|
504
|
+
</CdsCardText>
|
|
505
|
+
|
|
506
|
+
<CdsDivider />
|
|
507
|
+
|
|
508
|
+
<CdsCardActions class="justify-end gap-2">
|
|
509
|
+
<CdsButton appearance="tertiary" @click="answer(false)">Отклонить</CdsButton>
|
|
510
|
+
<CdsButton @click="answer(true)">Принять</CdsButton>
|
|
511
|
+
</CdsCardActions>
|
|
512
|
+
</CdsCard>
|
|
513
|
+
</CdsModal>
|
|
514
|
+
</div>
|
|
515
|
+
</template>
|
|
516
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsModal — guidelines
|
|
2
|
+
|
|
3
|
+
> Extracted from `docs/demos/Guidelines.vue` by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> The full component contract is in [api.md](api.md).
|
|
5
|
+
|
|
6
|
+
| ✅ Do | ❌ Don't |
|
|
7
|
+
| --- | --- |
|
|
8
|
+
| The title names the action and the buttons answer it — you decide without rereading the text. | “Are you sure?” with “Yes / No” forces you to read the text closely to understand what will happen. |
|
|
9
|
+
| There is always a way back from the modal: a cancel button next to the main action and a close icon in the corner. | A single “Accept” button leaves no choice — the user is locked inside the modal. |
|
|
10
|
+
| The size of the modal matches its content: a short confirmation lives in a compact modal. | In a wide modal a single line of text gets lost and the eye wanders between the text and the buttons. |
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# CdsModal — 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
|
+
## _CdsModal.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
@use 'sass:map';
|
|
11
|
+
@use '../../../styles/tools';
|
|
12
|
+
@use '../../../styles/settings';
|
|
13
|
+
|
|
14
|
+
$modal-margin: var(--cds-spacing-400) !default;
|
|
15
|
+
$modal-padding: var(--cds-spacing-400) !default;
|
|
16
|
+
$modal-border-radius: var(--cds-border-radius-300) !default;
|
|
17
|
+
$modal-border: var(--cds-border-100) solid !default;
|
|
18
|
+
$modal-colors: (
|
|
19
|
+
'background': rgb(var(--cds-color-surface-elevated)),
|
|
20
|
+
'border': rgb(var(--cds-color-line-elevated))
|
|
21
|
+
) !default;
|
|
22
|
+
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# CdsNotification — 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 notification is a block with a message about an event or a state: a successful save, a warning about a limit, a loading error. The semantic status sets the color and the icon, and the display modes let you embed the message into a form, a card or a list.
|
|
7
|
+
|
|
8
|
+
## CdsNotification
|
|
9
|
+
|
|
10
|
+
**Props**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Required | Description |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| `bgColor` | `string \| undefined` | — | no | Background color of the component |
|
|
15
|
+
| `closable` | `boolean \| undefined` | — | no | Adds a close button that hides the notification. |
|
|
16
|
+
| `closeIcon` | `IconValue \| undefined` | `'remove'` | no | Icon of the close button. |
|
|
17
|
+
| `closeLabel` | `string \| undefined` | `'$cds.close'` | no | Accessible label (aria-label) for the close button. |
|
|
18
|
+
| `content` | `string \| number \| undefined` | — | no | Content displayed in the component. |
|
|
19
|
+
| `icon` | `false \| IconValue \| undefined` | `null` | no | Icon before the content. Taken from `status` by default; `false` hides the icon. |
|
|
20
|
+
| `modelValue` | `boolean \| undefined` | `true` | no | Visibility of the notification (v-model). When `false`, the notification is not rendered. |
|
|
21
|
+
| `status` | `"progress" \| "success" \| "danger" \| "warning" \| "info" \| undefined` | `'info'` | no | Semantic status — drives the color and the default icon. |
|
|
22
|
+
| `tag` | `string \| JSXComponent<any> \| undefined` | `'div'` | no | Custom HTML tag or component to render |
|
|
23
|
+
| `text` | `string \| number \| undefined` | — | no | Text displayed in the component. |
|
|
24
|
+
| `textColor` | `string \| undefined` | — | no | Text color of the component |
|
|
25
|
+
| `theme` | `string \| undefined` | — | no | Component theme |
|
|
26
|
+
| `title` | `string \| undefined` | — | no | Notification heading. |
|
|
27
|
+
| `variant` | `"default" \| "flat" \| "compact" \| "important" \| undefined` | `'default'` | no | Display mode: `default` — regular; `flat` — borderless; `compact` — single line without a heading; `important` — neutral background and a shadow, where the status only drives the content colors. |
|
|
28
|
+
|
|
29
|
+
**Events**
|
|
30
|
+
|
|
31
|
+
| Name | Type | Description |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| `click:close` | `[event: MouseEvent]` | Click on the close button. |
|
|
34
|
+
| `update:modelValue` | `[value: boolean]` | The visibility of the notification changed. |
|
|
35
|
+
|
|
36
|
+
**Slots**
|
|
37
|
+
|
|
38
|
+
| Name | Type | Description |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
| `actions` | `any` | Slot for actions (buttons, links) below the text. |
|
|
41
|
+
| `append` | `any` | Slot after the content. |
|
|
42
|
+
| `close` | `{ props: Record<string, any>; }` | Close button slot; receives `props` to bind to your own element. |
|
|
43
|
+
| `default` | `any` | Main content of the notification (complements `text`). |
|
|
44
|
+
| `prepend` | `any` | Slot before the content (the status icon by default). |
|
|
45
|
+
| `text` | `any` | Text slot (instead of the `text` prop). |
|
|
46
|
+
| `title` | `any` | Heading slot (instead of the `title` prop). |
|