@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,160 @@
1
+ import { css } from 'lit';
2
+
3
+ export default css`
4
+ :host {
5
+ --side-nav-open-width: 320px;
6
+ --side-nav-rail-width: 72px;
7
+
8
+ display: block;
9
+ }
10
+
11
+ /**
12
+ * Syn-drawer styling
13
+ */
14
+ .side-nav__drawer {
15
+ --size: var(--side-nav-open-width);
16
+ }
17
+
18
+ .side-nav__drawer::part(base){
19
+ position: absolute;
20
+ z-index: var(--syn-z-index-drawer);
21
+ }
22
+
23
+ .side-nav__drawer::part(body),
24
+ .side-nav__drawer::part(footer) {
25
+ padding: 0;
26
+ }
27
+
28
+ /**
29
+ * Overlay
30
+ */
31
+ .side-nav__drawer::part(overlay){
32
+ position: absolute;
33
+ }
34
+
35
+
36
+
37
+
38
+ /****
39
+ *
40
+ * variant="default"
41
+ *
42
+ ****/
43
+
44
+ /* Side nav should have a width, so it behave correct in an e.g. display flex context */
45
+ .side-nav.side-nav--fix.side-nav--open {
46
+ width: var(--side-nav-open-width);
47
+ }
48
+
49
+ /* Fixed mode */
50
+ .side-nav--fix .side-nav__drawer::part(overlay){
51
+ display: block;
52
+ }
53
+
54
+
55
+
56
+
57
+ /****
58
+ *
59
+ * variant="rail"
60
+ *
61
+ ****/
62
+
63
+ /*
64
+ * Side nav should have a width, so it behave correct in an e.g. display flex context.
65
+ * in variant="rail" the width is always the small rail width, because there should be no shrinking possible of the main content area.
66
+ */
67
+ .side-nav.side-nav--rail {
68
+ width: var(--side-nav-rail-width);
69
+ }
70
+
71
+ /* Adapt the width of the drawer */
72
+ :not(.side-nav--open).side-nav--rail .side-nav__drawer {
73
+ --size: var(--side-nav-rail-width);
74
+ }
75
+
76
+ /* Show the overlay of the drawer on touch devices */
77
+ .side-nav--open.side-nav--rail.side-nav--touch .side-nav__drawer::part(overlay){
78
+ display: block;
79
+ }
80
+
81
+ /* Avoid multiline flickering on open and close animation */
82
+ .side-nav--rail.side-nav--animation {
83
+ white-space: nowrap;
84
+ }
85
+
86
+ /* Hide the scrollbars in closed variant="rail" */
87
+ :not(.side-nav--open).side-nav--rail .side-nav__drawer::part(body){
88
+ overflow: hidden;
89
+ }
90
+
91
+
92
+
93
+
94
+ /****
95
+ *
96
+ * variant="sticky"
97
+ *
98
+ ****/
99
+
100
+ /*
101
+ * Side nav should have a width, so it behave correct in an e.g. display flex context.
102
+ * In variant="sticky" the width is the rail width if closed and the open width if open.
103
+ */
104
+ .side-nav.side-nav--sticky {
105
+ width: var(--side-nav-open-width);
106
+ }
107
+
108
+ .side-nav.side-nav--sticky:not(.side-nav--open) {
109
+ width: var(--side-nav-rail-width);
110
+ }
111
+
112
+ /* Adapt the width of the drawer */
113
+ :not(.side-nav--open).side-nav--sticky .side-nav__drawer {
114
+ --size: var(--side-nav-rail-width);
115
+ }
116
+
117
+
118
+ /*
119
+ * For touch devices the content should not shrink in a flex container
120
+ */
121
+ .side-nav--sticky.side-nav--touch {
122
+ width: var(--side-nav-rail-width);
123
+ }
124
+
125
+ /* Avoid multiline flickering on open and close animation */
126
+ .side-nav--sticky.side-nav--animation {
127
+ white-space: nowrap;
128
+ }
129
+
130
+ /* Show the overlay of the drawer on touch devices */
131
+ .side-nav--open.side-nav--sticky.side-nav--touch .side-nav__drawer::part(overlay){
132
+ display: block;
133
+ }
134
+
135
+
136
+ /* Hide the scrollbars in closed variant="sticky" */
137
+ :not(.side-nav--open).side-nav--sticky .side-nav__drawer::part(body){
138
+ overflow: hidden;
139
+ }
140
+
141
+
142
+ .side-nav__toggle-icon > syn-icon {
143
+ font-size: var(--syn-font-size-x-large);
144
+ min-width: var(--syn-font-size-x-large);
145
+ }
146
+
147
+ /****
148
+ *
149
+ * Footer divider
150
+ *
151
+ ****/
152
+ .side-nav__footer-divider{
153
+ --spacing: 0;
154
+ --color: var(--syn-color-neutral-300);
155
+ }
156
+
157
+ :not(.side-nav--open).side-nav--rail ::slotted(syn-nav-item){
158
+ --display-children: none;
159
+ }
160
+ `;
@@ -0,0 +1,492 @@
1
+ /* eslint-disable @typescript-eslint/unbound-method */
2
+ import { classMap } from 'lit/directives/class-map.js';
3
+ import type { CSSResultGroup, PropertyValues } from 'lit';
4
+ import { html } from 'lit/static-html.js';
5
+ import { property, query, state } from 'lit/decorators.js';
6
+ import { HasSlotController } from '../../internal/slot.js';
7
+ import SynergyElement from '../../internal/synergy-element.js';
8
+ import componentStyles from '../../styles/component.styles.js';
9
+ import styles from './side-nav.styles.js';
10
+ import SynDrawer from '../drawer/drawer.component.js';
11
+ import SynDivider from '../divider/divider.component.js';
12
+ import SynIcon from '../icon/icon.component.js';
13
+ import SynNavItem from '../nav-item/nav-item.component.js';
14
+ import { waitForEvent } from '../../internal/event.js';
15
+ import { watch } from '../../internal/watch.js';
16
+ import { getAnimation, setAnimation, setDefaultAnimation } from '../../utilities/animation-registry.js';
17
+ import { LocalizeController } from '../../utilities/localize.js';
18
+ import { unlockBodyScrolling } from '../../internal/scroll.js';
19
+ import { enableDefaultSettings } from '../../utilities/defaultSettings/decorator.js';
20
+
21
+ /**
22
+ * @summary The <syn-side-nav /> element contains secondary navigation and fits below the header.
23
+ * It can be used to group multiple navigation items (<syn-nav-item />s) together.
24
+ *
25
+ * @example
26
+ * <syn-side-nav open>
27
+ * <syn-nav-item >Item 1</syn-nav-item>
28
+ * <syn-nav-item divider>Item 2</syn-nav-item>
29
+ * </syn-side-nav>
30
+ *
31
+ * @documentation https://synergy-design-system.github.io/?path=/docs/components-syn-side-nav--docs
32
+ * @status stable
33
+ * @since 1.14.0
34
+ *
35
+ * @dependency syn-divider
36
+ * @dependency syn-drawer
37
+ * @dependency syn-icon
38
+ * @dependency syn-nav-item
39
+ *
40
+ * @slot - The main content of the side-nav. Used for <syn-nav-item /> elements.
41
+ * @slot footer - The footer content of the side-nav. Used for <syn-nav-item /> elements.
42
+ * Please avoid having to many nav-items as it can massively influence the user experience.
43
+ * @slot toggle-label - The label of the toggle nav-item for variant="sticky".
44
+ * @slot toggle-icon - An icon to use in lieu of the default icon for the toggle nav-item
45
+ * for variant="sticky".
46
+ *
47
+ * @event syn-show - Emitted when the side-nav opens.
48
+ * @event syn-after-show - Emitted after the side-nav opens and all animations are complete.
49
+ * @event syn-hide - Emitted when the side-nav closes.
50
+ * @event syn-after-hide - Emitted after the side-nav closes and all animations are complete.
51
+ *
52
+ * @csspart base - The components base wrapper
53
+ * @csspart drawer - The drawer that is used under the hood for creating the side-nav
54
+ * @csspart content-container - The components main content container
55
+ * @csspart content - The components main content
56
+ * @csspart footer-container - The components footer content container
57
+ (where the footer slot content is rendered)
58
+ * @csspart footer-divider - The components footer divider
59
+ * @csspart footer - The components footer content
60
+ * @csspart overlay - The overlay that covers the screen behind the side-nav.
61
+ * @csspart panel - The side-nav's panel (where the whole content is rendered).
62
+ * @csspart body - The side-nav's body (where the default slot content is rendered)
63
+ * @csspart drawer__base - The drawer's base wrapper
64
+ * @csspart toggle-nav-item - The nav-item to toggle open state for variant="sticky"
65
+ * @csspart toggle-icon - The icon of the toggle nav-item for variant="sticky"
66
+ * @csspart toggle-label - The label of the toggle nav-item for variant="sticky".
67
+
68
+ * @cssproperty --side-nav-open-width - The width of the side-nav if in open state
69
+ *
70
+ * @animation sideNav.showNonRail - The animation to use when showing the side-nav
71
+ * in variant="default".
72
+ * @animation sideNav.showRail - The animation to use when showing the side-nav in variant="rail"
73
+ * and variant="sticky".
74
+ * @animation sideNav.hideNonRail - The animation to use when hiding the side-nav
75
+ * in variant="default".
76
+ * @animation sideNav.hideRail - The animation to use when hiding the side-nav in variant="rail"
77
+ * and variant="sticky".
78
+ * @animation sideNav.overlay.show - The animation to use when showing the side-nav's overlay.
79
+ * @animation sideNav.overlay.hide - The animation to use when hiding the side-nav's overlay.
80
+ */
81
+ @enableDefaultSettings('SynSideNav')
82
+ export default class SynSideNav extends SynergyElement {
83
+ static styles: CSSResultGroup = [componentStyles, styles];
84
+
85
+ static dependencies = {
86
+ 'syn-divider': SynDivider,
87
+ 'syn-drawer': SynDrawer,
88
+ 'syn-icon': SynIcon,
89
+ 'syn-nav-item': SynNavItem,
90
+ };
91
+
92
+ private readonly hasSlotController = new HasSlotController(this, '[default]', 'footer');
93
+
94
+ private readonly localize = new LocalizeController(this);
95
+
96
+ private timeout: NodeJS.Timeout;
97
+
98
+ /**
99
+ * Current animation active state
100
+ */
101
+ @state() private isAnimationActive = false;
102
+
103
+ /**
104
+ * Reference to the drawer
105
+ */
106
+ @query('.side-nav__drawer') private drawer: SynDrawer;
107
+
108
+ /**
109
+ * Indicates whether or not the side-nav is open.
110
+ * You can toggle this attribute to show and hide the side-nav, or you can use the `show()` and
111
+ * `hide()` methods and this attribute will reflect the side-nav's open state.
112
+ *
113
+ * Depending on the "variant" attribute, the behavior will differ.
114
+ *
115
+ * __Default__:
116
+ * With `open` will show the side-nav with an overlay.
117
+ * Without `open`, the side-nav will be hidden.
118
+ *
119
+ * __Rail__:
120
+ * With `open` will show the whole side-nav with an overlay for touch devices
121
+ * or without an overlay for non-touch devices.
122
+ * Without `open`, the side-nav will only show the prefix of nav-item's.
123
+ *
124
+ * __Sticky__:
125
+ * With `open` will show the whole side-nav with an overlay for touch devices
126
+ * or without an overlay for non-touch devices.
127
+ * Without `open`, the side-nav will only show the prefix of nav-item's.
128
+ *
129
+ */
130
+ @property({ reflect: true, type: Boolean }) open = false;
131
+
132
+ /**
133
+ * Use the rail attribute to only show the prefix of navigation items in closed state.
134
+ * This will open on hover on the rail navigation.
135
+ * On touch devices the navigation opens on click and shows an overlay.
136
+ *
137
+ * Note: The Rail is only an option if all Navigation Items on the first level have an Icon.
138
+ * If this is not the case you should use a burger navigation.
139
+ *
140
+ * @deprecated Use the `variant` attribute with `rail` instead.
141
+ * Will be removed in synergy version 3.0
142
+ */
143
+ @property({ reflect: true, type: Boolean }) rail = false;
144
+
145
+ /**
146
+ * The variant that should be used to show the side navigation.
147
+ *
148
+ * The following variants are supported:
149
+ * - **default** (default): Always shows the whole content and additionally an overlay.
150
+ * This makes especially sense for applications, where you navigate to a place and stay
151
+ * there for a longer time.
152
+ * - **rail**: Only show the prefix of navigation items in closed state.
153
+ * This will open on hover on the rail navigation.
154
+ * On touch devices the navigation opens on click and shows an overlay.
155
+ * Note: The rail variant is only an option if all Navigation Items on the first level
156
+ * have an Icon.
157
+ * If this is not the case you should use a burger navigation.
158
+ * - **sticky**: The side-nav has a pin button to show the side-nav in small (icon only)
159
+ * and full width. This variant is only possible for non-nested navigation items.
160
+ * Note: The sticky variant is only an option if all Navigation Items on the first level
161
+ * have an Icon and if there are only "first level" items.
162
+ */
163
+ @property({ reflect: true }) variant: 'default' | 'rail' | 'sticky' = 'default';
164
+
165
+ /**
166
+ * By default, the side-nav traps the focus if in variant="default" and open.
167
+ * To disable the focus trapping, set this attribute.
168
+ */
169
+ @property({ attribute: 'no-focus-trapping', reflect: true, type: Boolean }) noFocusTrapping = false;
170
+
171
+ private setDelayedCallback(callback: () => void) {
172
+ clearTimeout(this.timeout);
173
+ this.timeout = setTimeout(callback, 100);
174
+ }
175
+
176
+ private handleMouseEnter() {
177
+ // Debounce mouse events, to avoid infinite loop of open / closing in variant="rail"
178
+ this.setDelayedCallback(() => {
179
+ this.open = true;
180
+ });
181
+ }
182
+
183
+ private handleMouseLeave() {
184
+ // Debounce mouse events, to avoid infinite loop of open / closing in variant="rail"
185
+ this.setDelayedCallback(() => {
186
+ this.open = false;
187
+ });
188
+ }
189
+
190
+ private handleRequestClose() {
191
+ if (this.open) {
192
+ this.open = false;
193
+ }
194
+ }
195
+
196
+ private addMouseListener() {
197
+ this.drawer.shadowRoot!.querySelector('.drawer__panel')?.addEventListener('mouseenter', this.handleMouseEnter);
198
+ this.drawer.shadowRoot!.querySelector('.drawer__panel')?.addEventListener('mouseleave', this.handleMouseLeave);
199
+ }
200
+
201
+ private removeMouseListener() {
202
+ this.drawer.shadowRoot!.querySelector('.drawer__panel')?.removeEventListener('mouseenter', this.handleMouseEnter);
203
+ this.drawer.shadowRoot!.querySelector('.drawer__panel')?.removeEventListener('mouseleave', this.handleMouseLeave);
204
+ }
205
+
206
+ private setDrawerAnimations() {
207
+ const showAnimation = getAnimation(this, `sideNav.show${this.variant === 'default' ? 'NonRail' : 'Rail'}`, { dir: this.localize.dir() });
208
+ const hideAnimation = getAnimation(this, `sideNav.hide${this.variant === 'default' ? 'NonRail' : 'Rail'}`, { dir: this.localize.dir() });
209
+ const hideOverlay = getAnimation(this, 'sideNav.overlay.hide', { dir: this.localize.dir() });
210
+ const showOverlay = getAnimation(this, 'sideNav.overlay.show', { dir: this.localize.dir() });
211
+
212
+ setAnimation(this.drawer, 'drawer.showStart', showAnimation);
213
+ setAnimation(this.drawer, 'drawer.hideStart', hideAnimation);
214
+ setAnimation(this.drawer, 'drawer.overlay.hide', hideOverlay);
215
+ setAnimation(this.drawer, 'drawer.overlay.show', showOverlay);
216
+ }
217
+
218
+ @watch('variant', { waitUntilFirstUpdate: true })
219
+ handleVariantChange() {
220
+ this.setDrawerAnimations();
221
+ this.drawer.forceVisibility(this.variant !== 'default');
222
+
223
+ switch (this.variant) {
224
+ case 'rail':
225
+ // For hover handling
226
+ this.addMouseListener();
227
+ break;
228
+ case 'sticky':
229
+ case 'default':
230
+ default:
231
+ this.removeMouseListener();
232
+ }
233
+ }
234
+
235
+ @watch('open', { waitUntilFirstUpdate: true })
236
+ handleOpenChange() {
237
+ if (this.variant === 'default') {
238
+ return;
239
+ }
240
+
241
+ this.isAnimationActive = true;
242
+
243
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
244
+ waitForEvent(this.drawer, `syn-after-${this.open ? 'show' : 'hide'}`).then(() => {
245
+ this.isAnimationActive = false;
246
+ });
247
+ }
248
+
249
+ @watch('noFocusTrapping', { waitUntilFirstUpdate: true })
250
+ handleFocusTrapping() {
251
+ if (this.variant === 'default') {
252
+ if (this.noFocusTrapping) {
253
+ this.drawer.modal.activateExternal();
254
+ } else {
255
+ this.drawer.modal.deactivateExternal();
256
+ }
257
+ }
258
+ }
259
+
260
+ /** Shows the side-nav. */
261
+ async show() {
262
+ if (this.open) {
263
+ return undefined;
264
+ }
265
+ this.open = true;
266
+
267
+ return waitForEvent(this.drawer, 'syn-after-show');
268
+ }
269
+
270
+ /** Hides the side-nav */
271
+ async hide() {
272
+ if (!this.open) {
273
+ return undefined;
274
+ }
275
+
276
+ this.open = false;
277
+
278
+ return waitForEvent(this.drawer, 'syn-after-hide');
279
+ }
280
+
281
+ constructor() {
282
+ super();
283
+ this.handleMouseEnter = this.handleMouseEnter.bind(this);
284
+ this.handleMouseLeave = this.handleMouseLeave.bind(this);
285
+ this.addEventListener('syn-initial-focus', (event) => {
286
+ if (this.variant !== 'default') {
287
+ // We need to do this, to stop the drawer from giving focus to the panel
288
+ event.preventDefault();
289
+
290
+ // The originalTrigger needs to be removed, otherwise when closing the drawer,
291
+ // the first focused nav-item is focused again...
292
+ // eslint-disable-next-line @typescript-eslint/dot-notation
293
+ this.drawer['originalTrigger'] = null;
294
+ }
295
+ });
296
+
297
+ this.addEventListener('focusin', (event) => {
298
+ const targetTag = (event.target as HTMLElement).tagName.toLowerCase();
299
+ // Open the side-nav if it`s in variant="rail", closed and the focused element is a nav-item
300
+ if (targetTag === 'syn-nav-item' && this.variant === 'rail' && !this.open) {
301
+ this.open = true;
302
+ }
303
+ });
304
+
305
+ this.addEventListener('focusout', (event) => {
306
+ const targetTag = (event.target as HTMLElement).tagName.toLowerCase();
307
+ const relatedTargetTag = (event.relatedTarget as HTMLElement)?.tagName.toLowerCase();
308
+
309
+ // Close the side-nav, if it`s in variant="rail", open and the next focused element
310
+ // is no longer a nav-item
311
+ if (targetTag === 'syn-nav-item' && relatedTargetTag !== 'syn-nav-item' && this.variant === 'rail' && this.open) {
312
+ this.open = false;
313
+ }
314
+ });
315
+ }
316
+
317
+ /**
318
+ * Initial setup for first render like special variant="rail" and variant="sticky" handling
319
+ * and drawer animations.
320
+ * */
321
+ firstUpdated() {
322
+ this.setDrawerAnimations();
323
+
324
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
325
+ this.drawer.updateComplete.then(() => {
326
+ this.drawer.forceVisibility(this.variant !== 'default');
327
+ // change tabindex of drawer to make only nav-items focusable and not the panel of the drawer
328
+ (this.drawer.shadowRoot!.querySelector('.drawer__panel') as HTMLElement).tabIndex = -1;
329
+ });
330
+
331
+ switch (this.variant) {
332
+ case 'rail':
333
+ // Wait for the drawer`s update to be completed
334
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
335
+ this.drawer.updateComplete.then(() => {
336
+ this.addMouseListener();
337
+ });
338
+ break;
339
+ case 'sticky': break;
340
+ case 'default':
341
+ default:
342
+ if (this.noFocusTrapping) {
343
+ // Disable the focus trapping of the modal
344
+ this.drawer.modal.activateExternal();
345
+ }
346
+ }
347
+ }
348
+
349
+ disconnectedCallback() {
350
+ super.disconnectedCallback();
351
+
352
+ // Remove modal listeners
353
+ if (this.drawer) {
354
+ unlockBodyScrolling(this.drawer);
355
+ this.drawer.modal.deactivate();
356
+ }
357
+ }
358
+
359
+ // eslint-disable-next-line complexity
360
+ protected override willUpdate(changedProperties: PropertyValues) {
361
+ super.willUpdate(changedProperties);
362
+
363
+ // TODO: this can be removed in synergy version 3.0
364
+ if (changedProperties.has('rail')) {
365
+ if (this.rail) {
366
+ // Add deprecation console warning for stakeholder, which do not use linting
367
+ // to get their attention
368
+ console.warn('<syn-side-nav/>: The `rail` attribute is deprecated. Please use the `variant` attribute with `rail` instead. It will be removed in synergy version 3.0');
369
+ }
370
+
371
+ // The `variant` should be adapted to the `rail` attribute,
372
+ // if it was explicitly set or unset by the user.
373
+ // This is needed to be backwards compatible with the `rail` attribute
374
+ if (!changedProperties.has('variant') || this.rail) {
375
+ this.variant = this.rail ? 'rail' : 'default';
376
+ }
377
+ }
378
+ }
379
+
380
+ private toggleOpenState() {
381
+ this.open = !this.open;
382
+ }
383
+
384
+ // eslint-disable-next-line complexity
385
+ render() {
386
+ const isTouch = window.navigator.maxTouchPoints > 0 || !!('ontouchstart' in window);
387
+ const hasFooter = this.hasSlotController.test('footer');
388
+ const showFooterDivider = hasFooter || this.variant === 'sticky';
389
+
390
+ /* eslint-disable lit/no-invalid-html */
391
+ /* eslint-disable @typescript-eslint/unbound-method */
392
+ return html`
393
+ <nav
394
+ class=${classMap({
395
+ 'side-nav': true,
396
+ 'side-nav--animation': this.isAnimationActive,
397
+ 'side-nav--fix': this.variant === 'default',
398
+ 'side-nav--has-footer': hasFooter,
399
+ 'side-nav--open': this.open,
400
+ 'side-nav--rail': this.variant === 'rail',
401
+ 'side-nav--sticky': this.variant === 'sticky',
402
+ 'side-nav--touch': isTouch,
403
+ })}
404
+ part="base"
405
+ >
406
+
407
+ <syn-drawer
408
+ class="side-nav__drawer"
409
+ ?contained=${this.variant !== 'default'}
410
+ exportparts="overlay,panel,body,base:drawer__base"
411
+ label=${this.localize.term('sideNav')}
412
+ no-header
413
+ ?open=${this.open}
414
+ part="drawer"
415
+ placement="start"
416
+ @syn-request-close=${this.handleRequestClose}
417
+ >
418
+ <div part="content-container" class="side-nav__content-container">
419
+ <slot part="content"></slot>
420
+ </div>
421
+
422
+ <footer class="side-nav__footer" part="footer-container" slot="footer">
423
+
424
+ ${showFooterDivider ? html`<syn-divider part="footer-divider" class="side-nav__footer-divider"></syn-divider>` : ''}
425
+ <slot name="footer" part="footer" ></slot>
426
+ ${this.variant === 'sticky'
427
+ ? html`<syn-nav-item part="toggle-nav-item" class="side-nav__toggle-nav-item" @click=${this.toggleOpenState} ?divider=${hasFooter}>
428
+ <slot name="toggle-icon" slot="prefix" class="side-nav__toggle-icon">
429
+ <syn-icon library="system" name="sticky_sidebar" part="toggle-icon"></syn-icon>
430
+ </slot>
431
+ <slot name="toggle-label" part="toggle-label">
432
+ ${(!this.open && !this.isAnimationActive) ? this.localize.term('sideNavShow') : this.localize.term('sideNavHide')}
433
+ </slot>
434
+ </syn-nav-item>`
435
+ : ''
436
+ }
437
+
438
+ </footer>
439
+
440
+ </syn-drawer>
441
+
442
+ </nav>
443
+ `;
444
+ /* eslint-enable lit/no-invalid-html */
445
+ /* eslint-enable @typescript-eslint/unbound-method */
446
+ }
447
+ }
448
+
449
+ // Show animations
450
+ setDefaultAnimation('sideNav.showRail', {
451
+ keyframes: [
452
+ { width: 'var(--side-nav-rail-width)' },
453
+ { width: 'var(--side-nav-open-width)' },
454
+ ],
455
+ options: { duration: 250, easing: 'ease' },
456
+ });
457
+
458
+ setDefaultAnimation('sideNav.showNonRail', {
459
+ keyframes: [
460
+ { opacity: 0, translate: '-100%' },
461
+ { opacity: 1, translate: '0' },
462
+ ],
463
+ options: { duration: 250, easing: 'ease' },
464
+ });
465
+
466
+ // Hide animations
467
+ setDefaultAnimation('sideNav.hideNonRail', {
468
+ keyframes: [
469
+ { opacity: 1, translate: '0' },
470
+ { opacity: 0, translate: '-100%' },
471
+ ],
472
+ options: { duration: 250, easing: 'ease' },
473
+ });
474
+
475
+ setDefaultAnimation('sideNav.hideRail', {
476
+ keyframes: [
477
+ { width: 'var(--side-nav-open-width)' },
478
+ { width: 'var(--side-nav-rail-width)' },
479
+ ],
480
+ options: { duration: 250, easing: 'ease' },
481
+ });
482
+
483
+ // Overlay animations
484
+ setDefaultAnimation('sideNav.overlay.show', {
485
+ keyframes: [{ opacity: 0 }, { opacity: 1 }],
486
+ options: { duration: 250 },
487
+ });
488
+
489
+ setDefaultAnimation('sideNav.overlay.hide', {
490
+ keyframes: [{ opacity: 1 }, { opacity: 0 }],
491
+ options: { duration: 250 },
492
+ });