@synergy-design-system/mcp 0.1.0 → 1.1.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 (450) hide show
  1. package/CHANGELOG.md +15 -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 +57 -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 +140 -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 +2 -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 +196 -0
  96. package/metadata/packages/assets/README.md +79 -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 +73 -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/migration/migration-synergy-v3.md +50 -0
  364. package/metadata/packages/components/static/CHANGELOG.md +1107 -0
  365. package/metadata/packages/components/static/LIMITATIONS.md +269 -0
  366. package/metadata/packages/components/static/README.md +248 -0
  367. package/metadata/packages/react/LIMITATIONS.md +31 -0
  368. package/metadata/packages/react/README.md +262 -0
  369. package/metadata/packages/styles/CHANGELOG.md +76 -0
  370. package/metadata/packages/styles/README.md +132 -0
  371. package/metadata/packages/styles/index.css +309 -0
  372. package/metadata/packages/styles/link-list.css +47 -0
  373. package/metadata/packages/styles/link.css +79 -0
  374. package/metadata/packages/styles/tables.css +143 -0
  375. package/metadata/packages/styles/typography.css +52 -0
  376. package/metadata/packages/tokens/CHANGELOG.md +431 -0
  377. package/metadata/packages/tokens/README.md +408 -0
  378. package/metadata/packages/tokens/dark.css +268 -0
  379. package/metadata/packages/tokens/index.js +1294 -0
  380. package/metadata/packages/tokens/light.css +268 -0
  381. package/metadata/packages/vue/LIMITATIONS.md +53 -0
  382. package/metadata/packages/vue/README.md +252 -0
  383. package/metadata/static/angular/index.md +6 -0
  384. package/metadata/static/assets/index.md +10 -0
  385. package/metadata/static/component-info/index.md +24 -0
  386. package/metadata/static/component-list/index.md +34 -0
  387. package/metadata/static/components/index.md +10 -0
  388. package/metadata/static/components/syn-accordion/docs.md +428 -0
  389. package/metadata/static/components/syn-alert/docs.md +231 -0
  390. package/metadata/static/components/syn-badge/docs.md +128 -0
  391. package/metadata/static/components/syn-breadcrumb/docs.md +265 -0
  392. package/metadata/static/components/syn-breadcrumb-item/docs.md +49 -0
  393. package/metadata/static/components/syn-button/docs.md +402 -0
  394. package/metadata/static/components/syn-card/docs.md +273 -0
  395. package/metadata/static/components/syn-checkbox/docs.md +77 -0
  396. package/metadata/static/components/syn-combobox/docs.md +2402 -0
  397. package/metadata/static/components/syn-details/docs.md +220 -0
  398. package/metadata/static/components/syn-dialog/docs.md +222 -0
  399. package/metadata/static/components/syn-divider/docs.md +77 -0
  400. package/metadata/static/components/syn-drawer/docs.md +271 -0
  401. package/metadata/static/components/syn-dropdown/docs.md +316 -0
  402. package/metadata/static/components/syn-file/docs.md +215 -0
  403. package/metadata/static/components/syn-header/docs.md +134 -0
  404. package/metadata/static/components/syn-icon/docs.md +177 -0
  405. package/metadata/static/components/syn-icon-button/docs.md +142 -0
  406. package/metadata/static/components/syn-input/docs.md +460 -0
  407. package/metadata/static/components/syn-menu/docs.md +162 -0
  408. package/metadata/static/components/syn-menu-item/docs.md +196 -0
  409. package/metadata/static/components/syn-menu-label/docs.md +29 -0
  410. package/metadata/static/components/syn-nav-item/docs.md +161 -0
  411. package/metadata/static/components/syn-optgroup/docs.md +167 -0
  412. package/metadata/static/components/syn-option/docs.md +137 -0
  413. package/metadata/static/components/syn-prio-nav/docs.md +54 -0
  414. package/metadata/static/components/syn-progress-bar/docs.md +77 -0
  415. package/metadata/static/components/syn-progress-ring/docs.md +89 -0
  416. package/metadata/static/components/syn-radio/docs.md +123 -0
  417. package/metadata/static/components/syn-radio-group/docs.md +363 -0
  418. package/metadata/static/components/syn-range/docs.md +419 -0
  419. package/metadata/static/components/syn-range-tick/docs.md +110 -0
  420. package/metadata/static/components/syn-select/docs.md +730 -0
  421. package/metadata/static/components/syn-side-nav/docs.md +593 -0
  422. package/metadata/static/components/syn-spinner/docs.md +45 -0
  423. package/metadata/static/components/syn-switch/docs.md +74 -0
  424. package/metadata/static/components/syn-tab/docs.md +47 -0
  425. package/metadata/static/components/syn-tab-group/docs.md +1094 -0
  426. package/metadata/static/components/syn-tab-panel/docs.md +91 -0
  427. package/metadata/static/components/syn-tag/docs.md +50 -0
  428. package/metadata/static/components/syn-textarea/docs.md +215 -0
  429. package/metadata/static/components/syn-tooltip/docs.md +144 -0
  430. package/metadata/static/components/syn-validate/docs.md +225 -0
  431. package/metadata/static/migration/index.md +16 -0
  432. package/metadata/static/react/index.md +8 -0
  433. package/metadata/static/setup/icon-usage.md +276 -0
  434. package/metadata/static/setup/prerequisites.md +171 -0
  435. package/metadata/static/styles/index.md +11 -0
  436. package/metadata/static/styles/syn-body.md +5 -0
  437. package/metadata/static/styles/syn-heading.md +5 -0
  438. package/metadata/static/styles/syn-link-list.md +325 -0
  439. package/metadata/static/styles/syn-link.md +156 -0
  440. package/metadata/static/styles/syn-table-cell.md +125 -0
  441. package/metadata/static/styles/syn-table.md +201 -0
  442. package/metadata/static/styles/syn-weight.md +5 -0
  443. package/metadata/static/templates/appshell.md +2061 -0
  444. package/metadata/static/templates/breadcrumb.md +375 -0
  445. package/metadata/static/templates/footer.md +342 -0
  446. package/metadata/static/templates/forms.md +369 -0
  447. package/metadata/static/templates/index.md +9 -0
  448. package/metadata/static/templates/table.md +1426 -0
  449. package/metadata/static/vue/index.md +6 -0
  450. package/package.json +109 -4
@@ -0,0 +1,484 @@
1
+ /**
2
+ * ---------------------------------------------------------------------
3
+ * 🔒 AUTOGENERATED BY VENDORISM
4
+ * Removing this comment will prevent it from being managed by it.
5
+ * ---------------------------------------------------------------------
6
+ */
7
+
8
+ /* eslint-disable */
9
+ import { animateTo, stopAnimations } from '../../internal/animate.js';
10
+ import { classMap } from 'lit/directives/class-map.js';
11
+ import { getAnimation, setDefaultAnimation } from '../../utilities/animation-registry.js';
12
+ import { getDeepestActiveElement } from '../../internal/active-elements.js';
13
+ import { getTabbableBoundary } from '../../internal/tabbable.js';
14
+ import { html } from 'lit';
15
+ import { ifDefined } from 'lit/directives/if-defined.js';
16
+ import { LocalizeController } from '../../utilities/localize.js';
17
+ import { property, query } from 'lit/decorators.js';
18
+ import { waitForEvent } from '../../internal/event.js';
19
+ import { watch } from '../../internal/watch.js';
20
+ import componentStyles from '../../styles/component.styles.js';
21
+ import SynergyElement from '../../internal/synergy-element.js';
22
+ import SynPopup from '../popup/popup.component.js';
23
+ import styles from './dropdown.styles.js';
24
+ import customStyles from './dropdown.custom.styles.js';
25
+ import type { CSSResultGroup } from 'lit';
26
+ import type { SynSelectEvent } from '../../events/syn-select.js';
27
+ import type SynButton from '../button/button.js';
28
+ import type SynIconButton from '../icon-button/icon-button.js';
29
+ import type SynMenu from '../menu/menu.js';
30
+
31
+ /**
32
+ * @summary Dropdowns expose additional content that "drops down" in a panel.
33
+ * @documentation https://synergy-design-system.github.io/?path=/docs/components-syn-dropdown--docs
34
+ * @status stable
35
+ * @since 2.0
36
+ *
37
+ * @dependency syn-popup
38
+ *
39
+ * @slot - The dropdown's main content.
40
+ * @slot trigger - The dropdown's trigger, usually a `<syn-button>` element.
41
+ *
42
+ * @event syn-show - Emitted when the dropdown opens.
43
+ * @event syn-after-show - Emitted after the dropdown opens and all animations are complete.
44
+ * @event syn-hide - Emitted when the dropdown closes.
45
+ * @event syn-after-hide - Emitted after the dropdown closes and all animations are complete.
46
+ *
47
+ * @csspart base - The component's base wrapper, an `<syn-popup>` element.
48
+ * @csspart base__popup - The popup's exported `popup` part. Use this to target the tooltip's popup container.
49
+ * @csspart trigger - The container that wraps the trigger.
50
+ * @csspart panel - The panel that gets shown when the dropdown is open.
51
+ *
52
+ * @animation dropdown.show - The animation to use when showing the dropdown.
53
+ * @animation dropdown.hide - The animation to use when hiding the dropdown.
54
+ */
55
+ export default class SynDropdown extends SynergyElement {
56
+ static styles: CSSResultGroup = [componentStyles, styles, customStyles];
57
+ static dependencies = { 'syn-popup': SynPopup };
58
+
59
+ @query('.dropdown') popup: SynPopup;
60
+ @query('.dropdown__trigger') trigger: HTMLSlotElement;
61
+ @query('.dropdown__panel') panel: HTMLSlotElement;
62
+
63
+ private readonly localize = new LocalizeController(this);
64
+ private closeWatcher: CloseWatcher | null;
65
+
66
+ /**
67
+ * Indicates whether or not the dropdown is open. You can toggle this attribute to show and hide the dropdown, or you
68
+ * can use the `show()` and `hide()` methods and this attribute will reflect the dropdown's open state.
69
+ */
70
+ @property({ type: Boolean, reflect: true }) open = false;
71
+
72
+ /**
73
+ * The preferred placement of the dropdown panel. Note that the actual placement may vary as needed to keep the panel
74
+ * inside of the viewport.
75
+ */
76
+ @property({ reflect: true }) placement:
77
+ | 'top'
78
+ | 'top-start'
79
+ | 'top-end'
80
+ | 'bottom'
81
+ | 'bottom-start'
82
+ | 'bottom-end'
83
+ | 'right'
84
+ | 'right-start'
85
+ | 'right-end'
86
+ | 'left'
87
+ | 'left-start'
88
+ | 'left-end' = 'bottom-start';
89
+
90
+ /** Disables the dropdown so the panel will not open. */
91
+ @property({ type: Boolean, reflect: true }) disabled = false;
92
+
93
+ /**
94
+ * By default, the dropdown is closed when an item is selected. This attribute will keep it open instead. Useful for
95
+ * dropdowns that allow for multiple interactions.
96
+ */
97
+ @property({ attribute: 'stay-open-on-select', type: Boolean, reflect: true }) stayOpenOnSelect = false;
98
+
99
+ /**
100
+ * The dropdown will close when the user interacts outside of this element (e.g. clicking). Useful for composing other
101
+ * components that use a dropdown internally.
102
+ */
103
+ @property({ attribute: false }) containingElement?: HTMLElement;
104
+
105
+ /** The distance in pixels from which to offset the panel away from its trigger. */
106
+ @property({ type: Number }) distance = 0;
107
+
108
+ /** The distance in pixels from which to offset the panel along its trigger. */
109
+ @property({ type: Number }) skidding = 0;
110
+
111
+ /**
112
+ * Enable this option to prevent the panel from being clipped when the component is placed inside a container with
113
+ * `overflow: auto|scroll`. Hoisting uses a fixed positioning strategy that works in many, but not all, scenarios.
114
+ */
115
+ @property({ type: Boolean }) hoist = false;
116
+
117
+ /**
118
+ * Syncs the popup width or height to that of the trigger element.
119
+ */
120
+ @property({ reflect: true }) sync: 'width' | 'height' | 'both' | undefined = undefined;
121
+
122
+ connectedCallback() {
123
+ super.connectedCallback();
124
+
125
+ if (!this.containingElement) {
126
+ this.containingElement = this;
127
+ }
128
+ }
129
+
130
+ firstUpdated() {
131
+ this.panel.hidden = !this.open;
132
+
133
+ // If the dropdown is visible on init, update its position
134
+ if (this.open) {
135
+ this.addOpenListeners();
136
+ this.popup.active = true;
137
+ }
138
+ }
139
+
140
+ disconnectedCallback() {
141
+ super.disconnectedCallback();
142
+ this.removeOpenListeners();
143
+ this.hide();
144
+ }
145
+
146
+ focusOnTrigger() {
147
+ const trigger = this.trigger.assignedElements({ flatten: true })[0] as HTMLElement | undefined;
148
+ if (typeof trigger?.focus === 'function') {
149
+ trigger.focus();
150
+ }
151
+ }
152
+
153
+ getMenu() {
154
+ return this.panel.assignedElements({ flatten: true }).find(el => el.tagName.toLowerCase() === 'syn-menu') as
155
+ | SynMenu
156
+ | undefined;
157
+ }
158
+
159
+ private handleKeyDown = (event: KeyboardEvent) => {
160
+ // Close when escape is pressed inside an open dropdown. We need to listen on the panel itself and stop propagation
161
+ // in case any ancestors are also listening for this key.
162
+ if (this.open && event.key === 'Escape') {
163
+ event.stopPropagation();
164
+ this.hide();
165
+ this.focusOnTrigger();
166
+ }
167
+ };
168
+
169
+ private handleDocumentKeyDown = (event: KeyboardEvent) => {
170
+ // Close when escape or tab is pressed
171
+ if (event.key === 'Escape' && this.open && !this.closeWatcher) {
172
+ event.stopPropagation();
173
+ this.focusOnTrigger();
174
+ this.hide();
175
+ return;
176
+ }
177
+
178
+ // Handle tabbing
179
+ if (event.key === 'Tab') {
180
+ // Tabbing within an open menu should close the dropdown and refocus the trigger
181
+ if (this.open && document.activeElement?.tagName.toLowerCase() === 'syn-menu-item') {
182
+ event.preventDefault();
183
+ this.hide();
184
+ this.focusOnTrigger();
185
+ return;
186
+ }
187
+
188
+ const computeClosestContaining = (element: Element | null | undefined, tagName: string): Element | null => {
189
+ if (!element) return null;
190
+
191
+ const closest = element.closest(tagName);
192
+ if (closest) return closest;
193
+
194
+ const rootNode = element.getRootNode();
195
+ if (rootNode instanceof ShadowRoot) {
196
+ return computeClosestContaining(rootNode.host, tagName);
197
+ }
198
+
199
+ return null;
200
+ };
201
+
202
+ // Tabbing outside of the containing element closes the panel
203
+ //
204
+ // If the dropdown is used within a shadow DOM, we need to obtain the activeElement within that shadowRoot,
205
+ // otherwise `document.activeElement` will only return the name of the parent shadow DOM element.
206
+ setTimeout(() => {
207
+ const activeElement =
208
+ this.containingElement?.getRootNode() instanceof ShadowRoot
209
+ ? getDeepestActiveElement()
210
+ : document.activeElement;
211
+
212
+ if (
213
+ !this.containingElement ||
214
+ computeClosestContaining(activeElement, this.containingElement.tagName.toLowerCase()) !==
215
+ this.containingElement
216
+ ) {
217
+ this.hide();
218
+ }
219
+ });
220
+ }
221
+ };
222
+
223
+ private handleDocumentMouseDown = (event: MouseEvent) => {
224
+ // Close when clicking outside of the containing element
225
+ const path = event.composedPath();
226
+ if (this.containingElement && !path.includes(this.containingElement)) {
227
+ this.hide();
228
+ }
229
+ };
230
+
231
+ private handlePanelSelect = (event: SynSelectEvent) => {
232
+ const target = event.target as HTMLElement;
233
+
234
+ // Hide the dropdown when a menu item is selected
235
+ if (!this.stayOpenOnSelect && target.tagName.toLowerCase() === 'syn-menu') {
236
+ this.hide();
237
+ this.focusOnTrigger();
238
+ }
239
+ };
240
+
241
+ handleTriggerClick() {
242
+ if (this.open) {
243
+ this.hide();
244
+ } else {
245
+ this.show();
246
+ this.focusOnTrigger();
247
+ }
248
+ }
249
+
250
+ async handleTriggerKeyDown(event: KeyboardEvent) {
251
+ // When spacebar/enter is pressed, show the panel but don't focus on the menu. This let's the user press the same
252
+ // key again to hide the menu in case they don't want to make a selection.
253
+ if ([' ', 'Enter'].includes(event.key)) {
254
+ event.preventDefault();
255
+ this.handleTriggerClick();
256
+ return;
257
+ }
258
+
259
+ const menu = this.getMenu();
260
+
261
+ if (menu) {
262
+ const menuItems = menu.getAllItems();
263
+ const firstMenuItem = menuItems[0];
264
+ const lastMenuItem = menuItems[menuItems.length - 1];
265
+
266
+ // When up/down is pressed, we make the assumption that the user is familiar with the menu and plans to make a
267
+ // selection. Rather than toggle the panel, we focus on the menu (if one exists) and activate the first item for
268
+ // faster navigation.
269
+ if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) {
270
+ event.preventDefault();
271
+
272
+ // Show the menu if it's not already open
273
+ if (!this.open) {
274
+ this.show();
275
+
276
+ // Wait for the dropdown to open before focusing, but not the animation
277
+ await this.updateComplete;
278
+ }
279
+
280
+ if (menuItems.length > 0) {
281
+ // Focus on the first/last menu item after showing
282
+ this.updateComplete.then(() => {
283
+ if (event.key === 'ArrowDown' || event.key === 'Home') {
284
+ menu.setCurrentItem(firstMenuItem);
285
+ firstMenuItem.focus();
286
+ }
287
+
288
+ if (event.key === 'ArrowUp' || event.key === 'End') {
289
+ menu.setCurrentItem(lastMenuItem);
290
+ lastMenuItem.focus();
291
+ }
292
+ });
293
+ }
294
+ }
295
+ }
296
+ }
297
+
298
+ handleTriggerKeyUp(event: KeyboardEvent) {
299
+ // Prevent space from triggering a click event in Firefox
300
+ if (event.key === ' ') {
301
+ event.preventDefault();
302
+ }
303
+ }
304
+
305
+ handleTriggerSlotChange() {
306
+ this.updateAccessibleTrigger();
307
+ }
308
+
309
+ //
310
+ // Slotted triggers can be arbitrary content, but we need to link them to the dropdown panel with `aria-haspopup` and
311
+ // `aria-expanded`. These must be applied to the "accessible trigger" (the tabbable portion of the trigger element
312
+ // that gets slotted in) so screen readers will understand them. The accessible trigger could be the slotted element,
313
+ // a child of the slotted element, or an element in the slotted element's shadow root.
314
+ //
315
+ // For example, the accessible trigger of an <syn-button> is a <button> located inside its shadow root.
316
+ //
317
+ // To determine this, we assume the first tabbable element in the trigger slot is the "accessible trigger."
318
+ //
319
+ updateAccessibleTrigger() {
320
+ const assignedElements = this.trigger.assignedElements({ flatten: true }) as HTMLElement[];
321
+ const accessibleTrigger = assignedElements.find(el => getTabbableBoundary(el).start);
322
+ let target: HTMLElement;
323
+
324
+ if (accessibleTrigger) {
325
+ switch (accessibleTrigger.tagName.toLowerCase()) {
326
+ // Synergy buttons have to update the internal button so it's announced correctly by screen readers
327
+ case 'syn-button':
328
+ case 'syn-icon-button':
329
+ target = (accessibleTrigger as SynButton | SynIconButton).button;
330
+ break;
331
+
332
+ default:
333
+ target = accessibleTrigger;
334
+ }
335
+
336
+ target.setAttribute('aria-haspopup', 'true');
337
+ target.setAttribute('aria-expanded', this.open ? 'true' : 'false');
338
+ }
339
+ }
340
+
341
+ /** Shows the dropdown panel. */
342
+ async show() {
343
+ if (this.open) {
344
+ return undefined;
345
+ }
346
+
347
+ this.open = true;
348
+ return waitForEvent(this, 'syn-after-show');
349
+ }
350
+
351
+ /** Hides the dropdown panel */
352
+ async hide() {
353
+ if (!this.open) {
354
+ return undefined;
355
+ }
356
+
357
+ this.open = false;
358
+ return waitForEvent(this, 'syn-after-hide');
359
+ }
360
+
361
+ /**
362
+ * Instructs the dropdown menu to reposition. Useful when the position or size of the trigger changes when the menu
363
+ * is activated.
364
+ */
365
+ reposition() {
366
+ this.popup.reposition();
367
+ }
368
+
369
+ addOpenListeners() {
370
+ this.panel.addEventListener('syn-select', this.handlePanelSelect);
371
+ if ('CloseWatcher' in window) {
372
+ this.closeWatcher?.destroy();
373
+ this.closeWatcher = new CloseWatcher();
374
+ this.closeWatcher.onclose = () => {
375
+ this.hide();
376
+ this.focusOnTrigger();
377
+ };
378
+ } else {
379
+ this.panel.addEventListener('keydown', this.handleKeyDown);
380
+ }
381
+ document.addEventListener('keydown', this.handleDocumentKeyDown);
382
+ document.addEventListener('mousedown', this.handleDocumentMouseDown);
383
+ }
384
+
385
+ removeOpenListeners() {
386
+ if (this.panel) {
387
+ this.panel.removeEventListener('syn-select', this.handlePanelSelect);
388
+ this.panel.removeEventListener('keydown', this.handleKeyDown);
389
+ }
390
+ document.removeEventListener('keydown', this.handleDocumentKeyDown);
391
+ document.removeEventListener('mousedown', this.handleDocumentMouseDown);
392
+ this.closeWatcher?.destroy();
393
+ }
394
+
395
+ @watch('open', { waitUntilFirstUpdate: true })
396
+ async handleOpenChange() {
397
+ if (this.disabled) {
398
+ this.open = false;
399
+ return;
400
+ }
401
+
402
+ this.updateAccessibleTrigger();
403
+
404
+ if (this.open) {
405
+ // Show
406
+ this.emit('syn-show');
407
+ this.addOpenListeners();
408
+
409
+ await stopAnimations(this);
410
+ this.panel.hidden = false;
411
+ this.popup.active = true;
412
+ const { keyframes, options } = getAnimation(this, 'dropdown.show', { dir: this.localize.dir() });
413
+ await animateTo(this.popup.popup, keyframes, options);
414
+
415
+ this.emit('syn-after-show');
416
+ } else {
417
+ // Hide
418
+ this.emit('syn-hide');
419
+ this.removeOpenListeners();
420
+
421
+ await stopAnimations(this);
422
+ const { keyframes, options } = getAnimation(this, 'dropdown.hide', { dir: this.localize.dir() });
423
+ await animateTo(this.popup.popup, keyframes, options);
424
+ this.panel.hidden = true;
425
+ this.popup.active = false;
426
+
427
+ this.emit('syn-after-hide');
428
+ }
429
+ }
430
+
431
+ render() {
432
+ return html`
433
+ <syn-popup
434
+ part="base"
435
+ exportparts="popup:base__popup"
436
+ id="dropdown"
437
+ placement=${this.placement}
438
+ distance=${this.distance}
439
+ skidding=${this.skidding}
440
+ strategy=${this.hoist ? 'fixed' : 'absolute'}
441
+ flip
442
+ shift
443
+ auto-size="vertical"
444
+ auto-size-padding="10"
445
+ sync=${ifDefined(this.sync ? this.sync : undefined)}
446
+ class=${classMap({
447
+ dropdown: true,
448
+ 'dropdown--open': this.open
449
+ })}
450
+ >
451
+ <slot
452
+ name="trigger"
453
+ slot="anchor"
454
+ part="trigger"
455
+ class="dropdown__trigger"
456
+ @click=${this.handleTriggerClick}
457
+ @keydown=${this.handleTriggerKeyDown}
458
+ @keyup=${this.handleTriggerKeyUp}
459
+ @slotchange=${this.handleTriggerSlotChange}
460
+ ></slot>
461
+
462
+ <div aria-hidden=${this.open ? 'false' : 'true'} aria-labelledby="dropdown">
463
+ <slot part="panel" class="dropdown__panel"></slot>
464
+ </div>
465
+ </syn-popup>
466
+ `;
467
+ }
468
+ }
469
+
470
+ setDefaultAnimation('dropdown.show', {
471
+ keyframes: [
472
+ { opacity: 0, scale: 0.9 },
473
+ { opacity: 1, scale: 1 }
474
+ ],
475
+ options: { duration: 100, easing: 'ease' }
476
+ });
477
+
478
+ setDefaultAnimation('dropdown.hide', {
479
+ keyframes: [
480
+ { opacity: 1, scale: 1 },
481
+ { opacity: 0, scale: 0.9 }
482
+ ],
483
+ options: { duration: 100, easing: 'ease' }
484
+ });
@@ -0,0 +1,159 @@
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 Dropdowns expose additional content that "drops down" in a panel.
10
+ * @documentation https://synergy-design-system.github.io/?path=/docs/components-syn-dropdown--docs
11
+ * @status stable
12
+ * @since 2.0
13
+ *
14
+ * @dependency syn-popup
15
+ *
16
+ * @slot - The dropdown's main content.
17
+ * @slot trigger - The dropdown's trigger, usually a `<syn-button>` element.
18
+ *
19
+ * @event syn-show - Emitted when the dropdown opens.
20
+ * @event syn-after-show - Emitted after the dropdown opens and all animations are complete.
21
+ * @event syn-hide - Emitted when the dropdown closes.
22
+ * @event syn-after-hide - Emitted after the dropdown closes and all animations are complete.
23
+ *
24
+ * @csspart base - The component's base wrapper, an `<syn-popup>` element.
25
+ * @csspart base__popup - The popup's exported `popup` part. Use this to target the tooltip's popup container.
26
+ * @csspart trigger - The container that wraps the trigger.
27
+ * @csspart panel - The panel that gets shown when the dropdown is open.
28
+ *
29
+ * @animation dropdown.show - The animation to use when showing the dropdown.
30
+ * @animation dropdown.hide - The animation to use when hiding the dropdown.
31
+ */
32
+ import { computed, ref } from 'vue';
33
+ import '@synergy-design-system/components/components/dropdown/dropdown.js';
34
+
35
+ import type { SynShowEvent } from '@synergy-design-system/components';
36
+ import type { SynAfterShowEvent } from '@synergy-design-system/components';
37
+ import type { SynHideEvent } from '@synergy-design-system/components';
38
+ import type { SynAfterHideEvent } from '@synergy-design-system/components';
39
+ import type { SynDropdown } from '@synergy-design-system/components';
40
+
41
+ // DOM Reference to the element
42
+ const nativeElement = ref<SynDropdown>();
43
+
44
+ defineExpose({
45
+ nativeElement,
46
+ });
47
+
48
+ // Map attributes
49
+ const props = defineProps<{
50
+ /**
51
+ * Indicates whether or not the dropdown is open.
52
+ * You can toggle this attribute to show and hide the dropdown, or you
53
+ can use the `show()` and `hide()` methods and this attribute will reflect the dropdown's open state.
54
+ */
55
+ open?: SynDropdown['open'];
56
+
57
+ /**
58
+ * The preferred placement of the dropdown panel.
59
+ * Note that the actual placement may vary as needed to keep the panel
60
+ inside of the viewport.
61
+ */
62
+ placement?: SynDropdown['placement'];
63
+
64
+ /**
65
+ * Disables the dropdown so the panel will not open.
66
+ */
67
+ disabled?: SynDropdown['disabled'];
68
+
69
+ /**
70
+ * By default, the dropdown is closed when an item is selected.
71
+ * This attribute will keep it open instead.
72
+ * Useful for
73
+ dropdowns that allow for multiple interactions.
74
+ */
75
+ stayOpenOnSelect?: SynDropdown['stayOpenOnSelect'];
76
+
77
+ /**
78
+ * The distance in pixels from which to offset the panel away from its trigger.
79
+ */
80
+ distance?: SynDropdown['distance'];
81
+
82
+ /**
83
+ * The distance in pixels from which to offset the panel along its trigger.
84
+ */
85
+ skidding?: SynDropdown['skidding'];
86
+
87
+ /**
88
+ * Enable this option to prevent the panel from being clipped when the component is placed inside a container with
89
+ `overflow: auto|scroll`.
90
+ * Hoisting uses a fixed positioning strategy that works in many, but not all, scenarios.
91
+ */
92
+ hoist?: SynDropdown['hoist'];
93
+
94
+ /**
95
+ * Syncs the popup width or height to that of the trigger element.
96
+ */
97
+ sync?: SynDropdown['sync'];
98
+
99
+ /**
100
+ * The dropdown will close when the user interacts outside of this element (e.g.
101
+ * clicking).
102
+ * Useful for composing other
103
+ components that use a dropdown internally.
104
+ */
105
+ containingElement?: SynDropdown['containingElement'];
106
+ }>();
107
+
108
+ // Make sure prop binding only forwards the props that are actually there.
109
+ // This is needed because :param="param" also adds an empty attribute
110
+ // when using web-components, which breaks optional arguments like size in SynInput
111
+ // @see https://github.com/vuejs/core/issues/5190#issuecomment-1003112498
112
+ const visibleProps = computed(() =>
113
+ Object.fromEntries(
114
+ Object.entries(props).filter(([, value]) => typeof value !== 'undefined'),
115
+ ),
116
+ );
117
+
118
+ // Map events
119
+ defineEmits<{
120
+ /**
121
+ * Emitted when the dropdown opens.
122
+ */
123
+ 'syn-show': [e: SynShowEvent];
124
+
125
+ /**
126
+ * Emitted after the dropdown opens and all animations are complete.
127
+ */
128
+ 'syn-after-show': [e: SynAfterShowEvent];
129
+
130
+ /**
131
+ * Emitted when the dropdown closes.
132
+ */
133
+ 'syn-hide': [e: SynHideEvent];
134
+
135
+ /**
136
+ * Emitted after the dropdown closes and all animations are complete.
137
+ */
138
+ 'syn-after-hide': [e: SynAfterHideEvent];
139
+ }>();
140
+ </script>
141
+
142
+ <script lang="ts">
143
+ export type { SynShowEvent } from '@synergy-design-system/components';
144
+ export type { SynAfterShowEvent } from '@synergy-design-system/components';
145
+ export type { SynHideEvent } from '@synergy-design-system/components';
146
+ export type { SynAfterHideEvent } from '@synergy-design-system/components';
147
+ </script>
148
+
149
+ <template>
150
+ <syn-dropdown
151
+ @syn-show="$emit('syn-show', $event)"
152
+ @syn-after-show="$emit('syn-after-show', $event)"
153
+ @syn-hide="$emit('syn-hide', $event)"
154
+ @syn-after-hide="$emit('syn-after-hide', $event)"
155
+ v-bind="visibleProps"
156
+ ref="nativeElement">
157
+ <slot></slot>
158
+ </syn-dropdown>
159
+ </template>