@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,151 @@
|
|
|
1
|
+
# CdsDateInput — 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 date field: a text field with a calendar icon that opens [CdsDatePicker](../cds-date-picker/api.md) in a dropdown menu on click. The date can be picked with the mouse or typed on the keyboard — the value arrives as a string in the `mask` format (`DD.MM.YYYY` by default).
|
|
7
|
+
|
|
8
|
+
## CdsDateInput
|
|
9
|
+
|
|
10
|
+
**Props**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Required | Description |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| `active` | `boolean \| undefined` | — | no | Active state of the field |
|
|
15
|
+
| `activeColor` | `string \| undefined` | — | no | Color of the component in its active state |
|
|
16
|
+
| `allowedDates` | `TCalendarAllowedDates \| undefined` | — | no | Array of dates available in the calendar. When a function is used, it receives the date in the YYYY/MM/DD format and must return true or false. |
|
|
17
|
+
| `allowedHours` | `number[] \| undefined` | — | no | Configures which hours are available for selection. |
|
|
18
|
+
| `allowedMinutes` | `number[] \| undefined` | — | no | Configures which minutes are available for selection. |
|
|
19
|
+
| `allowedSeconds` | `number[] \| undefined` | — | no | Configures which seconds are available for selection. |
|
|
20
|
+
| `allowedTime` | `((hr: number \| null, min: number \| null, sec: number \| null) => boolean) \| undefined` | — | no | Configures which time is available for selection. |
|
|
21
|
+
| `appendIcon` | `IconValue \| undefined` | — | no | Icon in the append slot, after the content |
|
|
22
|
+
| `appendInnerIcon` | `IconValue \| undefined` | — | no | Icon in the inner append slot, after the content of the field |
|
|
23
|
+
| `autocomplete` | `string \| undefined` | — | no | Helps to influence browser suggestions. The `suppress` value changes the name attribute of the fields, and `off` relies on the browser to stop suggesting values on its own. Any other value is passed to the built-in autocomplete of the corresponding element. |
|
|
24
|
+
| `autofocus` | `boolean \| undefined` | — | no | Enables autofocus |
|
|
25
|
+
| `baseColor` | `string \| undefined` | — | no | Color of the component in its inactive state |
|
|
26
|
+
| `bgColor` | `string \| undefined` | — | no | Background color of the component |
|
|
27
|
+
| `centerAffix` | `boolean \| undefined` | — | no | Vertically center the appendInner, prependInner, clearIcon and label elements. |
|
|
28
|
+
| `clearable` | `boolean \| undefined` | — | no | Shows the clear button |
|
|
29
|
+
| `clearIcon` | `IconValue \| undefined` | `'remove'` | no | Icon of the clear button |
|
|
30
|
+
| `color` | `string \| undefined` | — | no | Component color |
|
|
31
|
+
| `counter` | `string \| number \| boolean \| undefined` | — | no | Character counter. Accepts a boolean, a number or a string |
|
|
32
|
+
| `counterValue` | `number \| ((value: any) => number) \| undefined` | — | no | Custom counter value. Either a number or a function computing it from the current value |
|
|
33
|
+
| `defaultDate` | `string \| undefined` | — | no | Date used by default when the model is empty (in the YYYY/MM/DD format). |
|
|
34
|
+
| `defaultYearMonth` | `string \| undefined` | — | no | Displayed year/month in the YYYY/MM format. The current year/month by default when v-model is not set. |
|
|
35
|
+
| `description` | `string \| undefined` | — | no | Description of the component, shown under the label |
|
|
36
|
+
| `dirty` | `boolean \| undefined` | — | no | Marks that the value of the field was changed by the user |
|
|
37
|
+
| `disabled` | `boolean \| null \| undefined` | `null` | no | Disabled state |
|
|
38
|
+
| `displayFormat` | `string \| ((date: Date) => string) \| undefined` | — | no | Display format of the date in the field. A mask (`'D MMMM YYYY'`) or a function receiving the native `Date` and returning a string. By default the value is shown as is — in the `mask` format. |
|
|
39
|
+
| `emitImmediately` | `boolean \| undefined` | — | no | Emit the update:modelValue event right when the month or the year changes. Not available with multiple and range. |
|
|
40
|
+
| `error` | `boolean \| undefined` | — | no | Error state |
|
|
41
|
+
| `errorMessages` | `string \| readonly string[] \| null \| undefined` | `[]` | no | Puts the component into the error state and passes custom error messages. They are merged with any checks defined in the `rules` prop. This field does not trigger validation. |
|
|
42
|
+
| `events` | `TCalendarEvents \| undefined` | — | no | List of events shown in the calendar. Format: YYYY/MM/DD. |
|
|
43
|
+
| `eventsColor` | `TCalendarEventsColor \| undefined` | `'default'` | no | Color of the events in the calendar. |
|
|
44
|
+
| `firstDayOfWeek` | `string \| number \| undefined` | `1` | no | First day of the week (Monday by default). |
|
|
45
|
+
| `focused` | `boolean \| undefined` | — | no | Controls the focus state of the component. When `true`, the component is considered focused and may apply the corresponding styles or behavior. |
|
|
46
|
+
| `format12h` | `boolean \| undefined` | — | no | Shows the time in the 12-hour AM/PM format. |
|
|
47
|
+
| `header` | `boolean \| undefined` | — | no | Show the calendar header |
|
|
48
|
+
| `hideActions` | `boolean \| undefined` | `true` | no | Hide the confirmation buttons under the calendar — the chosen date is applied immediately. |
|
|
49
|
+
| `hideDetails` | `boolean \| "auto" \| undefined` | — | no | Hides the details block (messages and hints). With the 'auto' value the block is hidden when there are no messages |
|
|
50
|
+
| `hideMessages` | `boolean \| undefined` | — | no | Hide the messages under the input |
|
|
51
|
+
| `hideSiblingMonth` | `boolean \| undefined` | — | no | Hide the days of the neighboring months in the calendar. |
|
|
52
|
+
| `hint` | `string \| undefined` | — | no | Hint text shown under the input |
|
|
53
|
+
| `iconColor` | `string \| boolean \| undefined` | — | no | Icon color. Accepts a boolean or a color string |
|
|
54
|
+
| `id` | `string \| undefined` | — | no | Unique identifier of the component |
|
|
55
|
+
| `label` | `string \| undefined` | — | no | Label text of the component |
|
|
56
|
+
| `loading` | `string \| boolean \| undefined` | — | no | Loading indicator for the component |
|
|
57
|
+
| `locale` | `string \| TDateLocale \| undefined` | — | no | Locale for the dates. A locale name ('ru' \| 'en') or a `TDateLocale` object. The current locale from `useLocale` is taken by default, otherwise `ru`. |
|
|
58
|
+
| `location` | `Anchor \| undefined` | `'bottom start'` | no | Position of the dropdown calendar relative to the field. |
|
|
59
|
+
| `mask` | `string \| undefined` | `'DD.MM.YYYY'` | no | Date/time format |
|
|
60
|
+
| `maxErrors` | `string \| number \| undefined` | `1` | no | Maximum number of validation errors shown |
|
|
61
|
+
| `maxWidth` | `string \| number \| undefined` | — | no | Maximum component width |
|
|
62
|
+
| `maxYearMonth` | `string \| undefined` | — | no | Forbid navigating the calendar past the given maximum date in the YYYY/MM format. |
|
|
63
|
+
| `menu` | `boolean \| undefined` | — | no | State of the dropdown calendar (v-model:menu). |
|
|
64
|
+
| `menuProps` | `CdsMenuProps \| undefined` | — | no | Props passed through to the CdsMenu component of the dropdown calendar. |
|
|
65
|
+
| `messages` | `string \| readonly string[] \| undefined` | `[]` | no | Messages shown under the input |
|
|
66
|
+
| `minWidth` | `string \| number \| undefined` | — | no | Minimum component width |
|
|
67
|
+
| `minYearMonth` | `string \| undefined` | — | no | Forbid navigating the calendar before the given minimum date in the YYYY/MM format. |
|
|
68
|
+
| `modelModifiers` | `Record<string, boolean> \| undefined` | — | no | v-model modifiers passed by Vue to process the field value |
|
|
69
|
+
| `modelValue` | `TDateInputValue \| undefined` | `null` | no | Value of the field: a string in the `mask` format, a `{ from, to }` range object or an array of them with `multiple`/`range`. |
|
|
70
|
+
| `multiple` | `boolean \| undefined` | — | no | Allows selecting several dates. The v-model must be an array. |
|
|
71
|
+
| `name` | `string \| undefined` | — | no | Name of the input |
|
|
72
|
+
| `noUnset` | `boolean \| undefined` | — | no | Forbid resetting the date in the calendar. |
|
|
73
|
+
| `nowBtn` | `boolean \| undefined` | — | no | Shows the "Now" button. |
|
|
74
|
+
| `persistentClearable` | `boolean \| undefined` | — | no | Always show the clear button, not only on hover or focus |
|
|
75
|
+
| `persistentCounter` | `boolean \| undefined` | — | no | Always show the counter, not only while the field is in use |
|
|
76
|
+
| `persistentHint` | `boolean \| undefined` | — | no | Always show the hint, not only on focus |
|
|
77
|
+
| `persistentPlaceholder` | `boolean \| undefined` | — | no | Always show the placeholder instead of hiding it while the field is in use |
|
|
78
|
+
| `pickerProps` | `CdsDatePickerProps \| undefined` | — | no | Props passed through to the CdsDatePicker component. They win over the props of the field with the same name. |
|
|
79
|
+
| `placeholder` | `string \| undefined` | — | no | Placeholder text shown in an empty field |
|
|
80
|
+
| `prefix` | `string \| undefined` | — | no | Text prefix shown before the field value |
|
|
81
|
+
| `prependIcon` | `IconValue \| undefined` | — | no | Icon in the prepend slot, before the content |
|
|
82
|
+
| `prependInnerIcon` | `IconValue \| undefined` | `'calendar'` | no | Icon in the inner prepend slot, before the content of the field |
|
|
83
|
+
| `range` | `boolean \| undefined` | — | no | Allows selecting a range of dates. The v-model must be an array. |
|
|
84
|
+
| `readonly` | `boolean \| null \| undefined` | `null` | no | Read-only state |
|
|
85
|
+
| `reverse` | `boolean \| undefined` | — | no | Reverses the order of the elements inside the field |
|
|
86
|
+
| `role` | `string \| undefined` | — | no | ARIA role for the native input element |
|
|
87
|
+
| `rules` | `readonly ValidationRule[] \| undefined` | `[]` | no | Accepts an array of items of different types: functions, booleans and strings. Functions take the input value as an argument and must return either true / false, or a string with an error message. The input goes into the error state if a function returns false (or any value in the array is false) or is a string. |
|
|
88
|
+
| `size` | `number \| "xs" \| "sm" \| "md" \| "lg" \| "xl" \| undefined` | `'md'` | no | Size of the component |
|
|
89
|
+
| `suffix` | `string \| undefined` | — | no | Text suffix shown after the field value |
|
|
90
|
+
| `textColor` | `string \| undefined` | — | no | Text color of the component |
|
|
91
|
+
| `theme` | `string \| undefined` | — | no | Component theme |
|
|
92
|
+
| `timePickerProps` | `CdsTimePickerProps \| undefined` | — | no | Props passed through to the CdsTimePicker component. They win over the props of the field with the same name. |
|
|
93
|
+
| `todayBtn` | `boolean \| undefined` | — | no | Show the "Today" button in the calendar header |
|
|
94
|
+
| `type` | `string \| undefined` | `'text'` | no | Type of the native input |
|
|
95
|
+
| `updateOn` | `("enter" \| "blur")[] \| undefined` | `['blur', 'enter']` | no | Events that apply the manually entered value. An empty array forbids manual input — the field becomes read-only. |
|
|
96
|
+
| `validateOn` | `ValidateOn \| undefined` | — | no | Changes the type of the event that triggers validation |
|
|
97
|
+
| `validationValue` | `any` | — | no | Value used when applying the validation rules |
|
|
98
|
+
| `view` | `"Calendar" \| "Years" \| "Months" \| undefined` | `'Calendar'` | no | Default calendar view. Possible values: 'Calendar', 'Years', 'Months'. |
|
|
99
|
+
| `width` | `string \| number \| undefined` | — | no | Component width |
|
|
100
|
+
| `withSeconds` | `boolean \| undefined` | — | no | Adds seconds to the time selection. |
|
|
101
|
+
| `withTime` | `boolean \| undefined` | — | no | Adds a time selection (CdsTimePicker) under the calendar and appends the time to the mask. Works for a single date only — ignored with `multiple` and `range`. |
|
|
102
|
+
|
|
103
|
+
**Events**
|
|
104
|
+
|
|
105
|
+
| Name | Type | Description |
|
|
106
|
+
| --- | --- | --- |
|
|
107
|
+
| `cancel` | `[]` | The selection was cancelled by the cancel button. |
|
|
108
|
+
| `navigation` | `[payload: { year: number \| undefined; month: number \| undefined; }]` | Navigation to another month or year in the calendar. |
|
|
109
|
+
| `rangeEnd` | `[payload: { from: Partial<IRawDate>; to: Partial<IRawDate>; }]` | End of a date range selection. |
|
|
110
|
+
| `rangeStart` | `[value: Partial<IRawDate>]` | Start of a date range selection. |
|
|
111
|
+
| `save` | `[value: TDateInputValue]` | The value was confirmed — by a selection in the calendar or by the save button. |
|
|
112
|
+
| `update:focused` | `[focused: boolean]` | The focus state of the field changed (v-model:focused). |
|
|
113
|
+
| `update:menu` | `[value: boolean]` | The state of the dropdown calendar changed (v-model:menu). |
|
|
114
|
+
| `update:modelValue` | `[value: TDateInputValue]` | The value of the field changed (v-model). |
|
|
115
|
+
|
|
116
|
+
**Slots**
|
|
117
|
+
|
|
118
|
+
| Name | Type | Description |
|
|
119
|
+
| --- | --- | --- |
|
|
120
|
+
| `actions` | `CdsDateInputActionsSlot` | Confirmation buttons under the calendar (relevant with `hide-actions="false"`). |
|
|
121
|
+
| `append` | `CdsInputSlot` | Adds an element after the input |
|
|
122
|
+
| `append-inner` | `CdsInputDefaultSlot` | Slot added at the end of the input |
|
|
123
|
+
| `clear` | `CdsInputDefaultSlot & { props: Record<string, any>; }` | Slot for a custom clear icon (shown when the clearable prop is true). |
|
|
124
|
+
| `description` | `{ description: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsDescription component |
|
|
125
|
+
| `details` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
|
|
126
|
+
| `label` | `{ label: string \| undefined; props: Record<string, any>; }` | Default slot of the CdsLabel component |
|
|
127
|
+
| `loader` | `LoaderSlotProps` | Slot for a custom loader (shown when the loading prop is true). |
|
|
128
|
+
| `message` | `CdsMessagesSlots` | Slot for customizing the content of a message |
|
|
129
|
+
| `messages` | `CdsInputSlot` | Slot for custom content that lets you customize how the messages are displayed |
|
|
130
|
+
| `picker-description` | `{ year: string \| number \| undefined; }` | Description in the calendar header. |
|
|
131
|
+
| `picker-title` | `{ date: string; }` | Title in the calendar header. |
|
|
132
|
+
| `prepend` | `CdsInputSlot` | Adds an element before the input |
|
|
133
|
+
| `prepend-inner` | `CdsInputDefaultSlot` | Slot added at the start of the input |
|
|
134
|
+
|
|
135
|
+
**Exposed**
|
|
136
|
+
|
|
137
|
+
| Name | Type | Description |
|
|
138
|
+
| --- | --- | --- |
|
|
139
|
+
| `cancel` | `() => void` | Cancels the selection, restores the previous value and closes the popup. |
|
|
140
|
+
| `controlRef` | `HTMLElement \| undefined` | Ref to the control of the input |
|
|
141
|
+
| `fieldIconColor` | `string \| undefined` | Icon color |
|
|
142
|
+
| `isDirty` | `boolean` | Whether the input is dirty |
|
|
143
|
+
| `isDisabled` | `boolean` | Whether the input is disabled |
|
|
144
|
+
| `isPure` | `boolean` | Whether the input is pure |
|
|
145
|
+
| `isReadonly` | `boolean` | Whether the input is read-only |
|
|
146
|
+
| `isValid` | `boolean \| null` | Whether the input is valid |
|
|
147
|
+
| `isValidating` | `boolean` | Whether the input is being validated |
|
|
148
|
+
| `reset` | `() => Promise<void>` | Resets the input to its initial state |
|
|
149
|
+
| `resetValidation` | `() => Promise<void>` | Resets the validation of the input |
|
|
150
|
+
| `save` | `() => void` | Confirms the date chosen in the calendar and closes the popup. |
|
|
151
|
+
| `validate` | `(silent?: boolean) => Promise<string[]>` | Validates the input |
|
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
# CdsDateInput — 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 date field: a text field with a calendar icon that opens [CdsDatePicker](../cds-date-picker/api.md) in a dropdown menu on click. The date can be picked with the mouse or typed on the keyboard — the value arrives as a string in the `mask` format (`DD.MM.YYYY` by default).
|
|
7
|
+
|
|
8
|
+
## Value and format
|
|
9
|
+
|
|
10
|
+
The date arrives in `v-model` as a string in the `mask` format. By default the placeholder shows the mask itself, so there is no need to state the format separately.
|
|
11
|
+
|
|
12
|
+
**Example (SFC):**
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
17
|
+
import { ref } from 'vue';
|
|
18
|
+
|
|
19
|
+
const date = ref('22.02.2022');
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<div class="flex flex-col items-center gap-2">
|
|
24
|
+
<CdsDateInput v-model="date" class="w-[250px]" label="Дата" clearable />
|
|
25
|
+
|
|
26
|
+
<span class="text-200 text-content-secondary">v-model: {{ date ?? '—' }}</span>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Value and format
|
|
32
|
+
|
|
33
|
+
`display-format` changes only what the user sees: the model still keeps a string in `mask`. It accepts a mask (`D MMMM YYYY`) or a function receiving the native `Date`. If the date has to be stored differently — in ISO, for example — change `mask`: it defines both the storage and the parsing of the manual input.
|
|
34
|
+
|
|
35
|
+
**Example (SFC):**
|
|
36
|
+
|
|
37
|
+
```vue
|
|
38
|
+
<script setup lang="ts">
|
|
39
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
40
|
+
import { ref } from 'vue';
|
|
41
|
+
|
|
42
|
+
const short = ref('22.02.2022');
|
|
43
|
+
const long = ref('22.02.2022');
|
|
44
|
+
const iso = ref('2022-02-22');
|
|
45
|
+
|
|
46
|
+
// Функция получает нативную дату и возвращает готовую строку.
|
|
47
|
+
const relative = (date: Date) => new Intl.DateTimeFormat('ru', { dateStyle: 'full' }).format(date).replace(' г.', '');
|
|
48
|
+
</script>
|
|
49
|
+
|
|
50
|
+
<template>
|
|
51
|
+
<div class="flex flex-col items-center gap-2">
|
|
52
|
+
<CdsDateInput v-model="short" class="w-[250px]" label="Маска по умолчанию" />
|
|
53
|
+
|
|
54
|
+
<CdsDateInput v-model="long" class="w-[250px]" label="displayFormat строкой" display-format="D MMMM YYYY" />
|
|
55
|
+
|
|
56
|
+
<CdsDateInput v-model="iso" class="w-[250px]" label="Другая mask" mask="YYYY-MM-DD" />
|
|
57
|
+
|
|
58
|
+
<CdsDateInput v-model="short" class="w-[250px]" label="displayFormat функцией" :display-format="relative" />
|
|
59
|
+
</div>
|
|
60
|
+
</template>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Date and time
|
|
64
|
+
|
|
65
|
+
With the time on, the menu does not close on a click on a date: the user is still picking the hours. If you need an explicit finish, add `:hide-actions="false"` — the buttons will stand under the time picker.
|
|
66
|
+
|
|
67
|
+
**Example (SFC):**
|
|
68
|
+
|
|
69
|
+
```vue
|
|
70
|
+
<script setup lang="ts">
|
|
71
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
72
|
+
import { ref } from 'vue';
|
|
73
|
+
|
|
74
|
+
const dateTime = ref('22.02.2022 12:35');
|
|
75
|
+
const withSeconds = ref('22.02.2022 12:35:00');
|
|
76
|
+
const workHours = ref('22.02.2022 10:00');
|
|
77
|
+
|
|
78
|
+
// Приём заявок только в рабочие часы.
|
|
79
|
+
const allowedHours = Array.from({ length: 9 }, (_, i) => i + 9);
|
|
80
|
+
</script>
|
|
81
|
+
|
|
82
|
+
<template>
|
|
83
|
+
<div class="flex flex-col items-center gap-2">
|
|
84
|
+
<CdsDateInput v-model="dateTime" class="w-[250px]" label="Дата и время" with-time clearable />
|
|
85
|
+
|
|
86
|
+
<CdsDateInput
|
|
87
|
+
v-model="withSeconds"
|
|
88
|
+
class="w-[250px]"
|
|
89
|
+
label="С секундами и кнопкой «Сейчас»"
|
|
90
|
+
with-time
|
|
91
|
+
with-seconds
|
|
92
|
+
now-btn
|
|
93
|
+
/>
|
|
94
|
+
|
|
95
|
+
<CdsDateInput
|
|
96
|
+
v-model="workHours"
|
|
97
|
+
class="w-[250px]"
|
|
98
|
+
label="Только рабочие часы"
|
|
99
|
+
with-time
|
|
100
|
+
:allowed-hours="allowedHours"
|
|
101
|
+
:hide-actions="false"
|
|
102
|
+
/>
|
|
103
|
+
|
|
104
|
+
<span class="text-200 text-content-secondary">v-model: {{ dateTime }}</span>
|
|
105
|
+
</div>
|
|
106
|
+
</template>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Several dates and a range
|
|
110
|
+
|
|
111
|
+
`multiple` allows marking several dates — the model becomes an array of strings. `range` switches the calendar to picking a period: the value arrives as a `{ from, to }` object, and the menu stays open until both bounds are chosen. A set of dates and a range have no common time, so `with-time` does not work with them.
|
|
112
|
+
|
|
113
|
+
**Example (SFC):**
|
|
114
|
+
|
|
115
|
+
```vue
|
|
116
|
+
<script setup lang="ts">
|
|
117
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
118
|
+
import { ref } from 'vue';
|
|
119
|
+
|
|
120
|
+
const days = ref(['05.02.2022', '12.02.2022']);
|
|
121
|
+
const period = ref({ from: '07.02.2022', to: '18.02.2022' });
|
|
122
|
+
</script>
|
|
123
|
+
|
|
124
|
+
<template>
|
|
125
|
+
<div class="flex flex-col items-center gap-2">
|
|
126
|
+
<CdsDateInput v-model="days" class="w-[250px]" label="Несколько дат" multiple clearable />
|
|
127
|
+
|
|
128
|
+
<CdsDateInput v-model="period" class="w-[250px]" label="Период" range clearable />
|
|
129
|
+
|
|
130
|
+
<span class="text-200 text-content-secondary">{{ JSON.stringify({ days, period }) }}</span>
|
|
131
|
+
</div>
|
|
132
|
+
</template>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Confirmation buttons
|
|
136
|
+
|
|
137
|
+
By default the chosen date is applied at once and the menu closes. Pass `:hide-actions="false"` — and the choice becomes a draft: it gets into the model only after the "OK" button, while "Cancel" restores the previous value. The component emits `save` and `cancel`.
|
|
138
|
+
|
|
139
|
+
**Example (SFC):**
|
|
140
|
+
|
|
141
|
+
```vue
|
|
142
|
+
<script setup lang="ts">
|
|
143
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
144
|
+
import { ref } from 'vue';
|
|
145
|
+
|
|
146
|
+
const date = ref('22.02.2022');
|
|
147
|
+
const lastEvent = ref('—');
|
|
148
|
+
</script>
|
|
149
|
+
|
|
150
|
+
<template>
|
|
151
|
+
<div class="flex flex-col items-center gap-2">
|
|
152
|
+
<CdsDateInput
|
|
153
|
+
v-model="date"
|
|
154
|
+
class="w-[250px]"
|
|
155
|
+
label="Дата с подтверждением"
|
|
156
|
+
:hide-actions="false"
|
|
157
|
+
@save="lastEvent = `save: ${$event}`"
|
|
158
|
+
@cancel="lastEvent = 'cancel'"
|
|
159
|
+
/>
|
|
160
|
+
|
|
161
|
+
<span class="text-200 text-content-secondary">Последнее событие: {{ lastEvent }}</span>
|
|
162
|
+
</div>
|
|
163
|
+
</template>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Confirmation buttons
|
|
167
|
+
|
|
168
|
+
The `actions` slot replaces the pair of buttons with your own: it receives `save`, `cancel` and `isPristine` — the flag telling that nothing was changed in the calendar.
|
|
169
|
+
|
|
170
|
+
**Example (SFC):**
|
|
171
|
+
|
|
172
|
+
```vue
|
|
173
|
+
<script setup lang="ts">
|
|
174
|
+
import { CdsButton, CdsDateInput } from '@central-design-system/components';
|
|
175
|
+
import { ref } from 'vue';
|
|
176
|
+
|
|
177
|
+
const date = ref('22.02.2022');
|
|
178
|
+
</script>
|
|
179
|
+
|
|
180
|
+
<template>
|
|
181
|
+
<div class="flex flex-col items-center">
|
|
182
|
+
<CdsDateInput v-model="date" class="w-[250px]" label="Дата" :hide-actions="false">
|
|
183
|
+
<template #actions="{ save, cancel, isPristine }">
|
|
184
|
+
<div class="flex px-4 pb-4 gap-2 justify-end">
|
|
185
|
+
<CdsButton appearance="tertiary" size="sm" text="Закрыть" @click="cancel" />
|
|
186
|
+
<CdsButton size="sm" text="Выбрать дату" :disabled="isPristine" @click="save" />
|
|
187
|
+
</div>
|
|
188
|
+
</template>
|
|
189
|
+
</CdsDateInput>
|
|
190
|
+
</div>
|
|
191
|
+
</template>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Manual input
|
|
195
|
+
|
|
196
|
+
The component does not impose an input mask — add one with a directive, using the lightweight (2.5 KB) [Maska](https://github.com/beholdr/maska) library, for example.
|
|
197
|
+
|
|
198
|
+
**Example (SFC):**
|
|
199
|
+
|
|
200
|
+
```vue
|
|
201
|
+
<script setup lang="ts">
|
|
202
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
203
|
+
import { vMaska } from 'maska/vue';
|
|
204
|
+
import { ref } from 'vue';
|
|
205
|
+
|
|
206
|
+
const onBlur = ref('22.02.2022');
|
|
207
|
+
const onEnter = ref('22.02.2022');
|
|
208
|
+
const pickerOnly = ref('22.02.2022');
|
|
209
|
+
</script>
|
|
210
|
+
|
|
211
|
+
<template>
|
|
212
|
+
<div class="flex flex-col items-center gap-2">
|
|
213
|
+
<CdsDateInput v-model="onBlur" v-maska="'##.##.####'" class="w-[250px]" label="По уходу фокуса" />
|
|
214
|
+
|
|
215
|
+
<CdsDateInput
|
|
216
|
+
v-model="onEnter"
|
|
217
|
+
v-maska="'##.##.####'"
|
|
218
|
+
class="w-[250px]"
|
|
219
|
+
label="Только по Enter"
|
|
220
|
+
:update-on="['enter']"
|
|
221
|
+
/>
|
|
222
|
+
|
|
223
|
+
<CdsDateInput v-model="pickerOnly" class="w-[250px]" label="Только календарь" :update-on="[]" />
|
|
224
|
+
</div>
|
|
225
|
+
</template>
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Date restrictions
|
|
229
|
+
|
|
230
|
+
The calendar props are available right on the field: `allowed-dates` leaves only the needed days available, `min-year-month` and `max-year-month` do not let the navigation go beyond the range.
|
|
231
|
+
|
|
232
|
+
**Example (SFC):**
|
|
233
|
+
|
|
234
|
+
```vue
|
|
235
|
+
<script setup lang="ts">
|
|
236
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
237
|
+
import { ref } from 'vue';
|
|
238
|
+
|
|
239
|
+
const date = ref<string | null>(null);
|
|
240
|
+
|
|
241
|
+
const pad = (value: number) => String(value).padStart(2, '0');
|
|
242
|
+
const now = new Date();
|
|
243
|
+
const last = new Date(now.getFullYear(), now.getMonth() + 2, 1);
|
|
244
|
+
const min = `${now.getFullYear()}/${pad(now.getMonth() + 1)}`;
|
|
245
|
+
const max = `${last.getFullYear()}/${pad(last.getMonth() + 1)}`;
|
|
246
|
+
|
|
247
|
+
// Календарь отдаёт дату строкой YYYY/MM/DD.
|
|
248
|
+
const weekdaysOnly = (hash: string) => {
|
|
249
|
+
const [year, month, day] = hash.split('/').map(Number);
|
|
250
|
+
const weekday = new Date(year, month - 1, day).getDay();
|
|
251
|
+
|
|
252
|
+
return weekday !== 0 && weekday !== 6;
|
|
253
|
+
};
|
|
254
|
+
</script>
|
|
255
|
+
|
|
256
|
+
<template>
|
|
257
|
+
<div class="flex flex-col items-center gap-2">
|
|
258
|
+
<CdsDateInput
|
|
259
|
+
v-model="date"
|
|
260
|
+
class="w-[250px]"
|
|
261
|
+
label="Только будни"
|
|
262
|
+
hint="Навигация ограничена тремя месяцами"
|
|
263
|
+
persistent-hint
|
|
264
|
+
:allowed-dates="weekdaysOnly"
|
|
265
|
+
:min-year-month="min"
|
|
266
|
+
:max-year-month="max"
|
|
267
|
+
clearable
|
|
268
|
+
/>
|
|
269
|
+
</div>
|
|
270
|
+
</template>
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## States
|
|
274
|
+
|
|
275
|
+
`disabled` blocks both the field and the calendar, `readonly` forbids changes but keeps focus and copying, `error-messages` shows an error under the field.
|
|
276
|
+
|
|
277
|
+
**Example (SFC):**
|
|
278
|
+
|
|
279
|
+
```vue
|
|
280
|
+
<script setup lang="ts">
|
|
281
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
282
|
+
</script>
|
|
283
|
+
|
|
284
|
+
<template>
|
|
285
|
+
<div class="flex flex-col items-center gap-2">
|
|
286
|
+
<CdsDateInput class="w-[250px]" label="Обычное" model-value="22.02.2022" />
|
|
287
|
+
|
|
288
|
+
<CdsDateInput class="w-[250px]" label="Заблокировано" model-value="22.02.2022" disabled />
|
|
289
|
+
|
|
290
|
+
<CdsDateInput class="w-[250px]" label="Только чтение" model-value="22.02.2022" readonly />
|
|
291
|
+
|
|
292
|
+
<CdsDateInput class="w-[250px]" label="Ошибка" model-value="22.02.2022" error-messages="Дата уже занята" />
|
|
293
|
+
</div>
|
|
294
|
+
</template>
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## The calendar and the menu
|
|
298
|
+
|
|
299
|
+
`picker-props` passes settings to the calendar — a header with the summary of the choice, for example, and `menu-props` and `location` control the dropdown menu.
|
|
300
|
+
|
|
301
|
+
**Example (SFC):**
|
|
302
|
+
|
|
303
|
+
```vue
|
|
304
|
+
<script setup lang="ts">
|
|
305
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
306
|
+
import { ref } from 'vue';
|
|
307
|
+
|
|
308
|
+
const withHeader = ref('22.02.2022');
|
|
309
|
+
const above = ref('22.02.2022');
|
|
310
|
+
</script>
|
|
311
|
+
|
|
312
|
+
<template>
|
|
313
|
+
<div class="flex flex-col items-center gap-2">
|
|
314
|
+
<CdsDateInput
|
|
315
|
+
v-model="withHeader"
|
|
316
|
+
class="w-[250px]"
|
|
317
|
+
label="Шапка и кнопка «Сегодня»"
|
|
318
|
+
:picker-props="{ header: true, todayBtn: true }"
|
|
319
|
+
/>
|
|
320
|
+
|
|
321
|
+
<CdsDateInput
|
|
322
|
+
v-model="above"
|
|
323
|
+
class="w-[250px]"
|
|
324
|
+
label="Календарь сверху"
|
|
325
|
+
location="top start"
|
|
326
|
+
:menu-props="{ offset: 8 }"
|
|
327
|
+
/>
|
|
328
|
+
</div>
|
|
329
|
+
</template>
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
## A reporting period
|
|
333
|
+
|
|
334
|
+
The period lives in one field: `range` gives `{ from, to }`, `:hide-actions="false"` turns the choice into a draft, and the preset buttons write into the same model — the calendar picks their value up.
|
|
335
|
+
|
|
336
|
+
**Example (SFC):**
|
|
337
|
+
|
|
338
|
+
```vue
|
|
339
|
+
<script setup lang="ts">
|
|
340
|
+
import { CdsButton, CdsDateInput } from '@central-design-system/components';
|
|
341
|
+
import { ref } from 'vue';
|
|
342
|
+
|
|
343
|
+
type Period = { from: string; to: string };
|
|
344
|
+
|
|
345
|
+
const period = ref<Period | null>({ from: '01.02.2022', to: '28.02.2022' });
|
|
346
|
+
const applied = ref<Period | null>(period.value);
|
|
347
|
+
|
|
348
|
+
const pad = (value: number) => String(value).padStart(2, '0');
|
|
349
|
+
const format = (date: Date) => `${pad(date.getDate())}.${pad(date.getMonth() + 1)}.${date.getFullYear()}`;
|
|
350
|
+
|
|
351
|
+
// Быстрый пресет: последние N дней по сегодняшний день.
|
|
352
|
+
function setLastDays(days: number) {
|
|
353
|
+
const to = new Date();
|
|
354
|
+
const from = new Date(to.getFullYear(), to.getMonth(), to.getDate() - days + 1);
|
|
355
|
+
|
|
356
|
+
period.value = { from: format(from), to: format(to) };
|
|
357
|
+
}
|
|
358
|
+
</script>
|
|
359
|
+
|
|
360
|
+
<template>
|
|
361
|
+
<div class="flex flex-col gap-2 w-[250px] m-auto">
|
|
362
|
+
<CdsDateInput v-model="period" label="Отчётный период" range clearable :hide-actions="false" />
|
|
363
|
+
|
|
364
|
+
<div class="flex justify-center gap-1">
|
|
365
|
+
<CdsButton appearance="tertiary" size="sm" text="7 дней" @click="setLastDays(7)" />
|
|
366
|
+
<CdsButton appearance="tertiary" size="sm" text="30 дней" @click="setLastDays(30)" />
|
|
367
|
+
</div>
|
|
368
|
+
|
|
369
|
+
<CdsButton text="Сформировать отчёт" :disabled="!period" @click="applied = period" />
|
|
370
|
+
|
|
371
|
+
<span class="text-200 text-center text-content-secondary">
|
|
372
|
+
{{ applied ? `Отчёт за ${applied.from} — ${applied.to}` : 'Период не выбран' }}
|
|
373
|
+
</span>
|
|
374
|
+
</div>
|
|
375
|
+
</template>
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
## A delivery date
|
|
379
|
+
|
|
380
|
+
The restrictions work together: `allowed-dates` leaves only the weekdays, `min-year-month` and `max-year-month` — the nearest two months. Manual input is turned off here on purpose: an unavailable day cannot be typed in, and `display-format` shows the date in words.
|
|
381
|
+
|
|
382
|
+
**Example (SFC):**
|
|
383
|
+
|
|
384
|
+
```vue
|
|
385
|
+
<script setup lang="ts">
|
|
386
|
+
import { CdsDateInput } from '@central-design-system/components';
|
|
387
|
+
import { ref } from 'vue';
|
|
388
|
+
|
|
389
|
+
const date = ref<string | null>(null);
|
|
390
|
+
|
|
391
|
+
const pad = (value: number) => String(value).padStart(2, '0');
|
|
392
|
+
const now = new Date();
|
|
393
|
+
const first = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
394
|
+
const last = new Date(now.getFullYear(), now.getMonth() + 2, 0);
|
|
395
|
+
|
|
396
|
+
const min = `${first.getFullYear()}/${pad(first.getMonth() + 1)}`;
|
|
397
|
+
const max = `${last.getFullYear()}/${pad(last.getMonth() + 1)}`;
|
|
398
|
+
|
|
399
|
+
// Доставка ездит по будням в ближайшие два месяца.
|
|
400
|
+
const allowedDates = (hash: string) => {
|
|
401
|
+
const [year, month, day] = hash.split('/').map(Number);
|
|
402
|
+
const candidate = new Date(year, month - 1, day);
|
|
403
|
+
const weekday = candidate.getDay();
|
|
404
|
+
|
|
405
|
+
return weekday !== 0 && weekday !== 6 && candidate >= first && candidate <= last;
|
|
406
|
+
};
|
|
407
|
+
</script>
|
|
408
|
+
|
|
409
|
+
<template>
|
|
410
|
+
<div class="flex flex-col gap-2 w-[250px] m-auto">
|
|
411
|
+
<CdsDateInput
|
|
412
|
+
v-model="date"
|
|
413
|
+
label="Дата доставки"
|
|
414
|
+
display-format="D MMMM YYYY"
|
|
415
|
+
:allowed-dates="allowedDates"
|
|
416
|
+
:min-year-month="min"
|
|
417
|
+
:max-year-month="max"
|
|
418
|
+
:update-on="[]"
|
|
419
|
+
clearable
|
|
420
|
+
/>
|
|
421
|
+
|
|
422
|
+
<span class="text-200 text-center text-content-secondary">
|
|
423
|
+
{{ date ? `Привезём ${date} с 10:00 до 18:00` : 'Выберите дату доставки' }}
|
|
424
|
+
</span>
|
|
425
|
+
</div>
|
|
426
|
+
</template>
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
## A date in a form
|
|
430
|
+
|
|
431
|
+
The field takes part in [CdsForm](../cds-form/api.md) on a par with the others: `rules` receive the same string value that lies in the model, so a "not in the past" check is a plain function. Limiting the navigation through `min-year-month` backs the rule up rather than replaces it.
|
|
432
|
+
|
|
433
|
+
**Example (SFC):**
|
|
434
|
+
|
|
435
|
+
```vue
|
|
436
|
+
<script setup lang="ts">
|
|
437
|
+
import { CdsDateInput, CdsForm, CdsTextInput } from '@central-design-system/components';
|
|
438
|
+
import { ref } from 'vue';
|
|
439
|
+
|
|
440
|
+
const name = ref('');
|
|
441
|
+
const date = ref<string | null>(null);
|
|
442
|
+
|
|
443
|
+
const pad = (value: number) => String(value).padStart(2, '0');
|
|
444
|
+
const now = new Date();
|
|
445
|
+
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
446
|
+
|
|
447
|
+
const rules = {
|
|
448
|
+
required: (value: unknown) => !!value || 'Обязательное поле',
|
|
449
|
+
future: (value: string | null) => {
|
|
450
|
+
if (!value) return true;
|
|
451
|
+
|
|
452
|
+
const [day, month, year] = value.split('.').map(Number);
|
|
453
|
+
|
|
454
|
+
return new Date(year, month - 1, day) >= today || 'Дата не может быть в прошлом';
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
const minYearMonth = `${today.getFullYear()}/${pad(today.getMonth() + 1)}`;
|
|
459
|
+
</script>
|
|
460
|
+
|
|
461
|
+
<template>
|
|
462
|
+
<CdsForm class="flex flex-col gap-2 w-[250px] m-auto">
|
|
463
|
+
<CdsTextInput
|
|
464
|
+
v-model="name"
|
|
465
|
+
label="Название встречи"
|
|
466
|
+
placeholder="Введите название встречи"
|
|
467
|
+
:rules="[rules.required]"
|
|
468
|
+
/>
|
|
469
|
+
|
|
470
|
+
<CdsDateInput
|
|
471
|
+
v-model="date"
|
|
472
|
+
label="Дата встречи"
|
|
473
|
+
:rules="[rules.required, rules.future]"
|
|
474
|
+
:min-year-month="minYearMonth"
|
|
475
|
+
clearable
|
|
476
|
+
/>
|
|
477
|
+
</CdsForm>
|
|
478
|
+
</template>
|
|
479
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# CdsDateInput — 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
|
+
| Unavailable dates are turned off through allowed-dates — a past day cannot be picked. | Any day can be picked, and the user learns about the restriction from an error only after submitting the form. |
|
|
9
|
+
| One period in one field: the bounds are visible side by side and are edited together. | Two separate fields let the end be set before the start — that has to be checked by hand. |
|
|
10
|
+
| The input mask is hinted in the placeholder, and the field accepts both the keyboard and the calendar. | Manual input is turned off for no reason: a date from an email has to be hunted for in the calendar by clicking. |
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# CdsDateInput — 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
|
+
## _CdsDateInput.variables.scss
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
// Токены 3-го уровня: только CSS-переменные дизайн-системы, без хардкода.
|
|
11
|
+
$date-input-actions-gap: var(--cds-spacing-200) !default;
|
|
12
|
+
$date-input-actions-justify: flex-end !default;
|
|
13
|
+
|
|
14
|
+
// Совпадает с внутренним отступом календаря, чтобы кнопки встали по его сетке.
|
|
15
|
+
$date-input-actions-padding: 0 var(--cds-spacing-300) var(--cds-spacing-300) !default;
|
|
16
|
+
```
|