@lmvz-ds/components 0.14.1 → 0.16.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 (264) hide show
  1. package/dist/cjs/app-globals-V2Kpy_OQ.js +3 -0
  2. package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -0
  3. package/dist/cjs/{assets-BnJmIx_h.js → assets-XY-cBmal.js} +5 -2
  4. package/dist/cjs/assets-XY-cBmal.js.map +1 -0
  5. package/dist/cjs/header-integration_7.cjs.entry.js +1024 -0
  6. package/dist/cjs/header-integration_7.cjs.entry.js.map +1 -0
  7. package/dist/cjs/{Effect-CpZhfb0D.js → icons-BOM23oli.js} +1010 -236
  8. package/dist/cjs/icons-BOM23oli.js.map +1 -0
  9. package/dist/cjs/{index-9ZJx0550.js → index-B1Puzu82.js} +11 -651
  10. package/dist/cjs/index-B1Puzu82.js.map +1 -0
  11. package/dist/cjs/{index-QRnWYctw.js → index-ww_DCXU7.js} +431 -426
  12. package/dist/cjs/index-ww_DCXU7.js.map +1 -0
  13. package/dist/cjs/index.cjs.js +13 -12
  14. package/dist/cjs/index.cjs.js.map +1 -0
  15. package/dist/cjs/lmvz-action.cjs.entry.js +5 -2
  16. package/dist/cjs/lmvz-action.cjs.entry.js.map +1 -0
  17. package/dist/cjs/lmvz-card.cjs.entry.js +7 -4
  18. package/dist/cjs/lmvz-card.cjs.entry.js.map +1 -0
  19. package/dist/cjs/lmvz-chip.cjs.entry.js +5 -2
  20. package/dist/cjs/lmvz-chip.cjs.entry.js.map +1 -0
  21. package/dist/cjs/lmvz-components.cjs.js +6 -3
  22. package/dist/cjs/lmvz-components.cjs.js.map +1 -0
  23. package/dist/cjs/loader.cjs.js +5 -2
  24. package/dist/cjs/loader.cjs.js.map +1 -0
  25. package/dist/collection/api/ds.constants.js +1 -0
  26. package/dist/collection/api/ds.constants.js.map +1 -0
  27. package/dist/collection/api/index.js +1 -0
  28. package/dist/collection/api/index.js.map +1 -0
  29. package/dist/collection/collection-manifest.json +2 -1
  30. package/dist/collection/components/lmvz-action/lmvz-action.js +2 -1
  31. package/dist/collection/components/lmvz-action/lmvz-action.js.map +1 -0
  32. package/dist/collection/components/lmvz-button/lmvz-button.css +4 -0
  33. package/dist/collection/components/lmvz-button/lmvz-button.js +3 -2
  34. package/dist/collection/components/lmvz-button/lmvz-button.js.map +1 -0
  35. package/dist/collection/components/lmvz-card/lmvz-card.css +4 -0
  36. package/dist/collection/components/lmvz-card/lmvz-card.js +4 -3
  37. package/dist/collection/components/lmvz-card/lmvz-card.js.map +1 -0
  38. package/dist/collection/components/lmvz-chip/lmvz-chip.js +3 -2
  39. package/dist/collection/components/lmvz-chip/lmvz-chip.js.map +1 -0
  40. package/dist/collection/components/lmvz-header/lmvz-header.js +17 -10
  41. package/dist/collection/components/lmvz-header/lmvz-header.js.map +1 -0
  42. package/dist/collection/components/lmvz-icon/icons.js +1 -0
  43. package/dist/collection/components/lmvz-icon/icons.js.map +1 -0
  44. package/dist/collection/components/lmvz-icon/lmvz-icon.js +8 -7
  45. package/dist/collection/components/lmvz-icon/lmvz-icon.js.map +1 -0
  46. package/dist/collection/components/lmvz-icon/public.js +1 -0
  47. package/dist/collection/components/lmvz-icon/public.js.map +1 -0
  48. package/dist/collection/components/lmvz-icon/test/icons.unit.js +1 -0
  49. package/dist/collection/components/lmvz-icon/test/icons.unit.js.map +1 -0
  50. package/dist/collection/components/lmvz-input/lmvz-input.js +35 -28
  51. package/dist/collection/components/lmvz-input/lmvz-input.js.map +1 -0
  52. package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.js +5 -2
  53. package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.js.map +1 -0
  54. package/dist/collection/components/lmvz-select/lmvz-select.css +197 -0
  55. package/dist/collection/components/lmvz-select/lmvz-select.js +224 -0
  56. package/dist/collection/components/lmvz-select/lmvz-select.js.map +1 -0
  57. package/dist/collection/index.js +1 -0
  58. package/dist/collection/index.js.map +1 -0
  59. package/dist/collection/integration/header-integration.js +5 -4
  60. package/dist/collection/integration/header-integration.js.map +1 -0
  61. package/dist/collection/utils/aria/aria-validation-controller.js +1 -0
  62. package/dist/collection/utils/aria/aria-validation-controller.js.map +1 -0
  63. package/dist/collection/utils/aria/element-activation-controller.js +1 -0
  64. package/dist/collection/utils/aria/element-activation-controller.js.map +1 -0
  65. package/dist/collection/utils/aria/list-keyboard-controller.js +7 -4
  66. package/dist/collection/utils/aria/list-keyboard-controller.js.map +1 -0
  67. package/dist/collection/utils/assets.js +1 -0
  68. package/dist/collection/utils/assets.js.map +1 -0
  69. package/dist/collection/utils/component.js +7 -4
  70. package/dist/collection/utils/component.js.map +1 -0
  71. package/dist/collection/utils/effect.js +1 -0
  72. package/dist/collection/utils/effect.js.map +1 -0
  73. package/dist/collection/utils/environment.js +1 -0
  74. package/dist/collection/utils/environment.js.map +1 -0
  75. package/dist/collection/utils/http.js +1 -0
  76. package/dist/collection/utils/http.js.map +1 -0
  77. package/dist/collection/utils/http.unit.js +1 -0
  78. package/dist/collection/utils/http.unit.js.map +1 -0
  79. package/dist/collection/utils/public.js +1 -0
  80. package/dist/collection/utils/public.js.map +1 -0
  81. package/dist/collection/utils/reactive-controller-host.js +1 -0
  82. package/dist/collection/utils/reactive-controller-host.js.map +1 -0
  83. package/dist/collection/utils/validation/svg.js +1 -0
  84. package/dist/collection/utils/validation/svg.js.map +1 -0
  85. package/dist/components/header-integration.d.ts +11 -0
  86. package/dist/components/header-integration.js +2 -0
  87. package/dist/components/header-integration.js.map +1 -0
  88. package/dist/components/index.d.ts +4 -0
  89. package/dist/components/index.js +2 -1
  90. package/dist/components/index.js.map +1 -0
  91. package/dist/components/lmvz-action.js +2 -1
  92. package/dist/components/lmvz-action.js.map +1 -0
  93. package/dist/components/lmvz-button.js +2 -1
  94. package/dist/components/lmvz-button.js.map +1 -0
  95. package/dist/components/lmvz-card.js +2 -1
  96. package/dist/components/lmvz-card.js.map +1 -0
  97. package/dist/components/lmvz-chip.js +2 -1
  98. package/dist/components/lmvz-chip.js.map +1 -0
  99. package/dist/components/lmvz-header.js +2 -1
  100. package/dist/components/lmvz-header.js.map +1 -0
  101. package/dist/components/lmvz-icon.js +2 -1
  102. package/dist/components/lmvz-icon.js.map +1 -0
  103. package/dist/components/lmvz-input.js +2 -1
  104. package/dist/components/lmvz-input.js.map +1 -0
  105. package/dist/components/lmvz-menuitem.js +2 -1
  106. package/dist/components/lmvz-menuitem.js.map +1 -0
  107. package/dist/components/lmvz-select.d.ts +11 -0
  108. package/dist/components/lmvz-select.js +2 -0
  109. package/dist/components/lmvz-select.js.map +1 -0
  110. package/dist/components/p-B2g3aN-E.js +2 -0
  111. package/dist/components/p-B2g3aN-E.js.map +1 -0
  112. package/dist/components/p-BXdOuZTp.js +2 -0
  113. package/dist/components/p-BXdOuZTp.js.map +1 -0
  114. package/dist/components/p-BfTCfPZ1.js +3 -2
  115. package/dist/components/p-BfTCfPZ1.js.map +1 -0
  116. package/dist/components/p-BpCjj39Z.js +2 -0
  117. package/dist/components/p-BpCjj39Z.js.map +1 -0
  118. package/dist/components/p-BsHYIl56.js +2 -0
  119. package/dist/components/p-BsHYIl56.js.map +1 -0
  120. package/dist/components/p-C5rqq3bf.js +2 -0
  121. package/dist/components/p-C5rqq3bf.js.map +1 -0
  122. package/dist/components/p-CI0tffvo.js +2 -0
  123. package/dist/components/p-CI0tffvo.js.map +1 -0
  124. package/dist/components/p-CN0JX9-m.js +2 -1
  125. package/dist/components/p-CN0JX9-m.js.map +1 -0
  126. package/dist/components/p-ClmDNIy4.js +2 -0
  127. package/dist/components/p-ClmDNIy4.js.map +1 -0
  128. package/dist/components/p-DQEkWkMh.js +2 -0
  129. package/dist/components/p-DQEkWkMh.js.map +1 -0
  130. package/dist/components/p-X5fEFT9T.js +2 -0
  131. package/dist/components/p-X5fEFT9T.js.map +1 -0
  132. package/dist/components/p-vIq2biqy.js +13 -0
  133. package/dist/components/p-vIq2biqy.js.map +1 -0
  134. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  135. package/dist/esm/app-globals-DQuL1Twl.js.map +1 -0
  136. package/dist/esm/{assets-CvV1KMMV.js → assets-BD98wsl7.js} +4 -1
  137. package/dist/esm/assets-BD98wsl7.js.map +1 -0
  138. package/dist/esm/header-integration_7.entry.js +1016 -0
  139. package/dist/esm/header-integration_7.entry.js.map +1 -0
  140. package/dist/esm/{Effect-DyamyJqO.js → icons-D1lxdRXP.js} +975 -174
  141. package/dist/esm/icons-D1lxdRXP.js.map +1 -0
  142. package/dist/esm/{index-CekEw3_K.js → index-DoNkkDv1.js} +6 -1
  143. package/dist/esm/index-DoNkkDv1.js.map +1 -0
  144. package/dist/esm/{index-smGPjoDX.js → index-WeqgWisK.js} +11 -651
  145. package/dist/esm/index-WeqgWisK.js.map +1 -0
  146. package/dist/esm/index.js +7 -5
  147. package/dist/esm/index.js.map +1 -0
  148. package/dist/esm/lmvz-action.entry.js +5 -2
  149. package/dist/esm/lmvz-action.entry.js.map +1 -0
  150. package/dist/esm/lmvz-card.entry.js +7 -4
  151. package/dist/esm/lmvz-card.entry.js.map +1 -0
  152. package/dist/esm/lmvz-chip.entry.js +5 -2
  153. package/dist/esm/lmvz-chip.entry.js.map +1 -0
  154. package/dist/esm/lmvz-components.js +7 -4
  155. package/dist/esm/lmvz-components.js.map +1 -0
  156. package/dist/esm/loader.js +6 -3
  157. package/dist/esm/loader.js.map +1 -0
  158. package/dist/ext-libs.d.ts +1 -0
  159. package/dist/lmvz-components/index.esm.js +2 -1
  160. package/dist/lmvz-components/index.esm.js.map +1 -0
  161. package/dist/lmvz-components/lmvz-components.esm.js +2 -1
  162. package/dist/lmvz-components/lmvz-components.esm.js.map +1 -0
  163. package/dist/lmvz-components/p-33485219.entry.js +2 -0
  164. package/dist/lmvz-components/p-33485219.entry.js.map +1 -0
  165. package/dist/lmvz-components/p-76032c32.entry.js +2 -0
  166. package/dist/lmvz-components/p-76032c32.entry.js.map +1 -0
  167. package/dist/lmvz-components/p-7aeec9a8.entry.js +7 -0
  168. package/dist/lmvz-components/p-7aeec9a8.entry.js.map +1 -0
  169. package/dist/lmvz-components/p-84e0a9dd.entry.js +2 -0
  170. package/dist/lmvz-components/p-84e0a9dd.entry.js.map +1 -0
  171. package/dist/lmvz-components/p-CkJb8WVZ.js +2 -0
  172. package/dist/lmvz-components/p-CkJb8WVZ.js.map +1 -0
  173. package/dist/lmvz-components/p-DQuL1Twl.js +2 -1
  174. package/dist/lmvz-components/p-DQuL1Twl.js.map +1 -0
  175. package/dist/lmvz-components/p-WeqgWisK.js +3 -0
  176. package/dist/lmvz-components/p-WeqgWisK.js.map +1 -0
  177. package/dist/lmvz-components/p-Z9X0_ik0.js +2 -0
  178. package/dist/lmvz-components/p-Z9X0_ik0.js.map +1 -0
  179. package/dist/lmvz-components/p-eP0oxQ44.js +13 -0
  180. package/dist/lmvz-components/p-eP0oxQ44.js.map +1 -0
  181. package/dist/manifest.json +392 -68
  182. package/dist/stencil.config.base.js +45 -0
  183. package/dist/stencil.config.base.js.map +1 -0
  184. package/dist/stencil.config.dev.js +22 -0
  185. package/dist/stencil.config.dev.js.map +1 -0
  186. package/dist/stencil.config.integration.js +27 -0
  187. package/dist/stencil.config.integration.js.map +1 -0
  188. package/dist/stencil.config.js +16 -0
  189. package/dist/stencil.config.js.map +1 -0
  190. package/dist/stencil.config.prod.js +30 -0
  191. package/dist/stencil.config.prod.js.map +1 -0
  192. package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.base.d.ts +2 -0
  193. package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.d.ts +2 -0
  194. package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.dev.d.ts +2 -0
  195. package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.integration.d.ts +2 -0
  196. package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.prod.d.ts +2 -0
  197. package/dist/types/components/lmvz-action/lmvz-action.d.ts +1 -1
  198. package/dist/types/components/lmvz-button/lmvz-button.d.ts +2 -2
  199. package/dist/types/components/lmvz-card/lmvz-card.d.ts +1 -1
  200. package/dist/types/components/lmvz-header/lmvz-header.d.ts +4 -4
  201. package/dist/types/components/lmvz-icon/lmvz-icon.d.ts +4 -4
  202. package/dist/types/components/lmvz-input/lmvz-input.d.ts +4 -4
  203. package/dist/types/components/lmvz-menuitem/lmvz-menuitem.d.ts +3 -3
  204. package/dist/types/components/lmvz-select/lmvz-select.d.ts +24 -0
  205. package/dist/types/components.d.ts +173 -3
  206. package/dist/types/index.d.ts +1 -1
  207. package/dist/types/integration/header-integration.d.ts +5 -0
  208. package/dist/types/utils/aria/aria-validation-controller.d.ts +1 -1
  209. package/dist/types/utils/aria/element-activation-controller.d.ts +1 -1
  210. package/dist/types/utils/component.d.ts +2 -2
  211. package/dist/types/utils/http.d.ts +3 -3
  212. package/dist/types/utils/validation/svg.d.ts +1 -1
  213. package/hydrate/index.js +998 -436
  214. package/hydrate/index.mjs +998 -436
  215. package/package.json +37 -73
  216. package/readme.md +2 -2
  217. package/dist/cjs/aria-loader-BBKbBZLq.js +0 -76
  218. package/dist/cjs/component-CRc6eHcV.js +0 -138
  219. package/dist/cjs/element-activation-controller-DC_6T0Rt.js +0 -31
  220. package/dist/cjs/icons-Brr4vqiE.js +0 -653
  221. package/dist/cjs/index-Bp6Dd2i1.js +0 -94
  222. package/dist/cjs/lmvz-button.cjs.entry.js +0 -73
  223. package/dist/cjs/lmvz-header.cjs.entry.js +0 -142
  224. package/dist/cjs/lmvz-icon.cjs.entry.js +0 -87
  225. package/dist/cjs/lmvz-input.cjs.entry.js +0 -177
  226. package/dist/cjs/lmvz-menuitem.cjs.entry.js +0 -34
  227. package/dist/cjs/reactive-controller-host-DWpVosFu.js +0 -189
  228. package/dist/collection/utils/typing.js +0 -1
  229. package/dist/components/p-B3JVFwO1.js +0 -1
  230. package/dist/components/p-BaPwpeMs.js +0 -1
  231. package/dist/components/p-CSRpdnrt.js +0 -1
  232. package/dist/components/p-DK2hpvEW.js +0 -12
  233. package/dist/components/p-DcMNH3fv.js +0 -1
  234. package/dist/components/p-DugBvwmd.js +0 -1
  235. package/dist/esm/aria-loader-DB71Xewa.js +0 -69
  236. package/dist/esm/component-B3JVFwO1.js +0 -132
  237. package/dist/esm/element-activation-controller-CN0JX9-m.js +0 -29
  238. package/dist/esm/icons-C69Um2xB.js +0 -649
  239. package/dist/esm/index-BfTCfPZ1.js +0 -92
  240. package/dist/esm/lmvz-button.entry.js +0 -71
  241. package/dist/esm/lmvz-header.entry.js +0 -140
  242. package/dist/esm/lmvz-icon.entry.js +0 -85
  243. package/dist/esm/lmvz-input.entry.js +0 -175
  244. package/dist/esm/lmvz-menuitem.entry.js +0 -32
  245. package/dist/esm/reactive-controller-host-1nFoJEdT.js +0 -186
  246. package/dist/lmvz-components/p-0e5aa1a3.entry.js +0 -1
  247. package/dist/lmvz-components/p-18c18de4.entry.js +0 -1
  248. package/dist/lmvz-components/p-5775a56c.entry.js +0 -1
  249. package/dist/lmvz-components/p-814ee542.entry.js +0 -1
  250. package/dist/lmvz-components/p-9faac8f3.entry.js +0 -1
  251. package/dist/lmvz-components/p-B3JVFwO1.js +0 -1
  252. package/dist/lmvz-components/p-B3j8zrhV.js +0 -1
  253. package/dist/lmvz-components/p-BEoSvNlI.js +0 -1
  254. package/dist/lmvz-components/p-BTpia82J.js +0 -1
  255. package/dist/lmvz-components/p-BfTCfPZ1.js +0 -6
  256. package/dist/lmvz-components/p-CN0JX9-m.js +0 -1
  257. package/dist/lmvz-components/p-D7GrtdQF.js +0 -1
  258. package/dist/lmvz-components/p-DyamyJqO.js +0 -1
  259. package/dist/lmvz-components/p-c61f7daa.entry.js +0 -1
  260. package/dist/lmvz-components/p-c6bae21b.entry.js +0 -1
  261. package/dist/lmvz-components/p-cM67HC0Z.js +0 -12
  262. package/dist/lmvz-components/p-d4b68381.entry.js +0 -1
  263. package/dist/lmvz-components/p-smGPjoDX.js +0 -2
  264. package/dist/types/utils/typing.d.ts +0 -3
@@ -0,0 +1,2 @@
1
+ import{B as t,H as i}from"./p-C5rqq3bf.js";function e(t){if(!t)return false;return typeof t==="object"&&typeof t.then==="function"}function n(t,i=[]){const n=t(...i);if(e(n)){return n}return Promise.resolve(n)}const o=Symbol("__lmvzAriaValidationRuntimeState");const s="lmvz:aria-validation-runtime-changed";function r(){const t=globalThis;if(!t[o]){t[o]={enabled:false}}return t[o]}function a(){if(typeof window==="undefined")return;window.dispatchEvent(new CustomEvent(s))}async function l(){const t=r();if(!t.enabled)return null;if(t.runtime)return t.runtime;if(!t.loadPromise){t.loadPromise=import("./p-vIq2biqy.js").catch((()=>null))}const i=await t.loadPromise;if(i){t.runtime=i}return i}async function c(...t){const i=await l();const e=r();if(!e.enabled)return;if(!i){console.warn("Failed to load aria validation runtime");return}i.initializeValidationStream(...t)}const h=()=>r().enabled;const u=()=>r().verboseLogging??false;const d=(t={})=>{const i=r();if(i.enabled)return;Object.assign(i,t);i.enabled=true;c().then((()=>{a()}))};const f=()=>{const t=r();if(!t.enabled)return;t.enabled=false;a()};function m(...t){const{enabled:i,runtime:e,loadPromise:o,lazyCondition:s}=r();if(!i)return;if(!s)return a();n(s).then((t=>{if(!t)return;a()}));function a(){if(e)return e.enqueueValidation(...t);if(!o){console.warn("neither runtime nor load promise found for aria validation. This should not happen, as enabling aria validation should have triggered the loading of the runtime.");return}o.then((i=>{if(!i?.enqueueValidation){console.error("Failed to load aria validation runtime");return}i.enqueueValidation(...t)})).catch((()=>{console.error("Failed to enqueue validation due to an error while loading the runtime")}))}}class p{host;config;visibilityObserver;elementQueued=false;elementValidated=false;elementLoaded=false;static knownValidationErrors=[];get disabled(){return!h()}get useVerboseLogging(){return this.config?.verboseLogging||t.isDev||u()}constructor(t,i){this.host=t;this.config=i}onRuntimeConfigChange=()=>{if(!h())return;this.checkLazyValidation()};hostDidLoad(){this.elementLoaded=true;if(typeof window!=="undefined"){window.addEventListener(s,this.onRuntimeConfigChange)}if(this.elementQueued||this.elementValidated)return;if(this.config?.validationTiming==="slot"){this.observeSlot();return}if(!this.host.validationEl?.checkVisibility()||this.config?.validationTiming!=="load"){this.observeVisibilityOnce();return}this.enqueueValidation()}hostDidUpdate(){this.checkLazyValidation()}hostDisconnected(){this.discardVisibilityObserver();if(typeof window!=="undefined"){window.removeEventListener(s,this.onRuntimeConfigChange)}}revalidateAria(){this.enqueueValidation()}observeSlot(){this.host.validationSlot?.addEventListener("slotchange",this.enqueueValidation.bind(this))}observeVisibilityOnce(){window.setTimeout((()=>{if(!this.host.validationEl)return;this.visibilityObserver=new IntersectionObserver((t=>{for(const i of t){if(i.target!==this.host.validationEl)continue;if(!i.isIntersecting)continue;this.checkLazyValidation();this.discardVisibilityObserver()}}),{root:this.host.validationEl?.parentElement,rootMargin:"0px",threshold:.01});this.visibilityObserver.observe(this.host.validationEl)}))}checkLazyValidation(){if(!this.elementLoaded)return;if(!this.config?.reValidateOnPropChanges&&(this.elementQueued||this.elementValidated))return;if(!this.host.validationEl?.checkVisibility())return;this.enqueueValidation()}enqueueValidation(){if(!h())return;this.elementQueued=true;m({context:{include:this.host.validationEl,exclude:p.knownValidationErrors},onComplete:(t,i)=>{this.elementValidated=true;const e=this.host.tagName||this.host.validationEl?.tagName||"Element";if(t){console.error("Error running ARIA validation:",t,e);if(!this.host.validationEl?.tagName){console.dir(this.host)}return}const n=[e];if(!i?.violations.length){if(this.useVerboseLogging){console.log(...n,"has no ARIA violations");if(!this.host.validationEl?.tagName){console.dir(this.host)}}return}const o=i.violations.length;const s=[...n,i.violations.at(0).id,o>1?`(+${o-1} more)`:""].filter(Boolean).join(" ");if(this.useVerboseLogging){console.group(s)}else{console.groupCollapsed(s)}const r=i.violations.flatMap((t=>{console.dir(t,{showHidden:true,compact:false});return t.nodes.map((t=>t.target))}));if(this.host.validationEl){console.log("element:",this.host.validationEl)}else{console.dir(this.host)}console.groupEnd();p.knownValidationErrors.push(...r)}})}discardVisibilityObserver(){if(!this.visibilityObserver)return;this.visibilityObserver.disconnect();this.visibilityObserver=undefined}}const v=class extends i{constructor(){super(false)}controllers=new Set;addController(t){this.controllers.add(t)}removeController(t){this.controllers.delete(t)}get activeControllers(){return Array.from(this.controllers).filter((t=>!t.disabled))}connectedCallback(){if(!this.controllers.size){console.warn("ReactiveControllerHost connected with no controllers registered.",this)}this.activeControllers.forEach((t=>t.hostConnected?.()))}disconnectedCallback(){this.activeControllers.forEach((t=>t.hostDisconnected?.()))}componentWillLoad(){this.activeControllers.forEach((t=>t.hostWillLoad?.()))}componentDidLoad(){this.activeControllers.forEach((t=>t.hostDidLoad?.()))}componentWillRender(){this.activeControllers.forEach((t=>t.hostWillRender?.()))}componentDidRender(){this.activeControllers.forEach((t=>t.hostDidRender?.()))}componentWillUpdate(){this.activeControllers.forEach((t=>t.hostWillUpdate?.()))}componentDidUpdate(){this.activeControllers.forEach((t=>t.hostDidUpdate?.()))}};export{s as A,v as R,p as a,f as d,d as e,h as i,m as q,u};
2
+ //# sourceMappingURL=p-CI0tffvo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isPromise","value","then","resolvePossiblyAsyncFunction","func","args","res","Promise","resolve","GLOBAL_STATE_KEY","Symbol","ARIA_VALIDATION_RUNTIME_CHANGED_EVENT","getRuntimeState","globalState","globalThis","enabled","notifyRuntimeChange","window","dispatchEvent","CustomEvent","async","fetchRuntime","state","runtime","loadPromise","import","catch","initializeValidation","s","console","warn","initializeValidationStream","isAriaValidationEnabled","useVerboseLogging","verboseLogging","enableAriaValidation","options","Object","assign","disableAriaValidation","queueValidation","lazyCondition","q","shouldEnqueue","enqueueValidation","loadedRuntime","error","AriaValidationController","host","config","visibilityObserver","elementQueued","elementValidated","elementLoaded","static","disabled","this","Build","isDev","constructor","onRuntimeConfigChange","checkLazyValidation","hostDidLoad","addEventListener","validationTiming","observeSlot","validationEl","checkVisibility","observeVisibilityOnce","hostDidUpdate","hostDisconnected","discardVisibilityObserver","removeEventListener","revalidateAria","validationSlot","bind","setTimeout","IntersectionObserver","entries","entry","target","isIntersecting","root","parentElement","rootMargin","threshold","observe","reValidateOnPropChanges","context","include","exclude","knownValidationErrors","onComplete","results","elementName","tagName","dir","message","violations","length","log","count","label","at","id","filter","Boolean","join","group","groupCollapsed","targets","flatMap","violation","showHidden","compact","nodes","map","node","groupEnd","push","disconnect","undefined","ReactiveControllerHost","HTMLElement","controllers","Set","addController","controller","add","removeController","delete","activeControllers","Array","from","connectedCallback","size","forEach","hostConnected","disconnectedCallback","componentWillLoad","hostWillLoad","componentDidLoad","componentWillRender","hostWillRender","componentDidRender","hostDidRender","componentWillUpdate","hostWillUpdate","componentDidUpdate"],"sources":["../../lib/ts/dist/data/isPromise.js","../../lib/ts/dist/async/resolvePossiblyAsyncFunction.js","../aria-validation/dist/lib/loader/aria-loader.js","src/utils/aria/aria-validation-controller.ts","src/utils/reactive-controller-host.ts"],"sourcesContent":["/**\n * Verify whether a value is a Promise by duck-testing for a 'then' function\n */\nexport function isPromise(value) {\n if (!value)\n return false;\n return typeof value === 'object' && typeof value.then === 'function';\n}\n//# sourceMappingURL=isPromise.js.map","import { isPromise } from '../data/isPromise.js';\n/**\n * Resolve the result of a function that may be async or not, as a Promise.\n */\nexport function resolvePossiblyAsyncFunction(func, args = []) {\n const res = func(...args);\n if (isPromise(res)) {\n return res;\n }\n return Promise.resolve(res);\n}\n//# sourceMappingURL=resolvePossiblyAsyncFunction.js.map","import { resolvePossiblyAsyncFunction } from '@lmvz-ds/lib-ts';\nconst GLOBAL_STATE_KEY = Symbol('__lmvzAriaValidationRuntimeState');\nexport const ARIA_VALIDATION_RUNTIME_CHANGED_EVENT = 'lmvz:aria-validation-runtime-changed';\nfunction getRuntimeState() {\n const globalState = globalThis;\n if (!globalState[GLOBAL_STATE_KEY]) {\n globalState[GLOBAL_STATE_KEY] = {\n enabled: false,\n };\n }\n return globalState[GLOBAL_STATE_KEY];\n}\nfunction notifyRuntimeChange() {\n if (typeof window === 'undefined')\n return;\n window.dispatchEvent(new CustomEvent(ARIA_VALIDATION_RUNTIME_CHANGED_EVENT));\n}\nasync function fetchRuntime() {\n const state = getRuntimeState();\n if (!state.enabled)\n return null;\n if (state.runtime)\n return state.runtime;\n if (!state.loadPromise) {\n state.loadPromise = import('@lmvz-ds/aria-validation/runtime').catch(() => null);\n }\n const runtime = await state.loadPromise;\n if (runtime) {\n state.runtime = runtime;\n }\n return runtime;\n}\nasync function initializeValidation(...args) {\n const runtime = await fetchRuntime();\n const s = getRuntimeState();\n if (!s.enabled)\n return;\n if (!runtime) {\n console.warn('Failed to load aria validation runtime');\n return;\n }\n runtime.initializeValidationStream(...args);\n}\nexport const isAriaValidationEnabled = () => getRuntimeState().enabled;\nexport const useVerboseLogging = () => getRuntimeState().verboseLogging ?? false;\nexport const enableAriaValidation = (options = {}) => {\n const state = getRuntimeState();\n if (state.enabled)\n return;\n Object.assign(state, options);\n state.enabled = true;\n initializeValidation().then(() => {\n notifyRuntimeChange();\n });\n};\nexport const disableAriaValidation = () => {\n const state = getRuntimeState();\n if (!state.enabled)\n return;\n state.enabled = false;\n notifyRuntimeChange();\n};\nexport function queueValidation(...args) {\n const { enabled, runtime, loadPromise, lazyCondition } = getRuntimeState();\n if (!enabled)\n return;\n if (!lazyCondition)\n return q();\n resolvePossiblyAsyncFunction(lazyCondition).then((shouldEnqueue) => {\n if (!shouldEnqueue)\n return;\n q();\n });\n function q() {\n if (runtime)\n return runtime.enqueueValidation(...args);\n if (!loadPromise) {\n console.warn('neither runtime nor load promise found for aria validation. This should not happen, as enabling aria validation should have triggered the loading of the runtime.');\n return;\n }\n loadPromise\n .then((loadedRuntime) => {\n if (!loadedRuntime?.enqueueValidation) {\n console.error('Failed to load aria validation runtime');\n return;\n }\n loadedRuntime.enqueueValidation(...args);\n })\n .catch(() => {\n console.error('Failed to enqueue validation due to an error while loading the runtime');\n });\n }\n}\n//# sourceMappingURL=aria-loader.js.map","import {\n ARIA_VALIDATION_RUNTIME_CHANGED_EVENT,\n enableAriaValidation,\n isAriaValidationEnabled,\n queueValidation,\n UnlabelledFrameSelector,\n useVerboseLogging,\n} from '@lmvz-ds/aria-validation';\nimport { Build } from '@stencil/core';\nimport type { ReactiveController } from '../reactive-controller-host';\n\nexport type AriaValidationHost<T extends HTMLElement = HTMLElement> = {\n validationEl: T | undefined; // might by undefined due to timing (e.g. if the element is rendered conditionally), so the controller should handle this case\n validationSlot?: HTMLSlotElement;\n};\n\ntype Config = {\n reValidateOnPropChanges?: boolean;\n verboseLogging?: boolean;\n validationTiming?: 'load' | 'slot';\n};\n\nif (Build.isDev) {\n enableAriaValidation();\n}\n\n/**\n * A controller that performs ARIA validation on the host component and its children once the component is visible.\n *\n * The host class must provide a member `el`, using stencil's @Element() decorator.\n * The controller will run axe-core validation on this element and log any ARIA violations to the console,\n * at the appropriate lifecycle points. Though the controller makes some effort to anticipate the correct validation timing,\n * it may be necessary to adjust the timing based on the specific use case, using the `validationTiming` config option.\n *\n * This is a basic implementation that allows for further enhancements, such as:\n * - different timings: on load, on demand, on attribute change, etc.\n * - context-based, stateful optimization (such as only validating children that are relevant for the host's ARIA role)\n */\nexport class AriaValidationController implements ReactiveController {\n private visibilityObserver?: IntersectionObserver;\n private elementQueued = false;\n private elementValidated = false;\n private elementLoaded = false;\n private static knownValidationErrors: UnlabelledFrameSelector[] = [];\n\n get disabled() {\n return !isAriaValidationEnabled();\n }\n\n private get useVerboseLogging() {\n return this.config?.verboseLogging || Build.isDev || useVerboseLogging();\n }\n\n constructor(\n private readonly host: AriaValidationHost,\n private readonly config?: Config,\n ) {}\n\n private readonly onRuntimeConfigChange = () => {\n if (!isAriaValidationEnabled()) return;\n\n this.checkLazyValidation();\n };\n\n hostDidLoad() {\n this.elementLoaded = true;\n if (typeof window !== 'undefined') {\n window.addEventListener(ARIA_VALIDATION_RUNTIME_CHANGED_EVENT, this.onRuntimeConfigChange);\n }\n\n if (this.elementQueued || this.elementValidated) return;\n\n if (this.config?.validationTiming === 'slot') {\n this.observeSlot();\n return;\n }\n\n if (!this.host.validationEl?.checkVisibility() || this.config?.validationTiming !== 'load') {\n this.observeVisibilityOnce();\n return;\n }\n\n this.enqueueValidation();\n }\n\n hostDidUpdate() {\n this.checkLazyValidation();\n }\n\n hostDisconnected() {\n this.discardVisibilityObserver();\n if (typeof window !== 'undefined') {\n window.removeEventListener(ARIA_VALIDATION_RUNTIME_CHANGED_EVENT, this.onRuntimeConfigChange);\n }\n }\n\n revalidateAria() {\n this.enqueueValidation();\n }\n\n private observeSlot() {\n this.host.validationSlot?.addEventListener('slotchange', this.enqueueValidation.bind(this));\n }\n\n private observeVisibilityOnce() {\n window.setTimeout(() => {\n if (!this.host.validationEl) return;\n\n this.visibilityObserver = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.target !== this.host.validationEl) continue;\n if (!entry.isIntersecting) continue;\n\n this.checkLazyValidation();\n\n // stop observing once the element is visible and validation is triggered\n this.discardVisibilityObserver();\n }\n },\n {\n root: this.host.validationEl?.parentElement,\n rootMargin: '0px',\n threshold: 0.01, // 1% visible is enough to count as visible\n },\n );\n this.visibilityObserver.observe(this.host.validationEl);\n });\n }\n\n private checkLazyValidation() {\n if (!this.elementLoaded) return;\n\n if (!this.config?.reValidateOnPropChanges && (this.elementQueued || this.elementValidated)) return;\n\n if (!this.host.validationEl?.checkVisibility()) return;\n\n this.enqueueValidation();\n }\n\n private enqueueValidation() {\n if (!isAriaValidationEnabled()) return;\n\n this.elementQueued = true;\n\n queueValidation({\n context: { include: this.host.validationEl, exclude: AriaValidationController.knownValidationErrors },\n onComplete: (error, results) => {\n this.elementValidated = true;\n const elementName = (this.host as unknown as HTMLElement).tagName || this.host.validationEl?.tagName || 'Element';\n\n if (error) {\n console.error('Error running ARIA validation:', error, elementName);\n if (!this.host.validationEl?.tagName) {\n console.dir(this.host);\n }\n return;\n }\n\n const message = [elementName];\n\n if (!results?.violations.length) {\n if (this.useVerboseLogging) {\n console.log(...message, 'has no ARIA violations');\n if (!this.host.validationEl?.tagName) {\n console.dir(this.host);\n }\n }\n return;\n }\n\n const count = results.violations.length;\n const label = [...message, results.violations.at(0)!.id, count > 1 ? `(+${count - 1} more)` : ''].filter(Boolean).join(' ');\n if (this.useVerboseLogging) {\n console.group(label);\n } else {\n console.groupCollapsed(label);\n }\n const targets = results.violations.flatMap((violation) => {\n console.dir(violation, { showHidden: true, compact: false });\n return violation.nodes.map((node) => node.target);\n });\n if (this.host.validationEl) {\n console.log('element:', this.host.validationEl);\n } else {\n console.dir(this.host);\n }\n console.groupEnd();\n\n AriaValidationController.knownValidationErrors.push(...targets);\n },\n });\n }\n\n private discardVisibilityObserver() {\n if (!this.visibilityObserver) return;\n this.visibilityObserver.disconnect();\n this.visibilityObserver = undefined;\n }\n}\n","import { ComponentInterface } from '@stencil/core';\n\nexport interface ReactiveController {\n hostConnected?(): void;\n hostDisconnected?(): void;\n hostWillLoad?(): Promise<void> | void;\n hostDidLoad?(): void;\n hostWillRender?(): Promise<void> | void;\n hostDidRender?(): void;\n hostWillUpdate?(): Promise<void> | void;\n hostDidUpdate?(): void;\n readonly disabled?: boolean;\n}\n\nexport class ReactiveControllerHost implements ComponentInterface {\n private controllers = new Set<ReactiveController>();\n\n protected addController(controller: ReactiveController) {\n this.controllers.add(controller);\n }\n\n protected removeController(controller: ReactiveController) {\n this.controllers.delete(controller);\n }\n\n private get activeControllers() {\n return Array.from(this.controllers).filter(controller => !controller.disabled);\n }\n\n connectedCallback() {\n if (!this.controllers.size) {\n // sanity check - likely indicates a setup error\n console.warn('ReactiveControllerHost connected with no controllers registered.', this);\n }\n this.activeControllers.forEach(controller => controller.hostConnected?.());\n }\n\n disconnectedCallback() {\n this.activeControllers.forEach(controller => controller.hostDisconnected?.());\n }\n\n componentWillLoad() {\n this.activeControllers.forEach(controller => controller.hostWillLoad?.());\n }\n\n componentDidLoad() {\n this.activeControllers.forEach(controller => controller.hostDidLoad?.());\n }\n\n componentWillRender() {\n this.activeControllers.forEach(controller => controller.hostWillRender?.());\n }\n\n componentDidRender() {\n this.activeControllers.forEach(controller => controller.hostDidRender?.());\n }\n\n componentWillUpdate() {\n this.activeControllers.forEach(controller => controller.hostWillUpdate?.());\n }\n\n componentDidUpdate() {\n this.activeControllers.forEach(controller => controller.hostDidUpdate?.());\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1,2 @@
1
- class t{host;config;constructor(t,i){this.host=t,this.config=i}hostDidLoad(){this.host.el.hasAttribute("tabindex")||console.warn("Interactive element does not have a tabindex attribute!",this.host.el),this.host.el.addEventListener("keydown",this.handleKeyDown.bind(this)),this.host.el.addEventListener("click",this.handleActivation.bind(this))}handleKeyDown=t=>{(this.config?.keys??["Enter"," "]).includes(t.key)&&(t.preventDefault(),this.handleActivation(t))};handleActivation=t=>{this.host.lmvzActivation.emit(),this.config?.localHandler&&this.config.localHandler(t)}}export{t as E}
1
+ class t{host;config;constructor(t,i){this.host=t;this.config=i}hostDidLoad(){if(!this.host.el.hasAttribute("tabindex")){console.warn("Interactive element does not have a tabindex attribute!",this.host.el)}this.host.el.addEventListener("keydown",this.handleKeyDown.bind(this));this.host.el.addEventListener("click",this.handleActivation.bind(this))}handleKeyDown=t=>{if((this.config?.keys??["Enter"," "]).includes(t.key)){t.preventDefault();this.handleActivation(t)}};handleActivation=t=>{this.host.lmvzActivation.emit();if(this.config?.localHandler){this.config.localHandler(t)}}}export{t as E};
2
+ //# sourceMappingURL=p-CN0JX9-m.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ElementActivationController","host","config","constructor","this","hostDidLoad","el","hasAttribute","console","warn","addEventListener","handleKeyDown","bind","handleActivation","event","keys","includes","key","preventDefault","lmvzActivation","emit","localHandler"],"sources":["src/utils/aria/element-activation-controller.ts"],"sourcesContent":["import type { EventEmitter } from '@stencil/core';\nimport type { ReactiveController } from '../reactive-controller-host';\n\nexport type ElementActivationHost = {\n el: HTMLElement;\n lmvzActivation: EventEmitter<void>;\n};\n\ntype Config = {\n localHandler?: (event: Event) => unknown;\n keys?: string[];\n};\n\nexport class ElementActivationController implements ReactiveController {\n constructor(\n private host: ElementActivationHost,\n private config?: Config,\n ) {}\n\n hostDidLoad() {\n if (!this.host.el.hasAttribute('tabindex')) {\n console.warn('Interactive element does not have a tabindex attribute!', this.host.el);\n }\n this.host.el.addEventListener('keydown', this.handleKeyDown.bind(this));\n this.host.el.addEventListener('click', this.handleActivation.bind(this));\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n // Activate on Enter or Space key press\n if ((this.config?.keys ?? ['Enter', ' ']).includes(event.key)) {\n // Prevent default scrolling behavior for Space key\n event.preventDefault();\n this.handleActivation(event);\n }\n };\n\n private handleActivation = (event: Event) => {\n this.host.lmvzActivation.emit();\n if (this.config?.localHandler) {\n this.config.localHandler(event);\n }\n };\n}\n"],"mappings":"MAaaA,EAEDC,KACAC,OAFV,WAAAC,CACUF,EACAC,GADAE,KAAAH,OACAG,KAAAF,Q,CAGV,WAAAG,GACE,IAAKD,KAAKH,KAAKK,GAAGC,aAAa,YAAa,CAC1CC,QAAQC,KAAK,0DAA2DL,KAAKH,KAAKK,G,CAEpFF,KAAKH,KAAKK,GAAGI,iBAAiB,UAAWN,KAAKO,cAAcC,KAAKR,OACjEA,KAAKH,KAAKK,GAAGI,iBAAiB,QAASN,KAAKS,iBAAiBD,KAAKR,M,CAG5DO,cAAiBG,IAEvB,IAAKV,KAAKF,QAAQa,MAAQ,CAAC,QAAS,MAAMC,SAASF,EAAMG,KAAM,CAE7DH,EAAMI,iBACNd,KAAKS,iBAAiBC,E,GAIlBD,iBAAoBC,IAC1BV,KAAKH,KAAKkB,eAAeC,OACzB,GAAIhB,KAAKF,QAAQmB,aAAc,CAC7BjB,KAAKF,OAAOmB,aAAaP,E","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{g as t}from"./p-C5rqq3bf.js";function e(){return import.meta?.url??window?.location?.origin??""}const n="../../assets";const o=(o,a)=>{const s=r(n,a,o);try{return t(s)}catch{console.warn(`Failed to create URL for asset "${o}" in path "${a}".\n Please provide an absolute URL in your app's 'setAssetPath(...)' configuration! Falling back to a relative URL, which may work in some environments but is not guaranteed to be correct.`);return new URL(s,e())}};function r(...t){return t.filter(Boolean).join("/").replace("//","/").replace("/./","/")}export{o as c};
2
+ //# sourceMappingURL=p-ClmDNIy4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getLocationBase","url","window","location","origin","relativeAssetsPath","createAssetUrlSafely","file","pathFromAssetRoot","relativeAssetPath","joinPath","getAssetPath","console","warn","URL","parts","filter","Boolean","join","replace"],"sources":["src/utils/environment.ts","src/utils/assets.ts"],"sourcesContent":["export function getLocationBase() {\n return import.meta?.url ?? window?.location?.origin ?? '';\n}\n","import { getAssetPath } from '@stencil/core';\nimport { getLocationBase } from './environment';\n\nconst relativeAssetsPath = '../../assets';\n\n/**\n * Attempts to create an asset URL using Stencil's `getAssetPath` utility, and falls back to a default URL if that fails (e.g. because the app using the library hasn't configured the asset path correctly).\n * This is a workaround for Stencil's behavior of throwing an error when `getAssetPath` is called without a valid asset path configuration, which can happen in certain environments like Storybook.\n *\n * @param file - The filename of the asset to create a URL for, relative to the configured asset path.\n * @param pathFromAssetRoot - The path from the asset root to the asset directory (e.g. 'icons' for assets located at <pkg-root>/assets/icons/).\n * @returns A string URL for the asset, or a fallback URL if the creation fails.\n */\nexport const createAssetUrlSafely = (file: string, pathFromAssetRoot?: string | undefined) => {\n // * dist output target expects assets to be located at <pkg-root>/assets/...\n // * this base path is used in components' assetDirs declaration, but with the relative ../../assets/\n const relativeAssetPath = joinPath(relativeAssetsPath, pathFromAssetRoot, file);\n try {\n return getAssetPath(relativeAssetPath);\n } catch {\n console.warn(`Failed to create URL for asset \"${file}\" in path \"${pathFromAssetRoot}\".\n Please provide an absolute URL in your app's 'setAssetPath(...)' configuration! Falling back to a relative URL, which may work in some environments but is not guaranteed to be correct.`);\n return new URL(relativeAssetPath, getLocationBase());\n }\n};\n\nfunction joinPath(...parts: (string | undefined)[]) {\n return parts.filter(Boolean).join('/').replace('//', '/').replace('/./', '/');\n}\n"],"mappings":"6CAAgBA,IACd,oBAAoBC,KAAOC,QAAQC,UAAUC,QAAU,EACzD,CCCA,MAAMC,EAAqB,e,MAUdC,EAAuB,CAACC,EAAcC,KAGjD,MAAMC,EAAoBC,EAASL,EAAoBG,EAAmBD,GAC1E,IACE,OAAOI,EAAaF,E,CACpB,MACAG,QAAQC,KAAK,mCAAmCN,eAAkBC,4MAElE,OAAO,IAAIM,IAAIL,EAAmBT,I,GAItC,SAASU,KAAYK,GACnB,OAAOA,EAAMC,OAAOC,SAASC,KAAK,KAAKC,QAAQ,KAAM,KAAKA,QAAQ,MAAO,IAC3E,Q","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ const e=(e,a)=>{if(e.componentOnReady){e.componentOnReady().then((e=>a(e)))}else{t((()=>a(e)))}};const a=(e,a=[])=>{const r={};a.forEach((a=>{if(e.hasAttribute(a)){const i=e.getAttribute(a);if(i!==null){r[a]=e.getAttribute(a)}e.removeAttribute(a)}}));return r};const r=["role","aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"];const i=(e,i)=>{let t=r;return a(e,t)};const t=e=>{if(typeof __zone_symbol__requestAnimationFrame==="function"){return __zone_symbol__requestAnimationFrame(e)}if(typeof requestAnimationFrame==="function"){return requestAnimationFrame(e)}return setTimeout(e)};function n(e=document){let a=e.activeElement;if(!a){return null}while(a?.shadowRoot){const e=a.shadowRoot.activeElement;if(!e){break}a=e}return a}function o(e){if(!e)return false;return e instanceof HTMLElement&&e.tabIndex>=0&&!e.hasAttribute("disabled")&&e.getAttribute("aria-hidden")!=="true"&&e.checkVisibility()&&e.offsetParent!==null}function l(e,a){if(e instanceof HTMLFormElement){return e}if(typeof e==="string"){const a=document.getElementById(e);if(a){if(a instanceof HTMLFormElement){return a}else{console.warn(`No Form found with selector: "#${e}". Verify that the element with id exists and is actually a <form> element.`,a);return null}}else{console.warn(`No Form found with selector: "#${e}". Verify that the id is correct and the form is rendered in the DOM.`,a);return null}}if(e!==undefined){console.warn(`The provided "form" element is invalid. Verify that the form is a HTMLFormElement and rendered in the DOM.`,a);return null}return a.closest("form")}export{e as a,o as c,l as f,n as g,i};
2
+ //# sourceMappingURL=p-DQEkWkMh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["componentOnReady","el","callback","then","resolvedEl","raf","inheritAttributes","attributes","attributeObject","forEach","attr","hasAttribute","value","getAttribute","removeAttribute","ariaAttributes","inheritAriaAttributes","ignoreList","attributesToInherit","h","__zone_symbol__requestAnimationFrame","requestAnimationFrame","setTimeout","getDeepActiveElement","root","document","activeElement","shadowRoot","next","canReceiveFocus","HTMLElement","tabIndex","checkVisibility","offsetParent","findFormByRef","form","HTMLFormElement","getElementById","console","warn","undefined","closest"],"sources":["src/utils/component.ts"],"sourcesContent":["/**\n * Adapted from ionic-team/ionic-framework/core/src/utils/helpers.ts\n * v8.7.17\n *\n * Major changes are marked with `// ! LMVZ-DS` comments\n *\n * MIT License\n *\n * Copyright (c) 2015-present Drifty Co.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n// ! LMVZ-DS:\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { EventEmitter } from '@stencil/core';\n\ndeclare const __zone_symbol__requestAnimationFrame: typeof window.requestAnimationFrame;\ndeclare const requestAnimationFrame: typeof window.requestAnimationFrame;\n\nexport const transitionEndAsync = (el: HTMLElement | null, expectedDuration = 0) => {\n return new Promise((resolve) => {\n transitionEnd(el, expectedDuration, resolve);\n });\n};\n\n/**\n * Allows developer to wait for a transition\n * to finish and fallback to a timer if the\n * transition is cancelled or otherwise\n * never finishes. Also see transitionEndAsync\n * which is an await-able version of this.\n */\nconst transitionEnd = (el: HTMLElement | null, expectedDuration = 0, callback: (ev?: TransitionEvent) => void) => {\n let unRegTrans: (() => void) | undefined;\n let animationTimeout: number | undefined;\n const opts: AddEventListenerOptions = { passive: true };\n const ANIMATION_FALLBACK_TIMEOUT = 500;\n\n const unregister = () => {\n if (unRegTrans) {\n unRegTrans();\n }\n };\n\n const onTransitionEnd = (ev?: Event) => {\n if (ev === undefined || el === ev.target) {\n unregister();\n callback(ev as TransitionEvent);\n }\n };\n\n if (el) {\n el.addEventListener('webkitTransitionEnd', onTransitionEnd, opts);\n el.addEventListener('transitionend', onTransitionEnd, opts);\n animationTimeout = setTimeout(onTransitionEnd, expectedDuration + ANIMATION_FALLBACK_TIMEOUT) as unknown as number;\n\n unRegTrans = () => {\n if (animationTimeout !== undefined) {\n clearTimeout(animationTimeout);\n animationTimeout = undefined;\n }\n el.removeEventListener('webkitTransitionEnd', onTransitionEnd, opts);\n el.removeEventListener('transitionend', onTransitionEnd, opts);\n };\n }\n\n return unregister;\n};\n\n/**\n * Waits for a component to be ready for\n * both custom element and non-custom element builds.\n * If non-custom element build, el.componentOnReady\n * will be used.\n * For custom element builds, we wait a frame\n * so that the inner contents of the component\n * have a chance to render.\n *\n * Use this utility rather than calling\n * el.componentOnReady yourself.\n */\nexport const componentOnReady = (el: any, callback: any) => {\n if (el.componentOnReady) {\n el.componentOnReady().then((resolvedEl: any) => callback(resolvedEl));\n } else {\n raf(() => callback(el));\n }\n};\n\n/**\n * This functions checks if a Stencil component is using\n * the lazy loaded build of Stencil. Returns `true` if\n * the component is lazy loaded. Returns `false` otherwise.\n */\nexport const hasLazyBuild = (stencilEl: HTMLElement) => {\n return (stencilEl as any).componentOnReady !== undefined;\n};\n\nexport type Attributes = { [key: string]: any };\n\n/**\n * Elements inside of web components sometimes need to inherit global attributes\n * set on the host. For example, the inner input in `ion-input` should inherit\n * the `title` attribute that developers set directly on `ion-input`. This\n * helper function should be called in componentWillLoad and assigned to a variable\n * that is later used in the render function.\n *\n * This does not need to be reactive as changing attributes on the host element\n * does not trigger a re-render.\n */\nexport const inheritAttributes = (el: HTMLElement, attributes: string[] = []) => {\n const attributeObject: Attributes = {};\n\n attributes.forEach((attr) => {\n if (el.hasAttribute(attr)) {\n const value = el.getAttribute(attr);\n if (value !== null) {\n attributeObject[attr] = el.getAttribute(attr);\n }\n el.removeAttribute(attr);\n }\n });\n\n return attributeObject;\n};\n\n/**\n * List of available ARIA attributes + `role`.\n * Removed deprecated attributes.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes\n */\nconst ariaAttributes = [\n 'role',\n 'aria-activedescendant',\n 'aria-atomic',\n 'aria-autocomplete',\n 'aria-braillelabel',\n 'aria-brailleroledescription',\n 'aria-busy',\n 'aria-checked',\n 'aria-colcount',\n 'aria-colindex',\n 'aria-colindextext',\n 'aria-colspan',\n 'aria-controls',\n 'aria-current',\n 'aria-describedby',\n 'aria-description',\n 'aria-details',\n 'aria-disabled',\n 'aria-errormessage',\n 'aria-expanded',\n 'aria-flowto',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-invalid',\n 'aria-keyshortcuts',\n 'aria-label',\n 'aria-labelledby',\n 'aria-level',\n 'aria-live',\n 'aria-multiline',\n 'aria-multiselectable',\n 'aria-orientation',\n 'aria-owns',\n 'aria-placeholder',\n 'aria-posinset',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-relevant',\n 'aria-required',\n 'aria-roledescription',\n 'aria-rowcount',\n 'aria-rowindex',\n 'aria-rowindextext',\n 'aria-rowspan',\n 'aria-selected',\n 'aria-setsize',\n 'aria-sort',\n 'aria-valuemax',\n 'aria-valuemin',\n 'aria-valuenow',\n 'aria-valuetext',\n];\n\n/**\n * Returns an array of aria attributes that should be copied from\n * the shadow host element to a target within the light DOM.\n * @param el The element that the attributes should be copied from.\n * @param ignoreList The list of aria-attributes to ignore reflecting and removing from the host.\n * Use this in instances where we manually specify aria attributes on the `<Host>` element.\n */\nexport const inheritAriaAttributes = (el: HTMLElement, ignoreList?: string[]) => {\n let attributesToInherit = ariaAttributes;\n if (ignoreList && ignoreList.length > 0) {\n attributesToInherit = attributesToInherit.filter((attr) => !ignoreList.includes(attr));\n }\n return inheritAttributes(el, attributesToInherit);\n};\n\nexport const addEventListener = (el: any, eventName: string, callback: any, opts?: any) => {\n return el.addEventListener(eventName, callback, opts);\n};\n\nexport const removeEventListener = (el: any, eventName: string, callback: any, opts?: any) => {\n return el.removeEventListener(eventName, callback, opts);\n};\n\n/**\n * Gets the root context of a shadow dom element\n * On newer browsers this will be the shadowRoot,\n * but for older browser this may just be the\n * element itself.\n *\n * Useful for whenever you need to explicitly\n * do \"myElement.shadowRoot!.querySelector(...)\".\n */\nexport const getElementRoot = (el: HTMLElement, fallback: HTMLElement = el) => {\n return el.shadowRoot || fallback;\n};\n\n/**\n * Patched version of requestAnimationFrame that avoids ngzone\n * Use only when you know ngzone should not run\n */\nexport const raf = (h: FrameRequestCallback) => {\n if (typeof __zone_symbol__requestAnimationFrame === 'function') {\n return __zone_symbol__requestAnimationFrame(h);\n }\n if (typeof requestAnimationFrame === 'function') {\n return requestAnimationFrame(h);\n }\n return setTimeout(h);\n};\n\nexport const hasShadowDom = (el: HTMLElement) => {\n return !!el.shadowRoot && !!(el as any).attachShadow;\n};\n\nexport const focusVisibleElement = (el: HTMLElement) => {\n el.focus();\n\n // ! LMVZ-DS: removed ion-focusable handling\n};\n\n/**\n * This method is used to add a hidden input to a host element that contains\n * a Shadow DOM. It does not add the input inside of the Shadow root which\n * allows it to be picked up inside of forms. It should contain the same\n * values as the host element.\n *\n * @param always Add a hidden input even if the container does not use Shadow\n * @param container The element where the input will be added\n * @param name The name of the input\n * @param value The value of the input\n * @param disabled If true, the input is disabled\n */\nexport const renderHiddenInput = (always: boolean, container: HTMLElement, name: string, value: string | undefined | null, disabled: boolean) => {\n if (always || hasShadowDom(container)) {\n let input = container.querySelector('input.aux-input') as HTMLInputElement | null;\n if (!input) {\n input = container.ownerDocument!.createElement('input');\n input.type = 'hidden';\n input.classList.add('aux-input');\n container.appendChild(input);\n }\n input.disabled = disabled;\n input.name = name;\n input.value = value || '';\n }\n};\n\nexport const clamp = (min: number, n: number, max: number) => {\n return Math.max(min, Math.min(n, max));\n};\n\nexport const assert = (actual: any, reason: string) => {\n if (!actual) {\n const message = 'ASSERT: ' + reason;\n console.error(message);\n debugger; // eslint-disable-line\n throw new Error(message);\n }\n};\n\nexport const now = (ev: UIEvent) => {\n return ev.timeStamp || Date.now();\n};\n\nexport const pointerCoord = (ev: any): { x: number; y: number } => {\n // get X coordinates for either a mouse click\n // or a touch depending on the given event\n if (ev) {\n const changedTouches = ev.changedTouches;\n if (changedTouches && changedTouches.length > 0) {\n const touch = changedTouches[0];\n return { x: touch.clientX, y: touch.clientY };\n }\n if (ev.pageX !== undefined) {\n return { x: ev.pageX, y: ev.pageY };\n }\n }\n return { x: 0, y: 0 };\n};\n\n// ! removed isEndSide (for RTL handling) via menu-interface\n\nexport const deferEvent = (event: EventEmitter): EventEmitter => {\n return debounceEvent(event, 0);\n};\n\nexport const debounceEvent = (event: EventEmitter, wait: number): EventEmitter => {\n const original = (event as any)._original || event;\n return {\n _original: event,\n emit: debounce(original.emit.bind(original), wait),\n } as EventEmitter;\n};\n\nexport const debounce = (func: (...args: any[]) => void, wait = 0) => {\n let timer: any;\n return (...args: any[]): any => {\n clearTimeout(timer);\n timer = setTimeout(func, wait, ...args);\n };\n};\n\n/**\n * Check whether the two string maps are shallow equal.\n *\n * undefined is treated as an empty map.\n *\n * @returns whether the keys are the same and the values are shallow equal.\n */\nexport const shallowEqualStringMap = (map1: { [k: string]: any } | undefined, map2: { [k: string]: any } | undefined): boolean => {\n map1 ??= {};\n map2 ??= {};\n\n if (map1 === map2) {\n return true;\n }\n\n const keys1 = Object.keys(map1);\n\n if (keys1.length !== Object.keys(map2).length) {\n return false;\n }\n\n for (const k1 of keys1) {\n if (!(k1 in map2)) {\n return false;\n }\n if (map1[k1] !== map2[k1]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Checks input for usable number. Not NaN and not Infinite.\n */\nexport const isSafeNumber = (input: unknown): input is number => {\n return typeof input === 'number' && !isNaN(input) && isFinite(input);\n};\n\n// CUSTOM LMVZ-DS utilities for components\n\nexport function getDeepActiveElement(root = document) {\n let activeElement = root.activeElement;\n\n // No focus at all\n if (!activeElement) {\n return null;\n }\n\n // Walk through shadow DOMs\n while (activeElement?.shadowRoot) {\n const next: Element | null = activeElement.shadowRoot.activeElement;\n if (!next) {\n // Focus is effectively on the host element itself\n break;\n }\n activeElement = next;\n }\n\n return activeElement;\n}\n\nexport function canReceiveFocus(el: Element | undefined): boolean {\n if (!el) return false;\n return (\n el instanceof HTMLElement && el.tabIndex >= 0 && !el.hasAttribute('disabled') && el.getAttribute('aria-hidden') !== 'true' && el.checkVisibility() && el.offsetParent !== null\n );\n}\n\nexport type FormRef = string | HTMLFormElement | undefined;\n\n/**\n * Finds the form element based on the provided `form` selector or element reference.\n */\nexport function findFormByRef(form: FormRef, el: HTMLElement): HTMLFormElement | null {\n if (form instanceof HTMLFormElement) {\n return form;\n }\n if (typeof form === 'string') {\n // Check if the string provided is a form id.\n const el: HTMLElement | null = document.getElementById(form);\n if (el) {\n if (el instanceof HTMLFormElement) {\n return el;\n } else {\n /**\n * The developer referenced the form using an id string,\n * but the element with that id is not a form element.\n */\n console.warn(`No Form found with selector: \"#${form}\". Verify that the element with id exists and is actually a <form> element.`, el);\n return null;\n }\n } else {\n /**\n * The developer referenced the form using an id string,\n * but the element with that id could not be found in the DOM.\n */\n console.warn(`No Form found with selector: \"#${form}\". Verify that the id is correct and the form is rendered in the DOM.`, el);\n return null;\n }\n }\n if (form !== undefined) {\n /**\n * The developer specified an HTMLElement for the form attribute,\n * but the element is not a HTMLFormElement.\n * This will also catch if the developer passes null as the form attribute.\n */\n console.warn(`The provided \"form\" element is invalid. Verify that the form is a HTMLFormElement and rendered in the DOM.`, el);\n return null;\n }\n /**\n * If the form element is not set, the button may be inside\n * of a form element. Query the closest form element to the button.\n */\n return el.closest('form');\n}\n"],"mappings":"MAmGaA,EAAmB,CAACC,EAASC,KACxC,GAAID,EAAGD,iBAAkB,CACvBC,EAAGD,mBAAmBG,MAAMC,GAAoBF,EAASE,I,KACpD,CACLC,GAAI,IAAMH,EAASD,I,GAyBhB,MAAMK,EAAoB,CAACL,EAAiBM,EAAuB,MACxE,MAAMC,EAA8B,GAEpCD,EAAWE,SAASC,IAClB,GAAIT,EAAGU,aAAaD,GAAO,CACzB,MAAME,EAAQX,EAAGY,aAAaH,GAC9B,GAAIE,IAAU,KAAM,CAClBJ,EAAgBE,GAAQT,EAAGY,aAAaH,E,CAE1CT,EAAGa,gBAAgBJ,E,KAIvB,OAAOF,CAAe,EAQxB,MAAMO,EAAiB,CACrB,OACA,wBACA,cACA,oBACA,oBACA,8BACA,YACA,eACA,gBACA,gBACA,oBACA,eACA,gBACA,eACA,mBACA,mBACA,eACA,gBACA,oBACA,gBACA,cACA,gBACA,cACA,eACA,oBACA,aACA,kBACA,aACA,YACA,iBACA,uBACA,mBACA,YACA,mBACA,gBACA,eACA,gBACA,gBACA,gBACA,uBACA,gBACA,gBACA,oBACA,eACA,gBACA,eACA,YACA,gBACA,gBACA,gBACA,kB,MAUWC,EAAwB,CAACf,EAAiBgB,KACrD,IAAIC,EAAsBH,EAI1B,OAAOT,EAAkBL,EAAIiB,EAAoB,EA4B5C,MAAMb,EAAOc,IAClB,UAAWC,uCAAyC,WAAY,CAC9D,OAAOA,qCAAqCD,E,CAE9C,UAAWE,wBAA0B,WAAY,CAC/C,OAAOA,sBAAsBF,E,CAE/B,OAAOG,WAAWH,EAAE,EAyIhB,SAAUI,EAAqBC,EAAOC,UAC1C,IAAIC,EAAgBF,EAAKE,cAGzB,IAAKA,EAAe,CAClB,OAAO,I,CAIT,MAAOA,GAAeC,WAAY,CAChC,MAAMC,EAAuBF,EAAcC,WAAWD,cACtD,IAAKE,EAAM,CAET,K,CAEFF,EAAgBE,C,CAGlB,OAAOF,CACT,CAEM,SAAUG,EAAgB5B,GAC9B,IAAKA,EAAI,OAAO,MAChB,OACEA,aAAc6B,aAAe7B,EAAG8B,UAAY,IAAM9B,EAAGU,aAAa,aAAeV,EAAGY,aAAa,iBAAmB,QAAUZ,EAAG+B,mBAAqB/B,EAAGgC,eAAiB,IAE9K,CAOM,SAAUC,EAAcC,EAAelC,GAC3C,GAAIkC,aAAgBC,gBAAiB,CACnC,OAAOD,C,CAET,UAAWA,IAAS,SAAU,CAE5B,MAAMlC,EAAyBwB,SAASY,eAAeF,GACvD,GAAIlC,EAAI,CACN,GAAIA,aAAcmC,gBAAiB,CACjC,OAAOnC,C,KACF,CAKLqC,QAAQC,KAAK,kCAAkCJ,+EAAmFlC,GAClI,OAAO,I,MAEJ,CAKLqC,QAAQC,KAAK,kCAAkCJ,yEAA6ElC,GAC5H,OAAO,I,EAGX,GAAIkC,IAASK,UAAW,CAMtBF,QAAQC,KAAK,6GAA8GtC,GAC3H,OAAO,I,CAMT,OAAOA,EAAGwC,QAAQ,OACpB,Q","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{p as e,d as t,h as o,c as r,t as m}from"./p-C5rqq3bf.js";import{R as n,a}from"./p-CI0tffvo.js";import{E as i}from"./p-CN0JX9-m.js";const l=()=>`@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'), local('Router'); font-weight: 400 normal; } @font-face { font-family: Router; src: local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'), local('Router'); font-weight: 500; } @font-face { font-family: Router; src: local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'), local('Router'); font-weight: 700 bold; } } .sc-lmvz-menuitem-h { display: inline-flex; flex-direction: row; align-items: center; justify-content: center; gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); border-radius: var(--lmvz-semantic-border-radius-lg, 14px); font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); padding: var(--lmvz-component-input-md-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)) var(--lmvz-component-input-md-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)); cursor: pointer; --lmvz-menuitem-color: var(--lmvz-semantic-color-int-on-tertiary, #545454); --lmvz-menuitem-background: var(--lmvz-semantic-color-int-tertiary, #ffffff); background: var(--lmvz-menuitem-background); color: var(--lmvz-menuitem-color); } .sc-lmvz-menuitem-h:hover { --lmvz-menuitem-background: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); } .sc-lmvz-menuitem-h:active { --lmvz-menuitem-background: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0); } .sc-lmvz-menuitem-h:focus-visible { z-index: 1; } [aria-expanded='true'].sc-lmvz-menuitem-h { --lmvz-menuitem-background: var(--lmvz-semantic-color-status-selected, #f1f9fe); --lmvz-menuitem-color: var(--lmvz-semantic-color-status-on-selected, #0e7ab4); }`;const s=e(class e extends n{get el(){return this}get validationEl(){return this.el}validationSlot;get role(){return"menuitem"}get ti(){return 0}lmvzActivation;constructor(e){super(false);if(e!==false){this.__registerHost()}this.lmvzActivation=t(this,"lmvzActivation");this.addController(new a(this,{validationTiming:"slot"}));this.addController(new i(this))}render(){return o(r,{key:"1a37d2873a29c713cf95c60070c8dcf045c9f8fc"},o("slot",{key:"c6578bcfdb9f0cebad095d80f0ed63cf663bf91e",ref:e=>this.validationSlot=e}))}static get style(){return l()}},[774,"lmvz-menuitem",{role:[2561],ti:[2562,"tabindex"]}]);function c(){if(typeof customElements==="undefined"){return}const e=["lmvz-menuitem"];e.forEach((e=>{switch(e){case"lmvz-menuitem":if(!customElements.get(m(e))){customElements.define(m(e),s)}break}}))}export{s as L,c as d};
2
+ //# sourceMappingURL=p-X5fEFT9T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["lmvzMenuitemCss","LmvzMenuItem","__stencil_proxyCustomElement","ReactiveControllerHost","validationEl","this","el","validationSlot","role","ti","lmvzActivation","constructor","registerHost","addController","AriaValidationController","validationTiming","ElementActivationController","render","h","Host","key","ref","e"],"sources":["src/components/lmvz-menuitem/lmvz-menuitem.css?tag=lmvz-menuitem&encapsulation=scoped","src/components/lmvz-menuitem/lmvz-menuitem.tsx"],"sourcesContent":["@import '~@lmvz-ds/lib-styles/define-layers.css';\n@import '~@lmvz-ds/lib-styles/fragments/_routerFont.css' layer(lmvz-ds.theme);\n\n:host {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: var(--lmvz-component-input-md-gap-x);\n border-radius: var(--lmvz-semantic-border-radius-lg);\n font: var(--lmvz-typography-body-md);\n padding: var(--lmvz-component-input-md-padding-y) var(--lmvz-component-input-md-padding-x);\n cursor: pointer;\n\n --lmvz-menuitem-color: var(--lmvz-semantic-color-int-on-tertiary);\n --lmvz-menuitem-background: var(--lmvz-semantic-color-int-tertiary);\n\n background: var(--lmvz-menuitem-background);\n color: var(--lmvz-menuitem-color);\n}\n\n:host(:hover) {\n --lmvz-menuitem-background: var(--lmvz-semantic-color-int-tertiary-hover);\n}\n\n:host(:active) {\n --lmvz-menuitem-background: var(--lmvz-semantic-color-int-tertiary-active);\n}\n:host(:focus-visible) {\n /* work around siblings overlapping outline */\n z-index: 1;\n}\n\n:host([aria-expanded='true']) {\n --lmvz-menuitem-background: var(--lmvz-semantic-color-status-selected);\n --lmvz-menuitem-color: var(--lmvz-semantic-color-status-on-selected);\n}\n","import { Component, Element, Event, type EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ElementActivationController, type ElementActivationHost } from '../../utils/aria/element-activation-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\n\n/**\n * A menu item component to be used within the `lmvz-header` component's navigation slots.\n */\n@Component({\n tag: 'lmvz-menuitem',\n styleUrl: './lmvz-menuitem.css',\n scoped: true,\n})\nexport class LmvzMenuItem extends ReactiveControllerHost implements AriaValidationHost, ElementActivationHost {\n @Element() readonly el!: HTMLElement;\n\n get validationEl() {\n return this.el;\n }\n\n validationSlot?: HTMLSlotElement;\n\n @Prop({ reflect: true }) get role() {\n return 'menuitem';\n }\n @Prop({ reflect: true, attribute: 'tabindex' }) get ti() {\n return 0;\n }\n\n /**\n * Event emitted when the menu item is activated, either by a click or by pressing \"Enter\" or \"Space\" while the menu item is focused.\n */\n @Event() lmvzActivation!: EventEmitter<void>;\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this, { validationTiming: 'slot' }));\n this.addController(new ElementActivationController(this));\n }\n\n render() {\n return (\n <Host>\n <slot ref={(e) => (this.validationSlot = e)}>{/* The content of the menu item will be provided by the user */}</slot>\n </Host>\n );\n }\n}\n"],"mappings":"0IAAA,MAAMA,EAAkB,IAAM,q5D,MCajBC,EAAaC,EAAA,MAAAD,UAAQE,E,qBAGhC,gBAAIC,GACF,OAAOC,KAAKC,E,CAGdC,eAEA,QAA6BC,GAC3B,MAAO,U,CAET,MAAoDC,GAClD,OAAO,C,CAMAC,eAET,WAAAC,CAAAC,G,8FAEEP,KAAKQ,cAAc,IAAIC,EAAyBT,KAAM,CAAEU,iBAAkB,UAC1EV,KAAKQ,cAAc,IAAIG,EAA4BX,MACpD,CAED,MAAAY,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,QAAAE,IAAA,2CAAMC,IAAMC,GAAOjB,KAAKE,eAAiBe,I","ignoreList":[]}