@synergy-design-system/mcp 0.1.0 → 1.0.0
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/CHANGELOG.md +1 -0
- package/README.md +539 -3
- package/dist/bin/create-checksum.d.ts +2 -0
- package/dist/bin/create-checksum.js +23 -0
- package/dist/bin/start.d.ts +2 -0
- package/dist/bin/start.js +8 -0
- package/dist/build/assets.d.ts +4 -0
- package/dist/build/assets.js +57 -0
- package/dist/build/build.d.ts +1 -0
- package/dist/build/build.js +33 -0
- package/dist/build/components.d.ts +4 -0
- package/dist/build/components.js +132 -0
- package/dist/build/frameworks.d.ts +4 -0
- package/dist/build/frameworks.js +61 -0
- package/dist/build/static.d.ts +4 -0
- package/dist/build/static.js +52 -0
- package/dist/build/styles.d.ts +4 -0
- package/dist/build/styles.js +58 -0
- package/dist/build/tokens.d.ts +4 -0
- package/dist/build/tokens.js +59 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.js +20 -0
- package/dist/tools/asset-info.d.ts +8 -0
- package/dist/tools/asset-info.js +108 -0
- package/dist/tools/asset-list.d.ts +6 -0
- package/dist/tools/asset-list.js +40 -0
- package/dist/tools/component-info.d.ts +6 -0
- package/dist/tools/component-info.js +35 -0
- package/dist/tools/component-list.d.ts +7 -0
- package/dist/tools/component-list.js +42 -0
- package/dist/tools/davinci-migration.d.ts +3 -0
- package/dist/tools/davinci-migration.js +66 -0
- package/dist/tools/framework-info.d.ts +7 -0
- package/dist/tools/framework-info.js +59 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.js +13 -0
- package/dist/tools/migration-info.d.ts +6 -0
- package/dist/tools/migration-info.js +27 -0
- package/dist/tools/styles-info.d.ts +7 -0
- package/dist/tools/styles-info.js +28 -0
- package/dist/tools/styles-list.d.ts +7 -0
- package/dist/tools/styles-list.js +42 -0
- package/dist/tools/template-info.d.ts +6 -0
- package/dist/tools/template-info.js +34 -0
- package/dist/tools/template-list.d.ts +7 -0
- package/dist/tools/template-list.js +42 -0
- package/dist/tools/tokens.d.ts +7 -0
- package/dist/tools/tokens.js +24 -0
- package/dist/tools/version.d.ts +7 -0
- package/dist/tools/version.js +51 -0
- package/dist/utilities/assets.d.ts +1 -0
- package/dist/utilities/assets.js +3 -0
- package/dist/utilities/checksum.d.ts +36 -0
- package/dist/utilities/checksum.js +93 -0
- package/dist/utilities/components.d.ts +25 -0
- package/dist/utilities/components.js +86 -0
- package/dist/utilities/config.d.ts +76 -0
- package/dist/utilities/config.js +77 -0
- package/dist/utilities/file.d.ts +12 -0
- package/dist/utilities/file.js +31 -0
- package/dist/utilities/index.d.ts +12 -0
- package/dist/utilities/index.js +12 -0
- package/dist/utilities/metadata.d.ts +28 -0
- package/dist/utilities/metadata.js +57 -0
- package/dist/utilities/migration.d.ts +1 -0
- package/dist/utilities/migration.js +10 -0
- package/dist/utilities/stdio.d.ts +14 -0
- package/dist/utilities/stdio.js +60 -0
- package/dist/utilities/storybook/build-docs.d.ts +2 -0
- package/dist/utilities/storybook/build-docs.js +42 -0
- package/dist/utilities/storybook/configs.d.ts +13 -0
- package/dist/utilities/storybook/configs.js +85 -0
- package/dist/utilities/storybook/docs-scraper.d.ts +26 -0
- package/dist/utilities/storybook/docs-scraper.js +97 -0
- package/dist/utilities/storybook/index.d.ts +5 -0
- package/dist/utilities/storybook/index.js +4 -0
- package/dist/utilities/storybook/scraper.d.ts +14 -0
- package/dist/utilities/storybook/scraper.js +196 -0
- package/dist/utilities/storybook/storybook-manager.d.ts +29 -0
- package/dist/utilities/storybook/storybook-manager.js +139 -0
- package/dist/utilities/storybook/types.d.ts +22 -0
- package/dist/utilities/storybook/types.js +1 -0
- package/dist/utilities/styles.d.ts +6 -0
- package/dist/utilities/styles.js +24 -0
- package/dist/utilities/templates.d.ts +12 -0
- package/dist/utilities/templates.js +28 -0
- package/dist/utilities/tokens.d.ts +1 -0
- package/dist/utilities/tokens.js +21 -0
- package/dist/utilities/version.d.ts +10 -0
- package/dist/utilities/version.js +21 -0
- package/metadata/checksum.txt +1 -0
- package/metadata/davinci-migration/migration-guide.md +1859 -0
- package/metadata/packages/angular/LIMITATIONS.md +32 -0
- package/metadata/packages/angular/README.md +393 -0
- package/metadata/packages/assets/CHANGELOG.md +189 -0
- package/metadata/packages/assets/README.md +78 -0
- package/metadata/packages/components/components/syn-accordion/component.angular.ts +80 -0
- package/metadata/packages/components/components/syn-accordion/component.react.ts +30 -0
- package/metadata/packages/components/components/syn-accordion/component.styles.ts +15 -0
- package/metadata/packages/components/components/syn-accordion/component.ts +111 -0
- package/metadata/packages/components/components/syn-accordion/component.vue +64 -0
- package/metadata/packages/components/components/syn-alert/component.angular.ts +158 -0
- package/metadata/packages/components/components/syn-alert/component.custom.styles.ts +90 -0
- package/metadata/packages/components/components/syn-alert/component.react.ts +60 -0
- package/metadata/packages/components/components/syn-alert/component.styles.ts +110 -0
- package/metadata/packages/components/components/syn-alert/component.ts +324 -0
- package/metadata/packages/components/components/syn-alert/component.vue +130 -0
- package/metadata/packages/components/components/syn-badge/component.angular.ts +53 -0
- package/metadata/packages/components/components/syn-badge/component.custom.styles.ts +61 -0
- package/metadata/packages/components/components/syn-badge/component.react.ts +29 -0
- package/metadata/packages/components/components/syn-badge/component.styles.ts +59 -0
- package/metadata/packages/components/components/syn-badge/component.ts +65 -0
- package/metadata/packages/components/components/syn-badge/component.vue +53 -0
- package/metadata/packages/components/components/syn-breadcrumb/component.angular.ts +58 -0
- package/metadata/packages/components/components/syn-breadcrumb/component.custom.styles.ts +5 -0
- package/metadata/packages/components/components/syn-breadcrumb/component.react.ts +32 -0
- package/metadata/packages/components/components/syn-breadcrumb/component.styles.ts +18 -0
- package/metadata/packages/components/components/syn-breadcrumb/component.ts +110 -0
- package/metadata/packages/components/components/syn-breadcrumb/component.vue +58 -0
- package/metadata/packages/components/components/syn-breadcrumb-item/component.angular.ts +88 -0
- package/metadata/packages/components/components/syn-breadcrumb-item/component.custom.styles.ts +74 -0
- package/metadata/packages/components/components/syn-breadcrumb-item/component.react.ts +37 -0
- package/metadata/packages/components/components/syn-breadcrumb-item/component.styles.ts +95 -0
- package/metadata/packages/components/components/syn-breadcrumb-item/component.ts +139 -0
- package/metadata/packages/components/components/syn-breadcrumb-item/component.vue +76 -0
- package/metadata/packages/components/components/syn-button/component.angular.ts +318 -0
- package/metadata/packages/components/components/syn-button/component.custom.styles.ts +206 -0
- package/metadata/packages/components/components/syn-button/component.react.ts +56 -0
- package/metadata/packages/components/components/syn-button/component.styles.ts +368 -0
- package/metadata/packages/components/components/syn-button/component.ts +322 -0
- package/metadata/packages/components/components/syn-button/component.vue +204 -0
- package/metadata/packages/components/components/syn-button-group/component.angular.ts +55 -0
- package/metadata/packages/components/components/syn-button-group/component.react.ts +29 -0
- package/metadata/packages/components/components/syn-button-group/component.styles.ts +21 -0
- package/metadata/packages/components/components/syn-button-group/component.ts +103 -0
- package/metadata/packages/components/components/syn-button-group/component.vue +55 -0
- package/metadata/packages/components/components/syn-card/component.angular.ts +69 -0
- package/metadata/packages/components/components/syn-card/component.custom.styles.ts +55 -0
- package/metadata/packages/components/components/syn-card/component.react.ts +41 -0
- package/metadata/packages/components/components/syn-card/component.styles.ts +77 -0
- package/metadata/packages/components/components/syn-card/component.ts +68 -0
- package/metadata/packages/components/components/syn-card/component.vue +67 -0
- package/metadata/packages/components/components/syn-checkbox/component.angular.ts +260 -0
- package/metadata/packages/components/components/syn-checkbox/component.custom.styles.ts +53 -0
- package/metadata/packages/components/components/syn-checkbox/component.react.ts +64 -0
- package/metadata/packages/components/components/syn-checkbox/component.styles.ts +130 -0
- package/metadata/packages/components/components/syn-checkbox/component.ts +291 -0
- package/metadata/packages/components/components/syn-checkbox/component.vue +186 -0
- package/metadata/packages/components/components/syn-combobox/component.angular.ts +436 -0
- package/metadata/packages/components/components/syn-combobox/component.custom.styles.ts +35 -0
- package/metadata/packages/components/components/syn-combobox/component.react.ts +109 -0
- package/metadata/packages/components/components/syn-combobox/component.styles.ts +406 -0
- package/metadata/packages/components/components/syn-combobox/component.ts +1139 -0
- package/metadata/packages/components/components/syn-combobox/component.vue +304 -0
- package/metadata/packages/components/components/syn-details/component.angular.ts +184 -0
- package/metadata/packages/components/components/syn-details/component.custom.styles.ts +140 -0
- package/metadata/packages/components/components/syn-details/component.react.ts +63 -0
- package/metadata/packages/components/components/syn-details/component.styles.ts +90 -0
- package/metadata/packages/components/components/syn-details/component.ts +266 -0
- package/metadata/packages/components/components/syn-details/component.vue +134 -0
- package/metadata/packages/components/components/syn-dialog/component.angular.ts +201 -0
- package/metadata/packages/components/components/syn-dialog/component.custom.styles.ts +54 -0
- package/metadata/packages/components/components/syn-dialog/component.react.ts +91 -0
- package/metadata/packages/components/components/syn-dialog/component.styles.ts +129 -0
- package/metadata/packages/components/components/syn-dialog/component.ts +366 -0
- package/metadata/packages/components/components/syn-dialog/component.vue +169 -0
- package/metadata/packages/components/components/syn-divider/component.angular.ts +55 -0
- package/metadata/packages/components/components/syn-divider/component.custom.styles.ts +8 -0
- package/metadata/packages/components/components/syn-divider/component.react.ts +29 -0
- package/metadata/packages/components/components/syn-divider/component.styles.ts +31 -0
- package/metadata/packages/components/components/syn-divider/component.ts +42 -0
- package/metadata/packages/components/components/syn-divider/component.vue +51 -0
- package/metadata/packages/components/components/syn-drawer/component.angular.ts +234 -0
- package/metadata/packages/components/components/syn-drawer/component.custom.styles.ts +78 -0
- package/metadata/packages/components/components/syn-drawer/component.react.ts +98 -0
- package/metadata/packages/components/components/syn-drawer/component.styles.ts +165 -0
- package/metadata/packages/components/components/syn-drawer/component.ts +496 -0
- package/metadata/packages/components/components/syn-drawer/component.vue +188 -0
- package/metadata/packages/components/components/syn-dropdown/component.angular.ts +223 -0
- package/metadata/packages/components/components/syn-dropdown/component.custom.styles.ts +5 -0
- package/metadata/packages/components/components/syn-dropdown/component.react.ts +59 -0
- package/metadata/packages/components/components/syn-dropdown/component.styles.ts +60 -0
- package/metadata/packages/components/components/syn-dropdown/component.ts +484 -0
- package/metadata/packages/components/components/syn-dropdown/component.vue +159 -0
- package/metadata/packages/components/components/syn-file/component.angular.ts +359 -0
- package/metadata/packages/components/components/syn-file/component.react.ts +85 -0
- package/metadata/packages/components/components/syn-file/component.styles.ts +179 -0
- package/metadata/packages/components/components/syn-file/component.ts +631 -0
- package/metadata/packages/components/components/syn-file/component.vue +251 -0
- package/metadata/packages/components/components/syn-header/component.angular.ts +132 -0
- package/metadata/packages/components/components/syn-header/component.react.ts +65 -0
- package/metadata/packages/components/components/syn-header/component.styles.ts +128 -0
- package/metadata/packages/components/components/syn-header/component.ts +260 -0
- package/metadata/packages/components/components/syn-header/component.vue +117 -0
- package/metadata/packages/components/components/syn-icon/component.angular.ts +115 -0
- package/metadata/packages/components/components/syn-icon/component.custom.styles.ts +5 -0
- package/metadata/packages/components/components/syn-icon/component.react.ts +41 -0
- package/metadata/packages/components/components/syn-icon/component.styles.ts +25 -0
- package/metadata/packages/components/components/syn-icon/component.ts +234 -0
- package/metadata/packages/components/components/syn-icon/component.vue +100 -0
- package/metadata/packages/components/components/syn-icon-button/component.angular.ts +185 -0
- package/metadata/packages/components/components/syn-icon-button/component.custom.styles.ts +68 -0
- package/metadata/packages/components/components/syn-icon-button/component.react.ts +42 -0
- package/metadata/packages/components/components/syn-icon-button/component.styles.ts +59 -0
- package/metadata/packages/components/components/syn-icon-button/component.ts +154 -0
- package/metadata/packages/components/components/syn-icon-button/component.vue +132 -0
- package/metadata/packages/components/components/syn-input/component.angular.ts +606 -0
- package/metadata/packages/components/components/syn-input/component.custom.styles.ts +278 -0
- package/metadata/packages/components/components/syn-input/component.react.ts +91 -0
- package/metadata/packages/components/components/syn-input/component.styles.ts +287 -0
- package/metadata/packages/components/components/syn-input/component.ts +942 -0
- package/metadata/packages/components/components/syn-input/component.vue +370 -0
- package/metadata/packages/components/components/syn-menu/component.angular.ts +52 -0
- package/metadata/packages/components/components/syn-menu/component.custom.styles.ts +29 -0
- package/metadata/packages/components/components/syn-menu/component.react.ts +36 -0
- package/metadata/packages/components/components/syn-menu/component.styles.ts +27 -0
- package/metadata/packages/components/components/syn-menu/component.ts +199 -0
- package/metadata/packages/components/components/syn-menu/component.vue +48 -0
- package/metadata/packages/components/components/syn-menu-item/component.angular.ts +121 -0
- package/metadata/packages/components/components/syn-menu-item/component.custom.styles.ts +128 -0
- package/metadata/packages/components/components/syn-menu-item/component.react.ts +45 -0
- package/metadata/packages/components/components/syn-menu-item/component.styles.ts +164 -0
- package/metadata/packages/components/components/syn-menu-item/component.ts +209 -0
- package/metadata/packages/components/components/syn-menu-item/component.vue +91 -0
- package/metadata/packages/components/components/syn-menu-label/component.angular.ts +48 -0
- package/metadata/packages/components/components/syn-menu-label/component.custom.styles.ts +24 -0
- package/metadata/packages/components/components/syn-menu-label/component.react.ts +35 -0
- package/metadata/packages/components/components/syn-menu-label/component.styles.ts +28 -0
- package/metadata/packages/components/components/syn-menu-label/component.ts +54 -0
- package/metadata/packages/components/components/syn-menu-label/component.vue +41 -0
- package/metadata/packages/components/components/syn-nav-item/component.angular.ts +242 -0
- package/metadata/packages/components/components/syn-nav-item/component.react.ts +82 -0
- package/metadata/packages/components/components/syn-nav-item/component.styles.ts +337 -0
- package/metadata/packages/components/components/syn-nav-item/component.ts +492 -0
- package/metadata/packages/components/components/syn-nav-item/component.vue +182 -0
- package/metadata/packages/components/components/syn-optgroup/component.angular.ts +79 -0
- package/metadata/packages/components/components/syn-optgroup/component.react.ts +41 -0
- package/metadata/packages/components/components/syn-optgroup/component.styles.ts +59 -0
- package/metadata/packages/components/components/syn-optgroup/component.ts +176 -0
- package/metadata/packages/components/components/syn-optgroup/component.vue +71 -0
- package/metadata/packages/components/components/syn-option/component.angular.ts +79 -0
- package/metadata/packages/components/components/syn-option/component.custom.styles.ts +81 -0
- package/metadata/packages/components/components/syn-option/component.react.ts +37 -0
- package/metadata/packages/components/components/syn-option/component.styles.ts +96 -0
- package/metadata/packages/components/components/syn-option/component.ts +174 -0
- package/metadata/packages/components/components/syn-option/component.vue +71 -0
- package/metadata/packages/components/components/syn-popup/component.angular.ts +385 -0
- package/metadata/packages/components/components/syn-popup/component.react.ts +55 -0
- package/metadata/packages/components/components/syn-popup/component.styles.ts +70 -0
- package/metadata/packages/components/components/syn-popup/component.ts +583 -0
- package/metadata/packages/components/components/syn-popup/component.vue +240 -0
- package/metadata/packages/components/components/syn-prio-nav/component.angular.ts +67 -0
- package/metadata/packages/components/components/syn-prio-nav/component.react.ts +54 -0
- package/metadata/packages/components/components/syn-prio-nav/component.styles.ts +48 -0
- package/metadata/packages/components/components/syn-prio-nav/component.ts +287 -0
- package/metadata/packages/components/components/syn-prio-nav/component.vue +60 -0
- package/metadata/packages/components/components/syn-progress-bar/component.angular.ts +85 -0
- package/metadata/packages/components/components/syn-progress-bar/component.custom.styles.ts +22 -0
- package/metadata/packages/components/components/syn-progress-bar/component.react.ts +37 -0
- package/metadata/packages/components/components/syn-progress-bar/component.styles.ts +94 -0
- package/metadata/packages/components/components/syn-progress-bar/component.ts +74 -0
- package/metadata/packages/components/components/syn-progress-bar/component.vue +71 -0
- package/metadata/packages/components/components/syn-progress-ring/component.angular.ts +72 -0
- package/metadata/packages/components/components/syn-progress-ring/component.custom.styles.ts +17 -0
- package/metadata/packages/components/components/syn-progress-ring/component.react.ts +37 -0
- package/metadata/packages/components/components/syn-progress-ring/component.styles.ts +77 -0
- package/metadata/packages/components/components/syn-progress-ring/component.ts +90 -0
- package/metadata/packages/components/components/syn-progress-ring/component.vue +66 -0
- package/metadata/packages/components/components/syn-radio/component.angular.ts +109 -0
- package/metadata/packages/components/components/syn-radio/component.custom.styles.ts +64 -0
- package/metadata/packages/components/components/syn-radio/component.react.ts +48 -0
- package/metadata/packages/components/components/syn-radio/component.styles.ts +124 -0
- package/metadata/packages/components/components/syn-radio/component.ts +129 -0
- package/metadata/packages/components/components/syn-radio/component.vue +99 -0
- package/metadata/packages/components/components/syn-radio-button/component.angular.ts +123 -0
- package/metadata/packages/components/components/syn-radio-button/component.react.ts +49 -0
- package/metadata/packages/components/components/syn-radio-button/component.styles.ts +37 -0
- package/metadata/packages/components/components/syn-radio-button/component.ts +149 -0
- package/metadata/packages/components/components/syn-radio-button/component.vue +105 -0
- package/metadata/packages/components/components/syn-radio-group/component.angular.ts +204 -0
- package/metadata/packages/components/components/syn-radio-group/component.custom.styles.ts +22 -0
- package/metadata/packages/components/components/syn-radio-group/component.react.ts +56 -0
- package/metadata/packages/components/components/syn-radio-group/component.styles.ts +44 -0
- package/metadata/packages/components/components/syn-radio-group/component.ts +418 -0
- package/metadata/packages/components/components/syn-radio-group/component.vue +158 -0
- package/metadata/packages/components/components/syn-range/component.angular.ts +334 -0
- package/metadata/packages/components/components/syn-range/component.react.ts +92 -0
- package/metadata/packages/components/components/syn-range/component.styles.ts +284 -0
- package/metadata/packages/components/components/syn-range/component.ts +878 -0
- package/metadata/packages/components/components/syn-range/component.vue +240 -0
- package/metadata/packages/components/components/syn-range-tick/component.angular.ts +59 -0
- package/metadata/packages/components/components/syn-range-tick/component.react.ts +33 -0
- package/metadata/packages/components/components/syn-range-tick/component.styles.ts +34 -0
- package/metadata/packages/components/components/syn-range-tick/component.ts +50 -0
- package/metadata/packages/components/components/syn-range-tick/component.vue +57 -0
- package/metadata/packages/components/components/syn-resize-observer/component.styles.ts +16 -0
- package/metadata/packages/components/components/syn-resize-observer/component.ts +98 -0
- package/metadata/packages/components/components/syn-select/component.angular.ts +441 -0
- package/metadata/packages/components/components/syn-select/component.custom.styles.ts +176 -0
- package/metadata/packages/components/components/syn-select/component.react.ts +101 -0
- package/metadata/packages/components/components/syn-select/component.styles.ts +316 -0
- package/metadata/packages/components/components/syn-select/component.ts +1054 -0
- package/metadata/packages/components/components/syn-select/component.vue +303 -0
- package/metadata/packages/components/components/syn-side-nav/component.angular.ts +231 -0
- package/metadata/packages/components/components/syn-side-nav/component.react.ts +95 -0
- package/metadata/packages/components/components/syn-side-nav/component.styles.ts +160 -0
- package/metadata/packages/components/components/syn-side-nav/component.ts +492 -0
- package/metadata/packages/components/components/syn-side-nav/component.vue +201 -0
- package/metadata/packages/components/components/syn-spinner/component.angular.ts +44 -0
- package/metadata/packages/components/components/syn-spinner/component.custom.styles.ts +31 -0
- package/metadata/packages/components/components/syn-spinner/component.react.ts +31 -0
- package/metadata/packages/components/components/syn-spinner/component.styles.ts +55 -0
- package/metadata/packages/components/components/syn-spinner/component.ts +42 -0
- package/metadata/packages/components/components/syn-spinner/component.vue +35 -0
- package/metadata/packages/components/components/syn-switch/component.angular.ts +244 -0
- package/metadata/packages/components/components/syn-switch/component.custom.styles.ts +112 -0
- package/metadata/packages/components/components/syn-switch/component.react.ts +63 -0
- package/metadata/packages/components/components/syn-switch/component.styles.ts +177 -0
- package/metadata/packages/components/components/syn-switch/component.ts +274 -0
- package/metadata/packages/components/components/syn-switch/component.vue +178 -0
- package/metadata/packages/components/components/syn-tab/component.angular.ts +109 -0
- package/metadata/packages/components/components/syn-tab/component.custom.styles.ts +92 -0
- package/metadata/packages/components/components/syn-tab/component.react.ts +42 -0
- package/metadata/packages/components/components/syn-tab/component.styles.ts +77 -0
- package/metadata/packages/components/components/syn-tab/component.ts +132 -0
- package/metadata/packages/components/components/syn-tab/component.vue +91 -0
- package/metadata/packages/components/components/syn-tab-group/component.angular.ts +166 -0
- package/metadata/packages/components/components/syn-tab-group/component.custom.styles.ts +248 -0
- package/metadata/packages/components/components/syn-tab-group/component.react.ts +58 -0
- package/metadata/packages/components/components/syn-tab-group/component.styles.ts +200 -0
- package/metadata/packages/components/components/syn-tab-group/component.ts +557 -0
- package/metadata/packages/components/components/syn-tab-group/component.vue +126 -0
- package/metadata/packages/components/components/syn-tab-panel/component.angular.ts +68 -0
- package/metadata/packages/components/components/syn-tab-panel/component.custom.styles.ts +8 -0
- package/metadata/packages/components/components/syn-tab-panel/component.react.ts +31 -0
- package/metadata/packages/components/components/syn-tab-panel/component.styles.ts +27 -0
- package/metadata/packages/components/components/syn-tab-panel/component.ts +67 -0
- package/metadata/packages/components/components/syn-tab-panel/component.vue +60 -0
- package/metadata/packages/components/components/syn-tag/component.angular.ts +83 -0
- package/metadata/packages/components/components/syn-tag/component.custom.styles.ts +120 -0
- package/metadata/packages/components/components/syn-tag/component.react.ts +43 -0
- package/metadata/packages/components/components/syn-tag/component.styles.ts +65 -0
- package/metadata/packages/components/components/syn-tag/component.ts +90 -0
- package/metadata/packages/components/components/syn-tag/component.vue +81 -0
- package/metadata/packages/components/components/syn-textarea/component.angular.ts +394 -0
- package/metadata/packages/components/components/syn-textarea/component.custom.styles.ts +18 -0
- package/metadata/packages/components/components/syn-textarea/component.react.ts +60 -0
- package/metadata/packages/components/components/syn-textarea/component.styles.ts +187 -0
- package/metadata/packages/components/components/syn-textarea/component.ts +401 -0
- package/metadata/packages/components/components/syn-textarea/component.vue +244 -0
- package/metadata/packages/components/components/syn-tooltip/component.angular.ts +212 -0
- package/metadata/packages/components/components/syn-tooltip/component.custom.styles.ts +13 -0
- package/metadata/packages/components/components/syn-tooltip/component.react.ts +63 -0
- package/metadata/packages/components/components/syn-tooltip/component.styles.ts +64 -0
- package/metadata/packages/components/components/syn-tooltip/component.ts +319 -0
- package/metadata/packages/components/components/syn-tooltip/component.vue +158 -0
- package/metadata/packages/components/components/syn-validate/component.angular.ts +128 -0
- package/metadata/packages/components/components/syn-validate/component.react.ts +36 -0
- package/metadata/packages/components/components/syn-validate/component.styles.ts +9 -0
- package/metadata/packages/components/components/syn-validate/component.ts +437 -0
- package/metadata/packages/components/components/syn-validate/component.vue +98 -0
- package/metadata/packages/components/migration/BREAKING_CHANGES.md +489 -0
- package/metadata/packages/components/static/CHANGELOG.md +1100 -0
- package/metadata/packages/components/static/LIMITATIONS.md +269 -0
- package/metadata/packages/components/static/README.md +248 -0
- package/metadata/packages/react/LIMITATIONS.md +31 -0
- package/metadata/packages/react/README.md +262 -0
- package/metadata/packages/styles/CHANGELOG.md +76 -0
- package/metadata/packages/styles/README.md +132 -0
- package/metadata/packages/styles/index.css +309 -0
- package/metadata/packages/styles/link-list.css +47 -0
- package/metadata/packages/styles/link.css +79 -0
- package/metadata/packages/styles/tables.css +143 -0
- package/metadata/packages/styles/typography.css +52 -0
- package/metadata/packages/tokens/CHANGELOG.md +431 -0
- package/metadata/packages/tokens/README.md +408 -0
- package/metadata/packages/tokens/dark.css +268 -0
- package/metadata/packages/tokens/index.js +1294 -0
- package/metadata/packages/tokens/light.css +268 -0
- package/metadata/packages/vue/LIMITATIONS.md +53 -0
- package/metadata/packages/vue/README.md +252 -0
- package/metadata/static/angular/index.md +6 -0
- package/metadata/static/assets/index.md +10 -0
- package/metadata/static/component-info/index.md +24 -0
- package/metadata/static/component-list/index.md +34 -0
- package/metadata/static/components/index.md +10 -0
- package/metadata/static/components/syn-accordion/docs.md +428 -0
- package/metadata/static/components/syn-alert/docs.md +231 -0
- package/metadata/static/components/syn-badge/docs.md +128 -0
- package/metadata/static/components/syn-breadcrumb/docs.md +265 -0
- package/metadata/static/components/syn-breadcrumb-item/docs.md +49 -0
- package/metadata/static/components/syn-button/docs.md +402 -0
- package/metadata/static/components/syn-card/docs.md +273 -0
- package/metadata/static/components/syn-checkbox/docs.md +77 -0
- package/metadata/static/components/syn-combobox/docs.md +2402 -0
- package/metadata/static/components/syn-details/docs.md +220 -0
- package/metadata/static/components/syn-dialog/docs.md +222 -0
- package/metadata/static/components/syn-divider/docs.md +77 -0
- package/metadata/static/components/syn-drawer/docs.md +271 -0
- package/metadata/static/components/syn-dropdown/docs.md +316 -0
- package/metadata/static/components/syn-file/docs.md +215 -0
- package/metadata/static/components/syn-header/docs.md +134 -0
- package/metadata/static/components/syn-icon/docs.md +177 -0
- package/metadata/static/components/syn-icon-button/docs.md +142 -0
- package/metadata/static/components/syn-input/docs.md +460 -0
- package/metadata/static/components/syn-menu/docs.md +162 -0
- package/metadata/static/components/syn-menu-item/docs.md +196 -0
- package/metadata/static/components/syn-menu-label/docs.md +29 -0
- package/metadata/static/components/syn-nav-item/docs.md +161 -0
- package/metadata/static/components/syn-optgroup/docs.md +167 -0
- package/metadata/static/components/syn-option/docs.md +137 -0
- package/metadata/static/components/syn-prio-nav/docs.md +54 -0
- package/metadata/static/components/syn-progress-bar/docs.md +77 -0
- package/metadata/static/components/syn-progress-ring/docs.md +89 -0
- package/metadata/static/components/syn-radio/docs.md +123 -0
- package/metadata/static/components/syn-radio-group/docs.md +363 -0
- package/metadata/static/components/syn-range/docs.md +419 -0
- package/metadata/static/components/syn-range-tick/docs.md +110 -0
- package/metadata/static/components/syn-select/docs.md +730 -0
- package/metadata/static/components/syn-side-nav/docs.md +593 -0
- package/metadata/static/components/syn-spinner/docs.md +45 -0
- package/metadata/static/components/syn-switch/docs.md +74 -0
- package/metadata/static/components/syn-tab/docs.md +47 -0
- package/metadata/static/components/syn-tab-group/docs.md +1094 -0
- package/metadata/static/components/syn-tab-panel/docs.md +91 -0
- package/metadata/static/components/syn-tag/docs.md +50 -0
- package/metadata/static/components/syn-textarea/docs.md +215 -0
- package/metadata/static/components/syn-tooltip/docs.md +144 -0
- package/metadata/static/components/syn-validate/docs.md +225 -0
- package/metadata/static/migration/index.md +10 -0
- package/metadata/static/react/index.md +8 -0
- package/metadata/static/setup/icon-usage.md +239 -0
- package/metadata/static/setup/prerequisites.md +171 -0
- package/metadata/static/styles/index.md +11 -0
- package/metadata/static/styles/syn-body.md +5 -0
- package/metadata/static/styles/syn-heading.md +5 -0
- package/metadata/static/styles/syn-link-list.md +325 -0
- package/metadata/static/styles/syn-link.md +156 -0
- package/metadata/static/styles/syn-table-cell.md +125 -0
- package/metadata/static/styles/syn-table.md +201 -0
- package/metadata/static/styles/syn-weight.md +5 -0
- package/metadata/static/templates/appshell.md +2061 -0
- package/metadata/static/templates/breadcrumb.md +375 -0
- package/metadata/static/templates/footer.md +342 -0
- package/metadata/static/templates/forms.md +369 -0
- package/metadata/static/templates/index.md +9 -0
- package/metadata/static/templates/table.md +1426 -0
- package/metadata/static/vue/index.md +6 -0
- package/package.json +109 -4
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
import type { CSSResultGroup, PropertyValues } from 'lit';
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import { property, queryAssignedElements, state } from 'lit/decorators.js';
|
|
4
|
+
import componentStyles from '../../styles/component.styles.js';
|
|
5
|
+
import SynergyElement from '../../internal/synergy-element.js';
|
|
6
|
+
import { watch } from '../../internal/watch.js';
|
|
7
|
+
import SynAlert from '../alert/alert.component.js';
|
|
8
|
+
import {
|
|
9
|
+
getEventNameForElement,
|
|
10
|
+
isBlurEvent,
|
|
11
|
+
isInvalidEvent,
|
|
12
|
+
normalizeEventAttribute,
|
|
13
|
+
} from './utility.js';
|
|
14
|
+
import styles from './validate.styles.js';
|
|
15
|
+
import { enableDefaultSettings } from '../../utilities/defaultSettings/decorator.js';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @summary Validate provides form field validation messages in a unified way.
|
|
19
|
+
* It does this by using [the native browser validation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation)
|
|
20
|
+
* and showing the validation message in a consistent, user defined way.
|
|
21
|
+
* @documentation https://synergy-design-system.github.io/?path=/docs/components-syn-validate--docs
|
|
22
|
+
* @dependency syn-alert
|
|
23
|
+
*
|
|
24
|
+
* @slot - The form field that should be validated.
|
|
25
|
+
* Avoid slotting in more than one element, as subsequent ones will be ignored.
|
|
26
|
+
*
|
|
27
|
+
* @csspart base - The component's base wrapper.
|
|
28
|
+
* @csspart input-wrapper - The container that wraps the form field.
|
|
29
|
+
* @csspart alert - The syn-alert that is shown when the variant is set to "inline".
|
|
30
|
+
* @csspart alert__base - The container that wraps the alert.
|
|
31
|
+
* @csspart alert__message - The container that wraps the alert message.
|
|
32
|
+
* @csspart alert__icon - The container that wraps the alert icon.
|
|
33
|
+
*/
|
|
34
|
+
@enableDefaultSettings('SynValidate')
|
|
35
|
+
export default class SynValidate extends SynergyElement {
|
|
36
|
+
static styles: CSSResultGroup = [componentStyles, styles];
|
|
37
|
+
|
|
38
|
+
static dependencies = {
|
|
39
|
+
'syn-alert': SynAlert,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
controller = new AbortController();
|
|
43
|
+
|
|
44
|
+
observer: MutationObserver;
|
|
45
|
+
|
|
46
|
+
@queryAssignedElements() private slottedChildren: HTMLElement[];
|
|
47
|
+
|
|
48
|
+
@state() validationMessage = '';
|
|
49
|
+
|
|
50
|
+
@state() eagerFirstMount = true;
|
|
51
|
+
|
|
52
|
+
@state() isInternalTriggeredInvalid = false;
|
|
53
|
+
|
|
54
|
+
@state() isValid = true;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The variant that should be used to show validation alerts.
|
|
58
|
+
*
|
|
59
|
+
* The following variants are supported:
|
|
60
|
+
* - **native** (default): Uses the native browser validation, usually a browser tooltip.
|
|
61
|
+
* - **inline**: Show the validation message underneath the element, using a `<syn-alert>`
|
|
62
|
+
*/
|
|
63
|
+
@property({ reflect: true }) variant: 'native' | 'inline' = 'native';
|
|
64
|
+
|
|
65
|
+
/** Do not show the error icon when using the inline variant validation */
|
|
66
|
+
@property({ attribute: 'hide-icon', reflect: true, type: Boolean }) hideIcon = false;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Defines the events that trigger the validation.
|
|
70
|
+
* `invalid` will always automatically be included.
|
|
71
|
+
* You may also use the `live` keyword to validate on every input change.
|
|
72
|
+
* `live` will make sure to listen to the `invalid`, `input` and `blur` events.
|
|
73
|
+
*
|
|
74
|
+
* Please have a look at the [documentation for native form validation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation)
|
|
75
|
+
* and [the use of form invalid events](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/invalid_event) for further information.
|
|
76
|
+
*
|
|
77
|
+
* @example ```html
|
|
78
|
+
* <!-- Validate on invalid and change events (invalid, change) -->
|
|
79
|
+
* <syn-validate on="invalid change"></syn-validate>
|
|
80
|
+
*
|
|
81
|
+
* <!-- Validate on live events (invalid, blur, input)-->
|
|
82
|
+
* <syn-validate on="live"></syn-validate>
|
|
83
|
+
*
|
|
84
|
+
* <!-- Validate on live and custom events (invalid, blur, input, focus, change) -->
|
|
85
|
+
* <syn-validate on="live focus change"></syn-validate>
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
@property({ reflect: true }) on: string = '';
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Custom validation message to be displayed when the input is invalid.
|
|
92
|
+
* Will override the default browser validation message.
|
|
93
|
+
* Set to an empty string to reset the validation message.
|
|
94
|
+
*/
|
|
95
|
+
@property({ attribute: 'custom-validation-message', type: String }) customValidationMessage = '';
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Set this to true to validate the input immediately when it is rendered.
|
|
99
|
+
* Best used with a `variant` of `inline`.
|
|
100
|
+
* When setting eager, the input will not be focused automatically.
|
|
101
|
+
*
|
|
102
|
+
* When using a `variant` of `native` the browser will focus
|
|
103
|
+
* the last eager field as it is using a tooltip.
|
|
104
|
+
* In this case it is better to just provide one eager field.
|
|
105
|
+
*/
|
|
106
|
+
@property({ type: Boolean }) eager = false;
|
|
107
|
+
|
|
108
|
+
// Automatically refresh all event listeners when the on property changes.
|
|
109
|
+
@watch('on', { waitUntilFirstUpdate: true })
|
|
110
|
+
handleListenerChange() {
|
|
111
|
+
this.updateEvents();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@watch('eager', { waitUntilFirstUpdate: false })
|
|
115
|
+
async handleEagerChange() {
|
|
116
|
+
if (this.eager) {
|
|
117
|
+
const input = this.getInput();
|
|
118
|
+
await this.updateComplete;
|
|
119
|
+
input?.reportValidity();
|
|
120
|
+
this.eagerFirstMount = true;
|
|
121
|
+
} else {
|
|
122
|
+
this.eagerFirstMount = false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Synchronize the validation message on the wrapped input with the custom message
|
|
127
|
+
@watch('customValidationMessage', { waitUntilFirstUpdate: true })
|
|
128
|
+
handleCustomValidationMessageChange() {
|
|
129
|
+
const input = this.getInput();
|
|
130
|
+
if (input) {
|
|
131
|
+
this.setCustomValidationMessage(input);
|
|
132
|
+
this.setValidationMessage(input);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Returns the validity state of the input component.
|
|
138
|
+
* `true` for valid and `false` for invalid.
|
|
139
|
+
*/
|
|
140
|
+
getValidity() {
|
|
141
|
+
return this.isValid;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Get the input element to validate. Defined as the first slotted element
|
|
146
|
+
* @returns The input element or undefined if not found
|
|
147
|
+
*/
|
|
148
|
+
private getInput() {
|
|
149
|
+
const input = this.slottedChildren[0];
|
|
150
|
+
return input ? input as HTMLInputElement : undefined;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Get the event names to listen for.
|
|
155
|
+
* If the input is a synergy element, will use syn- prefixes.
|
|
156
|
+
* @returns The event names to listen for
|
|
157
|
+
*/
|
|
158
|
+
// eslint-disable-next-line complexity
|
|
159
|
+
private getUsedEventNames() {
|
|
160
|
+
const input = this.getInput();
|
|
161
|
+
|
|
162
|
+
// If there is no input, skip before doing any harm
|
|
163
|
+
if (!input) {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Make sure to always use an array of events
|
|
168
|
+
// This is needed because on may be a special value like "live"
|
|
169
|
+
const on = normalizeEventAttribute(this.on);
|
|
170
|
+
|
|
171
|
+
// Filter makes sure to remove empty values, e.g.
|
|
172
|
+
// <syn-validate on=""></syn-validate>
|
|
173
|
+
const [...events] = on.filter(Boolean);
|
|
174
|
+
|
|
175
|
+
// Make sure to always have an invalid event
|
|
176
|
+
if (!events.includes('invalid')) {
|
|
177
|
+
events.push('invalid');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Special handling for the live keyword:
|
|
181
|
+
// live always means on input and blur
|
|
182
|
+
if (events.includes('live')) {
|
|
183
|
+
events.push('input');
|
|
184
|
+
events.push('blur');
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Make sure to remove duplicated events and the live property
|
|
188
|
+
// and map the events to the correct event names
|
|
189
|
+
return Array.from(new Set(
|
|
190
|
+
events
|
|
191
|
+
.filter(e => e !== 'live')
|
|
192
|
+
.map(e => getEventNameForElement(input, e)),
|
|
193
|
+
));
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Update the events on the input element.
|
|
198
|
+
*/
|
|
199
|
+
private updateEvents() {
|
|
200
|
+
this.controller.abort();
|
|
201
|
+
this.controller = new AbortController();
|
|
202
|
+
const input = this.getInput();
|
|
203
|
+
|
|
204
|
+
if (!input) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const events = this.getUsedEventNames();
|
|
209
|
+
events.forEach(eventName => {
|
|
210
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
211
|
+
input.addEventListener(eventName, this.validate, {
|
|
212
|
+
capture: isInvalidEvent(eventName),
|
|
213
|
+
signal: this.controller.signal,
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// If the change event is not included,
|
|
218
|
+
// make sure to attach a custom listener that resets the validation message
|
|
219
|
+
// This is needed as the custom message may be set on change
|
|
220
|
+
const usedChangeEvent = getEventNameForElement(input, 'change');
|
|
221
|
+
if (!events.includes(usedChangeEvent)) {
|
|
222
|
+
input.addEventListener(usedChangeEvent, this.internalRevalidate, {
|
|
223
|
+
signal: this.controller.signal,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
private setValidationMessage(input: HTMLInputElement) {
|
|
229
|
+
const { customValidationMessage } = this;
|
|
230
|
+
const validationMessage = customValidationMessage || input.validationMessage;
|
|
231
|
+
this.validationMessage = validationMessage;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Set the custom validation message to the input. This will make sure to either:
|
|
236
|
+
* - use the custom message if one is set or
|
|
237
|
+
* - use the default message if the custom message is empty
|
|
238
|
+
*/
|
|
239
|
+
private setCustomValidationMessage(input: HTMLInputElement) {
|
|
240
|
+
// Set the custom validation message on the input only once, when the customValidationMessage
|
|
241
|
+
// is changed. Otherwise there could be problems with `variant="native"` and `on="live"` or
|
|
242
|
+
// `on="blur"`, because the browser popup will never disappear even if clicking somewhere else.
|
|
243
|
+
input.setCustomValidity(this.customValidationMessage);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Set the validation message from the input element
|
|
248
|
+
* @param e The event that was received
|
|
249
|
+
*/
|
|
250
|
+
private internalRevalidate = (e: Event) => {
|
|
251
|
+
const input = e.currentTarget as HTMLInputElement;
|
|
252
|
+
if (input.validity?.valid) {
|
|
253
|
+
this.validationMessage = '';
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Handle the blur event during validation
|
|
259
|
+
*/
|
|
260
|
+
// eslint-disable-next-line class-methods-use-this
|
|
261
|
+
private handleFocus(input: HTMLInputElement) {
|
|
262
|
+
const activeElement = document.activeElement! as HTMLInputElement;
|
|
263
|
+
const activeElementIsWrapped = activeElement.closest('syn-validate');
|
|
264
|
+
|
|
265
|
+
if (!activeElement.validity?.valid && activeElementIsWrapped) {
|
|
266
|
+
// The active element is invalid do not scroll
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
input.scrollIntoView({ block: 'nearest' });
|
|
271
|
+
input.focus();
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Triggers a validation run, showing the validation message if needed.
|
|
276
|
+
*/
|
|
277
|
+
// eslint-disable-next-line complexity
|
|
278
|
+
private validate = async (e: Event) => {
|
|
279
|
+
// Make sure to stop the validate component from going into an endless cycle of triggering
|
|
280
|
+
if (isInvalidEvent(e.type) && this.variant === 'native' && this.isInternalTriggeredInvalid === true) {
|
|
281
|
+
this.isInternalTriggeredInvalid = false;
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Make sure to always prevent the invalid event when not using native validation
|
|
286
|
+
if (isInvalidEvent(e.type) && this.variant !== 'native') {
|
|
287
|
+
e.preventDefault();
|
|
288
|
+
e.stopPropagation();
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const input = e.currentTarget as HTMLInputElement;
|
|
292
|
+
if (input instanceof SynergyElement) {
|
|
293
|
+
// When using a synergy element, we need to wait for it to be ready!
|
|
294
|
+
// This is needed as the validity state of the element may not be set yet.
|
|
295
|
+
await input.updateComplete;
|
|
296
|
+
}
|
|
297
|
+
this.isValid = input.validity?.valid;
|
|
298
|
+
|
|
299
|
+
// When we are using eager, make sure to skip focus on the first mount
|
|
300
|
+
if (this.eager && this.eagerFirstMount) {
|
|
301
|
+
this.eagerFirstMount = false;
|
|
302
|
+
this.setValidationMessage(input);
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// If the active element that has focus is placed in a validate component,
|
|
307
|
+
// make sure to not loose focus.
|
|
308
|
+
if (!this.isValid && !isBlurEvent(e.type)) {
|
|
309
|
+
this.handleFocus(input);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
this.setValidationMessage(input);
|
|
313
|
+
|
|
314
|
+
// Trigger reportValidity when using native validation, so the browser popup is also shown
|
|
315
|
+
// for other events than `invalid`. All events except the blur event, should trigger this.
|
|
316
|
+
if (!isBlurEvent(e.type) && this.variant === 'native') {
|
|
317
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
318
|
+
this.updateComplete.then(() => {
|
|
319
|
+
this.isInternalTriggeredInvalid = true;
|
|
320
|
+
input.reportValidity();
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
async firstUpdated(changedProperties: PropertyValues) {
|
|
326
|
+
super.firstUpdated(changedProperties);
|
|
327
|
+
this.updateEvents();
|
|
328
|
+
|
|
329
|
+
// #713: Make sure to set the custom validation message on mount
|
|
330
|
+
// When we have a custom element, we need to wait for it to be ready!
|
|
331
|
+
const input = this.getInput();
|
|
332
|
+
|
|
333
|
+
if (this.customValidationMessage) {
|
|
334
|
+
if (input instanceof SynergyElement) {
|
|
335
|
+
await input.updateComplete;
|
|
336
|
+
}
|
|
337
|
+
input?.setCustomValidity(this.customValidationMessage);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// Make sure to run validation on mount if eager is set
|
|
341
|
+
if (this.eager) {
|
|
342
|
+
await this.updateComplete;
|
|
343
|
+
this.isValid = input?.validity?.valid ?? false;
|
|
344
|
+
input?.reportValidity();
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
connectedCallback() {
|
|
349
|
+
super.connectedCallback();
|
|
350
|
+
|
|
351
|
+
// #717: Make sure to remove to rerun validation when
|
|
352
|
+
// disabled or readonly properties change on the input
|
|
353
|
+
this.observer = new MutationObserver(entries => {
|
|
354
|
+
const input = this.getInput();
|
|
355
|
+
|
|
356
|
+
if (!input) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
const hasDisabledOrReadonly = entries
|
|
361
|
+
// Only check for changes on the input element
|
|
362
|
+
.filter(({ target }) => target === input)
|
|
363
|
+
// Check if the input is disabled or readonly
|
|
364
|
+
.every(entry => {
|
|
365
|
+
const target = entry.target as HTMLInputElement;
|
|
366
|
+
return target.hasAttribute('disabled') || target.hasAttribute('readonly');
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
if (hasDisabledOrReadonly) {
|
|
370
|
+
this.isValid = true;
|
|
371
|
+
this.validationMessage = '';
|
|
372
|
+
} else {
|
|
373
|
+
// When using a synergy element, we need to check the validity after the element is updated,
|
|
374
|
+
// as we cannot rely on the validity state of the element itself.
|
|
375
|
+
// Unfortunately, this depends on used browser :(.
|
|
376
|
+
const waitForPromise = input instanceof SynergyElement
|
|
377
|
+
? input.updateComplete
|
|
378
|
+
: Promise.resolve();
|
|
379
|
+
|
|
380
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
381
|
+
waitForPromise.then(() => {
|
|
382
|
+
this.isValid = input?.validity?.valid ?? false;
|
|
383
|
+
this.validationMessage = input?.validationMessage ?? '';
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
this.observer.observe(this, {
|
|
389
|
+
attributeFilter: ['disabled', 'readonly'],
|
|
390
|
+
attributes: true,
|
|
391
|
+
subtree: true,
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
disconnectedCallback() {
|
|
396
|
+
super.disconnectedCallback();
|
|
397
|
+
this.controller.abort();
|
|
398
|
+
this?.observer?.disconnect();
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
private renderInlineValidation() {
|
|
402
|
+
if (this.variant !== 'inline' || !this.validationMessage) {
|
|
403
|
+
return '';
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
return html`
|
|
407
|
+
<syn-alert
|
|
408
|
+
open
|
|
409
|
+
exportparts="base:alert__base,message:alert__message,icon:alert__icon"
|
|
410
|
+
part="alert"
|
|
411
|
+
variant="danger"
|
|
412
|
+
>
|
|
413
|
+
${!this.hideIcon
|
|
414
|
+
? html`<syn-icon slot="icon" name="error" library="system"></syn-icon>`
|
|
415
|
+
: ''
|
|
416
|
+
}
|
|
417
|
+
${this.validationMessage}
|
|
418
|
+
</syn-alert>
|
|
419
|
+
`;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
render() {
|
|
423
|
+
return html`
|
|
424
|
+
<div
|
|
425
|
+
class="validate"
|
|
426
|
+
part="base"
|
|
427
|
+
>
|
|
428
|
+
<slot
|
|
429
|
+
class="validate__input-wrapper"
|
|
430
|
+
part="input-wrapper"
|
|
431
|
+
></slot>
|
|
432
|
+
|
|
433
|
+
${this.renderInlineValidation()}
|
|
434
|
+
</div>
|
|
435
|
+
`;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
// ---------------------------------------------------------------------
|
|
3
|
+
// 🔒 AUTOGENERATED @synergy-design-system/vue wrappers for @synergy-design-system/components
|
|
4
|
+
// Please do not edit this file directly!
|
|
5
|
+
// It will get recreated when running pnpm build.
|
|
6
|
+
// ---------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @summary Validate provides form field validation messages in a unified way.
|
|
10
|
+
* It does this by using [the native browser validation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation)
|
|
11
|
+
* and showing the validation message in a consistent, user defined way.
|
|
12
|
+
* @documentation https://synergy-design-system.github.io/?path=/docs/components-syn-validate--docs
|
|
13
|
+
* @dependency syn-alert
|
|
14
|
+
*
|
|
15
|
+
* @slot - The form field that should be validated.
|
|
16
|
+
* Avoid slotting in more than one element, as subsequent ones will be ignored.
|
|
17
|
+
*
|
|
18
|
+
* @csspart base - The component's base wrapper.
|
|
19
|
+
* @csspart input-wrapper - The container that wraps the form field.
|
|
20
|
+
* @csspart alert - The syn-alert that is shown when the variant is set to "inline".
|
|
21
|
+
* @csspart alert__base - The container that wraps the alert.
|
|
22
|
+
* @csspart alert__message - The container that wraps the alert message.
|
|
23
|
+
* @csspart alert__icon - The container that wraps the alert icon.
|
|
24
|
+
*/
|
|
25
|
+
import { computed, ref } from 'vue';
|
|
26
|
+
import '@synergy-design-system/components/components/validate/validate.js';
|
|
27
|
+
|
|
28
|
+
import type { SynValidate } from '@synergy-design-system/components';
|
|
29
|
+
|
|
30
|
+
// DOM Reference to the element
|
|
31
|
+
const nativeElement = ref<SynValidate>();
|
|
32
|
+
|
|
33
|
+
defineExpose({
|
|
34
|
+
nativeElement,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Map attributes
|
|
38
|
+
const props = defineProps<{
|
|
39
|
+
/**
|
|
40
|
+
* The variant that should be used to show validation alerts.
|
|
41
|
+
|
|
42
|
+
The following variants are supported:
|
|
43
|
+
- **native** (default): Uses the native browser validation, usually a browser tooltip.
|
|
44
|
+
- **inline**: Show the validation message underneath the element, using a `<syn-alert>`
|
|
45
|
+
*/
|
|
46
|
+
variant?: SynValidate['variant'];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Do not show the error icon when using the inline variant validation
|
|
50
|
+
*/
|
|
51
|
+
hideIcon?: SynValidate['hideIcon'];
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Defines the events that trigger the validation.
|
|
55
|
+
`invalid` will always automatically be included.
|
|
56
|
+
You may also use the `live` keyword to validate on every input change.
|
|
57
|
+
`live` will make sure to listen to the `invalid`, `input` and `blur` events.
|
|
58
|
+
|
|
59
|
+
Please have a look at the [documentation for native form validation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation)
|
|
60
|
+
and [the use of form invalid events](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/invalid_event) for further information.
|
|
61
|
+
*/
|
|
62
|
+
on?: SynValidate['on'];
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Custom validation message to be displayed when the input is invalid.
|
|
66
|
+
Will override the default browser validation message.
|
|
67
|
+
Set to an empty string to reset the validation message.
|
|
68
|
+
*/
|
|
69
|
+
customValidationMessage?: SynValidate['customValidationMessage'];
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Set this to true to validate the input immediately when it is rendered.
|
|
73
|
+
Best used with a `variant` of `inline`.
|
|
74
|
+
When setting eager, the input will not be focused automatically.
|
|
75
|
+
|
|
76
|
+
When using a `variant` of `native` the browser will focus
|
|
77
|
+
the last eager field as it is using a tooltip.
|
|
78
|
+
In this case it is better to just provide one eager field.
|
|
79
|
+
*/
|
|
80
|
+
eager?: SynValidate['eager'];
|
|
81
|
+
}>();
|
|
82
|
+
|
|
83
|
+
// Make sure prop binding only forwards the props that are actually there.
|
|
84
|
+
// This is needed because :param="param" also adds an empty attribute
|
|
85
|
+
// when using web-components, which breaks optional arguments like size in SynInput
|
|
86
|
+
// @see https://github.com/vuejs/core/issues/5190#issuecomment-1003112498
|
|
87
|
+
const visibleProps = computed(() =>
|
|
88
|
+
Object.fromEntries(
|
|
89
|
+
Object.entries(props).filter(([, value]) => typeof value !== 'undefined'),
|
|
90
|
+
),
|
|
91
|
+
);
|
|
92
|
+
</script>
|
|
93
|
+
|
|
94
|
+
<template>
|
|
95
|
+
<syn-validate v-bind="visibleProps" ref="nativeElement">
|
|
96
|
+
<slot></slot>
|
|
97
|
+
</syn-validate>
|
|
98
|
+
</template>
|