@lmvz-ds/components 0.11.4

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 (394) hide show
  1. package/LICENSE.txt +3 -0
  2. package/assets/LMVZ_logo_175.svg +1 -0
  3. package/assets/card-placeholder.svg +4 -0
  4. package/assets/fonts/Router-Bold.woff +0 -0
  5. package/assets/fonts/Router-Book.woff +0 -0
  6. package/assets/fonts/Router-Medium.woff +0 -0
  7. package/assets/icons/Logo.svg +10 -0
  8. package/assets/icons/actions.svg +5 -0
  9. package/assets/icons/adduser.svg +3 -0
  10. package/assets/icons/alert.svg +3 -0
  11. package/assets/icons/apple.svg +3 -0
  12. package/assets/icons/arrow-down.svg +3 -0
  13. package/assets/icons/arrow-left.svg +3 -0
  14. package/assets/icons/arrow-right.svg +3 -0
  15. package/assets/icons/arrow-up.svg +3 -0
  16. package/assets/icons/book.svg +3 -0
  17. package/assets/icons/bookmark.svg +3 -0
  18. package/assets/icons/checkmark.svg +3 -0
  19. package/assets/icons/chevron-down.svg +3 -0
  20. package/assets/icons/chevron-left.svg +3 -0
  21. package/assets/icons/chevron-right.svg +3 -0
  22. package/assets/icons/chevron-up.svg +3 -0
  23. package/assets/icons/close-l.svg +3 -0
  24. package/assets/icons/close-sm.svg +3 -0
  25. package/assets/icons/cog.svg +4 -0
  26. package/assets/icons/computer.svg +3 -0
  27. package/assets/icons/dashboard.svg +6 -0
  28. package/assets/icons/delete.svg +3 -0
  29. package/assets/icons/download.svg +3 -0
  30. package/assets/icons/edit.svg +3 -0
  31. package/assets/icons/external.svg +3 -0
  32. package/assets/icons/facebook.svg +3 -0
  33. package/assets/icons/favorite.svg +3 -0
  34. package/assets/icons/filter.svg +3 -0
  35. package/assets/icons/group.svg +3 -0
  36. package/assets/icons/hide.svg +3 -0
  37. package/assets/icons/home.svg +3 -0
  38. package/assets/icons/info.svg +3 -0
  39. package/assets/icons/instagram.svg +3 -0
  40. package/assets/icons/letter.svg +3 -0
  41. package/assets/icons/linkedin.svg +5 -0
  42. package/assets/icons/logout.svg +3 -0
  43. package/assets/icons/map.svg +3 -0
  44. package/assets/icons/minus.svg +3 -0
  45. package/assets/icons/navigation.svg +3 -0
  46. package/assets/icons/plus.svg +3 -0
  47. package/assets/icons/qr-scan.svg +3 -0
  48. package/assets/icons/question.svg +10 -0
  49. package/assets/icons/reader.svg +3 -0
  50. package/assets/icons/reset.svg +3 -0
  51. package/assets/icons/school.svg +3 -0
  52. package/assets/icons/search.svg +3 -0
  53. package/assets/icons/send.svg +3 -0
  54. package/assets/icons/settings.svg +3 -0
  55. package/assets/icons/share.svg +10 -0
  56. package/assets/icons/shopping-cart.svg +3 -0
  57. package/assets/icons/show.svg +3 -0
  58. package/assets/icons/snapchat.svg +3 -0
  59. package/assets/icons/sort.svg +3 -0
  60. package/assets/icons/speech-bubble.svg +3 -0
  61. package/assets/icons/star.svg +3 -0
  62. package/assets/icons/student.svg +3 -0
  63. package/assets/icons/upload.svg +3 -0
  64. package/assets/icons/user.svg +3 -0
  65. package/assets/icons/warn-circle.svg +3 -0
  66. package/assets/icons/warn-triangle.svg +3 -0
  67. package/assets/icons/whatsapp.svg +4 -0
  68. package/assets/icons/world.svg +10 -0
  69. package/assets/icons/x.svg +3 -0
  70. package/assets/icons/youtube.svg +3 -0
  71. package/assets/zukunftslinie.svg +3 -0
  72. package/dist/cjs/Effect-BIlTHtLK.js +19172 -0
  73. package/dist/cjs/_commonjsHelpers-CFO10eej.js +7 -0
  74. package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
  75. package/dist/cjs/aria-validation-controller-B7unOPxT.js +2929 -0
  76. package/dist/cjs/axe-BNqwbBGU.js +32834 -0
  77. package/dist/cjs/component-CRc6eHcV.js +138 -0
  78. package/dist/cjs/element-activation-controller-DC_6T0Rt.js +31 -0
  79. package/dist/cjs/icons-DbL3LSmP.js +659 -0
  80. package/dist/cjs/index-9ZJx0550.js +2752 -0
  81. package/dist/cjs/index-CVw4GUo6.js +92 -0
  82. package/dist/cjs/index.cjs.js +96 -0
  83. package/dist/cjs/lmvz-action.cjs.entry.js +22 -0
  84. package/dist/cjs/lmvz-button.cjs.entry.js +72 -0
  85. package/dist/cjs/lmvz-card.cjs.entry.js +33 -0
  86. package/dist/cjs/lmvz-chip.cjs.entry.js +18 -0
  87. package/dist/cjs/lmvz-components.cjs.js +25 -0
  88. package/dist/cjs/lmvz-header.cjs.entry.js +134 -0
  89. package/dist/cjs/lmvz-icon.cjs.entry.js +76 -0
  90. package/dist/cjs/lmvz-input.cjs.entry.js +176 -0
  91. package/dist/cjs/lmvz-menuitem.cjs.entry.js +32 -0
  92. package/dist/cjs/loader.cjs.js +13 -0
  93. package/dist/collection/api/ds.constants.js +73 -0
  94. package/dist/collection/api/index.js +1 -0
  95. package/dist/collection/assets/LMVZ_logo_175.svg +1 -0
  96. package/dist/collection/assets/card-placeholder.svg +4 -0
  97. package/dist/collection/assets/fonts/Router-Bold.woff +0 -0
  98. package/dist/collection/assets/fonts/Router-Book.woff +0 -0
  99. package/dist/collection/assets/fonts/Router-Medium.woff +0 -0
  100. package/dist/collection/assets/icons/Logo.svg +10 -0
  101. package/dist/collection/assets/icons/actions.svg +5 -0
  102. package/dist/collection/assets/icons/adduser.svg +3 -0
  103. package/dist/collection/assets/icons/alert.svg +3 -0
  104. package/dist/collection/assets/icons/apple.svg +3 -0
  105. package/dist/collection/assets/icons/arrow-down.svg +3 -0
  106. package/dist/collection/assets/icons/arrow-left.svg +3 -0
  107. package/dist/collection/assets/icons/arrow-right.svg +3 -0
  108. package/dist/collection/assets/icons/arrow-up.svg +3 -0
  109. package/dist/collection/assets/icons/book.svg +3 -0
  110. package/dist/collection/assets/icons/bookmark.svg +3 -0
  111. package/dist/collection/assets/icons/checkmark.svg +3 -0
  112. package/dist/collection/assets/icons/chevron-down.svg +3 -0
  113. package/dist/collection/assets/icons/chevron-left.svg +3 -0
  114. package/dist/collection/assets/icons/chevron-right.svg +3 -0
  115. package/dist/collection/assets/icons/chevron-up.svg +3 -0
  116. package/dist/collection/assets/icons/close-l.svg +3 -0
  117. package/dist/collection/assets/icons/close-sm.svg +3 -0
  118. package/dist/collection/assets/icons/cog.svg +4 -0
  119. package/dist/collection/assets/icons/computer.svg +3 -0
  120. package/dist/collection/assets/icons/dashboard.svg +6 -0
  121. package/dist/collection/assets/icons/delete.svg +3 -0
  122. package/dist/collection/assets/icons/download.svg +3 -0
  123. package/dist/collection/assets/icons/edit.svg +3 -0
  124. package/dist/collection/assets/icons/external.svg +3 -0
  125. package/dist/collection/assets/icons/facebook.svg +3 -0
  126. package/dist/collection/assets/icons/favorite.svg +3 -0
  127. package/dist/collection/assets/icons/filter.svg +3 -0
  128. package/dist/collection/assets/icons/group.svg +3 -0
  129. package/dist/collection/assets/icons/hide.svg +3 -0
  130. package/dist/collection/assets/icons/home.svg +3 -0
  131. package/dist/collection/assets/icons/info.svg +3 -0
  132. package/dist/collection/assets/icons/instagram.svg +3 -0
  133. package/dist/collection/assets/icons/letter.svg +3 -0
  134. package/dist/collection/assets/icons/linkedin.svg +5 -0
  135. package/dist/collection/assets/icons/logout.svg +3 -0
  136. package/dist/collection/assets/icons/map.svg +3 -0
  137. package/dist/collection/assets/icons/minus.svg +3 -0
  138. package/dist/collection/assets/icons/navigation.svg +3 -0
  139. package/dist/collection/assets/icons/plus.svg +3 -0
  140. package/dist/collection/assets/icons/qr-scan.svg +3 -0
  141. package/dist/collection/assets/icons/question.svg +10 -0
  142. package/dist/collection/assets/icons/reader.svg +3 -0
  143. package/dist/collection/assets/icons/reset.svg +3 -0
  144. package/dist/collection/assets/icons/school.svg +3 -0
  145. package/dist/collection/assets/icons/search.svg +3 -0
  146. package/dist/collection/assets/icons/send.svg +3 -0
  147. package/dist/collection/assets/icons/settings.svg +3 -0
  148. package/dist/collection/assets/icons/share.svg +10 -0
  149. package/dist/collection/assets/icons/shopping-cart.svg +3 -0
  150. package/dist/collection/assets/icons/show.svg +3 -0
  151. package/dist/collection/assets/icons/snapchat.svg +3 -0
  152. package/dist/collection/assets/icons/sort.svg +3 -0
  153. package/dist/collection/assets/icons/speech-bubble.svg +3 -0
  154. package/dist/collection/assets/icons/star.svg +3 -0
  155. package/dist/collection/assets/icons/student.svg +3 -0
  156. package/dist/collection/assets/icons/upload.svg +3 -0
  157. package/dist/collection/assets/icons/user.svg +3 -0
  158. package/dist/collection/assets/icons/warn-circle.svg +3 -0
  159. package/dist/collection/assets/icons/warn-triangle.svg +3 -0
  160. package/dist/collection/assets/icons/whatsapp.svg +4 -0
  161. package/dist/collection/assets/icons/world.svg +10 -0
  162. package/dist/collection/assets/icons/x.svg +3 -0
  163. package/dist/collection/assets/icons/youtube.svg +3 -0
  164. package/dist/collection/assets/zukunftslinie.svg +3 -0
  165. package/dist/collection/collection-manifest.json +21 -0
  166. package/dist/collection/components/lmvz-action/lmvz-action.css +3 -0
  167. package/dist/collection/components/lmvz-action/lmvz-action.js +45 -0
  168. package/dist/collection/components/lmvz-button/lmvz-button.css +199 -0
  169. package/dist/collection/components/lmvz-button/lmvz-button.js +245 -0
  170. package/dist/collection/components/lmvz-card/lmvz-card.css +283 -0
  171. package/dist/collection/components/lmvz-card/lmvz-card.js +137 -0
  172. package/dist/collection/components/lmvz-chip/lmvz-chip.css +3 -0
  173. package/dist/collection/components/lmvz-chip/lmvz-chip.js +42 -0
  174. package/dist/collection/components/lmvz-header/lmvz-header.css +49 -0
  175. package/dist/collection/components/lmvz-header/lmvz-header.js +138 -0
  176. package/dist/collection/components/lmvz-icon/icons.js +36 -0
  177. package/dist/collection/components/lmvz-icon/lmvz-icon.css +82 -0
  178. package/dist/collection/components/lmvz-icon/lmvz-icon.js +191 -0
  179. package/dist/collection/components/lmvz-icon/public.js +1 -0
  180. package/dist/collection/components/lmvz-icon/test/icons.unit.js +89 -0
  181. package/dist/collection/components/lmvz-input/lmvz-input.css +201 -0
  182. package/dist/collection/components/lmvz-input/lmvz-input.js +847 -0
  183. package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.css +89 -0
  184. package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.js +97 -0
  185. package/dist/collection/index.js +3 -0
  186. package/dist/collection/integration/header-integration.js +28 -0
  187. package/dist/collection/styles/buttons.css +1 -0
  188. package/dist/collection/styles/router-font.css +1 -0
  189. package/dist/collection/styles/tokens.css +1 -0
  190. package/dist/collection/styles/typography.css +1 -0
  191. package/dist/collection/themes/all.css +1 -0
  192. package/dist/collection/themes/dark.css +1 -0
  193. package/dist/collection/themes/light.css +1 -0
  194. package/dist/collection/utils/component.js +268 -0
  195. package/dist/collection/utils/effect.js +6 -0
  196. package/dist/collection/utils/element-activation-controller.js +27 -0
  197. package/dist/collection/utils/http.js +24 -0
  198. package/dist/collection/utils/http.test.js +46 -0
  199. package/dist/collection/utils/list-keyboard-controller.js +44 -0
  200. package/dist/collection/utils/public.js +1 -0
  201. package/dist/collection/utils/reactive-controller-host.js +39 -0
  202. package/dist/collection/utils/typing.js +1 -0
  203. package/dist/collection/utils/url.js +7 -0
  204. package/dist/collection/utils/validation/aria-validation-controller.js +124 -0
  205. package/dist/collection/utils/validation/svg.js +24 -0
  206. package/dist/components/index.d.ts +53 -0
  207. package/dist/components/index.js +1 -0
  208. package/dist/components/lmvz-action.d.ts +11 -0
  209. package/dist/components/lmvz-action.js +1 -0
  210. package/dist/components/lmvz-button.d.ts +11 -0
  211. package/dist/components/lmvz-button.js +1 -0
  212. package/dist/components/lmvz-card.d.ts +11 -0
  213. package/dist/components/lmvz-card.js +1 -0
  214. package/dist/components/lmvz-chip.d.ts +11 -0
  215. package/dist/components/lmvz-chip.js +1 -0
  216. package/dist/components/lmvz-header.d.ts +11 -0
  217. package/dist/components/lmvz-header.js +1 -0
  218. package/dist/components/lmvz-icon.d.ts +11 -0
  219. package/dist/components/lmvz-icon.js +1 -0
  220. package/dist/components/lmvz-input.d.ts +11 -0
  221. package/dist/components/lmvz-input.js +1 -0
  222. package/dist/components/lmvz-menuitem.d.ts +11 -0
  223. package/dist/components/lmvz-menuitem.js +1 -0
  224. package/dist/components/p-B3JVFwO1.js +1 -0
  225. package/dist/components/p-B85MJLTf.js +1 -0
  226. package/dist/components/p-BFwzIh71.js +1 -0
  227. package/dist/components/p-BaPwpeMs.js +1 -0
  228. package/dist/components/p-CN0JX9-m.js +1 -0
  229. package/dist/components/p-D1HbKFuh.js +12 -0
  230. package/dist/components/p-DDmjv-N_.js +1 -0
  231. package/dist/components/p-DMLRPGid.js +6 -0
  232. package/dist/esm/Effect-D9S7OTyY.js +18963 -0
  233. package/dist/esm/_commonjsHelpers-B85MJLTf.js +5 -0
  234. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  235. package/dist/esm/aria-validation-controller-C7nQzCCq.js +2926 -0
  236. package/dist/esm/axe-cRQ9Ux1I.js +32832 -0
  237. package/dist/esm/component-B3JVFwO1.js +132 -0
  238. package/dist/esm/element-activation-controller-CN0JX9-m.js +29 -0
  239. package/dist/esm/icons-B71gAZmE.js +655 -0
  240. package/dist/esm/index-Bt32KzDW.js +90 -0
  241. package/dist/esm/index-smGPjoDX.js +2741 -0
  242. package/dist/esm/index.js +85 -0
  243. package/dist/esm/lmvz-action.entry.js +20 -0
  244. package/dist/esm/lmvz-button.entry.js +70 -0
  245. package/dist/esm/lmvz-card.entry.js +31 -0
  246. package/dist/esm/lmvz-chip.entry.js +16 -0
  247. package/dist/esm/lmvz-components.js +21 -0
  248. package/dist/esm/lmvz-header.entry.js +132 -0
  249. package/dist/esm/lmvz-icon.entry.js +74 -0
  250. package/dist/esm/lmvz-input.entry.js +174 -0
  251. package/dist/esm/lmvz-menuitem.entry.js +30 -0
  252. package/dist/esm/loader.js +11 -0
  253. package/dist/index.cjs.js +1 -0
  254. package/dist/index.js +1 -0
  255. package/dist/lmvz-components/assets/LMVZ_logo_175.svg +1 -0
  256. package/dist/lmvz-components/assets/card-placeholder.svg +4 -0
  257. package/dist/lmvz-components/assets/fonts/Router-Bold.woff +0 -0
  258. package/dist/lmvz-components/assets/fonts/Router-Book.woff +0 -0
  259. package/dist/lmvz-components/assets/fonts/Router-Medium.woff +0 -0
  260. package/dist/lmvz-components/assets/icons/Logo.svg +10 -0
  261. package/dist/lmvz-components/assets/icons/actions.svg +5 -0
  262. package/dist/lmvz-components/assets/icons/adduser.svg +3 -0
  263. package/dist/lmvz-components/assets/icons/alert.svg +3 -0
  264. package/dist/lmvz-components/assets/icons/apple.svg +3 -0
  265. package/dist/lmvz-components/assets/icons/arrow-down.svg +3 -0
  266. package/dist/lmvz-components/assets/icons/arrow-left.svg +3 -0
  267. package/dist/lmvz-components/assets/icons/arrow-right.svg +3 -0
  268. package/dist/lmvz-components/assets/icons/arrow-up.svg +3 -0
  269. package/dist/lmvz-components/assets/icons/book.svg +3 -0
  270. package/dist/lmvz-components/assets/icons/bookmark.svg +3 -0
  271. package/dist/lmvz-components/assets/icons/checkmark.svg +3 -0
  272. package/dist/lmvz-components/assets/icons/chevron-down.svg +3 -0
  273. package/dist/lmvz-components/assets/icons/chevron-left.svg +3 -0
  274. package/dist/lmvz-components/assets/icons/chevron-right.svg +3 -0
  275. package/dist/lmvz-components/assets/icons/chevron-up.svg +3 -0
  276. package/dist/lmvz-components/assets/icons/close-l.svg +3 -0
  277. package/dist/lmvz-components/assets/icons/close-sm.svg +3 -0
  278. package/dist/lmvz-components/assets/icons/cog.svg +4 -0
  279. package/dist/lmvz-components/assets/icons/computer.svg +3 -0
  280. package/dist/lmvz-components/assets/icons/dashboard.svg +6 -0
  281. package/dist/lmvz-components/assets/icons/delete.svg +3 -0
  282. package/dist/lmvz-components/assets/icons/download.svg +3 -0
  283. package/dist/lmvz-components/assets/icons/edit.svg +3 -0
  284. package/dist/lmvz-components/assets/icons/external.svg +3 -0
  285. package/dist/lmvz-components/assets/icons/facebook.svg +3 -0
  286. package/dist/lmvz-components/assets/icons/favorite.svg +3 -0
  287. package/dist/lmvz-components/assets/icons/filter.svg +3 -0
  288. package/dist/lmvz-components/assets/icons/group.svg +3 -0
  289. package/dist/lmvz-components/assets/icons/hide.svg +3 -0
  290. package/dist/lmvz-components/assets/icons/home.svg +3 -0
  291. package/dist/lmvz-components/assets/icons/info.svg +3 -0
  292. package/dist/lmvz-components/assets/icons/instagram.svg +3 -0
  293. package/dist/lmvz-components/assets/icons/letter.svg +3 -0
  294. package/dist/lmvz-components/assets/icons/linkedin.svg +5 -0
  295. package/dist/lmvz-components/assets/icons/logout.svg +3 -0
  296. package/dist/lmvz-components/assets/icons/map.svg +3 -0
  297. package/dist/lmvz-components/assets/icons/minus.svg +3 -0
  298. package/dist/lmvz-components/assets/icons/navigation.svg +3 -0
  299. package/dist/lmvz-components/assets/icons/plus.svg +3 -0
  300. package/dist/lmvz-components/assets/icons/qr-scan.svg +3 -0
  301. package/dist/lmvz-components/assets/icons/question.svg +10 -0
  302. package/dist/lmvz-components/assets/icons/reader.svg +3 -0
  303. package/dist/lmvz-components/assets/icons/reset.svg +3 -0
  304. package/dist/lmvz-components/assets/icons/school.svg +3 -0
  305. package/dist/lmvz-components/assets/icons/search.svg +3 -0
  306. package/dist/lmvz-components/assets/icons/send.svg +3 -0
  307. package/dist/lmvz-components/assets/icons/settings.svg +3 -0
  308. package/dist/lmvz-components/assets/icons/share.svg +10 -0
  309. package/dist/lmvz-components/assets/icons/shopping-cart.svg +3 -0
  310. package/dist/lmvz-components/assets/icons/show.svg +3 -0
  311. package/dist/lmvz-components/assets/icons/snapchat.svg +3 -0
  312. package/dist/lmvz-components/assets/icons/sort.svg +3 -0
  313. package/dist/lmvz-components/assets/icons/speech-bubble.svg +3 -0
  314. package/dist/lmvz-components/assets/icons/star.svg +3 -0
  315. package/dist/lmvz-components/assets/icons/student.svg +3 -0
  316. package/dist/lmvz-components/assets/icons/upload.svg +3 -0
  317. package/dist/lmvz-components/assets/icons/user.svg +3 -0
  318. package/dist/lmvz-components/assets/icons/warn-circle.svg +3 -0
  319. package/dist/lmvz-components/assets/icons/warn-triangle.svg +3 -0
  320. package/dist/lmvz-components/assets/icons/whatsapp.svg +4 -0
  321. package/dist/lmvz-components/assets/icons/world.svg +10 -0
  322. package/dist/lmvz-components/assets/icons/x.svg +3 -0
  323. package/dist/lmvz-components/assets/icons/youtube.svg +3 -0
  324. package/dist/lmvz-components/assets/zukunftslinie.svg +3 -0
  325. package/dist/lmvz-components/index.esm.js +1 -0
  326. package/dist/lmvz-components/lmvz-components.esm.js +1 -0
  327. package/dist/lmvz-components/p-87b01940.entry.js +1 -0
  328. package/dist/lmvz-components/p-9faac8f3.entry.js +1 -0
  329. package/dist/lmvz-components/p-B3JVFwO1.js +1 -0
  330. package/dist/lmvz-components/p-B85MJLTf.js +1 -0
  331. package/dist/lmvz-components/p-CN0JX9-m.js +1 -0
  332. package/dist/lmvz-components/p-D1HbKFuh.js +12 -0
  333. package/dist/lmvz-components/p-D9S7OTyY.js +1 -0
  334. package/dist/lmvz-components/p-DMLRPGid.js +6 -0
  335. package/dist/lmvz-components/p-DQuL1Twl.js +1 -0
  336. package/dist/lmvz-components/p-DlIX18fw.js +1 -0
  337. package/dist/lmvz-components/p-DlrjrWsu.js +1 -0
  338. package/dist/lmvz-components/p-a4615e4b.entry.js +1 -0
  339. package/dist/lmvz-components/p-a8c88454.entry.js +1 -0
  340. package/dist/lmvz-components/p-d4b68381.entry.js +1 -0
  341. package/dist/lmvz-components/p-e63e239a.entry.js +1 -0
  342. package/dist/lmvz-components/p-f956a5e7.entry.js +1 -0
  343. package/dist/lmvz-components/p-fefd2fe4.entry.js +1 -0
  344. package/dist/lmvz-components/p-smGPjoDX.js +2 -0
  345. package/dist/lmvz-components/styles/buttons.css +1 -0
  346. package/dist/lmvz-components/styles/router-font.css +1 -0
  347. package/dist/lmvz-components/styles/tokens.css +1 -0
  348. package/dist/lmvz-components/styles/typography.css +1 -0
  349. package/dist/lmvz-components/themes/all.css +1 -0
  350. package/dist/lmvz-components/themes/dark.css +1 -0
  351. package/dist/lmvz-components/themes/light.css +1 -0
  352. package/dist/manifest.d.ts +480 -0
  353. package/dist/manifest.json +5184 -0
  354. package/dist/types/api/aria-types.d.ts +9 -0
  355. package/dist/types/api/ds.constants.d.ts +8 -0
  356. package/dist/types/api/ds.types.d.ts +39 -0
  357. package/dist/types/api/index.d.ts +3 -0
  358. package/dist/types/components/lmvz-action/lmvz-action.d.ts +6 -0
  359. package/dist/types/components/lmvz-button/lmvz-button.d.ts +25 -0
  360. package/dist/types/components/lmvz-card/lmvz-card.d.ts +11 -0
  361. package/dist/types/components/lmvz-chip/lmvz-chip.d.ts +4 -0
  362. package/dist/types/components/lmvz-header/lmvz-header.d.ts +23 -0
  363. package/dist/types/components/lmvz-icon/icons.d.ts +8 -0
  364. package/dist/types/components/lmvz-icon/lmvz-icon.d.ts +20 -0
  365. package/dist/types/components/lmvz-icon/public.d.ts +1 -0
  366. package/dist/types/components/lmvz-icon/test/icons.unit.d.ts +1 -0
  367. package/dist/types/components/lmvz-input/lmvz-input.d.ts +63 -0
  368. package/dist/types/components/lmvz-menuitem/lmvz-menuitem.d.ts +12 -0
  369. package/dist/types/components.d.ts +773 -0
  370. package/dist/types/index.d.ts +5 -0
  371. package/dist/types/stencil-public-runtime.d.ts +1860 -0
  372. package/dist/types/utils/component.d.ts +36 -0
  373. package/dist/types/utils/effect.d.ts +3 -0
  374. package/dist/types/utils/element-activation-controller.d.ts +19 -0
  375. package/dist/types/utils/http.d.ts +24 -0
  376. package/dist/types/utils/http.test.d.ts +1 -0
  377. package/dist/types/utils/list-keyboard-controller.d.ts +13 -0
  378. package/dist/types/utils/public.d.ts +1 -0
  379. package/dist/types/utils/reactive-controller-host.d.ts +26 -0
  380. package/dist/types/utils/typing.d.ts +3 -0
  381. package/dist/types/utils/url.d.ts +8 -0
  382. package/dist/types/utils/validation/aria-validation-controller.d.ts +31 -0
  383. package/dist/types/utils/validation/svg.d.ts +11 -0
  384. package/hydrate/index.d.ts +287 -0
  385. package/hydrate/index.js +78213 -0
  386. package/hydrate/index.mjs +78203 -0
  387. package/hydrate/package.json +12 -0
  388. package/loader/cdn.js +1 -0
  389. package/loader/index.cjs.js +1 -0
  390. package/loader/index.d.ts +24 -0
  391. package/loader/index.es2017.js +1 -0
  392. package/loader/index.js +2 -0
  393. package/package.json +216 -0
  394. package/readme.md +193 -0
@@ -0,0 +1,268 @@
1
+ export const transitionEndAsync = (el, expectedDuration = 0) => {
2
+ return new Promise(resolve => {
3
+ transitionEnd(el, expectedDuration, resolve);
4
+ });
5
+ };
6
+ const transitionEnd = (el, expectedDuration = 0, callback) => {
7
+ let unRegTrans;
8
+ let animationTimeout;
9
+ const opts = { passive: true };
10
+ const ANIMATION_FALLBACK_TIMEOUT = 500;
11
+ const unregister = () => {
12
+ if (unRegTrans) {
13
+ unRegTrans();
14
+ }
15
+ };
16
+ const onTransitionEnd = (ev) => {
17
+ if (ev === undefined || el === ev.target) {
18
+ unregister();
19
+ callback(ev);
20
+ }
21
+ };
22
+ if (el) {
23
+ el.addEventListener('webkitTransitionEnd', onTransitionEnd, opts);
24
+ el.addEventListener('transitionend', onTransitionEnd, opts);
25
+ animationTimeout = setTimeout(onTransitionEnd, expectedDuration + ANIMATION_FALLBACK_TIMEOUT);
26
+ unRegTrans = () => {
27
+ if (animationTimeout !== undefined) {
28
+ clearTimeout(animationTimeout);
29
+ animationTimeout = undefined;
30
+ }
31
+ el.removeEventListener('webkitTransitionEnd', onTransitionEnd, opts);
32
+ el.removeEventListener('transitionend', onTransitionEnd, opts);
33
+ };
34
+ }
35
+ return unregister;
36
+ };
37
+ export const componentOnReady = (el, callback) => {
38
+ if (el.componentOnReady) {
39
+ el.componentOnReady().then((resolvedEl) => callback(resolvedEl));
40
+ }
41
+ else {
42
+ raf(() => callback(el));
43
+ }
44
+ };
45
+ export const hasLazyBuild = (stencilEl) => {
46
+ return stencilEl.componentOnReady !== undefined;
47
+ };
48
+ export const inheritAttributes = (el, attributes = []) => {
49
+ const attributeObject = {};
50
+ attributes.forEach(attr => {
51
+ if (el.hasAttribute(attr)) {
52
+ const value = el.getAttribute(attr);
53
+ if (value !== null) {
54
+ attributeObject[attr] = el.getAttribute(attr);
55
+ }
56
+ el.removeAttribute(attr);
57
+ }
58
+ });
59
+ return attributeObject;
60
+ };
61
+ const ariaAttributes = [
62
+ 'role',
63
+ 'aria-activedescendant',
64
+ 'aria-atomic',
65
+ 'aria-autocomplete',
66
+ 'aria-braillelabel',
67
+ 'aria-brailleroledescription',
68
+ 'aria-busy',
69
+ 'aria-checked',
70
+ 'aria-colcount',
71
+ 'aria-colindex',
72
+ 'aria-colindextext',
73
+ 'aria-colspan',
74
+ 'aria-controls',
75
+ 'aria-current',
76
+ 'aria-describedby',
77
+ 'aria-description',
78
+ 'aria-details',
79
+ 'aria-disabled',
80
+ 'aria-errormessage',
81
+ 'aria-expanded',
82
+ 'aria-flowto',
83
+ 'aria-haspopup',
84
+ 'aria-hidden',
85
+ 'aria-invalid',
86
+ 'aria-keyshortcuts',
87
+ 'aria-label',
88
+ 'aria-labelledby',
89
+ 'aria-level',
90
+ 'aria-live',
91
+ 'aria-multiline',
92
+ 'aria-multiselectable',
93
+ 'aria-orientation',
94
+ 'aria-owns',
95
+ 'aria-placeholder',
96
+ 'aria-posinset',
97
+ 'aria-pressed',
98
+ 'aria-readonly',
99
+ 'aria-relevant',
100
+ 'aria-required',
101
+ 'aria-roledescription',
102
+ 'aria-rowcount',
103
+ 'aria-rowindex',
104
+ 'aria-rowindextext',
105
+ 'aria-rowspan',
106
+ 'aria-selected',
107
+ 'aria-setsize',
108
+ 'aria-sort',
109
+ 'aria-valuemax',
110
+ 'aria-valuemin',
111
+ 'aria-valuenow',
112
+ 'aria-valuetext',
113
+ ];
114
+ export const inheritAriaAttributes = (el, ignoreList) => {
115
+ let attributesToInherit = ariaAttributes;
116
+ if (ignoreList && ignoreList.length > 0) {
117
+ attributesToInherit = attributesToInherit.filter(attr => !ignoreList.includes(attr));
118
+ }
119
+ return inheritAttributes(el, attributesToInherit);
120
+ };
121
+ export const addEventListener = (el, eventName, callback, opts) => {
122
+ return el.addEventListener(eventName, callback, opts);
123
+ };
124
+ export const removeEventListener = (el, eventName, callback, opts) => {
125
+ return el.removeEventListener(eventName, callback, opts);
126
+ };
127
+ export const getElementRoot = (el, fallback = el) => {
128
+ return el.shadowRoot || fallback;
129
+ };
130
+ export const raf = (h) => {
131
+ if (typeof __zone_symbol__requestAnimationFrame === 'function') {
132
+ return __zone_symbol__requestAnimationFrame(h);
133
+ }
134
+ if (typeof requestAnimationFrame === 'function') {
135
+ return requestAnimationFrame(h);
136
+ }
137
+ return setTimeout(h);
138
+ };
139
+ export const hasShadowDom = (el) => {
140
+ return !!el.shadowRoot && !!el.attachShadow;
141
+ };
142
+ export const focusVisibleElement = (el) => {
143
+ el.focus();
144
+ };
145
+ export const renderHiddenInput = (always, container, name, value, disabled) => {
146
+ if (always || hasShadowDom(container)) {
147
+ let input = container.querySelector('input.aux-input');
148
+ if (!input) {
149
+ input = container.ownerDocument.createElement('input');
150
+ input.type = 'hidden';
151
+ input.classList.add('aux-input');
152
+ container.appendChild(input);
153
+ }
154
+ input.disabled = disabled;
155
+ input.name = name;
156
+ input.value = value || '';
157
+ }
158
+ };
159
+ export const clamp = (min, n, max) => {
160
+ return Math.max(min, Math.min(n, max));
161
+ };
162
+ export const assert = (actual, reason) => {
163
+ if (!actual) {
164
+ const message = 'ASSERT: ' + reason;
165
+ console.error(message);
166
+ debugger;
167
+ throw new Error(message);
168
+ }
169
+ };
170
+ export const now = (ev) => {
171
+ return ev.timeStamp || Date.now();
172
+ };
173
+ export const pointerCoord = (ev) => {
174
+ if (ev) {
175
+ const changedTouches = ev.changedTouches;
176
+ if (changedTouches && changedTouches.length > 0) {
177
+ const touch = changedTouches[0];
178
+ return { x: touch.clientX, y: touch.clientY };
179
+ }
180
+ if (ev.pageX !== undefined) {
181
+ return { x: ev.pageX, y: ev.pageY };
182
+ }
183
+ }
184
+ return { x: 0, y: 0 };
185
+ };
186
+ export const deferEvent = (event) => {
187
+ return debounceEvent(event, 0);
188
+ };
189
+ export const debounceEvent = (event, wait) => {
190
+ const original = event._original || event;
191
+ return {
192
+ _original: event,
193
+ emit: debounce(original.emit.bind(original), wait),
194
+ };
195
+ };
196
+ export const debounce = (func, wait = 0) => {
197
+ let timer;
198
+ return (...args) => {
199
+ clearTimeout(timer);
200
+ timer = setTimeout(func, wait, ...args);
201
+ };
202
+ };
203
+ export const shallowEqualStringMap = (map1, map2) => {
204
+ map1 ??= {};
205
+ map2 ??= {};
206
+ if (map1 === map2) {
207
+ return true;
208
+ }
209
+ const keys1 = Object.keys(map1);
210
+ if (keys1.length !== Object.keys(map2).length) {
211
+ return false;
212
+ }
213
+ for (const k1 of keys1) {
214
+ if (!(k1 in map2)) {
215
+ return false;
216
+ }
217
+ if (map1[k1] !== map2[k1]) {
218
+ return false;
219
+ }
220
+ }
221
+ return true;
222
+ };
223
+ export const isSafeNumber = (input) => {
224
+ return typeof input === 'number' && !isNaN(input) && isFinite(input);
225
+ };
226
+ export function getDeepActiveElement(root = document) {
227
+ let activeElement = root.activeElement;
228
+ if (!activeElement) {
229
+ return null;
230
+ }
231
+ while (activeElement && activeElement.shadowRoot) {
232
+ const next = activeElement.shadowRoot.activeElement;
233
+ if (!next) {
234
+ break;
235
+ }
236
+ activeElement = next;
237
+ }
238
+ return activeElement;
239
+ }
240
+ export function canReceiveFocus(el) {
241
+ return (el instanceof HTMLElement && el.tabIndex >= 0 && !el.hasAttribute('disabled') && el.getAttribute('aria-hidden') !== 'true' && el.checkVisibility() && el.offsetParent !== null);
242
+ }
243
+ export function findFormByRef(form, el) {
244
+ if (form instanceof HTMLFormElement) {
245
+ return form;
246
+ }
247
+ if (typeof form === 'string') {
248
+ const el = document.getElementById(form);
249
+ if (el) {
250
+ if (el instanceof HTMLFormElement) {
251
+ return el;
252
+ }
253
+ else {
254
+ console.warn(`No Form found with selector: "#${form}". Verify that the element with id exists and is actually a <form> element.`, el);
255
+ return null;
256
+ }
257
+ }
258
+ else {
259
+ console.warn(`No Form found with selector: "#${form}". Verify that the id is correct and the form is rendered in the DOM.`, el);
260
+ return null;
261
+ }
262
+ }
263
+ if (form !== undefined) {
264
+ console.warn(`The provided "form" element is invalid. Verify that the form is a HTMLFormElement and rendered in the DOM.`, el);
265
+ return null;
266
+ }
267
+ return el.closest('form');
268
+ }
@@ -0,0 +1,6 @@
1
+ import { Effect } from "effect";
2
+ export function run(effect) {
3
+ return Effect.runPromise(effect).catch(error => {
4
+ console.error('Unhandled error in Effect:', error);
5
+ });
6
+ }
@@ -0,0 +1,27 @@
1
+ export class ElementActivationController {
2
+ host;
3
+ config;
4
+ constructor(host, config) {
5
+ this.host = host;
6
+ this.config = config;
7
+ }
8
+ hostDidLoad() {
9
+ if (!this.host.el.hasAttribute('tabindex')) {
10
+ console.warn('Interactive element does not have a tabindex attribute!', this.host.el);
11
+ }
12
+ this.host.el.addEventListener('keydown', this.handleKeyDown.bind(this));
13
+ this.host.el.addEventListener('click', this.handleActivation.bind(this));
14
+ }
15
+ handleKeyDown = (event) => {
16
+ if ((this.config?.keys ?? ['Enter', ' ']).includes(event.key)) {
17
+ event.preventDefault();
18
+ this.handleActivation(event);
19
+ }
20
+ };
21
+ handleActivation = (event) => {
22
+ this.host.lmvzActivation.emit();
23
+ if (this.config?.localHandler) {
24
+ this.config.localHandler(event);
25
+ }
26
+ };
27
+ }
@@ -0,0 +1,24 @@
1
+ import { Data, Effect } from "effect";
2
+ export class FetchError extends Data.TaggedError('FetchError') {
3
+ }
4
+ export class NotFoundError extends Data.TaggedError('NotFoundError') {
5
+ }
6
+ export const httpClient = (input, init) => Effect.gen(function* () {
7
+ const response = yield* Effect.tryPromise({
8
+ try: () => fetch(input, init),
9
+ catch: error => new FetchError({ cause: error }),
10
+ });
11
+ if (response.status === 404) {
12
+ return yield* new NotFoundError({ url: response.url });
13
+ }
14
+ return response;
15
+ });
16
+ export class ResponseTextError extends Data.TaggedError('ResponseTextError') {
17
+ constructor(error) {
18
+ super(new Error(`Failed to read response text`, { cause: error }));
19
+ }
20
+ }
21
+ export const responseAsText = (res) => Effect.tryPromise({
22
+ try: () => res.text(),
23
+ catch: error => new ResponseTextError(error),
24
+ });
@@ -0,0 +1,46 @@
1
+ import { Effect } from "effect";
2
+ import { FetchError, NotFoundError, ResponseTextError, httpClient, responseAsText } from "./http";
3
+ describe('Http Utils', () => {
4
+ describe('httpClient', () => {
5
+ it('should return response on successful fetch', async () => {
6
+ const mockResponse = { status: 200, url: 'https://example.com' };
7
+ global.fetch = jest.fn().mockResolvedValueOnce(mockResponse);
8
+ const result = await Effect.runPromise(httpClient('https://example.com'));
9
+ expect(result).toEqual(mockResponse);
10
+ });
11
+ it('should handle fetch errors', async () => {
12
+ const error = new Error('Network error');
13
+ global.fetch = jest.fn().mockRejectedValueOnce(error);
14
+ const result = await Effect.runPromise(Effect.flip(httpClient('https://example.com')));
15
+ expect(result).toBeInstanceOf(FetchError);
16
+ expect(result.cause).toBe(error);
17
+ });
18
+ it('should return NotFoundError on 404 status', async () => {
19
+ const mockResponse = { status: 404, url: 'https://example.com/notfound' };
20
+ global.fetch = jest.fn().mockResolvedValueOnce(mockResponse);
21
+ const result = await Effect.runPromise(Effect.flip(httpClient('https://example.com/notfound')));
22
+ expect(result).toBeInstanceOf(NotFoundError);
23
+ });
24
+ it('should pass RequestInit options to fetch', async () => {
25
+ const mockResponse = { status: 200, url: 'https://example.com' };
26
+ global.fetch = jest.fn().mockResolvedValueOnce(mockResponse);
27
+ const init = { method: 'POST', headers: { 'Content-Type': 'application/json' } };
28
+ await Effect.runPromise(httpClient('https://example.com', init));
29
+ expect(global.fetch).toHaveBeenCalledWith('https://example.com', init);
30
+ });
31
+ });
32
+ describe('responseAsText', () => {
33
+ it('should return text from response', async () => {
34
+ const mockResponse = { text: jest.fn().mockResolvedValueOnce('Hello World') };
35
+ const result = await Effect.runPromise(responseAsText(mockResponse));
36
+ expect(result).toBe('Hello World');
37
+ });
38
+ it('should handle text reading errors', async () => {
39
+ const error = new Error('Read error');
40
+ const mockResponse = { text: jest.fn().mockRejectedValueOnce(error) };
41
+ const result = await Effect.runPromise(Effect.flip(responseAsText(mockResponse)));
42
+ expect(result).toBeInstanceOf(ResponseTextError);
43
+ expect(result.message).toContain('Failed to read response text');
44
+ });
45
+ });
46
+ });
@@ -0,0 +1,44 @@
1
+ import { canReceiveFocus, getDeepActiveElement } from "./component";
2
+ export class ListKeyboardNavigationController {
3
+ host;
4
+ elements = [];
5
+ constructor(host) {
6
+ this.host = host;
7
+ }
8
+ hostDidRender() {
9
+ this.host.el.addEventListener('keydown', this.handleKeydown);
10
+ }
11
+ updateElements(elements) {
12
+ this.elements = elements;
13
+ }
14
+ handleKeydown = (event) => {
15
+ const { key } = event;
16
+ if (!['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft'].includes(key))
17
+ return;
18
+ const activeElement = getDeepActiveElement(document);
19
+ const nextElement = this.getNextFocusableElement(activeElement, ['ArrowDown', 'ArrowRight'].includes(key) ? 'down' : 'up');
20
+ if (nextElement) {
21
+ event.preventDefault();
22
+ nextElement.focus?.();
23
+ }
24
+ };
25
+ getNextFocusableElement(current, direction) {
26
+ const { elements } = this;
27
+ const currentIndex = elements.indexOf(current);
28
+ if (currentIndex === -1)
29
+ return null;
30
+ let nextIndex = null;
31
+ if (direction === 'down') {
32
+ nextIndex = (currentIndex + 1) % elements.length;
33
+ }
34
+ else if (direction === 'up') {
35
+ nextIndex = (currentIndex - 1 + elements.length) % elements.length;
36
+ }
37
+ if (nextIndex == null)
38
+ return null;
39
+ const candidate = elements[nextIndex];
40
+ if (!canReceiveFocus(candidate))
41
+ return this.getNextFocusableElement(candidate, direction);
42
+ return candidate;
43
+ }
44
+ }
@@ -0,0 +1 @@
1
+ export { run } from './effect';
@@ -0,0 +1,39 @@
1
+ export class ReactiveControllerHost {
2
+ controllers = new Set();
3
+ addController(controller) {
4
+ this.controllers.add(controller);
5
+ }
6
+ removeController(controller) {
7
+ this.controllers.delete(controller);
8
+ }
9
+ get activeControllers() {
10
+ return Array.from(this.controllers).filter(controller => !controller.disabled);
11
+ }
12
+ connectedCallback() {
13
+ if (!this.controllers.size) {
14
+ console.warn('ReactiveControllerHost connected with no controllers registered.', this);
15
+ }
16
+ this.activeControllers.forEach(controller => controller.hostConnected?.());
17
+ }
18
+ disconnectedCallback() {
19
+ this.activeControllers.forEach(controller => controller.hostDisconnected?.());
20
+ }
21
+ componentWillLoad() {
22
+ this.activeControllers.forEach(controller => controller.hostWillLoad?.());
23
+ }
24
+ componentDidLoad() {
25
+ this.activeControllers.forEach(controller => controller.hostDidLoad?.());
26
+ }
27
+ componentWillRender() {
28
+ this.activeControllers.forEach(controller => controller.hostWillRender?.());
29
+ }
30
+ componentDidRender() {
31
+ this.activeControllers.forEach(controller => controller.hostDidRender?.());
32
+ }
33
+ componentWillUpdate() {
34
+ this.activeControllers.forEach(controller => controller.hostWillUpdate?.());
35
+ }
36
+ componentDidUpdate() {
37
+ this.activeControllers.forEach(controller => controller.hostDidUpdate?.());
38
+ }
39
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import { getAssetPath } from "@stencil/core";
2
+ import { Data, Effect } from "effect";
3
+ export class URLCreationError extends Data.TaggedError('URLCreationError') {
4
+ }
5
+ export const createAssetUrlWithBasePath = (file, basePath) => Effect.try(() => getAssetPath([basePath ?? '/assets', file].filter(Boolean).join('/').replace('//', '/'))).pipe(Effect.tapError(() => Effect.logWarning(`Failed to create URL for icon "${file}".
6
+ Please provide an absolute URL in your app's 'setAssetPath(...)' configuration!
7
+ Falling back to /assets/`)), Effect.orElseSucceed(() => window.location.origin + '/assets/' + file));
@@ -0,0 +1,124 @@
1
+ import { Build } from "@stencil/core";
2
+ import { Effect, Queue, Stream } from "effect";
3
+ export class AriaValidationController {
4
+ host;
5
+ config;
6
+ static get globalValidationEnabled() {
7
+ return Build.isDev;
8
+ }
9
+ static axe = this.globalValidationEnabled ? import('axe-core') : null;
10
+ static axeQueue = null;
11
+ static axeStreamFiber = null;
12
+ visibilityObserver;
13
+ elementQueued = false;
14
+ elementValidated = false;
15
+ knownValidationErrors = [];
16
+ get disabled() {
17
+ return !AriaValidationController.globalValidationEnabled;
18
+ }
19
+ constructor(host, config) {
20
+ this.host = host;
21
+ this.config = config;
22
+ AriaValidationController.initializeAxeStream();
23
+ }
24
+ static initializeAxeStream() {
25
+ if (!this.globalValidationEnabled)
26
+ return;
27
+ if (this.axeStreamFiber)
28
+ return;
29
+ const program = Effect.gen(function* () {
30
+ const queue = (AriaValidationController.axeQueue = yield* Queue.bounded(100));
31
+ const axeLib = yield* Effect.promise(() => AriaValidationController.axe);
32
+ if (!axeLib) {
33
+ console.error('Axe library not available, ARIA validation will not run.');
34
+ return;
35
+ }
36
+ const stream = Stream.fromQueue(queue).pipe(Stream.mapEffect(({ context, onComplete }) => Effect.async(resume => {
37
+ axeLib.run(context, {}, (error, results) => {
38
+ onComplete(error, results);
39
+ resume(Effect.void);
40
+ });
41
+ })));
42
+ yield* Stream.runDrain(stream);
43
+ });
44
+ this.axeStreamFiber = Effect.runFork(program);
45
+ }
46
+ hostDidLoad() {
47
+ if (this.elementQueued || this.elementValidated)
48
+ return;
49
+ if (!this.host.el.checkVisibility()) {
50
+ this.observeVisibilityOnce();
51
+ return;
52
+ }
53
+ this.enqueueValidation();
54
+ }
55
+ hostDidUpdate() {
56
+ this.checkLazyValidation();
57
+ }
58
+ hostDisconnected() {
59
+ this.discardVisibilityObserver();
60
+ }
61
+ observeVisibilityOnce() {
62
+ this.visibilityObserver = new IntersectionObserver(entries => {
63
+ for (const entry of entries) {
64
+ if (entry.target !== this.host.el)
65
+ continue;
66
+ if (!entry.isIntersecting)
67
+ continue;
68
+ this.checkLazyValidation();
69
+ this.discardVisibilityObserver();
70
+ }
71
+ }, {
72
+ root: this.host.el.parentElement,
73
+ rootMargin: '0px',
74
+ threshold: 0.01,
75
+ });
76
+ this.visibilityObserver.observe(this.host.el);
77
+ }
78
+ checkLazyValidation() {
79
+ if (!this.config?.reValidateOnPropChanges && (this.elementQueued || this.elementValidated))
80
+ return;
81
+ this.enqueueValidation();
82
+ }
83
+ enqueueValidation() {
84
+ if (!AriaValidationController.globalValidationEnabled)
85
+ return;
86
+ this.elementQueued = true;
87
+ Effect.runPromise(AriaValidationController.axeQueue?.offer({
88
+ context: { include: this.host.el, exclude: this.knownValidationErrors },
89
+ onComplete: (error, results) => {
90
+ this.elementValidated = true;
91
+ if (error) {
92
+ console.error('Error running ARIA validation:', error);
93
+ return;
94
+ }
95
+ if (!results?.violations.length) {
96
+ if (this.config?.verboseLogging) {
97
+ console.log(`No ARIA validation violations found for ${this.host.el?.tagName || 'element'}.`);
98
+ }
99
+ return;
100
+ }
101
+ const label = `ARIA validation violations found for ${this.host.el?.tagName || 'element'}`;
102
+ if (this.config?.verboseLogging) {
103
+ console.group(label);
104
+ }
105
+ else {
106
+ console.groupCollapsed(label);
107
+ }
108
+ const targets = results.violations.flatMap(violation => {
109
+ console.dir(violation, { showHidden: true, compact: false });
110
+ return violation.nodes.map(node => node.target);
111
+ });
112
+ console.log('element:', this.host.el);
113
+ console.groupEnd();
114
+ this.knownValidationErrors.push(...targets);
115
+ },
116
+ }));
117
+ }
118
+ discardVisibilityObserver() {
119
+ if (!this.visibilityObserver)
120
+ return;
121
+ this.visibilityObserver.disconnect();
122
+ this.visibilityObserver = undefined;
123
+ }
124
+ }
@@ -0,0 +1,24 @@
1
+ import { Brand, Data, Effect } from "effect";
2
+ export const SVGString = Brand.refined(isValidSVG, () => Brand.error('SVG data is malformed'));
3
+ export class BrandValidationError extends Data.TaggedError('BrandValidationError') {
4
+ constructor(error, type) {
5
+ super(new Error(`Brand validation failed for type ${type}.`, { cause: error }));
6
+ }
7
+ }
8
+ export const createValidSVGString = (svg) => Effect.try({
9
+ try: () => SVGString(svg),
10
+ catch: error => new BrandValidationError(error, 'SVGString'),
11
+ });
12
+ function isValidSVG(svg) {
13
+ if (typeof svg !== 'string') {
14
+ return false;
15
+ }
16
+ try {
17
+ const parser = new DOMParser();
18
+ const doc = parser.parseFromString(svg, 'image/svg+xml');
19
+ return doc.documentElement.nodeName === 'svg';
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
@@ -0,0 +1,53 @@
1
+ /* LmvzComponents custom elements */
2
+ export { LmvzAction as LmvzAction } from '../types/components/lmvz-action/lmvz-action';
3
+ export { defineCustomElement as defineCustomElementLmvzAction } from './lmvz-action';
4
+ export { LmvzButton as LmvzButton } from '../types/components/lmvz-button/lmvz-button';
5
+ export { defineCustomElement as defineCustomElementLmvzButton } from './lmvz-button';
6
+ export { LmvzCard as LmvzCard } from '../types/components/lmvz-card/lmvz-card';
7
+ export { defineCustomElement as defineCustomElementLmvzCard } from './lmvz-card';
8
+ export { LmvzChip as LmvzChip } from '../types/components/lmvz-chip/lmvz-chip';
9
+ export { defineCustomElement as defineCustomElementLmvzChip } from './lmvz-chip';
10
+ export { LmvzHeader as LmvzHeader } from '../types/components/lmvz-header/lmvz-header';
11
+ export { defineCustomElement as defineCustomElementLmvzHeader } from './lmvz-header';
12
+ export { LmvzIcon as LmvzIcon } from '../types/components/lmvz-icon/lmvz-icon';
13
+ export { defineCustomElement as defineCustomElementLmvzIcon } from './lmvz-icon';
14
+ export { LmvzInput as LmvzInput } from '../types/components/lmvz-input/lmvz-input';
15
+ export { defineCustomElement as defineCustomElementLmvzInput } from './lmvz-input';
16
+ export { LmvzMenuItem as LmvzMenuitem } from '../types/components/lmvz-menuitem/lmvz-menuitem';
17
+ export { defineCustomElement as defineCustomElementLmvzMenuitem } from './lmvz-menuitem';
18
+
19
+ /**
20
+ * Get the base path to where the assets can be found. Use "setAssetPath(path)"
21
+ * if the path needs to be customized.
22
+ */
23
+ export declare const getAssetPath: (path: string) => string;
24
+
25
+ /**
26
+ * Used to manually set the base path where assets can be found.
27
+ * If the script is used as "module", it's recommended to use "import.meta.url",
28
+ * such as "setAssetPath(import.meta.url)". Other options include
29
+ * "setAssetPath(document.currentScript.src)", or using a bundler's replace plugin to
30
+ * dynamically set the path at build time, such as "setAssetPath(process.env.ASSET_PATH)".
31
+ * But do note that this configuration depends on how your script is bundled, or lack of
32
+ * bundling, and where your assets can be loaded from. Additionally custom bundling
33
+ * will have to ensure the static assets are copied to its build directory.
34
+ */
35
+ export declare const setAssetPath: (path: string) => void;
36
+
37
+ /**
38
+ * Used to specify a nonce value that corresponds with an application's CSP.
39
+ * When set, the nonce will be added to all dynamically created script and style tags at runtime.
40
+ * Alternatively, the nonce value can be set on a meta tag in the DOM head
41
+ * (<meta name="csp-nonce" content="{ nonce value here }" />) which
42
+ * will result in the same behavior.
43
+ */
44
+ export declare const setNonce: (nonce: string) => void
45
+
46
+ export interface SetPlatformOptions {
47
+ raf?: (c: FrameRequestCallback) => number;
48
+ ael?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
49
+ rel?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
50
+ }
51
+ export declare const setPlatformOptions: (opts: SetPlatformOptions) => void;
52
+
53
+ export * from '../types';