@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,296 @@
|
|
|
1
|
+
# CdsToast — 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 toast is a pop-up notification about the result of an action: the changes are saved, the file is uploaded, the request failed. It appears above the page, does not interrupt the work and closes itself once `timeout` runs out.
|
|
7
|
+
|
|
8
|
+
## Controlling the visibility
|
|
9
|
+
|
|
10
|
+
Show the toast through `v-model` or the `activator` slot — in the second case the component manages its own state. The toast closes automatically after `timeout` (5000 ms by default); hovering the cursor or focusing inside the toast pauses the countdown, and on touch screens the toast can be swiped away.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsButton, CdsToast } from '@central-design-system/components';
|
|
17
|
+
import { ref } from 'vue';
|
|
18
|
+
|
|
19
|
+
const visible = ref(false);
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<div class="flex flex-wrap justify-center gap-2">
|
|
24
|
+
<CdsButton text="Открыть через v-model" @click="visible = true" />
|
|
25
|
+
<CdsToast v-model="visible" text="Изменения сохранены" />
|
|
26
|
+
|
|
27
|
+
<CdsToast text="Черновик восстановлен">
|
|
28
|
+
<template #activator="{ props }">
|
|
29
|
+
<CdsButton text="Открыть через activator" appearance="secondary" v-bind="props" />
|
|
30
|
+
</template>
|
|
31
|
+
</CdsToast>
|
|
32
|
+
</div>
|
|
33
|
+
</template>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Status
|
|
37
|
+
|
|
38
|
+
The `status` prop picks the color and the icon by the meaning of the message: `info`, `success`, `warning`, `danger`, `progress`. The icon can be replaced by the `icon` prop or hidden with the value `false`.
|
|
39
|
+
|
|
40
|
+
**Example (SFC):**
|
|
41
|
+
|
|
42
|
+
```vue
|
|
43
|
+
<script setup lang="ts">
|
|
44
|
+
import { CdsButton, CdsToast } from '@central-design-system/components';
|
|
45
|
+
|
|
46
|
+
const statuses = ['info', 'success', 'warning', 'danger', 'progress'] as const;
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
<template>
|
|
50
|
+
<div class="flex flex-wrap justify-center gap-2">
|
|
51
|
+
<CdsButton v-for="status in statuses" :key="status" :color="`status-${status}-surface`" appearance="secondary">
|
|
52
|
+
{{ status }}
|
|
53
|
+
<CdsToast activator="parent" :status="status" :text="`Уведомление со статусом ${status}`" />
|
|
54
|
+
</CdsButton>
|
|
55
|
+
</div>
|
|
56
|
+
</template>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Timer
|
|
60
|
+
|
|
61
|
+
The `timeout` prop sets the delay before auto-closing in milliseconds, and `-1` turns it off. The bar of the remaining time is enabled by the `timer` prop (`true`/`top` — on top, `bottom` — at the bottom), `reverse-timer` flips its direction and `timer-color` changes its color.
|
|
62
|
+
|
|
63
|
+
**Example (SFC):**
|
|
64
|
+
|
|
65
|
+
```vue
|
|
66
|
+
<script setup lang="ts">
|
|
67
|
+
import { CdsButton, CdsToast } from '@central-design-system/components';
|
|
68
|
+
</script>
|
|
69
|
+
|
|
70
|
+
<template>
|
|
71
|
+
<div class="flex flex-wrap justify-center gap-2">
|
|
72
|
+
<CdsToast timer :timeout="4000" text="Тост закроется через 4 секунды">
|
|
73
|
+
<template #activator="{ props }">
|
|
74
|
+
<CdsButton text="Таймер сверху" v-bind="props" />
|
|
75
|
+
</template>
|
|
76
|
+
</CdsToast>
|
|
77
|
+
|
|
78
|
+
<CdsToast timer="bottom" reverse-timer :timeout="4000" text="Обратная шкала снизу">
|
|
79
|
+
<template #activator="{ props }">
|
|
80
|
+
<CdsButton text="Таймер снизу" appearance="secondary" v-bind="props" />
|
|
81
|
+
</template>
|
|
82
|
+
</CdsToast>
|
|
83
|
+
</div>
|
|
84
|
+
</template>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Position
|
|
88
|
+
|
|
89
|
+
The `location` prop puts the toast into one of the six positions: the side (`top`, `bottom`) plus the alignment (`left`, `center`, `right`). The toast is rendered above the page content by [CdsOverlay](../cds-overlay/api.md).
|
|
90
|
+
|
|
91
|
+
**Example (SFC):**
|
|
92
|
+
|
|
93
|
+
```vue
|
|
94
|
+
<script setup lang="ts">
|
|
95
|
+
import { CdsButton, CdsToast } from '@central-design-system/components';
|
|
96
|
+
|
|
97
|
+
const locations = ['top left', 'top center', 'top right', 'bottom left', 'bottom center', 'bottom right'] as const;
|
|
98
|
+
</script>
|
|
99
|
+
|
|
100
|
+
<template>
|
|
101
|
+
<div class="grid grid-cols-3 justify-items-center gap-2">
|
|
102
|
+
<CdsButton v-for="location in locations" :key="location" appearance="tertiary">
|
|
103
|
+
{{ location }}
|
|
104
|
+
<CdsToast activator="parent" :location="location" :text="`Тост в позиции ${location}`" />
|
|
105
|
+
</CdsButton>
|
|
106
|
+
</div>
|
|
107
|
+
</template>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Content and actions
|
|
111
|
+
|
|
112
|
+
The heading and the text come from the `title` and `text` props, the avatar before the content from `prepend-avatar`, and `loading` replaces the icon with a loading indicator. The `actions` slot adds buttons: inside it they get `appearance="inverse"` and `size="sm"` by default. The vertical layout (`vertical`) moves the actions below the content.
|
|
113
|
+
|
|
114
|
+
**Example (SFC):**
|
|
115
|
+
|
|
116
|
+
```vue
|
|
117
|
+
<script setup lang="ts">
|
|
118
|
+
import { CdsButton, CdsToast } from '@central-design-system/components';
|
|
119
|
+
</script>
|
|
120
|
+
|
|
121
|
+
<template>
|
|
122
|
+
<div class="flex flex-wrap justify-center gap-2">
|
|
123
|
+
<CdsToast
|
|
124
|
+
title="Черновик удалён"
|
|
125
|
+
text="Черновик заявки №42 удалён без возможности восстановления"
|
|
126
|
+
status="warning"
|
|
127
|
+
:timeout="8000"
|
|
128
|
+
>
|
|
129
|
+
<template #activator="{ props }">
|
|
130
|
+
<CdsButton text="С заголовком и действиями" v-bind="props" />
|
|
131
|
+
</template>
|
|
132
|
+
<template #actions="{ isActive }">
|
|
133
|
+
<CdsButton text="Отменить" appearance="tertiary" @click="isActive.value = false" />
|
|
134
|
+
</template>
|
|
135
|
+
</CdsToast>
|
|
136
|
+
|
|
137
|
+
<CdsToast
|
|
138
|
+
prepend-avatar="https://i.pravatar.cc/80?img=32"
|
|
139
|
+
title="Ирина Соколова"
|
|
140
|
+
text="Добавила комментарий к заказу"
|
|
141
|
+
>
|
|
142
|
+
<template #activator="{ props }">
|
|
143
|
+
<CdsButton text="С аватаром" appearance="secondary" v-bind="props" />
|
|
144
|
+
</template>
|
|
145
|
+
</CdsToast>
|
|
146
|
+
|
|
147
|
+
<CdsToast vertical title="Файл загружается" text="Не закрывайте вкладку до завершения" loading :timeout="-1">
|
|
148
|
+
<template #activator="{ props }">
|
|
149
|
+
<CdsButton text="Вертикальный с загрузкой" appearance="secondary" v-bind="props" />
|
|
150
|
+
</template>
|
|
151
|
+
<template #actions="{ isActive }">
|
|
152
|
+
<CdsButton text="Скрыть" appearance="tertiary" @click="isActive.value = false" />
|
|
153
|
+
</template>
|
|
154
|
+
</CdsToast>
|
|
155
|
+
</div>
|
|
156
|
+
</template>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Undoing an action
|
|
160
|
+
|
|
161
|
+
The toast confirms the deletion and gives time to change one's mind: the "Отменить" button in the `actions` slot brings the document back, and the `timer` bar shows how much time is left to decide.
|
|
162
|
+
|
|
163
|
+
**Example (SFC):**
|
|
164
|
+
|
|
165
|
+
```vue
|
|
166
|
+
<script setup lang="ts">
|
|
167
|
+
import { CdsButton, CdsToast } from '@central-design-system/components';
|
|
168
|
+
import { ref } from 'vue';
|
|
169
|
+
|
|
170
|
+
const documents = ref(['Договор поставки', 'Счёт №112', 'Акт сверки']);
|
|
171
|
+
const visible = ref(false);
|
|
172
|
+
const removed = ref<{ name: string; index: number } | null>(null);
|
|
173
|
+
|
|
174
|
+
const remove = (index: number) => {
|
|
175
|
+
removed.value = { name: documents.value[index], index };
|
|
176
|
+
documents.value.splice(index, 1);
|
|
177
|
+
visible.value = true;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const undo = () => {
|
|
181
|
+
if (removed.value) {
|
|
182
|
+
documents.value.splice(removed.value.index, 0, removed.value.name);
|
|
183
|
+
}
|
|
184
|
+
visible.value = false;
|
|
185
|
+
};
|
|
186
|
+
</script>
|
|
187
|
+
|
|
188
|
+
<template>
|
|
189
|
+
<div class="flex w-[320px] m-auto flex-col gap-2">
|
|
190
|
+
<div v-for="(name, index) in documents" :key="name" class="flex items-center justify-between">
|
|
191
|
+
{{ name }}
|
|
192
|
+
<CdsButton icon="delete" appearance="tertiary" size="sm" :aria-label="`Удалить ${name}`" @click="remove(index)" />
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<CdsToast v-model="visible" timer :timeout="6000" :text="removed ? `Документ «${removed.name}» удалён` : ''">
|
|
196
|
+
<template #actions>
|
|
197
|
+
<CdsButton text="Отменить" @click="undo" />
|
|
198
|
+
</template>
|
|
199
|
+
</CdsToast>
|
|
200
|
+
</div>
|
|
201
|
+
</template>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## A background task
|
|
205
|
+
|
|
206
|
+
A single toast accompanies the task from the start to the result. While the processing runs, `loading` shows the indicator and `timeout: -1` keeps the notification from disappearing; once it is done the same toast switches to `status="success"` and closes itself.
|
|
207
|
+
|
|
208
|
+
**Example (SFC):**
|
|
209
|
+
|
|
210
|
+
```vue
|
|
211
|
+
<script setup lang="ts">
|
|
212
|
+
import { CdsButton, CdsToast } from '@central-design-system/components';
|
|
213
|
+
import { ref } from 'vue';
|
|
214
|
+
|
|
215
|
+
const visible = ref(false);
|
|
216
|
+
const loading = ref(false);
|
|
217
|
+
|
|
218
|
+
const generate = () => {
|
|
219
|
+
visible.value = true;
|
|
220
|
+
loading.value = true;
|
|
221
|
+
|
|
222
|
+
setTimeout(() => {
|
|
223
|
+
loading.value = false;
|
|
224
|
+
}, 2500);
|
|
225
|
+
};
|
|
226
|
+
</script>
|
|
227
|
+
|
|
228
|
+
<template>
|
|
229
|
+
<div class="flex justify-center">
|
|
230
|
+
<CdsButton text="Сформировать отчёт" :disabled="visible && loading" @click="generate" />
|
|
231
|
+
|
|
232
|
+
<CdsToast
|
|
233
|
+
v-model="visible"
|
|
234
|
+
:loading="loading"
|
|
235
|
+
:status="loading ? undefined : 'success'"
|
|
236
|
+
:timeout="loading ? -1 : 4000"
|
|
237
|
+
:title="loading ? 'Формируем отчёт' : 'Отчёт готов'"
|
|
238
|
+
:text="loading ? 'Это займёт несколько секунд' : 'Файл сохранён в разделе «Документы»'"
|
|
239
|
+
/>
|
|
240
|
+
</div>
|
|
241
|
+
</template>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## An error with a retry
|
|
245
|
+
|
|
246
|
+
Do not hide an error automatically: `timeout: -1` keeps the toast until the user reacts, and the "Повторить" button in `actions` runs the request again.
|
|
247
|
+
|
|
248
|
+
**Example (SFC):**
|
|
249
|
+
|
|
250
|
+
```vue
|
|
251
|
+
<script setup lang="ts">
|
|
252
|
+
import { CdsButton, CdsToast } from '@central-design-system/components';
|
|
253
|
+
import { ref } from 'vue';
|
|
254
|
+
|
|
255
|
+
const sending = ref(false);
|
|
256
|
+
const failed = ref(false);
|
|
257
|
+
const sent = ref(false);
|
|
258
|
+
let attempt = 0;
|
|
259
|
+
|
|
260
|
+
const send = () => {
|
|
261
|
+
sending.value = true;
|
|
262
|
+
failed.value = false;
|
|
263
|
+
|
|
264
|
+
setTimeout(() => {
|
|
265
|
+
sending.value = false;
|
|
266
|
+
attempt += 1;
|
|
267
|
+
|
|
268
|
+
if (attempt % 2 === 1) {
|
|
269
|
+
failed.value = true;
|
|
270
|
+
} else {
|
|
271
|
+
sent.value = true;
|
|
272
|
+
}
|
|
273
|
+
}, 1500);
|
|
274
|
+
};
|
|
275
|
+
</script>
|
|
276
|
+
|
|
277
|
+
<template>
|
|
278
|
+
<div class="flex justify-center">
|
|
279
|
+
<CdsButton text="Отправить заявку" :loading="sending" @click="send" />
|
|
280
|
+
|
|
281
|
+
<CdsToast
|
|
282
|
+
v-model="failed"
|
|
283
|
+
status="danger"
|
|
284
|
+
:timeout="-1"
|
|
285
|
+
title="Не удалось отправить заявку"
|
|
286
|
+
text="Сервер не ответил. Попробуйте ещё раз"
|
|
287
|
+
>
|
|
288
|
+
<template #actions>
|
|
289
|
+
<CdsButton text="Повторить" @click="send" />
|
|
290
|
+
</template>
|
|
291
|
+
</CdsToast>
|
|
292
|
+
|
|
293
|
+
<CdsToast v-model="sent" status="success" text="Заявка отправлена" />
|
|
294
|
+
</div>
|
|
295
|
+
</template>
|
|
296
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsToast — 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 toast text is a short summary of the action, readable in a second. | Details and instructions cannot be read before the toast closes itself. |
|
|
9
|
+
| A toast reports an action that already happened and offers to undo it. | A toast does not wait for an answer — ask questions that need a decision in a modal. |
|
|
10
|
+
| An error stays on the screen (timeout: -1) until the user reacts. | An error with a timer disappears before the user can deal with it. |
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# CdsToast — 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
|
+
## _CdsToast.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
@use '../../../styles/settings';
|
|
11
|
+
@use '../../../styles/tools';
|
|
12
|
+
|
|
13
|
+
$toast-z-index: 10000 !default;
|
|
14
|
+
$toast-margin: var(--cds-spacing-400) !default;
|
|
15
|
+
$toast-border: var(--cds-border-100) solid !default;
|
|
16
|
+
$toast-border-radius: var(--cds-border-radius-200) !default;
|
|
17
|
+
$toast-max-width: tools.to-rem(672px) !default;
|
|
18
|
+
$toast-min-width: tools.to-rem(344px) !default;
|
|
19
|
+
$toast-min-height: tools.to-rem(48px) !default;
|
|
20
|
+
$toast-padding: var(--cds-spacing-300) !default;
|
|
21
|
+
$toast-prepend-height: var(--cds-font-line-height-400) !default;
|
|
22
|
+
$toast-content-padding: 0 var(--cds-spacing-400) !default;
|
|
23
|
+
$toast-action-gap: var(--cds-spacing-400) !default;
|
|
24
|
+
$toast-action-offset: var(--cds-spacing-300) !default;
|
|
25
|
+
$toast-transition-scale: 0.8 !default;
|
|
26
|
+
```
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# CdsToastQueue — API
|
|
2
|
+
|
|
3
|
+
> Generated from meta.json by `bun run generate:skill`. Do not edit manually.
|
|
4
|
+
> Examples: [examples.md](examples.md)
|
|
5
|
+
|
|
6
|
+
A queue of pop-up notifications built on [CdsToast](../cds-toast/api.md). Put the messages into the `v-model` array — the queue will show them one by one or as a stack, respect the limit of simultaneously visible toasts and close the ones that are done.
|
|
7
|
+
|
|
8
|
+
## CdsToastQueue
|
|
9
|
+
|
|
10
|
+
**Props**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Required | Description |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| `absolute` | `boolean \| undefined` | — | no | Positions the element absolutely instead of fixed. This is useful for overlays that must stay inside a certain area, for example inside a container with `position: relative`. |
|
|
15
|
+
| `activator` | `(string & {}) \| Element \| "parent" \| ComponentPublicInstance \| undefined` | — | no | The element that activates the component |
|
|
16
|
+
| `activatorProps` | `Record<string, any> \| undefined` | `{}` | no | Props for the activator element |
|
|
17
|
+
| `attach` | `string \| boolean \| Element \| undefined` | — | no | Sets the DOM element the overlay content is moved to. It accepts a direct element reference, a querySelector string, or true to disable moving. By default the body element is used. Changing this prop is usually not recommended except for edge cases: the default positioning algorithm handles most scenarios better than it can without moving, and unexpected behavior may appear if the menu ends up being a child of its activator. |
|
|
18
|
+
| `bgColor` | `string \| undefined` | — | no | Background color of the component |
|
|
19
|
+
| `closable` | `string \| boolean \| undefined` | — | no | Adds a close button to every toast. A string value sets the color of the button. |
|
|
20
|
+
| `closeDelay` | `string \| number \| undefined` | — | no | Delay in milliseconds before the component closes. Works only together with open-on-hover. |
|
|
21
|
+
| `closeOnBack` | `boolean \| undefined` | `false` | no | Closes the overlay content when the browser Back button is pressed or $router.back() is called, cancelling the original navigation. `persistent` overlays cancel the navigation and animate as if they were clicked outside instead of closing. |
|
|
22
|
+
| `closeOnContentClick` | `boolean \| undefined` | — | no | Hide the component on a click on the content |
|
|
23
|
+
| `closeText` | `string \| undefined` | `'$cds.dismiss'` | no | Text of the close button. |
|
|
24
|
+
| `collapsed` | `boolean \| undefined` | — | no | Folds the inactive toasts into a stack under the last visible one. |
|
|
25
|
+
| `contained` | `boolean \| undefined` | — | no | Limits the size of the component and of its grid to the offset parent. Implies the `absolute` and `attach` props. (Note: the parent element must have `position: relative`.) |
|
|
26
|
+
| `content` | `string \| number \| undefined` | — | no | Content displayed in the component. |
|
|
27
|
+
| `contentClass` | `any` | — | no | Applies a custom class to the content element. This is handy because the content is moved to the beginning of the cds-app component (unless `attach` is set) and cannot be selected with classes passed to the component directly. |
|
|
28
|
+
| `contentProps` | `any` | — | no | Applies custom props to the moved content |
|
|
29
|
+
| `disabled` | `boolean \| null \| undefined` | `null` | no | Disabled state |
|
|
30
|
+
| `displayStrategy` | `"overflow" \| "hold" \| undefined` | `'hold'` | no | Strategy when `totalVisible` is exceeded: `hold` — wait until a toast closes, `overflow` — push the oldest ones out. |
|
|
31
|
+
| `eager` | `boolean \| undefined` | — | no | Renders the content of the component right away. Useful when you have content that is not in the DOM but has to be indexed for SEO. |
|
|
32
|
+
| `gap` | `string \| number \| undefined` | `8` | no | Gap between the toasts, in pixels. |
|
|
33
|
+
| `height` | `string \| number \| undefined` | — | no | Component height |
|
|
34
|
+
| `icon` | `false \| IconValue \| undefined` | `null` | no | Icon before the content. Taken from `status` by default; `false` hides the icon. |
|
|
35
|
+
| `loading` | `boolean \| undefined` | — | no | Shows a loading indicator instead of the icon. |
|
|
36
|
+
| `location` | `Anchor \| null \| undefined` | `'top center'` | no | Position of the element relative to its container, for example "top left", "center", "bottom right". |
|
|
37
|
+
| `locationStrategy` | `"static" \| "connected" \| LocationStrategyFunction \| undefined` | `'static'` | no | Sets the way the overlay content is positioned. By default static is used, which centers the content in its container. Use connected to attach the content to the activator element. |
|
|
38
|
+
| `maxHeight` | `string \| number \| undefined` | — | no | Maximum component height |
|
|
39
|
+
| `maxWidth` | `string \| number \| undefined` | — | no | Maximum component width |
|
|
40
|
+
| `minHeight` | `string \| number \| undefined` | — | no | Minimum component height |
|
|
41
|
+
| `minWidth` | `string \| number \| undefined` | — | no | Minimum component width |
|
|
42
|
+
| `modelValue` | `readonly ToastMessage[] \| undefined` | `[]` | no | The queue of messages (v-model). A string or an object with toast props. |
|
|
43
|
+
| `opacity` | `string \| number \| undefined` | — | no | Opacity of the scrim element. Applies only when `scrim=true`. |
|
|
44
|
+
| `openDelay` | `string \| number \| undefined` | — | no | Delay in milliseconds before the component opens. Works only together with open-on-hover. |
|
|
45
|
+
| `openOnClick` | `boolean \| undefined` | — | no | Show the component on a click on the activator |
|
|
46
|
+
| `openOnFocus` | `boolean \| undefined` | — | no | Show the component when the activator gets focus |
|
|
47
|
+
| `openOnHover` | `boolean \| undefined` | — | no | Show the component on hover over the activator |
|
|
48
|
+
| `origin` | `Anchor \| "auto" \| "overlap" \| undefined` | `'auto'` | no | Sets the anchor point of the overlay content that is aligned with the `location` anchor of the target. With "auto" the opposite side of the `location` point is used. With "overlap" the same anchor point is used, so the overlay overlaps the target. It also sets the CSS `transform-origin` property for the enter/leave transitions. |
|
|
49
|
+
| `position` | `"absolute" \| "static" \| "fixed" \| "relative" \| "sticky" \| undefined` | — | no | CSS positioning of the component — the value of the `position` property |
|
|
50
|
+
| `prependAvatar` | `string \| undefined` | — | no | Source of the avatar image before the content. Takes priority over the icon. |
|
|
51
|
+
| `reverseTimer` | `boolean \| undefined` | — | no | Reverses the timer bar: it fills up instead of draining. |
|
|
52
|
+
| `status` | `"progress" \| "success" \| "danger" \| "warning" \| "info" \| undefined` | `'info'` | no | Semantic status — drives the color and the default icon. |
|
|
53
|
+
| `target` | `(string & {}) \| Element \| "parent" \| ComponentPublicInstance \| "cursor" \| [x: number, y: number] \| undefined` | — | no | When `locationStrategy` is set to "connected", specify the element or the array of x, y coordinates the overlay is positioned against. By default the activator element is used. |
|
|
54
|
+
| `text` | `string \| number \| undefined` | — | no | Text displayed in the component. |
|
|
55
|
+
| `textColor` | `string \| undefined` | — | no | Text color of the component |
|
|
56
|
+
| `theme` | `string \| undefined` | — | no | Component theme |
|
|
57
|
+
| `timeout` | `string \| number \| undefined` | `5000` | no | Delay in milliseconds before the toast hides automatically. The value `-1` turns auto-closing off. |
|
|
58
|
+
| `timer` | `boolean \| "top" \| "bottom" \| undefined` | `false` | no | Shows the timer bar until auto-closing: `true`/`top` — on top, `bottom` — at the bottom. |
|
|
59
|
+
| `timerColor` | `string \| undefined` | — | no | Color of the timer bar. |
|
|
60
|
+
| `title` | `string \| undefined` | — | no | Heading of the toast. |
|
|
61
|
+
| `totalVisible` | `string \| number \| undefined` | `1` | no | Maximum number of simultaneously visible toasts. |
|
|
62
|
+
| `transition` | `string \| boolean \| (TransitionProps & { component?: Component \| undefined; }) \| null \| undefined` | `'cds-toast-transition'` | no | Transition animation |
|
|
63
|
+
| `vertical` | `boolean \| undefined` | — | no | Vertical layout: the actions move below the content. |
|
|
64
|
+
| `width` | `string \| number \| undefined` | — | no | Component width |
|
|
65
|
+
| `zIndex` | `string \| number \| undefined` | `2000` | no | The z-index value of the component. |
|
|
66
|
+
|
|
67
|
+
**Events**
|
|
68
|
+
|
|
69
|
+
| Name | Type | Description |
|
|
70
|
+
| --- | --- | --- |
|
|
71
|
+
| `update:modelValue` | `[value: ToastMessage[]]` | The queue of messages changed. |
|
|
72
|
+
|
|
73
|
+
**Slots**
|
|
74
|
+
|
|
75
|
+
| Name | Type | Description |
|
|
76
|
+
| --- | --- | --- |
|
|
77
|
+
| `actions` | `{ item: ToastMessage; props: { onClick: () => void; }; }` | Slot for the actions of the toast. |
|
|
78
|
+
| `header` | `{ item: ToastMessage; }` | Slot for the header of the toast. |
|
|
79
|
+
| `item` | `{ item: ToastMessage; }` | Slot that fully replaces the toast. The toast props are passed through CdsDefaultsProvider. |
|
|
80
|
+
| `text` | `{ item: ToastMessage; }` | Slot for the text of the toast. |
|
|
81
|
+
|
|
82
|
+
**Exposed**
|
|
83
|
+
|
|
84
|
+
| Name | Type | Description |
|
|
85
|
+
| --- | --- | --- |
|
|
86
|
+
| `clear` | `() => void` | Empties the queue and closes all the visible toasts. |
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# CdsToastQueue — 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 queue of pop-up notifications built on [CdsToast](../cds-toast/api.md). Put the messages into the `v-model` array — the queue will show them one by one or as a stack, respect the limit of simultaneously visible toasts and close the ones that are done.
|
|
7
|
+
|
|
8
|
+
## The message queue
|
|
9
|
+
|
|
10
|
+
A message is a string or an object with toast props. Add messages to the `v-model` array: the queue shows them one by one, and the rest wait for their place. The `closable` prop adds a close button with the `close-text` label to every toast. Props shared by the toasts — `location`, `timer`, `status` and others — are set right on the queue: they apply to every message. While the browser tab is hidden, auto-closing is paused.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import type { ToastMessage } from '@central-design-system/components';
|
|
17
|
+
import { CdsButton, CdsToastQueue } from '@central-design-system/components';
|
|
18
|
+
import { ref } from 'vue';
|
|
19
|
+
|
|
20
|
+
const messages = ref<ToastMessage[]>([]);
|
|
21
|
+
let count = 0;
|
|
22
|
+
|
|
23
|
+
const push = () => {
|
|
24
|
+
messages.value = [...messages.value, `Сообщение №${++count}`];
|
|
25
|
+
};
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<div class="flex justify-center">
|
|
30
|
+
<CdsButton text="Добавить сообщение" @click="push" />
|
|
31
|
+
<CdsToastQueue v-model="messages" closable />
|
|
32
|
+
</div>
|
|
33
|
+
</template>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Limit and overflow
|
|
37
|
+
|
|
38
|
+
The `total-visible` prop caps the number of simultaneously visible toasts: a new one takes the place at the edge of the screen and pushes the previous ones aside. The `display-strategy` prop decides what to do with the extra ones: `hold` (the default) keeps them in the queue until a place frees up, `overflow` closes the oldest ones.
|
|
39
|
+
|
|
40
|
+
**Example (SFC):**
|
|
41
|
+
|
|
42
|
+
```vue
|
|
43
|
+
<script setup lang="ts">
|
|
44
|
+
import type { ToastMessage } from '@central-design-system/components';
|
|
45
|
+
import { CdsButton, CdsRadio, CdsRadioGroup, CdsToastQueue } from '@central-design-system/components';
|
|
46
|
+
import { ref } from 'vue';
|
|
47
|
+
|
|
48
|
+
const strategy = ref<'hold' | 'overflow'>('hold');
|
|
49
|
+
const messages = ref<ToastMessage[]>([]);
|
|
50
|
+
let count = 0;
|
|
51
|
+
|
|
52
|
+
const push = () => {
|
|
53
|
+
messages.value = [...messages.value, { text: `Сообщение №${++count}`, timeout: 8000 }];
|
|
54
|
+
};
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
<template>
|
|
58
|
+
<div class="flex flex-col items-center gap-4">
|
|
59
|
+
<CdsRadioGroup v-model="strategy" label="Стратегия переполнения" direction="horizontal" hide-details>
|
|
60
|
+
<CdsRadio value="hold" label="hold — ждать места" />
|
|
61
|
+
<CdsRadio value="overflow" label="overflow — вытеснять старые" />
|
|
62
|
+
</CdsRadioGroup>
|
|
63
|
+
|
|
64
|
+
<CdsButton text="Добавить сообщение" @click="push" />
|
|
65
|
+
<CdsToastQueue v-model="messages" :total-visible="3" :display-strategy="strategy" closable />
|
|
66
|
+
</div>
|
|
67
|
+
</template>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## The stack
|
|
71
|
+
|
|
72
|
+
The `collapsed` prop folds all the toasts except the last one into a compact stack. Hover the cursor — the stack unfolds, and the timers pause while the cursor is inside.
|
|
73
|
+
|
|
74
|
+
**Example (SFC):**
|
|
75
|
+
|
|
76
|
+
```vue
|
|
77
|
+
<script setup lang="ts">
|
|
78
|
+
import type { ToastMessage } from '@central-design-system/components';
|
|
79
|
+
import { CdsButton, CdsToastQueue } from '@central-design-system/components';
|
|
80
|
+
import { ref } from 'vue';
|
|
81
|
+
|
|
82
|
+
const messages = ref<ToastMessage[]>([]);
|
|
83
|
+
let count = 0;
|
|
84
|
+
|
|
85
|
+
const push = () => {
|
|
86
|
+
messages.value = [
|
|
87
|
+
...messages.value,
|
|
88
|
+
{
|
|
89
|
+
title: `Событие №${++count}`,
|
|
90
|
+
text: 'Описание события в очереди',
|
|
91
|
+
status: 'success'
|
|
92
|
+
}
|
|
93
|
+
];
|
|
94
|
+
};
|
|
95
|
+
</script>
|
|
96
|
+
|
|
97
|
+
<template>
|
|
98
|
+
<div class="flex justify-center">
|
|
99
|
+
<CdsButton text="Добавить в стопку" @click="push" />
|
|
100
|
+
<CdsToastQueue v-model="messages" collapsed closable :total-visible="10" :timeout="6000" location="bottom right" />
|
|
101
|
+
</div>
|
|
102
|
+
</template>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Background operations
|
|
106
|
+
|
|
107
|
+
Pass a `promise` in the message — the toast gets a loading indicator and does not close until the operation is done. The `success` and `error` callbacks return the toast props for the result: the status, the text and the auto-close delay.
|
|
108
|
+
|
|
109
|
+
**Example (SFC):**
|
|
110
|
+
|
|
111
|
+
```vue
|
|
112
|
+
<script setup lang="ts">
|
|
113
|
+
import type { ToastMessage } from '@central-design-system/components';
|
|
114
|
+
import { CdsButton, CdsToastQueue } from '@central-design-system/components';
|
|
115
|
+
import { ref } from 'vue';
|
|
116
|
+
|
|
117
|
+
const messages = ref<ToastMessage[]>([]);
|
|
118
|
+
|
|
119
|
+
const save = (shouldFail: boolean) => {
|
|
120
|
+
const request = new Promise((resolve, reject) => {
|
|
121
|
+
setTimeout(() => (shouldFail ? reject(new Error('Сервер не ответил')) : resolve(undefined)), 2000);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
messages.value = [
|
|
125
|
+
...messages.value,
|
|
126
|
+
{
|
|
127
|
+
text: 'Сохраняем изменения…',
|
|
128
|
+
promise: request,
|
|
129
|
+
success: () => ({ status: 'success', text: 'Изменения сохранены', timeout: 4000 }),
|
|
130
|
+
error: (err) => ({ status: 'danger', text: err?.message ?? 'Не удалось сохранить', timeout: 6000 })
|
|
131
|
+
}
|
|
132
|
+
];
|
|
133
|
+
};
|
|
134
|
+
</script>
|
|
135
|
+
|
|
136
|
+
<template>
|
|
137
|
+
<div class="flex flex-wrap justify-center gap-2">
|
|
138
|
+
<CdsButton text="Успешное сохранение" @click="save(false)" />
|
|
139
|
+
<CdsButton text="Сохранение с ошибкой" appearance="secondary" @click="save(true)" />
|
|
140
|
+
<CdsToastQueue v-model="messages" :total-visible="3" />
|
|
141
|
+
</div>
|
|
142
|
+
</template>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Notification center
|
|
146
|
+
|
|
147
|
+
The events of the application pile up into a single queue in the corner of the screen: `location="bottom right"` moves the toasts out of the working area, `collapsed` hides the older ones in a stack, and `closable` lets the user close every notification.
|
|
148
|
+
|
|
149
|
+
**Example (SFC):**
|
|
150
|
+
|
|
151
|
+
```vue
|
|
152
|
+
<script setup lang="ts">
|
|
153
|
+
import type { ToastMessage } from '@central-design-system/components';
|
|
154
|
+
import { CdsButton, CdsToastQueue } from '@central-design-system/components';
|
|
155
|
+
import { ref } from 'vue';
|
|
156
|
+
|
|
157
|
+
const events: ToastMessage[] = [
|
|
158
|
+
{ title: 'Новый заказ', text: 'Заказ №1042 ожидает подтверждения', status: 'info' },
|
|
159
|
+
{ title: 'Оплата получена', text: 'Счёт №112 оплачен полностью', status: 'success' },
|
|
160
|
+
{ title: 'Заканчивается место', text: 'Хранилище заполнено на 90%', status: 'warning' },
|
|
161
|
+
{ title: 'Сбой синхронизации', text: 'Не удалось обновить данные. Повторим автоматически', status: 'danger' }
|
|
162
|
+
];
|
|
163
|
+
|
|
164
|
+
const messages = ref<ToastMessage[]>([]);
|
|
165
|
+
let next = 0;
|
|
166
|
+
|
|
167
|
+
const push = () => {
|
|
168
|
+
messages.value = [...messages.value, events[next++ % events.length]];
|
|
169
|
+
};
|
|
170
|
+
</script>
|
|
171
|
+
|
|
172
|
+
<template>
|
|
173
|
+
<div class="flex justify-center">
|
|
174
|
+
<CdsButton text="Новое событие" @click="push" />
|
|
175
|
+
<CdsToastQueue v-model="messages" location="bottom right" collapsed closable :total-visible="5" :timeout="8000" />
|
|
176
|
+
</div>
|
|
177
|
+
</template>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Controlling the queue
|
|
181
|
+
|
|
182
|
+
The `onDismiss` callback of a message receives the reason it was closed — `auto`, `dismissed`, `overflow` or `cleared` — and the exposed `clear()` method closes all the toasts and empties the queue.
|
|
183
|
+
|
|
184
|
+
**Example (SFC):**
|
|
185
|
+
|
|
186
|
+
```vue
|
|
187
|
+
<script setup lang="ts">
|
|
188
|
+
import type { ToastMessage } from '@central-design-system/components';
|
|
189
|
+
import { CdsButton, CdsToastQueue } from '@central-design-system/components';
|
|
190
|
+
import { ref } from 'vue';
|
|
191
|
+
|
|
192
|
+
const queue = ref<InstanceType<typeof CdsToastQueue>>();
|
|
193
|
+
const messages = ref<ToastMessage[]>([]);
|
|
194
|
+
const log = ref<string[]>([]);
|
|
195
|
+
let count = 0;
|
|
196
|
+
|
|
197
|
+
const push = () => {
|
|
198
|
+
const id = ++count;
|
|
199
|
+
|
|
200
|
+
messages.value = [
|
|
201
|
+
...messages.value,
|
|
202
|
+
{
|
|
203
|
+
text: `Задача №${id} выполнена`,
|
|
204
|
+
status: 'success',
|
|
205
|
+
onDismiss: (reason) => {
|
|
206
|
+
log.value = [`Тост №${id} закрыт: ${reason}`, ...log.value].slice(0, 4);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
];
|
|
210
|
+
};
|
|
211
|
+
</script>
|
|
212
|
+
|
|
213
|
+
<template>
|
|
214
|
+
<div class="flex flex-col items-center gap-4">
|
|
215
|
+
<div class="flex gap-2">
|
|
216
|
+
<CdsButton text="Добавить" @click="push" />
|
|
217
|
+
<CdsButton text="Закрыть все" appearance="tertiary" @click="queue?.clear()" />
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
<div class="h-[96px] text-center">
|
|
221
|
+
<div v-for="line in log" :key="line">{{ line }}</div>
|
|
222
|
+
</div>
|
|
223
|
+
|
|
224
|
+
<CdsToastQueue ref="queue" v-model="messages" :total-visible="3" closable />
|
|
225
|
+
</div>
|
|
226
|
+
</template>
|
|
227
|
+
```
|