@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.
Files changed (449) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/README.md +539 -3
  3. package/dist/bin/create-checksum.d.ts +2 -0
  4. package/dist/bin/create-checksum.js +23 -0
  5. package/dist/bin/start.d.ts +2 -0
  6. package/dist/bin/start.js +8 -0
  7. package/dist/build/assets.d.ts +4 -0
  8. package/dist/build/assets.js +57 -0
  9. package/dist/build/build.d.ts +1 -0
  10. package/dist/build/build.js +33 -0
  11. package/dist/build/components.d.ts +4 -0
  12. package/dist/build/components.js +132 -0
  13. package/dist/build/frameworks.d.ts +4 -0
  14. package/dist/build/frameworks.js +61 -0
  15. package/dist/build/static.d.ts +4 -0
  16. package/dist/build/static.js +52 -0
  17. package/dist/build/styles.d.ts +4 -0
  18. package/dist/build/styles.js +58 -0
  19. package/dist/build/tokens.d.ts +4 -0
  20. package/dist/build/tokens.js +59 -0
  21. package/dist/server.d.ts +6 -0
  22. package/dist/server.js +20 -0
  23. package/dist/tools/asset-info.d.ts +8 -0
  24. package/dist/tools/asset-info.js +108 -0
  25. package/dist/tools/asset-list.d.ts +6 -0
  26. package/dist/tools/asset-list.js +40 -0
  27. package/dist/tools/component-info.d.ts +6 -0
  28. package/dist/tools/component-info.js +35 -0
  29. package/dist/tools/component-list.d.ts +7 -0
  30. package/dist/tools/component-list.js +42 -0
  31. package/dist/tools/davinci-migration.d.ts +3 -0
  32. package/dist/tools/davinci-migration.js +66 -0
  33. package/dist/tools/framework-info.d.ts +7 -0
  34. package/dist/tools/framework-info.js +59 -0
  35. package/dist/tools/index.d.ts +13 -0
  36. package/dist/tools/index.js +13 -0
  37. package/dist/tools/migration-info.d.ts +6 -0
  38. package/dist/tools/migration-info.js +27 -0
  39. package/dist/tools/styles-info.d.ts +7 -0
  40. package/dist/tools/styles-info.js +28 -0
  41. package/dist/tools/styles-list.d.ts +7 -0
  42. package/dist/tools/styles-list.js +42 -0
  43. package/dist/tools/template-info.d.ts +6 -0
  44. package/dist/tools/template-info.js +34 -0
  45. package/dist/tools/template-list.d.ts +7 -0
  46. package/dist/tools/template-list.js +42 -0
  47. package/dist/tools/tokens.d.ts +7 -0
  48. package/dist/tools/tokens.js +24 -0
  49. package/dist/tools/version.d.ts +7 -0
  50. package/dist/tools/version.js +51 -0
  51. package/dist/utilities/assets.d.ts +1 -0
  52. package/dist/utilities/assets.js +3 -0
  53. package/dist/utilities/checksum.d.ts +36 -0
  54. package/dist/utilities/checksum.js +93 -0
  55. package/dist/utilities/components.d.ts +25 -0
  56. package/dist/utilities/components.js +86 -0
  57. package/dist/utilities/config.d.ts +76 -0
  58. package/dist/utilities/config.js +77 -0
  59. package/dist/utilities/file.d.ts +12 -0
  60. package/dist/utilities/file.js +31 -0
  61. package/dist/utilities/index.d.ts +12 -0
  62. package/dist/utilities/index.js +12 -0
  63. package/dist/utilities/metadata.d.ts +28 -0
  64. package/dist/utilities/metadata.js +57 -0
  65. package/dist/utilities/migration.d.ts +1 -0
  66. package/dist/utilities/migration.js +10 -0
  67. package/dist/utilities/stdio.d.ts +14 -0
  68. package/dist/utilities/stdio.js +60 -0
  69. package/dist/utilities/storybook/build-docs.d.ts +2 -0
  70. package/dist/utilities/storybook/build-docs.js +42 -0
  71. package/dist/utilities/storybook/configs.d.ts +13 -0
  72. package/dist/utilities/storybook/configs.js +85 -0
  73. package/dist/utilities/storybook/docs-scraper.d.ts +26 -0
  74. package/dist/utilities/storybook/docs-scraper.js +97 -0
  75. package/dist/utilities/storybook/index.d.ts +5 -0
  76. package/dist/utilities/storybook/index.js +4 -0
  77. package/dist/utilities/storybook/scraper.d.ts +14 -0
  78. package/dist/utilities/storybook/scraper.js +196 -0
  79. package/dist/utilities/storybook/storybook-manager.d.ts +29 -0
  80. package/dist/utilities/storybook/storybook-manager.js +139 -0
  81. package/dist/utilities/storybook/types.d.ts +22 -0
  82. package/dist/utilities/storybook/types.js +1 -0
  83. package/dist/utilities/styles.d.ts +6 -0
  84. package/dist/utilities/styles.js +24 -0
  85. package/dist/utilities/templates.d.ts +12 -0
  86. package/dist/utilities/templates.js +28 -0
  87. package/dist/utilities/tokens.d.ts +1 -0
  88. package/dist/utilities/tokens.js +21 -0
  89. package/dist/utilities/version.d.ts +10 -0
  90. package/dist/utilities/version.js +21 -0
  91. package/metadata/checksum.txt +1 -0
  92. package/metadata/davinci-migration/migration-guide.md +1859 -0
  93. package/metadata/packages/angular/LIMITATIONS.md +32 -0
  94. package/metadata/packages/angular/README.md +393 -0
  95. package/metadata/packages/assets/CHANGELOG.md +189 -0
  96. package/metadata/packages/assets/README.md +78 -0
  97. package/metadata/packages/components/components/syn-accordion/component.angular.ts +80 -0
  98. package/metadata/packages/components/components/syn-accordion/component.react.ts +30 -0
  99. package/metadata/packages/components/components/syn-accordion/component.styles.ts +15 -0
  100. package/metadata/packages/components/components/syn-accordion/component.ts +111 -0
  101. package/metadata/packages/components/components/syn-accordion/component.vue +64 -0
  102. package/metadata/packages/components/components/syn-alert/component.angular.ts +158 -0
  103. package/metadata/packages/components/components/syn-alert/component.custom.styles.ts +90 -0
  104. package/metadata/packages/components/components/syn-alert/component.react.ts +60 -0
  105. package/metadata/packages/components/components/syn-alert/component.styles.ts +110 -0
  106. package/metadata/packages/components/components/syn-alert/component.ts +324 -0
  107. package/metadata/packages/components/components/syn-alert/component.vue +130 -0
  108. package/metadata/packages/components/components/syn-badge/component.angular.ts +53 -0
  109. package/metadata/packages/components/components/syn-badge/component.custom.styles.ts +61 -0
  110. package/metadata/packages/components/components/syn-badge/component.react.ts +29 -0
  111. package/metadata/packages/components/components/syn-badge/component.styles.ts +59 -0
  112. package/metadata/packages/components/components/syn-badge/component.ts +65 -0
  113. package/metadata/packages/components/components/syn-badge/component.vue +53 -0
  114. package/metadata/packages/components/components/syn-breadcrumb/component.angular.ts +58 -0
  115. package/metadata/packages/components/components/syn-breadcrumb/component.custom.styles.ts +5 -0
  116. package/metadata/packages/components/components/syn-breadcrumb/component.react.ts +32 -0
  117. package/metadata/packages/components/components/syn-breadcrumb/component.styles.ts +18 -0
  118. package/metadata/packages/components/components/syn-breadcrumb/component.ts +110 -0
  119. package/metadata/packages/components/components/syn-breadcrumb/component.vue +58 -0
  120. package/metadata/packages/components/components/syn-breadcrumb-item/component.angular.ts +88 -0
  121. package/metadata/packages/components/components/syn-breadcrumb-item/component.custom.styles.ts +74 -0
  122. package/metadata/packages/components/components/syn-breadcrumb-item/component.react.ts +37 -0
  123. package/metadata/packages/components/components/syn-breadcrumb-item/component.styles.ts +95 -0
  124. package/metadata/packages/components/components/syn-breadcrumb-item/component.ts +139 -0
  125. package/metadata/packages/components/components/syn-breadcrumb-item/component.vue +76 -0
  126. package/metadata/packages/components/components/syn-button/component.angular.ts +318 -0
  127. package/metadata/packages/components/components/syn-button/component.custom.styles.ts +206 -0
  128. package/metadata/packages/components/components/syn-button/component.react.ts +56 -0
  129. package/metadata/packages/components/components/syn-button/component.styles.ts +368 -0
  130. package/metadata/packages/components/components/syn-button/component.ts +322 -0
  131. package/metadata/packages/components/components/syn-button/component.vue +204 -0
  132. package/metadata/packages/components/components/syn-button-group/component.angular.ts +55 -0
  133. package/metadata/packages/components/components/syn-button-group/component.react.ts +29 -0
  134. package/metadata/packages/components/components/syn-button-group/component.styles.ts +21 -0
  135. package/metadata/packages/components/components/syn-button-group/component.ts +103 -0
  136. package/metadata/packages/components/components/syn-button-group/component.vue +55 -0
  137. package/metadata/packages/components/components/syn-card/component.angular.ts +69 -0
  138. package/metadata/packages/components/components/syn-card/component.custom.styles.ts +55 -0
  139. package/metadata/packages/components/components/syn-card/component.react.ts +41 -0
  140. package/metadata/packages/components/components/syn-card/component.styles.ts +77 -0
  141. package/metadata/packages/components/components/syn-card/component.ts +68 -0
  142. package/metadata/packages/components/components/syn-card/component.vue +67 -0
  143. package/metadata/packages/components/components/syn-checkbox/component.angular.ts +260 -0
  144. package/metadata/packages/components/components/syn-checkbox/component.custom.styles.ts +53 -0
  145. package/metadata/packages/components/components/syn-checkbox/component.react.ts +64 -0
  146. package/metadata/packages/components/components/syn-checkbox/component.styles.ts +130 -0
  147. package/metadata/packages/components/components/syn-checkbox/component.ts +291 -0
  148. package/metadata/packages/components/components/syn-checkbox/component.vue +186 -0
  149. package/metadata/packages/components/components/syn-combobox/component.angular.ts +436 -0
  150. package/metadata/packages/components/components/syn-combobox/component.custom.styles.ts +35 -0
  151. package/metadata/packages/components/components/syn-combobox/component.react.ts +109 -0
  152. package/metadata/packages/components/components/syn-combobox/component.styles.ts +406 -0
  153. package/metadata/packages/components/components/syn-combobox/component.ts +1139 -0
  154. package/metadata/packages/components/components/syn-combobox/component.vue +304 -0
  155. package/metadata/packages/components/components/syn-details/component.angular.ts +184 -0
  156. package/metadata/packages/components/components/syn-details/component.custom.styles.ts +140 -0
  157. package/metadata/packages/components/components/syn-details/component.react.ts +63 -0
  158. package/metadata/packages/components/components/syn-details/component.styles.ts +90 -0
  159. package/metadata/packages/components/components/syn-details/component.ts +266 -0
  160. package/metadata/packages/components/components/syn-details/component.vue +134 -0
  161. package/metadata/packages/components/components/syn-dialog/component.angular.ts +201 -0
  162. package/metadata/packages/components/components/syn-dialog/component.custom.styles.ts +54 -0
  163. package/metadata/packages/components/components/syn-dialog/component.react.ts +91 -0
  164. package/metadata/packages/components/components/syn-dialog/component.styles.ts +129 -0
  165. package/metadata/packages/components/components/syn-dialog/component.ts +366 -0
  166. package/metadata/packages/components/components/syn-dialog/component.vue +169 -0
  167. package/metadata/packages/components/components/syn-divider/component.angular.ts +55 -0
  168. package/metadata/packages/components/components/syn-divider/component.custom.styles.ts +8 -0
  169. package/metadata/packages/components/components/syn-divider/component.react.ts +29 -0
  170. package/metadata/packages/components/components/syn-divider/component.styles.ts +31 -0
  171. package/metadata/packages/components/components/syn-divider/component.ts +42 -0
  172. package/metadata/packages/components/components/syn-divider/component.vue +51 -0
  173. package/metadata/packages/components/components/syn-drawer/component.angular.ts +234 -0
  174. package/metadata/packages/components/components/syn-drawer/component.custom.styles.ts +78 -0
  175. package/metadata/packages/components/components/syn-drawer/component.react.ts +98 -0
  176. package/metadata/packages/components/components/syn-drawer/component.styles.ts +165 -0
  177. package/metadata/packages/components/components/syn-drawer/component.ts +496 -0
  178. package/metadata/packages/components/components/syn-drawer/component.vue +188 -0
  179. package/metadata/packages/components/components/syn-dropdown/component.angular.ts +223 -0
  180. package/metadata/packages/components/components/syn-dropdown/component.custom.styles.ts +5 -0
  181. package/metadata/packages/components/components/syn-dropdown/component.react.ts +59 -0
  182. package/metadata/packages/components/components/syn-dropdown/component.styles.ts +60 -0
  183. package/metadata/packages/components/components/syn-dropdown/component.ts +484 -0
  184. package/metadata/packages/components/components/syn-dropdown/component.vue +159 -0
  185. package/metadata/packages/components/components/syn-file/component.angular.ts +359 -0
  186. package/metadata/packages/components/components/syn-file/component.react.ts +85 -0
  187. package/metadata/packages/components/components/syn-file/component.styles.ts +179 -0
  188. package/metadata/packages/components/components/syn-file/component.ts +631 -0
  189. package/metadata/packages/components/components/syn-file/component.vue +251 -0
  190. package/metadata/packages/components/components/syn-header/component.angular.ts +132 -0
  191. package/metadata/packages/components/components/syn-header/component.react.ts +65 -0
  192. package/metadata/packages/components/components/syn-header/component.styles.ts +128 -0
  193. package/metadata/packages/components/components/syn-header/component.ts +260 -0
  194. package/metadata/packages/components/components/syn-header/component.vue +117 -0
  195. package/metadata/packages/components/components/syn-icon/component.angular.ts +115 -0
  196. package/metadata/packages/components/components/syn-icon/component.custom.styles.ts +5 -0
  197. package/metadata/packages/components/components/syn-icon/component.react.ts +41 -0
  198. package/metadata/packages/components/components/syn-icon/component.styles.ts +25 -0
  199. package/metadata/packages/components/components/syn-icon/component.ts +234 -0
  200. package/metadata/packages/components/components/syn-icon/component.vue +100 -0
  201. package/metadata/packages/components/components/syn-icon-button/component.angular.ts +185 -0
  202. package/metadata/packages/components/components/syn-icon-button/component.custom.styles.ts +68 -0
  203. package/metadata/packages/components/components/syn-icon-button/component.react.ts +42 -0
  204. package/metadata/packages/components/components/syn-icon-button/component.styles.ts +59 -0
  205. package/metadata/packages/components/components/syn-icon-button/component.ts +154 -0
  206. package/metadata/packages/components/components/syn-icon-button/component.vue +132 -0
  207. package/metadata/packages/components/components/syn-input/component.angular.ts +606 -0
  208. package/metadata/packages/components/components/syn-input/component.custom.styles.ts +278 -0
  209. package/metadata/packages/components/components/syn-input/component.react.ts +91 -0
  210. package/metadata/packages/components/components/syn-input/component.styles.ts +287 -0
  211. package/metadata/packages/components/components/syn-input/component.ts +942 -0
  212. package/metadata/packages/components/components/syn-input/component.vue +370 -0
  213. package/metadata/packages/components/components/syn-menu/component.angular.ts +52 -0
  214. package/metadata/packages/components/components/syn-menu/component.custom.styles.ts +29 -0
  215. package/metadata/packages/components/components/syn-menu/component.react.ts +36 -0
  216. package/metadata/packages/components/components/syn-menu/component.styles.ts +27 -0
  217. package/metadata/packages/components/components/syn-menu/component.ts +199 -0
  218. package/metadata/packages/components/components/syn-menu/component.vue +48 -0
  219. package/metadata/packages/components/components/syn-menu-item/component.angular.ts +121 -0
  220. package/metadata/packages/components/components/syn-menu-item/component.custom.styles.ts +128 -0
  221. package/metadata/packages/components/components/syn-menu-item/component.react.ts +45 -0
  222. package/metadata/packages/components/components/syn-menu-item/component.styles.ts +164 -0
  223. package/metadata/packages/components/components/syn-menu-item/component.ts +209 -0
  224. package/metadata/packages/components/components/syn-menu-item/component.vue +91 -0
  225. package/metadata/packages/components/components/syn-menu-label/component.angular.ts +48 -0
  226. package/metadata/packages/components/components/syn-menu-label/component.custom.styles.ts +24 -0
  227. package/metadata/packages/components/components/syn-menu-label/component.react.ts +35 -0
  228. package/metadata/packages/components/components/syn-menu-label/component.styles.ts +28 -0
  229. package/metadata/packages/components/components/syn-menu-label/component.ts +54 -0
  230. package/metadata/packages/components/components/syn-menu-label/component.vue +41 -0
  231. package/metadata/packages/components/components/syn-nav-item/component.angular.ts +242 -0
  232. package/metadata/packages/components/components/syn-nav-item/component.react.ts +82 -0
  233. package/metadata/packages/components/components/syn-nav-item/component.styles.ts +337 -0
  234. package/metadata/packages/components/components/syn-nav-item/component.ts +492 -0
  235. package/metadata/packages/components/components/syn-nav-item/component.vue +182 -0
  236. package/metadata/packages/components/components/syn-optgroup/component.angular.ts +79 -0
  237. package/metadata/packages/components/components/syn-optgroup/component.react.ts +41 -0
  238. package/metadata/packages/components/components/syn-optgroup/component.styles.ts +59 -0
  239. package/metadata/packages/components/components/syn-optgroup/component.ts +176 -0
  240. package/metadata/packages/components/components/syn-optgroup/component.vue +71 -0
  241. package/metadata/packages/components/components/syn-option/component.angular.ts +79 -0
  242. package/metadata/packages/components/components/syn-option/component.custom.styles.ts +81 -0
  243. package/metadata/packages/components/components/syn-option/component.react.ts +37 -0
  244. package/metadata/packages/components/components/syn-option/component.styles.ts +96 -0
  245. package/metadata/packages/components/components/syn-option/component.ts +174 -0
  246. package/metadata/packages/components/components/syn-option/component.vue +71 -0
  247. package/metadata/packages/components/components/syn-popup/component.angular.ts +385 -0
  248. package/metadata/packages/components/components/syn-popup/component.react.ts +55 -0
  249. package/metadata/packages/components/components/syn-popup/component.styles.ts +70 -0
  250. package/metadata/packages/components/components/syn-popup/component.ts +583 -0
  251. package/metadata/packages/components/components/syn-popup/component.vue +240 -0
  252. package/metadata/packages/components/components/syn-prio-nav/component.angular.ts +67 -0
  253. package/metadata/packages/components/components/syn-prio-nav/component.react.ts +54 -0
  254. package/metadata/packages/components/components/syn-prio-nav/component.styles.ts +48 -0
  255. package/metadata/packages/components/components/syn-prio-nav/component.ts +287 -0
  256. package/metadata/packages/components/components/syn-prio-nav/component.vue +60 -0
  257. package/metadata/packages/components/components/syn-progress-bar/component.angular.ts +85 -0
  258. package/metadata/packages/components/components/syn-progress-bar/component.custom.styles.ts +22 -0
  259. package/metadata/packages/components/components/syn-progress-bar/component.react.ts +37 -0
  260. package/metadata/packages/components/components/syn-progress-bar/component.styles.ts +94 -0
  261. package/metadata/packages/components/components/syn-progress-bar/component.ts +74 -0
  262. package/metadata/packages/components/components/syn-progress-bar/component.vue +71 -0
  263. package/metadata/packages/components/components/syn-progress-ring/component.angular.ts +72 -0
  264. package/metadata/packages/components/components/syn-progress-ring/component.custom.styles.ts +17 -0
  265. package/metadata/packages/components/components/syn-progress-ring/component.react.ts +37 -0
  266. package/metadata/packages/components/components/syn-progress-ring/component.styles.ts +77 -0
  267. package/metadata/packages/components/components/syn-progress-ring/component.ts +90 -0
  268. package/metadata/packages/components/components/syn-progress-ring/component.vue +66 -0
  269. package/metadata/packages/components/components/syn-radio/component.angular.ts +109 -0
  270. package/metadata/packages/components/components/syn-radio/component.custom.styles.ts +64 -0
  271. package/metadata/packages/components/components/syn-radio/component.react.ts +48 -0
  272. package/metadata/packages/components/components/syn-radio/component.styles.ts +124 -0
  273. package/metadata/packages/components/components/syn-radio/component.ts +129 -0
  274. package/metadata/packages/components/components/syn-radio/component.vue +99 -0
  275. package/metadata/packages/components/components/syn-radio-button/component.angular.ts +123 -0
  276. package/metadata/packages/components/components/syn-radio-button/component.react.ts +49 -0
  277. package/metadata/packages/components/components/syn-radio-button/component.styles.ts +37 -0
  278. package/metadata/packages/components/components/syn-radio-button/component.ts +149 -0
  279. package/metadata/packages/components/components/syn-radio-button/component.vue +105 -0
  280. package/metadata/packages/components/components/syn-radio-group/component.angular.ts +204 -0
  281. package/metadata/packages/components/components/syn-radio-group/component.custom.styles.ts +22 -0
  282. package/metadata/packages/components/components/syn-radio-group/component.react.ts +56 -0
  283. package/metadata/packages/components/components/syn-radio-group/component.styles.ts +44 -0
  284. package/metadata/packages/components/components/syn-radio-group/component.ts +418 -0
  285. package/metadata/packages/components/components/syn-radio-group/component.vue +158 -0
  286. package/metadata/packages/components/components/syn-range/component.angular.ts +334 -0
  287. package/metadata/packages/components/components/syn-range/component.react.ts +92 -0
  288. package/metadata/packages/components/components/syn-range/component.styles.ts +284 -0
  289. package/metadata/packages/components/components/syn-range/component.ts +878 -0
  290. package/metadata/packages/components/components/syn-range/component.vue +240 -0
  291. package/metadata/packages/components/components/syn-range-tick/component.angular.ts +59 -0
  292. package/metadata/packages/components/components/syn-range-tick/component.react.ts +33 -0
  293. package/metadata/packages/components/components/syn-range-tick/component.styles.ts +34 -0
  294. package/metadata/packages/components/components/syn-range-tick/component.ts +50 -0
  295. package/metadata/packages/components/components/syn-range-tick/component.vue +57 -0
  296. package/metadata/packages/components/components/syn-resize-observer/component.styles.ts +16 -0
  297. package/metadata/packages/components/components/syn-resize-observer/component.ts +98 -0
  298. package/metadata/packages/components/components/syn-select/component.angular.ts +441 -0
  299. package/metadata/packages/components/components/syn-select/component.custom.styles.ts +176 -0
  300. package/metadata/packages/components/components/syn-select/component.react.ts +101 -0
  301. package/metadata/packages/components/components/syn-select/component.styles.ts +316 -0
  302. package/metadata/packages/components/components/syn-select/component.ts +1054 -0
  303. package/metadata/packages/components/components/syn-select/component.vue +303 -0
  304. package/metadata/packages/components/components/syn-side-nav/component.angular.ts +231 -0
  305. package/metadata/packages/components/components/syn-side-nav/component.react.ts +95 -0
  306. package/metadata/packages/components/components/syn-side-nav/component.styles.ts +160 -0
  307. package/metadata/packages/components/components/syn-side-nav/component.ts +492 -0
  308. package/metadata/packages/components/components/syn-side-nav/component.vue +201 -0
  309. package/metadata/packages/components/components/syn-spinner/component.angular.ts +44 -0
  310. package/metadata/packages/components/components/syn-spinner/component.custom.styles.ts +31 -0
  311. package/metadata/packages/components/components/syn-spinner/component.react.ts +31 -0
  312. package/metadata/packages/components/components/syn-spinner/component.styles.ts +55 -0
  313. package/metadata/packages/components/components/syn-spinner/component.ts +42 -0
  314. package/metadata/packages/components/components/syn-spinner/component.vue +35 -0
  315. package/metadata/packages/components/components/syn-switch/component.angular.ts +244 -0
  316. package/metadata/packages/components/components/syn-switch/component.custom.styles.ts +112 -0
  317. package/metadata/packages/components/components/syn-switch/component.react.ts +63 -0
  318. package/metadata/packages/components/components/syn-switch/component.styles.ts +177 -0
  319. package/metadata/packages/components/components/syn-switch/component.ts +274 -0
  320. package/metadata/packages/components/components/syn-switch/component.vue +178 -0
  321. package/metadata/packages/components/components/syn-tab/component.angular.ts +109 -0
  322. package/metadata/packages/components/components/syn-tab/component.custom.styles.ts +92 -0
  323. package/metadata/packages/components/components/syn-tab/component.react.ts +42 -0
  324. package/metadata/packages/components/components/syn-tab/component.styles.ts +77 -0
  325. package/metadata/packages/components/components/syn-tab/component.ts +132 -0
  326. package/metadata/packages/components/components/syn-tab/component.vue +91 -0
  327. package/metadata/packages/components/components/syn-tab-group/component.angular.ts +166 -0
  328. package/metadata/packages/components/components/syn-tab-group/component.custom.styles.ts +248 -0
  329. package/metadata/packages/components/components/syn-tab-group/component.react.ts +58 -0
  330. package/metadata/packages/components/components/syn-tab-group/component.styles.ts +200 -0
  331. package/metadata/packages/components/components/syn-tab-group/component.ts +557 -0
  332. package/metadata/packages/components/components/syn-tab-group/component.vue +126 -0
  333. package/metadata/packages/components/components/syn-tab-panel/component.angular.ts +68 -0
  334. package/metadata/packages/components/components/syn-tab-panel/component.custom.styles.ts +8 -0
  335. package/metadata/packages/components/components/syn-tab-panel/component.react.ts +31 -0
  336. package/metadata/packages/components/components/syn-tab-panel/component.styles.ts +27 -0
  337. package/metadata/packages/components/components/syn-tab-panel/component.ts +67 -0
  338. package/metadata/packages/components/components/syn-tab-panel/component.vue +60 -0
  339. package/metadata/packages/components/components/syn-tag/component.angular.ts +83 -0
  340. package/metadata/packages/components/components/syn-tag/component.custom.styles.ts +120 -0
  341. package/metadata/packages/components/components/syn-tag/component.react.ts +43 -0
  342. package/metadata/packages/components/components/syn-tag/component.styles.ts +65 -0
  343. package/metadata/packages/components/components/syn-tag/component.ts +90 -0
  344. package/metadata/packages/components/components/syn-tag/component.vue +81 -0
  345. package/metadata/packages/components/components/syn-textarea/component.angular.ts +394 -0
  346. package/metadata/packages/components/components/syn-textarea/component.custom.styles.ts +18 -0
  347. package/metadata/packages/components/components/syn-textarea/component.react.ts +60 -0
  348. package/metadata/packages/components/components/syn-textarea/component.styles.ts +187 -0
  349. package/metadata/packages/components/components/syn-textarea/component.ts +401 -0
  350. package/metadata/packages/components/components/syn-textarea/component.vue +244 -0
  351. package/metadata/packages/components/components/syn-tooltip/component.angular.ts +212 -0
  352. package/metadata/packages/components/components/syn-tooltip/component.custom.styles.ts +13 -0
  353. package/metadata/packages/components/components/syn-tooltip/component.react.ts +63 -0
  354. package/metadata/packages/components/components/syn-tooltip/component.styles.ts +64 -0
  355. package/metadata/packages/components/components/syn-tooltip/component.ts +319 -0
  356. package/metadata/packages/components/components/syn-tooltip/component.vue +158 -0
  357. package/metadata/packages/components/components/syn-validate/component.angular.ts +128 -0
  358. package/metadata/packages/components/components/syn-validate/component.react.ts +36 -0
  359. package/metadata/packages/components/components/syn-validate/component.styles.ts +9 -0
  360. package/metadata/packages/components/components/syn-validate/component.ts +437 -0
  361. package/metadata/packages/components/components/syn-validate/component.vue +98 -0
  362. package/metadata/packages/components/migration/BREAKING_CHANGES.md +489 -0
  363. package/metadata/packages/components/static/CHANGELOG.md +1100 -0
  364. package/metadata/packages/components/static/LIMITATIONS.md +269 -0
  365. package/metadata/packages/components/static/README.md +248 -0
  366. package/metadata/packages/react/LIMITATIONS.md +31 -0
  367. package/metadata/packages/react/README.md +262 -0
  368. package/metadata/packages/styles/CHANGELOG.md +76 -0
  369. package/metadata/packages/styles/README.md +132 -0
  370. package/metadata/packages/styles/index.css +309 -0
  371. package/metadata/packages/styles/link-list.css +47 -0
  372. package/metadata/packages/styles/link.css +79 -0
  373. package/metadata/packages/styles/tables.css +143 -0
  374. package/metadata/packages/styles/typography.css +52 -0
  375. package/metadata/packages/tokens/CHANGELOG.md +431 -0
  376. package/metadata/packages/tokens/README.md +408 -0
  377. package/metadata/packages/tokens/dark.css +268 -0
  378. package/metadata/packages/tokens/index.js +1294 -0
  379. package/metadata/packages/tokens/light.css +268 -0
  380. package/metadata/packages/vue/LIMITATIONS.md +53 -0
  381. package/metadata/packages/vue/README.md +252 -0
  382. package/metadata/static/angular/index.md +6 -0
  383. package/metadata/static/assets/index.md +10 -0
  384. package/metadata/static/component-info/index.md +24 -0
  385. package/metadata/static/component-list/index.md +34 -0
  386. package/metadata/static/components/index.md +10 -0
  387. package/metadata/static/components/syn-accordion/docs.md +428 -0
  388. package/metadata/static/components/syn-alert/docs.md +231 -0
  389. package/metadata/static/components/syn-badge/docs.md +128 -0
  390. package/metadata/static/components/syn-breadcrumb/docs.md +265 -0
  391. package/metadata/static/components/syn-breadcrumb-item/docs.md +49 -0
  392. package/metadata/static/components/syn-button/docs.md +402 -0
  393. package/metadata/static/components/syn-card/docs.md +273 -0
  394. package/metadata/static/components/syn-checkbox/docs.md +77 -0
  395. package/metadata/static/components/syn-combobox/docs.md +2402 -0
  396. package/metadata/static/components/syn-details/docs.md +220 -0
  397. package/metadata/static/components/syn-dialog/docs.md +222 -0
  398. package/metadata/static/components/syn-divider/docs.md +77 -0
  399. package/metadata/static/components/syn-drawer/docs.md +271 -0
  400. package/metadata/static/components/syn-dropdown/docs.md +316 -0
  401. package/metadata/static/components/syn-file/docs.md +215 -0
  402. package/metadata/static/components/syn-header/docs.md +134 -0
  403. package/metadata/static/components/syn-icon/docs.md +177 -0
  404. package/metadata/static/components/syn-icon-button/docs.md +142 -0
  405. package/metadata/static/components/syn-input/docs.md +460 -0
  406. package/metadata/static/components/syn-menu/docs.md +162 -0
  407. package/metadata/static/components/syn-menu-item/docs.md +196 -0
  408. package/metadata/static/components/syn-menu-label/docs.md +29 -0
  409. package/metadata/static/components/syn-nav-item/docs.md +161 -0
  410. package/metadata/static/components/syn-optgroup/docs.md +167 -0
  411. package/metadata/static/components/syn-option/docs.md +137 -0
  412. package/metadata/static/components/syn-prio-nav/docs.md +54 -0
  413. package/metadata/static/components/syn-progress-bar/docs.md +77 -0
  414. package/metadata/static/components/syn-progress-ring/docs.md +89 -0
  415. package/metadata/static/components/syn-radio/docs.md +123 -0
  416. package/metadata/static/components/syn-radio-group/docs.md +363 -0
  417. package/metadata/static/components/syn-range/docs.md +419 -0
  418. package/metadata/static/components/syn-range-tick/docs.md +110 -0
  419. package/metadata/static/components/syn-select/docs.md +730 -0
  420. package/metadata/static/components/syn-side-nav/docs.md +593 -0
  421. package/metadata/static/components/syn-spinner/docs.md +45 -0
  422. package/metadata/static/components/syn-switch/docs.md +74 -0
  423. package/metadata/static/components/syn-tab/docs.md +47 -0
  424. package/metadata/static/components/syn-tab-group/docs.md +1094 -0
  425. package/metadata/static/components/syn-tab-panel/docs.md +91 -0
  426. package/metadata/static/components/syn-tag/docs.md +50 -0
  427. package/metadata/static/components/syn-textarea/docs.md +215 -0
  428. package/metadata/static/components/syn-tooltip/docs.md +144 -0
  429. package/metadata/static/components/syn-validate/docs.md +225 -0
  430. package/metadata/static/migration/index.md +10 -0
  431. package/metadata/static/react/index.md +8 -0
  432. package/metadata/static/setup/icon-usage.md +239 -0
  433. package/metadata/static/setup/prerequisites.md +171 -0
  434. package/metadata/static/styles/index.md +11 -0
  435. package/metadata/static/styles/syn-body.md +5 -0
  436. package/metadata/static/styles/syn-heading.md +5 -0
  437. package/metadata/static/styles/syn-link-list.md +325 -0
  438. package/metadata/static/styles/syn-link.md +156 -0
  439. package/metadata/static/styles/syn-table-cell.md +125 -0
  440. package/metadata/static/styles/syn-table.md +201 -0
  441. package/metadata/static/styles/syn-weight.md +5 -0
  442. package/metadata/static/templates/appshell.md +2061 -0
  443. package/metadata/static/templates/breadcrumb.md +375 -0
  444. package/metadata/static/templates/footer.md +342 -0
  445. package/metadata/static/templates/forms.md +369 -0
  446. package/metadata/static/templates/index.md +9 -0
  447. package/metadata/static/templates/table.md +1426 -0
  448. package/metadata/static/vue/index.md +6 -0
  449. 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>