@synergy-design-system/components 1.11.0 → 1.12.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 (224) hide show
  1. package/dist/chunks/{chunk.RRG6TAY7.js → chunk.25VU42YC.js} +2 -2
  2. package/dist/chunks/{chunk.EGIUUFQ4.js → chunk.2HCVVOEV.js} +2 -2
  3. package/dist/chunks/chunk.2KYFCKCK.js +10 -0
  4. package/dist/chunks/chunk.2KYFCKCK.js.map +7 -0
  5. package/dist/chunks/chunk.2QOQY4ZG.js +132 -0
  6. package/dist/chunks/chunk.2QOQY4ZG.js.map +7 -0
  7. package/dist/chunks/{chunk.GTSRMEPE.js → chunk.2QYALZBT.js} +2 -51
  8. package/dist/chunks/chunk.2QYALZBT.js.map +7 -0
  9. package/dist/chunks/chunk.3FOVDOJX.js +26 -0
  10. package/dist/chunks/chunk.3FOVDOJX.js.map +7 -0
  11. package/dist/chunks/{chunk.HSC2UWAO.js → chunk.3V2G5ZN5.js} +8 -8
  12. package/dist/chunks/chunk.55KPESRA.js +131 -0
  13. package/dist/chunks/chunk.55KPESRA.js.map +7 -0
  14. package/dist/chunks/{chunk.G5AYV6GN.js → chunk.5D6C4M2C.js} +6 -6
  15. package/dist/chunks/{chunk.OEBVCWZK.js → chunk.5IL2WT3S.js} +2 -2
  16. package/dist/chunks/{chunk.XOQKLUKE.js → chunk.5UM7HWIJ.js} +2 -2
  17. package/dist/chunks/{chunk.TIZ7TBXR.js → chunk.62EBS3GI.js} +2 -2
  18. package/dist/chunks/{chunk.XGXFE6IF.js → chunk.66WXVGAW.js} +16 -2
  19. package/dist/chunks/{chunk.XGXFE6IF.js.map → chunk.66WXVGAW.js.map} +1 -1
  20. package/dist/chunks/{chunk.DAQB7JE5.js → chunk.6CAMLQSC.js} +2 -2
  21. package/dist/chunks/chunk.6G5WBKTI.js +35 -0
  22. package/dist/chunks/chunk.6G5WBKTI.js.map +7 -0
  23. package/dist/chunks/chunk.76A3JS2N.js +12 -0
  24. package/dist/chunks/chunk.76A3JS2N.js.map +7 -0
  25. package/dist/chunks/chunk.7BEVGRQ2.js +52 -0
  26. package/dist/chunks/chunk.7BEVGRQ2.js.map +7 -0
  27. package/dist/chunks/{chunk.OQ72PVRS.js → chunk.B7UA4FRG.js} +2 -2
  28. package/dist/chunks/{chunk.24VV3YAD.js → chunk.BRWLHYC5.js} +3 -3
  29. package/dist/chunks/{chunk.HZDJ5AOY.js → chunk.BUBQFHSV.js} +3 -3
  30. package/dist/chunks/{chunk.YJO3VNKR.js → chunk.D3SWRAXW.js} +2 -2
  31. package/dist/chunks/chunk.ENYO4NCR.js +21 -0
  32. package/dist/chunks/chunk.ENYO4NCR.js.map +7 -0
  33. package/dist/chunks/{chunk.L6ENEGDU.js → chunk.FTTKC5YD.js} +2 -2
  34. package/dist/chunks/{chunk.P2PJU2JX.js → chunk.G5TO77WM.js} +2 -2
  35. package/dist/chunks/chunk.GAES53RX.js +12 -0
  36. package/dist/chunks/chunk.GAES53RX.js.map +7 -0
  37. package/dist/chunks/chunk.HUCNUF4L.js +194 -0
  38. package/dist/chunks/chunk.HUCNUF4L.js.map +7 -0
  39. package/dist/chunks/{chunk.6QB26MQP.js → chunk.I2E3UJIK.js} +7 -7
  40. package/dist/chunks/{chunk.MTUGTGK4.js → chunk.IQK6FVMW.js} +2 -2
  41. package/dist/chunks/{chunk.5NLSHXNC.js → chunk.ISU5BF2G.js} +2 -2
  42. package/dist/chunks/{chunk.TWO26WWF.js → chunk.JT32Q3RE.js} +4 -4
  43. package/dist/chunks/{chunk.XOIRFMBL.js → chunk.KDY26CBL.js} +3 -3
  44. package/dist/chunks/{chunk.NJPQTVZC.js → chunk.KNZNW4VS.js} +3 -3
  45. package/dist/chunks/{chunk.WGHLFFPZ.js → chunk.MFHUNGFO.js} +5 -5
  46. package/dist/chunks/{chunk.C5HHWDZB.js → chunk.MWXEDKNQ.js} +2 -2
  47. package/dist/chunks/{chunk.HIBWKIA6.js → chunk.N3SVWIVG.js} +3 -3
  48. package/dist/chunks/{chunk.RUEZLCM4.js → chunk.NOUFWET6.js} +2 -2
  49. package/dist/chunks/{chunk.EK3YHGUC.js → chunk.NYY4POP7.js} +3 -3
  50. package/dist/chunks/chunk.OOABXWCW.js +111 -0
  51. package/dist/chunks/chunk.OOABXWCW.js.map +7 -0
  52. package/dist/chunks/chunk.PDHVYHXD.js +156 -0
  53. package/dist/chunks/chunk.PDHVYHXD.js.map +7 -0
  54. package/dist/chunks/chunk.PFJUBUDL.js +12 -0
  55. package/dist/chunks/chunk.PFJUBUDL.js.map +7 -0
  56. package/dist/chunks/{chunk.KBQDYKZQ.js → chunk.PLIQ6RPD.js} +2 -2
  57. package/dist/chunks/{chunk.XOL5KILI.js → chunk.PN6VIFO3.js} +10 -8
  58. package/dist/chunks/{chunk.XOL5KILI.js.map → chunk.PN6VIFO3.js.map} +1 -1
  59. package/dist/chunks/{chunk.42OELSP4.js → chunk.PQKD6OYF.js} +2 -2
  60. package/dist/chunks/{chunk.27H5YFFI.js → chunk.QDYPBFX4.js} +5 -5
  61. package/dist/chunks/{chunk.C64JGJO3.js → chunk.QXUPCXT5.js} +2 -2
  62. package/dist/chunks/{chunk.RKCUJRKU.js → chunk.R6GYAHAZ.js} +3 -3
  63. package/dist/chunks/chunk.RD2376VJ.js +12 -0
  64. package/dist/chunks/chunk.RD2376VJ.js.map +7 -0
  65. package/dist/chunks/chunk.RRWSXFQ5.js +239 -0
  66. package/dist/chunks/chunk.RRWSXFQ5.js.map +7 -0
  67. package/dist/chunks/chunk.RSSY7KPD.js +24 -0
  68. package/dist/chunks/chunk.RSSY7KPD.js.map +7 -0
  69. package/dist/chunks/{chunk.WJX2T5MU.js → chunk.SJCYCGUZ.js} +6 -6
  70. package/dist/chunks/chunk.SLCYXMHB.js +57 -0
  71. package/dist/chunks/chunk.SLCYXMHB.js.map +7 -0
  72. package/dist/chunks/{chunk.CHESV63R.js → chunk.TYPMG2S4.js} +2 -2
  73. package/dist/chunks/{chunk.HQC36QXK.js → chunk.VKSYJXTN.js} +18 -133
  74. package/dist/chunks/chunk.VKSYJXTN.js.map +7 -0
  75. package/dist/chunks/{chunk.3GR4ZUZH.js → chunk.W2GO4M3V.js} +2 -2
  76. package/dist/chunks/chunk.WATON67O.js +12 -0
  77. package/dist/chunks/chunk.WATON67O.js.map +7 -0
  78. package/dist/chunks/{chunk.Q3LOBGRV.js → chunk.WMAUFYXR.js} +2 -2
  79. package/dist/chunks/{chunk.JAHRZFQ6.js → chunk.WWMWREE4.js} +4 -4
  80. package/dist/chunks/{chunk.WPY6PWSD.js → chunk.X3D3MBIH.js} +2 -2
  81. package/dist/chunks/{chunk.WPY6PWSD.js.map → chunk.X3D3MBIH.js.map} +1 -1
  82. package/dist/chunks/chunk.X6GR6IA2.js +29 -0
  83. package/dist/chunks/chunk.X6GR6IA2.js.map +7 -0
  84. package/dist/chunks/{chunk.5Q46XTEM.js → chunk.YGF5AV75.js} +2 -2
  85. package/dist/chunks/chunk.ZZKLLRUA.js +365 -0
  86. package/dist/chunks/chunk.ZZKLLRUA.js.map +7 -0
  87. package/dist/components/button/button.component.js +7 -7
  88. package/dist/components/button/button.js +8 -8
  89. package/dist/components/button-group/button-group.component.js +2 -2
  90. package/dist/components/button-group/button-group.js +3 -3
  91. package/dist/components/checkbox/checkbox.component.js +6 -6
  92. package/dist/components/checkbox/checkbox.js +7 -7
  93. package/dist/components/divider/divider.component.js +2 -2
  94. package/dist/components/divider/divider.js +3 -3
  95. package/dist/components/drawer/drawer.component.js +11 -9
  96. package/dist/components/drawer/drawer.js +12 -10
  97. package/dist/components/dropdown/dropdown.component.d.ts +96 -0
  98. package/dist/components/dropdown/dropdown.component.js +19 -0
  99. package/dist/components/dropdown/dropdown.component.js.map +7 -0
  100. package/dist/components/dropdown/dropdown.custom.styles.d.ts +2 -0
  101. package/dist/components/dropdown/dropdown.custom.styles.js +8 -0
  102. package/dist/components/dropdown/dropdown.custom.styles.js.map +7 -0
  103. package/dist/components/dropdown/dropdown.d.ts +8 -0
  104. package/dist/components/dropdown/dropdown.js +20 -0
  105. package/dist/components/dropdown/dropdown.js.map +7 -0
  106. package/dist/components/dropdown/dropdown.styles.d.ts +2 -0
  107. package/dist/components/dropdown/dropdown.styles.js +8 -0
  108. package/dist/components/dropdown/dropdown.styles.js.map +7 -0
  109. package/dist/components/header/header.component.js +7 -7
  110. package/dist/components/header/header.js +8 -8
  111. package/dist/components/icon/icon.component.js +4 -4
  112. package/dist/components/icon/icon.js +5 -5
  113. package/dist/components/icon-button/icon-button.component.js +5 -5
  114. package/dist/components/icon-button/icon-button.js +6 -6
  115. package/dist/components/input/input.component.js +7 -7
  116. package/dist/components/input/input.js +8 -8
  117. package/dist/components/menu/menu.component.d.ts +39 -0
  118. package/dist/components/menu/menu.component.js +11 -0
  119. package/dist/components/menu/menu.component.js.map +7 -0
  120. package/dist/components/menu/menu.custom.styles.d.ts +2 -0
  121. package/dist/components/menu/menu.custom.styles.js +8 -0
  122. package/dist/components/menu/menu.custom.styles.js.map +7 -0
  123. package/dist/components/menu/menu.d.ts +8 -0
  124. package/dist/components/menu/menu.js +12 -0
  125. package/dist/components/menu/menu.js.map +7 -0
  126. package/dist/components/menu/menu.styles.d.ts +2 -0
  127. package/dist/components/menu/menu.styles.js +8 -0
  128. package/dist/components/menu/menu.styles.js.map +7 -0
  129. package/dist/components/menu-item/menu-item.component.d.ts +67 -0
  130. package/dist/components/menu-item/menu-item.component.js +27 -0
  131. package/dist/components/menu-item/menu-item.component.js.map +7 -0
  132. package/dist/components/menu-item/menu-item.custom.styles.d.ts +2 -0
  133. package/dist/components/menu-item/menu-item.custom.styles.js +8 -0
  134. package/dist/components/menu-item/menu-item.custom.styles.js.map +7 -0
  135. package/dist/components/menu-item/menu-item.d.ts +8 -0
  136. package/dist/components/menu-item/menu-item.js +28 -0
  137. package/dist/components/menu-item/menu-item.js.map +7 -0
  138. package/dist/components/menu-item/menu-item.styles.d.ts +2 -0
  139. package/dist/components/menu-item/menu-item.styles.js +8 -0
  140. package/dist/components/menu-item/menu-item.styles.js.map +7 -0
  141. package/dist/components/menu-item/submenu-controller.d.ts +36 -0
  142. package/dist/components/menu-item/submenu-controller.js +11 -0
  143. package/dist/components/menu-item/submenu-controller.js.map +7 -0
  144. package/dist/components/menu-label/menu-label.component.d.ts +31 -0
  145. package/dist/components/menu-label/menu-label.component.js +15 -0
  146. package/dist/components/menu-label/menu-label.component.js.map +7 -0
  147. package/dist/components/menu-label/menu-label.custom.styles.d.ts +2 -0
  148. package/dist/components/menu-label/menu-label.custom.styles.js +8 -0
  149. package/dist/components/menu-label/menu-label.custom.styles.js.map +7 -0
  150. package/dist/components/menu-label/menu-label.d.ts +8 -0
  151. package/dist/components/menu-label/menu-label.js +16 -0
  152. package/dist/components/menu-label/menu-label.js.map +7 -0
  153. package/dist/components/menu-label/menu-label.styles.d.ts +2 -0
  154. package/dist/components/menu-label/menu-label.styles.js +8 -0
  155. package/dist/components/menu-label/menu-label.styles.js.map +7 -0
  156. package/dist/components/optgroup/optgroup.component.js +4 -4
  157. package/dist/components/optgroup/optgroup.js +5 -5
  158. package/dist/components/option/option.component.js +5 -5
  159. package/dist/components/option/option.js +6 -6
  160. package/dist/components/popup/popup.component.js +2 -2
  161. package/dist/components/popup/popup.d.ts +8 -0
  162. package/dist/components/popup/popup.js +11 -0
  163. package/dist/components/popup/popup.js.map +7 -0
  164. package/dist/components/radio/radio.component.js +5 -5
  165. package/dist/components/radio/radio.js +6 -6
  166. package/dist/components/radio-button/radio-button.component.js +3 -3
  167. package/dist/components/radio-button/radio-button.js +4 -4
  168. package/dist/components/radio-group/radio-group.component.js +5 -5
  169. package/dist/components/radio-group/radio-group.js +6 -6
  170. package/dist/components/select/select.component.js +13 -12
  171. package/dist/components/select/select.js +14 -13
  172. package/dist/components/spinner/spinner.component.js +2 -2
  173. package/dist/components/switch/switch.component.js +3 -3
  174. package/dist/components/switch/switch.js +4 -4
  175. package/dist/components/tag/tag.component.js +6 -6
  176. package/dist/components/tag/tag.js +7 -7
  177. package/dist/components/textarea/textarea.component.js +3 -3
  178. package/dist/components/textarea/textarea.js +4 -4
  179. package/dist/custom-elements.json +1993 -1134
  180. package/dist/events/events.d.ts +1 -0
  181. package/dist/events/syn-select.d.ts +9 -0
  182. package/dist/synergy.d.ts +5 -0
  183. package/dist/synergy.js +96 -61
  184. package/dist/themes/utility.css +12 -3
  185. package/dist/vscode.html-custom-data.json +137 -17
  186. package/package.json +2 -2
  187. package/dist/chunks/chunk.GTSRMEPE.js.map +0 -7
  188. package/dist/chunks/chunk.HQC36QXK.js.map +0 -7
  189. /package/dist/chunks/{chunk.RRG6TAY7.js.map → chunk.25VU42YC.js.map} +0 -0
  190. /package/dist/chunks/{chunk.EGIUUFQ4.js.map → chunk.2HCVVOEV.js.map} +0 -0
  191. /package/dist/chunks/{chunk.HSC2UWAO.js.map → chunk.3V2G5ZN5.js.map} +0 -0
  192. /package/dist/chunks/{chunk.G5AYV6GN.js.map → chunk.5D6C4M2C.js.map} +0 -0
  193. /package/dist/chunks/{chunk.OEBVCWZK.js.map → chunk.5IL2WT3S.js.map} +0 -0
  194. /package/dist/chunks/{chunk.XOQKLUKE.js.map → chunk.5UM7HWIJ.js.map} +0 -0
  195. /package/dist/chunks/{chunk.TIZ7TBXR.js.map → chunk.62EBS3GI.js.map} +0 -0
  196. /package/dist/chunks/{chunk.DAQB7JE5.js.map → chunk.6CAMLQSC.js.map} +0 -0
  197. /package/dist/chunks/{chunk.OQ72PVRS.js.map → chunk.B7UA4FRG.js.map} +0 -0
  198. /package/dist/chunks/{chunk.24VV3YAD.js.map → chunk.BRWLHYC5.js.map} +0 -0
  199. /package/dist/chunks/{chunk.HZDJ5AOY.js.map → chunk.BUBQFHSV.js.map} +0 -0
  200. /package/dist/chunks/{chunk.YJO3VNKR.js.map → chunk.D3SWRAXW.js.map} +0 -0
  201. /package/dist/chunks/{chunk.L6ENEGDU.js.map → chunk.FTTKC5YD.js.map} +0 -0
  202. /package/dist/chunks/{chunk.P2PJU2JX.js.map → chunk.G5TO77WM.js.map} +0 -0
  203. /package/dist/chunks/{chunk.6QB26MQP.js.map → chunk.I2E3UJIK.js.map} +0 -0
  204. /package/dist/chunks/{chunk.MTUGTGK4.js.map → chunk.IQK6FVMW.js.map} +0 -0
  205. /package/dist/chunks/{chunk.5NLSHXNC.js.map → chunk.ISU5BF2G.js.map} +0 -0
  206. /package/dist/chunks/{chunk.TWO26WWF.js.map → chunk.JT32Q3RE.js.map} +0 -0
  207. /package/dist/chunks/{chunk.XOIRFMBL.js.map → chunk.KDY26CBL.js.map} +0 -0
  208. /package/dist/chunks/{chunk.NJPQTVZC.js.map → chunk.KNZNW4VS.js.map} +0 -0
  209. /package/dist/chunks/{chunk.WGHLFFPZ.js.map → chunk.MFHUNGFO.js.map} +0 -0
  210. /package/dist/chunks/{chunk.C5HHWDZB.js.map → chunk.MWXEDKNQ.js.map} +0 -0
  211. /package/dist/chunks/{chunk.HIBWKIA6.js.map → chunk.N3SVWIVG.js.map} +0 -0
  212. /package/dist/chunks/{chunk.RUEZLCM4.js.map → chunk.NOUFWET6.js.map} +0 -0
  213. /package/dist/chunks/{chunk.EK3YHGUC.js.map → chunk.NYY4POP7.js.map} +0 -0
  214. /package/dist/chunks/{chunk.KBQDYKZQ.js.map → chunk.PLIQ6RPD.js.map} +0 -0
  215. /package/dist/chunks/{chunk.42OELSP4.js.map → chunk.PQKD6OYF.js.map} +0 -0
  216. /package/dist/chunks/{chunk.27H5YFFI.js.map → chunk.QDYPBFX4.js.map} +0 -0
  217. /package/dist/chunks/{chunk.C64JGJO3.js.map → chunk.QXUPCXT5.js.map} +0 -0
  218. /package/dist/chunks/{chunk.RKCUJRKU.js.map → chunk.R6GYAHAZ.js.map} +0 -0
  219. /package/dist/chunks/{chunk.WJX2T5MU.js.map → chunk.SJCYCGUZ.js.map} +0 -0
  220. /package/dist/chunks/{chunk.CHESV63R.js.map → chunk.TYPMG2S4.js.map} +0 -0
  221. /package/dist/chunks/{chunk.3GR4ZUZH.js.map → chunk.W2GO4M3V.js.map} +0 -0
  222. /package/dist/chunks/{chunk.Q3LOBGRV.js.map → chunk.WMAUFYXR.js.map} +0 -0
  223. /package/dist/chunks/{chunk.JAHRZFQ6.js.map → chunk.WWMWREE4.js.map} +0 -0
  224. /package/dist/chunks/{chunk.5Q46XTEM.js.map → chunk.YGF5AV75.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SynOptgroup
3
- } from "./chunk.TWO26WWF.js";
3
+ } from "./chunk.JT32Q3RE.js";
4
4
 
5
5
  // src/components/optgroup/optgroup.ts
6
6
  var optgroup_default = SynOptgroup;
@@ -9,4 +9,4 @@ SynOptgroup.define("syn-optgroup");
9
9
  export {
10
10
  optgroup_default
11
11
  };
12
- //# sourceMappingURL=chunk.RRG6TAY7.js.map
12
+ //# sourceMappingURL=chunk.25VU42YC.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SynRadioGroup
3
- } from "./chunk.G5AYV6GN.js";
3
+ } from "./chunk.5D6C4M2C.js";
4
4
 
5
5
  // src/components/radio-group/radio-group.ts
6
6
  var radio_group_default = SynRadioGroup;
@@ -9,4 +9,4 @@ SynRadioGroup.define("syn-radio-group");
9
9
  export {
10
10
  radio_group_default
11
11
  };
12
- //# sourceMappingURL=chunk.EGIUUFQ4.js.map
12
+ //# sourceMappingURL=chunk.2HCVVOEV.js.map
@@ -0,0 +1,10 @@
1
+ // src/components/dropdown/dropdown.custom.styles.ts
2
+ import { css } from "lit";
3
+ var dropdown_custom_styles_default = css`
4
+ /* Write custom CSS here */
5
+ `;
6
+
7
+ export {
8
+ dropdown_custom_styles_default
9
+ };
10
+ //# sourceMappingURL=chunk.2KYFCKCK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/dropdown/dropdown.custom.styles.ts"],
4
+ "sourcesContent": ["import { css } from 'lit';\n\nexport default css`\n /* Write custom CSS here */\n`;\n"],
5
+ "mappings": ";AAAA,SAAS,WAAW;AAEpB,IAAO,iCAAQ;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,132 @@
1
+ // src/internal/tabbable.ts
2
+ var computedStyleMap = /* @__PURE__ */ new WeakMap();
3
+ function getCachedComputedStyle(el) {
4
+ let computedStyle = computedStyleMap.get(el);
5
+ if (!computedStyle) {
6
+ computedStyle = window.getComputedStyle(el, null);
7
+ computedStyleMap.set(el, computedStyle);
8
+ }
9
+ return computedStyle;
10
+ }
11
+ function isVisible(el) {
12
+ if (typeof el.checkVisibility === "function") {
13
+ return el.checkVisibility({ checkOpacity: false, checkVisibilityCSS: true });
14
+ }
15
+ const computedStyle = getCachedComputedStyle(el);
16
+ return computedStyle.visibility !== "hidden" && computedStyle.display !== "none";
17
+ }
18
+ function isOverflowingAndTabbable(el) {
19
+ const computedStyle = getCachedComputedStyle(el);
20
+ const { overflowY, overflowX } = computedStyle;
21
+ if (overflowY === "scroll" || overflowX === "scroll") {
22
+ return true;
23
+ }
24
+ if (overflowY !== "auto" || overflowX !== "auto") {
25
+ return false;
26
+ }
27
+ const isOverflowingY = el.scrollHeight > el.clientHeight;
28
+ if (isOverflowingY && overflowY === "auto") {
29
+ return true;
30
+ }
31
+ const isOverflowingX = el.scrollWidth > el.clientWidth;
32
+ if (isOverflowingX && overflowX === "auto") {
33
+ return true;
34
+ }
35
+ return false;
36
+ }
37
+ function isTabbable(el) {
38
+ const tag = el.tagName.toLowerCase();
39
+ const tabindex = Number(el.getAttribute("tabindex"));
40
+ const hasTabindex = el.hasAttribute("tabindex");
41
+ if (hasTabindex && (isNaN(tabindex) || tabindex <= -1)) {
42
+ return false;
43
+ }
44
+ if (el.hasAttribute("disabled")) {
45
+ return false;
46
+ }
47
+ if (el.closest("[inert]")) {
48
+ return false;
49
+ }
50
+ if (tag === "input" && el.getAttribute("type") === "radio" && !el.hasAttribute("checked")) {
51
+ return false;
52
+ }
53
+ if (!isVisible(el)) {
54
+ return false;
55
+ }
56
+ if ((tag === "audio" || tag === "video") && el.hasAttribute("controls")) {
57
+ return true;
58
+ }
59
+ if (el.hasAttribute("tabindex")) {
60
+ return true;
61
+ }
62
+ if (el.hasAttribute("contenteditable") && el.getAttribute("contenteditable") !== "false") {
63
+ return true;
64
+ }
65
+ const isNativelyTabbable = [
66
+ "button",
67
+ "input",
68
+ "select",
69
+ "textarea",
70
+ "a",
71
+ "audio",
72
+ "video",
73
+ "summary",
74
+ "iframe"
75
+ ].includes(tag);
76
+ if (isNativelyTabbable) {
77
+ return true;
78
+ }
79
+ return isOverflowingAndTabbable(el);
80
+ }
81
+ function getTabbableBoundary(root) {
82
+ var _a, _b;
83
+ const tabbableElements = getTabbableElements(root);
84
+ const start = (_a = tabbableElements[0]) != null ? _a : null;
85
+ const end = (_b = tabbableElements[tabbableElements.length - 1]) != null ? _b : null;
86
+ return { start, end };
87
+ }
88
+ function getSlottedChildrenOutsideRootElement(slotElement, root) {
89
+ var _a;
90
+ return ((_a = slotElement.getRootNode({ composed: true })) == null ? void 0 : _a.host) !== root;
91
+ }
92
+ function getTabbableElements(root) {
93
+ const walkedEls = /* @__PURE__ */ new WeakMap();
94
+ const tabbableElements = [];
95
+ function walk(el) {
96
+ if (el instanceof Element) {
97
+ if (el.hasAttribute("inert") || el.closest("[inert]")) {
98
+ return;
99
+ }
100
+ if (walkedEls.has(el)) {
101
+ return;
102
+ }
103
+ walkedEls.set(el, true);
104
+ if (!tabbableElements.includes(el) && isTabbable(el)) {
105
+ tabbableElements.push(el);
106
+ }
107
+ if (el instanceof HTMLSlotElement && getSlottedChildrenOutsideRootElement(el, root)) {
108
+ el.assignedElements({ flatten: true }).forEach((assignedEl) => {
109
+ walk(assignedEl);
110
+ });
111
+ }
112
+ if (el.shadowRoot !== null && el.shadowRoot.mode === "open") {
113
+ walk(el.shadowRoot);
114
+ }
115
+ }
116
+ for (const e of el.children) {
117
+ walk(e);
118
+ }
119
+ }
120
+ walk(root);
121
+ return tabbableElements.sort((a, b) => {
122
+ const aTabindex = Number(a.getAttribute("tabindex")) || 0;
123
+ const bTabindex = Number(b.getAttribute("tabindex")) || 0;
124
+ return bTabindex - aTabindex;
125
+ });
126
+ }
127
+
128
+ export {
129
+ getTabbableBoundary,
130
+ getTabbableElements
131
+ };
132
+ //# sourceMappingURL=chunk.2QOQY4ZG.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/internal/tabbable.ts"],
4
+ "sourcesContent": ["// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\n// Cached compute style calls. This is specifically for browsers that dont support `checkVisibility()`.\n// computedStyle calls are \"live\" so they only need to be retrieved once for an element.\nconst computedStyleMap = new WeakMap<Element, CSSStyleDeclaration>();\n\nfunction getCachedComputedStyle(el: HTMLElement): CSSStyleDeclaration {\n let computedStyle: undefined | CSSStyleDeclaration = computedStyleMap.get(el);\n\n if (!computedStyle) {\n computedStyle = window.getComputedStyle(el, null);\n computedStyleMap.set(el, computedStyle);\n }\n\n return computedStyle;\n}\n\nfunction isVisible(el: HTMLElement): boolean {\n // This is the fastest check, but isn't supported in Safari.\n if (typeof el.checkVisibility === 'function') {\n // Opacity is focusable, visibility is not.\n return el.checkVisibility({ checkOpacity: false, checkVisibilityCSS: true });\n }\n\n // Fallback \"polyfill\" for \"checkVisibility\"\n const computedStyle = getCachedComputedStyle(el);\n\n return computedStyle.visibility !== 'hidden' && computedStyle.display !== 'none';\n}\n\n// While this behavior isn't standard in Safari / Chrome yet, I think it's the most reasonable\n// way of handling tabbable overflow areas. Browser sniffing seems gross, and it's the most\n// accessible way of handling overflow areas. [Konnor]\nfunction isOverflowingAndTabbable(el: HTMLElement): boolean {\n const computedStyle = getCachedComputedStyle(el);\n\n const { overflowY, overflowX } = computedStyle;\n\n if (overflowY === 'scroll' || overflowX === 'scroll') {\n return true;\n }\n\n if (overflowY !== 'auto' || overflowX !== 'auto') {\n return false;\n }\n\n // Always overflow === \"auto\" by this point\n const isOverflowingY = el.scrollHeight > el.clientHeight;\n\n if (isOverflowingY && overflowY === 'auto') {\n return true;\n }\n\n const isOverflowingX = el.scrollWidth > el.clientWidth;\n\n if (isOverflowingX && overflowX === 'auto') {\n return true;\n }\n\n return false;\n}\n\n/** Determines if the specified element is tabbable using heuristics inspired by https://github.com/focus-trap/tabbable */\nfunction isTabbable(el: HTMLElement) {\n const tag = el.tagName.toLowerCase();\n\n const tabindex = Number(el.getAttribute('tabindex'));\n const hasTabindex = el.hasAttribute('tabindex');\n\n // elements with a tabindex attribute that is either NaN or <= -1 are not tabbable\n if (hasTabindex && (isNaN(tabindex) || tabindex <= -1)) {\n return false;\n }\n\n // Elements with a disabled attribute are not tabbable\n if (el.hasAttribute('disabled')) {\n return false;\n }\n\n // If any parents have \"inert\", we aren't \"tabbable\"\n if (el.closest('[inert]')) {\n return false;\n }\n\n // Radios without a checked attribute are not tabbable\n if (tag === 'input' && el.getAttribute('type') === 'radio' && !el.hasAttribute('checked')) {\n return false;\n }\n\n if (!isVisible(el)) {\n return false;\n }\n\n // Audio and video elements with the controls attribute are tabbable\n if ((tag === 'audio' || tag === 'video') && el.hasAttribute('controls')) {\n return true;\n }\n\n // Elements with a tabindex other than -1 are tabbable\n if (el.hasAttribute('tabindex')) {\n return true;\n }\n\n // Elements with a contenteditable attribute are tabbable\n if (el.hasAttribute('contenteditable') && el.getAttribute('contenteditable') !== 'false') {\n return true;\n }\n\n // At this point, the following elements are considered tabbable\n const isNativelyTabbable = [\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'a',\n 'audio',\n 'video',\n 'summary',\n 'iframe'\n ].includes(tag);\n\n if (isNativelyTabbable) {\n return true;\n }\n\n // We save the overflow checks for last, because they're the most expensive\n return isOverflowingAndTabbable(el);\n}\n\n/**\n * Returns the first and last bounding elements that are tabbable. This is more performant than checking every single\n * element because it short-circuits after finding the first and last ones.\n */\nexport function getTabbableBoundary(root: HTMLElement | ShadowRoot) {\n const tabbableElements = getTabbableElements(root);\n\n // Find the first and last tabbable elements\n const start = tabbableElements[0] ?? null;\n const end = tabbableElements[tabbableElements.length - 1] ?? null;\n\n return { start, end };\n}\n\n/**\n * This looks funky. Basically a slot's children will always be picked up *if* they're within the `root` element.\n * However, there is an edge case when, if the `root` is wrapped by another shadow DOM, it won't grab the children.\n * This fixes that fun edge case.\n */\nfunction getSlottedChildrenOutsideRootElement(slotElement: HTMLSlotElement, root: HTMLElement | ShadowRoot) {\n return (slotElement.getRootNode({ composed: true }) as ShadowRoot | null)?.host !== root;\n}\n\nexport function getTabbableElements(root: HTMLElement | ShadowRoot) {\n const walkedEls = new WeakMap();\n const tabbableElements: HTMLElement[] = [];\n\n function walk(el: HTMLElement | ShadowRoot) {\n if (el instanceof Element) {\n // if the element has \"inert\" we can just no-op it.\n if (el.hasAttribute('inert') || el.closest('[inert]')) {\n return;\n }\n\n if (walkedEls.has(el)) {\n return;\n }\n walkedEls.set(el, true);\n\n if (!tabbableElements.includes(el) && isTabbable(el)) {\n tabbableElements.push(el);\n }\n\n if (el instanceof HTMLSlotElement && getSlottedChildrenOutsideRootElement(el, root)) {\n el.assignedElements({ flatten: true }).forEach((assignedEl: HTMLElement) => {\n walk(assignedEl);\n });\n }\n\n if (el.shadowRoot !== null && el.shadowRoot.mode === 'open') {\n walk(el.shadowRoot);\n }\n }\n\n for (const e of el.children) {\n walk(e as HTMLElement);\n }\n }\n\n // Collect all elements including the root\n walk(root);\n\n // Is this worth having? Most sorts will always add increased overhead. And positive tabindexes shouldn't really be used.\n // So is it worth being right? Or fast?\n return tabbableElements.sort((a, b) => {\n // Make sure we sort by tabindex.\n const aTabindex = Number(a.getAttribute('tabindex')) || 0;\n const bTabindex = Number(b.getAttribute('tabindex')) || 0;\n return bTabindex - aTabindex;\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,36 +1,3 @@
1
- import {
2
- __spreadProps,
3
- __spreadValues
4
- } from "./chunk.QNDC5KWA.js";
5
-
6
- // src/internal/animate.ts
7
- function animateTo(el, keyframes, options) {
8
- return new Promise((resolve) => {
9
- if ((options == null ? void 0 : options.duration) === Infinity) {
10
- throw new Error("Promise-based animations must be finite.");
11
- }
12
- const animation = el.animate(keyframes, __spreadProps(__spreadValues({}, options), {
13
- duration: prefersReducedMotion() ? 0 : options.duration
14
- }));
15
- animation.addEventListener("cancel", resolve, { once: true });
16
- animation.addEventListener("finish", resolve, { once: true });
17
- });
18
- }
19
- function prefersReducedMotion() {
20
- const query = window.matchMedia("(prefers-reduced-motion: reduce)");
21
- return query.matches;
22
- }
23
- function stopAnimations(el) {
24
- return Promise.all(
25
- el.getAnimations().map((animation) => {
26
- return new Promise((resolve) => {
27
- animation.cancel();
28
- requestAnimationFrame(resolve);
29
- });
30
- })
31
- );
32
- }
33
-
34
1
  // src/internal/offset.ts
35
2
  function getOffset(element, parent) {
36
3
  return {
@@ -84,25 +51,9 @@ function scrollIntoView(element, container, direction = "vertical", behavior = "
84
51
  }
85
52
  }
86
53
 
87
- // src/internal/event.ts
88
- function waitForEvent(el, eventName) {
89
- return new Promise((resolve) => {
90
- function done(event) {
91
- if (event.target === el) {
92
- el.removeEventListener(eventName, done);
93
- resolve();
94
- }
95
- }
96
- el.addEventListener(eventName, done);
97
- });
98
- }
99
-
100
54
  export {
101
- animateTo,
102
- stopAnimations,
103
55
  lockBodyScrolling,
104
56
  unlockBodyScrolling,
105
- scrollIntoView,
106
- waitForEvent
57
+ scrollIntoView
107
58
  };
108
- //# sourceMappingURL=chunk.GTSRMEPE.js.map
59
+ //# sourceMappingURL=chunk.2QYALZBT.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/internal/offset.ts", "../../src/internal/scroll.ts"],
4
+ "sourcesContent": ["// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\n/**\n * Returns an element's offset relative to its parent. Similar to element.offsetTop and element.offsetLeft, except the\n * parent doesn't have to be positioned relative or absolute.\n *\n * NOTE: This was created to work around what appears to be a bug in Chrome where a slotted element's offsetParent seems\n * to ignore elements inside the surrounding shadow DOM: https://bugs.chromium.org/p/chromium/issues/detail?id=920069\n */\nexport function getOffset(element: HTMLElement, parent: HTMLElement) {\n return {\n top: Math.round(element.getBoundingClientRect().top - parent.getBoundingClientRect().top),\n left: Math.round(element.getBoundingClientRect().left - parent.getBoundingClientRect().left)\n };\n}\n", "// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\nimport { getOffset } from './offset.js';\n\nconst locks = new Set();\n\n/** Returns the width of the document's scrollbar */\nfunction getScrollbarWidth() {\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n}\n\n/**\n * Prevents body scrolling. Keeps track of which elements requested a lock so multiple levels of locking are possible\n * without premature unlocking.\n */\nexport function lockBodyScrolling(lockingEl: HTMLElement) {\n locks.add(lockingEl);\n\n // When the first lock is created, set the scroll lock size to match the scrollbar's width to prevent content from\n // shifting. We only do this on the first lock because the scrollbar width will measure zero after overflow is hidden.\n if (!document.body.classList.contains('syn-scroll-lock')) {\n const scrollbarWidth = getScrollbarWidth(); // must be measured before the `syn-scroll-lock` class is applied\n document.body.classList.add('syn-scroll-lock');\n document.body.style.setProperty('--syn-scroll-lock-size', `${scrollbarWidth}px`);\n }\n}\n\n/**\n * Unlocks body scrolling. Scrolling will only be unlocked once all elements that requested a lock call this method.\n */\nexport function unlockBodyScrolling(lockingEl: HTMLElement) {\n locks.delete(lockingEl);\n\n if (locks.size === 0) {\n document.body.classList.remove('syn-scroll-lock');\n document.body.style.removeProperty('--syn-scroll-lock-size');\n }\n}\n\n/** Scrolls an element into view of its container. If the element is already in view, nothing will happen. */\nexport function scrollIntoView(\n element: HTMLElement,\n container: HTMLElement,\n direction: 'horizontal' | 'vertical' | 'both' = 'vertical',\n behavior: 'smooth' | 'auto' = 'smooth'\n) {\n const offset = getOffset(element, container);\n const offsetTop = offset.top + container.scrollTop;\n const offsetLeft = offset.left + container.scrollLeft;\n const minX = container.scrollLeft;\n const maxX = container.scrollLeft + container.offsetWidth;\n const minY = container.scrollTop;\n const maxY = container.scrollTop + container.offsetHeight;\n\n if (direction === 'horizontal' || direction === 'both') {\n if (offsetLeft < minX) {\n container.scrollTo({ left: offsetLeft, behavior });\n } else if (offsetLeft + element.clientWidth > maxX) {\n container.scrollTo({ left: offsetLeft - container.offsetWidth + element.clientWidth, behavior });\n }\n }\n\n if (direction === 'vertical' || direction === 'both') {\n if (offsetTop < minY) {\n container.scrollTo({ top: offsetTop, behavior });\n } else if (offsetTop + element.clientHeight > maxY) {\n container.scrollTo({ top: offsetTop - container.offsetHeight + element.clientHeight, behavior });\n }\n }\n}\n"],
5
+ "mappings": ";AAaO,SAAS,UAAU,SAAsB,QAAqB;AACnE,SAAO;AAAA,IACL,KAAK,KAAK,MAAM,QAAQ,sBAAsB,EAAE,MAAM,OAAO,sBAAsB,EAAE,GAAG;AAAA,IACxF,MAAM,KAAK,MAAM,QAAQ,sBAAsB,EAAE,OAAO,OAAO,sBAAsB,EAAE,IAAI;AAAA,EAC7F;AACF;;;ACVA,IAAM,QAAQ,oBAAI,IAAI;AAGtB,SAAS,oBAAoB;AAC3B,QAAM,gBAAgB,SAAS,gBAAgB;AAC/C,SAAO,KAAK,IAAI,OAAO,aAAa,aAAa;AACnD;AAMO,SAAS,kBAAkB,WAAwB;AACxD,QAAM,IAAI,SAAS;AAInB,MAAI,CAAC,SAAS,KAAK,UAAU,SAAS,iBAAiB,GAAG;AACxD,UAAM,iBAAiB,kBAAkB;AACzC,aAAS,KAAK,UAAU,IAAI,iBAAiB;AAC7C,aAAS,KAAK,MAAM,YAAY,0BAA0B,GAAG,cAAc,IAAI;AAAA,EACjF;AACF;AAKO,SAAS,oBAAoB,WAAwB;AAC1D,QAAM,OAAO,SAAS;AAEtB,MAAI,MAAM,SAAS,GAAG;AACpB,aAAS,KAAK,UAAU,OAAO,iBAAiB;AAChD,aAAS,KAAK,MAAM,eAAe,wBAAwB;AAAA,EAC7D;AACF;AAGO,SAAS,eACd,SACA,WACA,YAAgD,YAChD,WAA8B,UAC9B;AACA,QAAM,SAAS,UAAU,SAAS,SAAS;AAC3C,QAAM,YAAY,OAAO,MAAM,UAAU;AACzC,QAAM,aAAa,OAAO,OAAO,UAAU;AAC3C,QAAM,OAAO,UAAU;AACvB,QAAM,OAAO,UAAU,aAAa,UAAU;AAC9C,QAAM,OAAO,UAAU;AACvB,QAAM,OAAO,UAAU,YAAY,UAAU;AAE7C,MAAI,cAAc,gBAAgB,cAAc,QAAQ;AACtD,QAAI,aAAa,MAAM;AACrB,gBAAU,SAAS,EAAE,MAAM,YAAY,SAAS,CAAC;AAAA,IACnD,WAAW,aAAa,QAAQ,cAAc,MAAM;AAClD,gBAAU,SAAS,EAAE,MAAM,aAAa,UAAU,cAAc,QAAQ,aAAa,SAAS,CAAC;AAAA,IACjG;AAAA,EACF;AAEA,MAAI,cAAc,cAAc,cAAc,QAAQ;AACpD,QAAI,YAAY,MAAM;AACpB,gBAAU,SAAS,EAAE,KAAK,WAAW,SAAS,CAAC;AAAA,IACjD,WAAW,YAAY,QAAQ,eAAe,MAAM;AAClD,gBAAU,SAAS,EAAE,KAAK,YAAY,UAAU,eAAe,QAAQ,cAAc,SAAS,CAAC;AAAA,IACjG;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,26 @@
1
+ // src/components/menu-label/menu-label.styles.ts
2
+ import { css } from "lit";
3
+ var menu_label_styles_default = css`
4
+ /* stylelint-disable */
5
+ :host {
6
+ display: block;
7
+ }
8
+
9
+ .menu-label {
10
+ display: inline-block;
11
+ font-family: var(--syn-font-sans);
12
+ font-size: var(--syn-font-size-small);
13
+ font-weight: var(--syn-font-weight-semibold);
14
+ line-height: var(--syn-line-height-normal);
15
+ letter-spacing: var(--syn-letter-spacing-normal);
16
+ color: var(--syn-color-neutral-500);
17
+ padding: var(--syn-spacing-2x-small) var(--syn-spacing-x-large);
18
+ user-select: none;
19
+ -webkit-user-select: none;
20
+ }
21
+ `;
22
+
23
+ export {
24
+ menu_label_styles_default
25
+ };
26
+ //# sourceMappingURL=chunk.3FOVDOJX.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/menu-label/menu-label.styles.ts"],
4
+ "sourcesContent": ["// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\nimport { css } from 'lit';\nexport default css`\n\t/* stylelint-disable */\n :host {\n display: block;\n }\n\n .menu-label {\n display: inline-block;\n font-family: var(--syn-font-sans);\n font-size: var(--syn-font-size-small);\n font-weight: var(--syn-font-weight-semibold);\n line-height: var(--syn-line-height-normal);\n letter-spacing: var(--syn-letter-spacing-normal);\n color: var(--syn-color-neutral-500);\n padding: var(--syn-spacing-2x-small) var(--syn-spacing-x-large);\n user-select: none;\n -webkit-user-select: none;\n }\n`;\n"],
5
+ "mappings": ";AAMA,SAAS,WAAW;AACpB,IAAO,4BAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SynSpinner
3
- } from "./chunk.RUEZLCM4.js";
3
+ } from "./chunk.NOUFWET6.js";
4
4
  import {
5
5
  LocalizeController
6
6
  } from "./chunk.LAB4YJYE.js";
@@ -10,23 +10,23 @@ import {
10
10
  } from "./chunk.SZCGMXW5.js";
11
11
  import {
12
12
  HasSlotController
13
- } from "./chunk.XGXFE6IF.js";
13
+ } from "./chunk.66WXVGAW.js";
14
14
  import {
15
15
  SynIcon
16
- } from "./chunk.6QB26MQP.js";
16
+ } from "./chunk.I2E3UJIK.js";
17
17
  import {
18
18
  watch
19
19
  } from "./chunk.AVTU2BGE.js";
20
- import {
21
- SynergyElement,
22
- component_styles_default
23
- } from "./chunk.WPY6PWSD.js";
24
20
  import {
25
21
  button_custom_styles_default
26
22
  } from "./chunk.K55MKNUR.js";
27
23
  import {
28
24
  button_styles_default
29
25
  } from "./chunk.SJMMPKWP.js";
26
+ import {
27
+ SynergyElement,
28
+ component_styles_default
29
+ } from "./chunk.X3D3MBIH.js";
30
30
  import {
31
31
  __decorateClass
32
32
  } from "./chunk.QNDC5KWA.js";
@@ -273,4 +273,4 @@ __decorateClass([
273
273
  export {
274
274
  SynButton
275
275
  };
276
- //# sourceMappingURL=chunk.HSC2UWAO.js.map
276
+ //# sourceMappingURL=chunk.3V2G5ZN5.js.map
@@ -0,0 +1,131 @@
1
+ import {
2
+ menu_custom_styles_default
3
+ } from "./chunk.ENYO4NCR.js";
4
+ import {
5
+ menu_styles_default
6
+ } from "./chunk.RSSY7KPD.js";
7
+ import {
8
+ SynergyElement,
9
+ component_styles_default
10
+ } from "./chunk.X3D3MBIH.js";
11
+ import {
12
+ __decorateClass
13
+ } from "./chunk.QNDC5KWA.js";
14
+
15
+ // src/components/menu/menu.component.ts
16
+ import { html } from "lit";
17
+ import { query } from "lit/decorators.js";
18
+ var SynMenu = class extends SynergyElement {
19
+ connectedCallback() {
20
+ super.connectedCallback();
21
+ this.setAttribute("role", "menu");
22
+ }
23
+ handleClick(event) {
24
+ const menuItemTypes = ["menuitem", "menuitemcheckbox"];
25
+ const target = event.composedPath().find((el) => {
26
+ var _a;
27
+ return menuItemTypes.includes(((_a = el == null ? void 0 : el.getAttribute) == null ? void 0 : _a.call(el, "role")) || "");
28
+ });
29
+ if (!target)
30
+ return;
31
+ const item = target;
32
+ if (item.type === "checkbox") {
33
+ item.checked = !item.checked;
34
+ }
35
+ this.emit("syn-select", { detail: { item } });
36
+ }
37
+ handleKeyDown(event) {
38
+ if (event.key === "Enter" || event.key === " ") {
39
+ const item = this.getCurrentItem();
40
+ event.preventDefault();
41
+ event.stopPropagation();
42
+ item == null ? void 0 : item.click();
43
+ } else if (["ArrowDown", "ArrowUp", "Home", "End"].includes(event.key)) {
44
+ const items = this.getAllItems();
45
+ const activeItem = this.getCurrentItem();
46
+ let index = activeItem ? items.indexOf(activeItem) : 0;
47
+ if (items.length > 0) {
48
+ event.preventDefault();
49
+ event.stopPropagation();
50
+ if (event.key === "ArrowDown") {
51
+ index++;
52
+ } else if (event.key === "ArrowUp") {
53
+ index--;
54
+ } else if (event.key === "Home") {
55
+ index = 0;
56
+ } else if (event.key === "End") {
57
+ index = items.length - 1;
58
+ }
59
+ if (index < 0) {
60
+ index = items.length - 1;
61
+ }
62
+ if (index > items.length - 1) {
63
+ index = 0;
64
+ }
65
+ this.setCurrentItem(items[index]);
66
+ items[index].focus();
67
+ }
68
+ }
69
+ }
70
+ handleMouseDown(event) {
71
+ const target = event.target;
72
+ if (this.isMenuItem(target)) {
73
+ this.setCurrentItem(target);
74
+ }
75
+ }
76
+ handleSlotChange() {
77
+ const items = this.getAllItems();
78
+ if (items.length > 0) {
79
+ this.setCurrentItem(items[0]);
80
+ }
81
+ }
82
+ isMenuItem(item) {
83
+ var _a;
84
+ return item.tagName.toLowerCase() === "syn-menu-item" || ["menuitem", "menuitemcheckbox", "menuitemradio"].includes((_a = item.getAttribute("role")) != null ? _a : "");
85
+ }
86
+ /** @internal Gets all slotted menu items, ignoring dividers, headers, and other elements. */
87
+ getAllItems() {
88
+ return [...this.defaultSlot.assignedElements({ flatten: true })].filter((el) => {
89
+ if (el.inert || !this.isMenuItem(el)) {
90
+ return false;
91
+ }
92
+ return true;
93
+ });
94
+ }
95
+ /**
96
+ * @internal Gets the current menu item, which is the menu item that has `tabindex="0"` within the roving tab index.
97
+ * The menu item may or may not have focus, but for keyboard interaction purposes it's considered the "active" item.
98
+ */
99
+ getCurrentItem() {
100
+ return this.getAllItems().find((i) => i.getAttribute("tabindex") === "0");
101
+ }
102
+ /**
103
+ * @internal Sets the current menu item to the specified element. This sets `tabindex="0"` on the target element and
104
+ * `tabindex="-1"` to all other items. This method must be called prior to setting focus on a menu item.
105
+ */
106
+ setCurrentItem(item) {
107
+ const items = this.getAllItems();
108
+ items.forEach((i) => {
109
+ i.setAttribute("tabindex", i === item ? "0" : "-1");
110
+ });
111
+ }
112
+ render() {
113
+ return html`
114
+ <slot
115
+ @slotchange=${this.handleSlotChange}
116
+ @click=${this.handleClick}
117
+ @keydown=${this.handleKeyDown}
118
+ @mousedown=${this.handleMouseDown}
119
+ ></slot>
120
+ `;
121
+ }
122
+ };
123
+ SynMenu.styles = [component_styles_default, menu_styles_default, menu_custom_styles_default];
124
+ __decorateClass([
125
+ query("slot")
126
+ ], SynMenu.prototype, "defaultSlot", 2);
127
+
128
+ export {
129
+ SynMenu
130
+ };
131
+ //# sourceMappingURL=chunk.55KPESRA.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/menu/menu.component.ts"],
4
+ "sourcesContent": ["// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\nimport { html } from 'lit';\nimport { query } from 'lit/decorators.js';\nimport componentStyles from '../../styles/component.styles.js';\nimport SynergyElement from '../../internal/synergy-element.js';\nimport styles from './menu.styles.js';\nimport customStyles from './menu.custom.styles.js';\nimport type { CSSResultGroup } from 'lit';\nimport type SynMenuItem from '../menu-item/menu-item.component.js';\n\nexport interface MenuSelectEventDetail {\n item: SynMenuItem;\n}\n\n/**\n * @summary Menus provide a list of options for the user to choose from.\n * @documentation https://synergy.style/components/menu\n * @status stable\n * @since 2.0\n *\n * @slot - The menu's content, including menu items, menu labels, and dividers.\n *\n * @event {{ item: SynMenuItem }} syn-select - Emitted when a menu item is selected.\n */\nexport default class SynMenu extends SynergyElement {\n static styles: CSSResultGroup = [componentStyles, styles, customStyles];\n\n @query('slot') defaultSlot: HTMLSlotElement;\n\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'menu');\n }\n\n private handleClick(event: MouseEvent) {\n const menuItemTypes = ['menuitem', 'menuitemcheckbox'];\n\n const target = event.composedPath().find((el: Element) => menuItemTypes.includes(el?.getAttribute?.('role') || ''));\n\n if (!target) return;\n\n // This isn't true. But we use it for TypeScript checks below.\n const item = target as SynMenuItem;\n\n if (item.type === 'checkbox') {\n item.checked = !item.checked;\n }\n\n this.emit('syn-select', { detail: { item } });\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n // Make a selection when pressing enter or space\n if (event.key === 'Enter' || event.key === ' ') {\n const item = this.getCurrentItem();\n event.preventDefault();\n event.stopPropagation();\n\n // Simulate a click to support @click handlers on menu items that also work with the keyboard\n item?.click();\n }\n\n // Move the selection when pressing down or up\n else if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) {\n const items = this.getAllItems();\n const activeItem = this.getCurrentItem();\n let index = activeItem ? items.indexOf(activeItem) : 0;\n\n if (items.length > 0) {\n event.preventDefault();\n event.stopPropagation();\n\n if (event.key === 'ArrowDown') {\n index++;\n } else if (event.key === 'ArrowUp') {\n index--;\n } else if (event.key === 'Home') {\n index = 0;\n } else if (event.key === 'End') {\n index = items.length - 1;\n }\n\n if (index < 0) {\n index = items.length - 1;\n }\n if (index > items.length - 1) {\n index = 0;\n }\n\n this.setCurrentItem(items[index]);\n items[index].focus();\n }\n }\n }\n\n private handleMouseDown(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n if (this.isMenuItem(target)) {\n this.setCurrentItem(target as SynMenuItem);\n }\n }\n\n private handleSlotChange() {\n const items = this.getAllItems();\n\n // Reset the roving tab index when the slotted items change\n if (items.length > 0) {\n this.setCurrentItem(items[0]);\n }\n }\n\n private isMenuItem(item: HTMLElement) {\n return (\n item.tagName.toLowerCase() === 'syn-menu-item' ||\n ['menuitem', 'menuitemcheckbox', 'menuitemradio'].includes(item.getAttribute('role') ?? '')\n );\n }\n\n /** @internal Gets all slotted menu items, ignoring dividers, headers, and other elements. */\n getAllItems() {\n return [...this.defaultSlot.assignedElements({ flatten: true })].filter((el: HTMLElement) => {\n if (el.inert || !this.isMenuItem(el)) {\n return false;\n }\n return true;\n }) as SynMenuItem[];\n }\n\n /**\n * @internal Gets the current menu item, which is the menu item that has `tabindex=\"0\"` within the roving tab index.\n * The menu item may or may not have focus, but for keyboard interaction purposes it's considered the \"active\" item.\n */\n getCurrentItem() {\n return this.getAllItems().find(i => i.getAttribute('tabindex') === '0');\n }\n\n /**\n * @internal Sets the current menu item to the specified element. This sets `tabindex=\"0\"` on the target element and\n * `tabindex=\"-1\"` to all other items. This method must be called prior to setting focus on a menu item.\n */\n setCurrentItem(item: SynMenuItem) {\n const items = this.getAllItems();\n\n // Update tab indexes\n items.forEach(i => {\n i.setAttribute('tabindex', i === item ? '0' : '-1');\n });\n }\n\n render() {\n return html`\n <slot\n @slotchange=${this.handleSlotChange}\n @click=${this.handleClick}\n @keydown=${this.handleKeyDown}\n @mousedown=${this.handleMouseDown}\n ></slot>\n `;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -8,9 +8,6 @@ import {
8
8
  form_control_custom_styles_default,
9
9
  form_control_styles_default
10
10
  } from "./chunk.TTL762VF.js";
11
- import {
12
- SynButtonGroup
13
- } from "./chunk.27H5YFFI.js";
14
11
  import {
15
12
  FormControlController,
16
13
  customErrorValidityState,
@@ -19,14 +16,17 @@ import {
19
16
  } from "./chunk.SZCGMXW5.js";
20
17
  import {
21
18
  HasSlotController
22
- } from "./chunk.XGXFE6IF.js";
19
+ } from "./chunk.66WXVGAW.js";
23
20
  import {
24
21
  watch
25
22
  } from "./chunk.AVTU2BGE.js";
23
+ import {
24
+ SynButtonGroup
25
+ } from "./chunk.QDYPBFX4.js";
26
26
  import {
27
27
  SynergyElement,
28
28
  component_styles_default
29
- } from "./chunk.WPY6PWSD.js";
29
+ } from "./chunk.X3D3MBIH.js";
30
30
  import {
31
31
  __decorateClass
32
32
  } from "./chunk.QNDC5KWA.js";
@@ -356,4 +356,4 @@ __decorateClass([
356
356
  export {
357
357
  SynRadioGroup
358
358
  };
359
- //# sourceMappingURL=chunk.G5AYV6GN.js.map
359
+ //# sourceMappingURL=chunk.5D6C4M2C.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SynHeader
3
- } from "./chunk.WJX2T5MU.js";
3
+ } from "./chunk.SJCYCGUZ.js";
4
4
 
5
5
  // src/components/header/header.ts
6
6
  var header_default = SynHeader;
@@ -9,4 +9,4 @@ SynHeader.define("syn-header");
9
9
  export {
10
10
  header_default
11
11
  };
12
- //# sourceMappingURL=chunk.OEBVCWZK.js.map
12
+ //# sourceMappingURL=chunk.5IL2WT3S.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SynIcon
3
- } from "./chunk.6QB26MQP.js";
3
+ } from "./chunk.I2E3UJIK.js";
4
4
 
5
5
  // src/components/icon/icon.ts
6
6
  var icon_default = SynIcon;
@@ -9,4 +9,4 @@ SynIcon.define("syn-icon");
9
9
  export {
10
10
  icon_default
11
11
  };
12
- //# sourceMappingURL=chunk.XOQKLUKE.js.map
12
+ //# sourceMappingURL=chunk.5UM7HWIJ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SynCheckbox
3
- } from "./chunk.JAHRZFQ6.js";
3
+ } from "./chunk.WWMWREE4.js";
4
4
 
5
5
  // src/components/checkbox/checkbox.ts
6
6
  var checkbox_default = SynCheckbox;
@@ -9,4 +9,4 @@ SynCheckbox.define("syn-checkbox");
9
9
  export {
10
10
  checkbox_default
11
11
  };
12
- //# sourceMappingURL=chunk.TIZ7TBXR.js.map
12
+ //# sourceMappingURL=chunk.62EBS3GI.js.map
@@ -42,8 +42,22 @@ var HasSlotController = class {
42
42
  this.host.shadowRoot.removeEventListener("slotchange", this.handleSlotChange);
43
43
  }
44
44
  };
45
+ function getTextContent(slot) {
46
+ if (!slot) {
47
+ return "";
48
+ }
49
+ const nodes = slot.assignedNodes({ flatten: true });
50
+ let text = "";
51
+ [...nodes].forEach((node) => {
52
+ if (node.nodeType === Node.TEXT_NODE) {
53
+ text += node.textContent;
54
+ }
55
+ });
56
+ return text;
57
+ }
45
58
 
46
59
  export {
47
- HasSlotController
60
+ HasSlotController,
61
+ getTextContent
48
62
  };
49
- //# sourceMappingURL=chunk.XGXFE6IF.js.map
63
+ //# sourceMappingURL=chunk.66WXVGAW.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/internal/slot.ts"],
4
4
  "sourcesContent": ["// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\n\n/** A reactive controller that determines when slots exist. */\nexport class HasSlotController implements ReactiveController {\n host: ReactiveControllerHost & Element;\n slotNames: string[] = [];\n\n constructor(host: ReactiveControllerHost & Element, ...slotNames: string[]) {\n (this.host = host).addController(this);\n this.slotNames = slotNames;\n }\n\n private hasDefaultSlot() {\n return [...this.host.childNodes].some(node => {\n if (node.nodeType === node.TEXT_NODE && node.textContent!.trim() !== '') {\n return true;\n }\n\n if (node.nodeType === node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n\n // Ignore visually hidden elements since they aren't rendered\n if (tagName === 'syn-visually-hidden') {\n return false;\n }\n\n // If it doesn't have a slot attribute, it's part of the default slot\n if (!el.hasAttribute('slot')) {\n return true;\n }\n }\n\n return false;\n });\n }\n\n private hasNamedSlot(name: string) {\n return this.host.querySelector(`:scope > [slot=\"${name}\"]`) !== null;\n }\n\n test(slotName: string) {\n return slotName === '[default]' ? this.hasDefaultSlot() : this.hasNamedSlot(slotName);\n }\n\n hostConnected() {\n this.host.shadowRoot!.addEventListener('slotchange', this.handleSlotChange);\n }\n\n hostDisconnected() {\n this.host.shadowRoot!.removeEventListener('slotchange', this.handleSlotChange);\n }\n\n private handleSlotChange = (event: Event) => {\n const slot = event.target as HTMLSlotElement;\n\n if ((this.slotNames.includes('[default]') && !slot.name) || (slot.name && this.slotNames.includes(slot.name))) {\n this.host.requestUpdate();\n }\n };\n}\n\n/**\n * Given a slot, this function iterates over all of its assigned element and text nodes and returns the concatenated\n * HTML as a string. This is useful because we can't use slot.innerHTML as an alternative.\n */\nexport function getInnerHTML(slot: HTMLSlotElement): string {\n const nodes = slot.assignedNodes({ flatten: true });\n let html = '';\n\n [...nodes].forEach(node => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n html += (node as HTMLElement).outerHTML;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n html += node.textContent;\n }\n });\n\n return html;\n}\n\n/**\n * Given a slot, this function iterates over all of its assigned text nodes and returns the concatenated text as a\n * string. This is useful because we can't use slot.textContent as an alternative.\n */\nexport function getTextContent(slot: HTMLSlotElement | undefined | null): string {\n if (!slot) {\n return '';\n }\n const nodes = slot.assignedNodes({ flatten: true });\n let text = '';\n\n [...nodes].forEach(node => {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent;\n }\n });\n\n return text;\n}\n"],
5
- "mappings": ";AASO,IAAM,oBAAN,MAAsD;AAAA,EAI3D,YAAY,SAA2C,WAAqB;AAF5E,qBAAsB,CAAC;AAgDvB,SAAQ,mBAAmB,CAAC,UAAiB;AAC3C,YAAM,OAAO,MAAM;AAEnB,UAAK,KAAK,UAAU,SAAS,WAAW,KAAK,CAAC,KAAK,QAAU,KAAK,QAAQ,KAAK,UAAU,SAAS,KAAK,IAAI,GAAI;AAC7G,aAAK,KAAK,cAAc;AAAA,MAC1B;AAAA,IACF;AAnDE,KAAC,KAAK,OAAO,MAAM,cAAc,IAAI;AACrC,SAAK,YAAY;AAAA,EACnB;AAAA,EAEQ,iBAAiB;AACvB,WAAO,CAAC,GAAG,KAAK,KAAK,UAAU,EAAE,KAAK,UAAQ;AAC5C,UAAI,KAAK,aAAa,KAAK,aAAa,KAAK,YAAa,KAAK,MAAM,IAAI;AACvE,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,aAAa,KAAK,cAAc;AACvC,cAAM,KAAK;AACX,cAAM,UAAU,GAAG,QAAQ,YAAY;AAGvC,YAAI,YAAY,uBAAuB;AACrC,iBAAO;AAAA,QACT;AAGA,YAAI,CAAC,GAAG,aAAa,MAAM,GAAG;AAC5B,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEQ,aAAa,MAAc;AACjC,WAAO,KAAK,KAAK,cAAc,mBAAmB,IAAI,IAAI,MAAM;AAAA,EAClE;AAAA,EAEA,KAAK,UAAkB;AACrB,WAAO,aAAa,cAAc,KAAK,eAAe,IAAI,KAAK,aAAa,QAAQ;AAAA,EACtF;AAAA,EAEA,gBAAgB;AACd,SAAK,KAAK,WAAY,iBAAiB,cAAc,KAAK,gBAAgB;AAAA,EAC5E;AAAA,EAEA,mBAAmB;AACjB,SAAK,KAAK,WAAY,oBAAoB,cAAc,KAAK,gBAAgB;AAAA,EAC/E;AASF;",
5
+ "mappings": ";AASO,IAAM,oBAAN,MAAsD;AAAA,EAI3D,YAAY,SAA2C,WAAqB;AAF5E,qBAAsB,CAAC;AAgDvB,SAAQ,mBAAmB,CAAC,UAAiB;AAC3C,YAAM,OAAO,MAAM;AAEnB,UAAK,KAAK,UAAU,SAAS,WAAW,KAAK,CAAC,KAAK,QAAU,KAAK,QAAQ,KAAK,UAAU,SAAS,KAAK,IAAI,GAAI;AAC7G,aAAK,KAAK,cAAc;AAAA,MAC1B;AAAA,IACF;AAnDE,KAAC,KAAK,OAAO,MAAM,cAAc,IAAI;AACrC,SAAK,YAAY;AAAA,EACnB;AAAA,EAEQ,iBAAiB;AACvB,WAAO,CAAC,GAAG,KAAK,KAAK,UAAU,EAAE,KAAK,UAAQ;AAC5C,UAAI,KAAK,aAAa,KAAK,aAAa,KAAK,YAAa,KAAK,MAAM,IAAI;AACvE,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,aAAa,KAAK,cAAc;AACvC,cAAM,KAAK;AACX,cAAM,UAAU,GAAG,QAAQ,YAAY;AAGvC,YAAI,YAAY,uBAAuB;AACrC,iBAAO;AAAA,QACT;AAGA,YAAI,CAAC,GAAG,aAAa,MAAM,GAAG;AAC5B,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEQ,aAAa,MAAc;AACjC,WAAO,KAAK,KAAK,cAAc,mBAAmB,IAAI,IAAI,MAAM;AAAA,EAClE;AAAA,EAEA,KAAK,UAAkB;AACrB,WAAO,aAAa,cAAc,KAAK,eAAe,IAAI,KAAK,aAAa,QAAQ;AAAA,EACtF;AAAA,EAEA,gBAAgB;AACd,SAAK,KAAK,WAAY,iBAAiB,cAAc,KAAK,gBAAgB;AAAA,EAC5E;AAAA,EAEA,mBAAmB;AACjB,SAAK,KAAK,WAAY,oBAAoB,cAAc,KAAK,gBAAgB;AAAA,EAC/E;AASF;AA2BO,SAAS,eAAe,MAAkD;AAC/E,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,KAAK,cAAc,EAAE,SAAS,KAAK,CAAC;AAClD,MAAI,OAAO;AAEX,GAAC,GAAG,KAAK,EAAE,QAAQ,UAAQ;AACzB,QAAI,KAAK,aAAa,KAAK,WAAW;AACpC,cAAQ,KAAK;AAAA,IACf;AAAA,EACF,CAAC;AAED,SAAO;AACT;",
6
6
  "names": []
7
7
  }