@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.
- package/dist/cjs/app-globals-V2Kpy_OQ.js +3 -0
- package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -0
- package/dist/cjs/{assets-BnJmIx_h.js → assets-XY-cBmal.js} +5 -2
- package/dist/cjs/assets-XY-cBmal.js.map +1 -0
- package/dist/cjs/header-integration_7.cjs.entry.js +1024 -0
- package/dist/cjs/header-integration_7.cjs.entry.js.map +1 -0
- package/dist/cjs/{Effect-CpZhfb0D.js → icons-BOM23oli.js} +1010 -236
- package/dist/cjs/icons-BOM23oli.js.map +1 -0
- package/dist/cjs/{index-9ZJx0550.js → index-B1Puzu82.js} +11 -651
- package/dist/cjs/index-B1Puzu82.js.map +1 -0
- package/dist/cjs/{index-QRnWYctw.js → index-ww_DCXU7.js} +431 -426
- package/dist/cjs/index-ww_DCXU7.js.map +1 -0
- package/dist/cjs/index.cjs.js +13 -12
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/lmvz-action.cjs.entry.js +5 -2
- package/dist/cjs/lmvz-action.cjs.entry.js.map +1 -0
- package/dist/cjs/lmvz-card.cjs.entry.js +7 -4
- package/dist/cjs/lmvz-card.cjs.entry.js.map +1 -0
- package/dist/cjs/lmvz-chip.cjs.entry.js +5 -2
- package/dist/cjs/lmvz-chip.cjs.entry.js.map +1 -0
- package/dist/cjs/lmvz-components.cjs.js +6 -3
- package/dist/cjs/lmvz-components.cjs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +5 -2
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/collection/api/ds.constants.js +1 -0
- package/dist/collection/api/ds.constants.js.map +1 -0
- package/dist/collection/api/index.js +1 -0
- package/dist/collection/api/index.js.map +1 -0
- package/dist/collection/collection-manifest.json +2 -1
- package/dist/collection/components/lmvz-action/lmvz-action.js +2 -1
- package/dist/collection/components/lmvz-action/lmvz-action.js.map +1 -0
- package/dist/collection/components/lmvz-button/lmvz-button.css +4 -0
- package/dist/collection/components/lmvz-button/lmvz-button.js +3 -2
- package/dist/collection/components/lmvz-button/lmvz-button.js.map +1 -0
- package/dist/collection/components/lmvz-card/lmvz-card.css +4 -0
- package/dist/collection/components/lmvz-card/lmvz-card.js +4 -3
- package/dist/collection/components/lmvz-card/lmvz-card.js.map +1 -0
- package/dist/collection/components/lmvz-chip/lmvz-chip.js +3 -2
- package/dist/collection/components/lmvz-chip/lmvz-chip.js.map +1 -0
- package/dist/collection/components/lmvz-header/lmvz-header.js +17 -10
- package/dist/collection/components/lmvz-header/lmvz-header.js.map +1 -0
- package/dist/collection/components/lmvz-icon/icons.js +1 -0
- package/dist/collection/components/lmvz-icon/icons.js.map +1 -0
- package/dist/collection/components/lmvz-icon/lmvz-icon.js +8 -7
- package/dist/collection/components/lmvz-icon/lmvz-icon.js.map +1 -0
- package/dist/collection/components/lmvz-icon/public.js +1 -0
- package/dist/collection/components/lmvz-icon/public.js.map +1 -0
- package/dist/collection/components/lmvz-icon/test/icons.unit.js +1 -0
- package/dist/collection/components/lmvz-icon/test/icons.unit.js.map +1 -0
- package/dist/collection/components/lmvz-input/lmvz-input.js +35 -28
- package/dist/collection/components/lmvz-input/lmvz-input.js.map +1 -0
- package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.js +5 -2
- package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.js.map +1 -0
- package/dist/collection/components/lmvz-select/lmvz-select.css +197 -0
- package/dist/collection/components/lmvz-select/lmvz-select.js +224 -0
- package/dist/collection/components/lmvz-select/lmvz-select.js.map +1 -0
- package/dist/collection/index.js +1 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/collection/integration/header-integration.js +5 -4
- package/dist/collection/integration/header-integration.js.map +1 -0
- package/dist/collection/utils/aria/aria-validation-controller.js +1 -0
- package/dist/collection/utils/aria/aria-validation-controller.js.map +1 -0
- package/dist/collection/utils/aria/element-activation-controller.js +1 -0
- package/dist/collection/utils/aria/element-activation-controller.js.map +1 -0
- package/dist/collection/utils/aria/list-keyboard-controller.js +7 -4
- package/dist/collection/utils/aria/list-keyboard-controller.js.map +1 -0
- package/dist/collection/utils/assets.js +1 -0
- package/dist/collection/utils/assets.js.map +1 -0
- package/dist/collection/utils/component.js +7 -4
- package/dist/collection/utils/component.js.map +1 -0
- package/dist/collection/utils/effect.js +1 -0
- package/dist/collection/utils/effect.js.map +1 -0
- package/dist/collection/utils/environment.js +1 -0
- package/dist/collection/utils/environment.js.map +1 -0
- package/dist/collection/utils/http.js +1 -0
- package/dist/collection/utils/http.js.map +1 -0
- package/dist/collection/utils/http.unit.js +1 -0
- package/dist/collection/utils/http.unit.js.map +1 -0
- package/dist/collection/utils/public.js +1 -0
- package/dist/collection/utils/public.js.map +1 -0
- package/dist/collection/utils/reactive-controller-host.js +1 -0
- package/dist/collection/utils/reactive-controller-host.js.map +1 -0
- package/dist/collection/utils/validation/svg.js +1 -0
- package/dist/collection/utils/validation/svg.js.map +1 -0
- package/dist/components/header-integration.d.ts +11 -0
- package/dist/components/header-integration.js +2 -0
- package/dist/components/header-integration.js.map +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +2 -1
- package/dist/components/index.js.map +1 -0
- package/dist/components/lmvz-action.js +2 -1
- package/dist/components/lmvz-action.js.map +1 -0
- package/dist/components/lmvz-button.js +2 -1
- package/dist/components/lmvz-button.js.map +1 -0
- package/dist/components/lmvz-card.js +2 -1
- package/dist/components/lmvz-card.js.map +1 -0
- package/dist/components/lmvz-chip.js +2 -1
- package/dist/components/lmvz-chip.js.map +1 -0
- package/dist/components/lmvz-header.js +2 -1
- package/dist/components/lmvz-header.js.map +1 -0
- package/dist/components/lmvz-icon.js +2 -1
- package/dist/components/lmvz-icon.js.map +1 -0
- package/dist/components/lmvz-input.js +2 -1
- package/dist/components/lmvz-input.js.map +1 -0
- package/dist/components/lmvz-menuitem.js +2 -1
- package/dist/components/lmvz-menuitem.js.map +1 -0
- package/dist/components/lmvz-select.d.ts +11 -0
- package/dist/components/lmvz-select.js +2 -0
- package/dist/components/lmvz-select.js.map +1 -0
- package/dist/components/p-B2g3aN-E.js +2 -0
- package/dist/components/p-B2g3aN-E.js.map +1 -0
- package/dist/components/p-BXdOuZTp.js +2 -0
- package/dist/components/p-BXdOuZTp.js.map +1 -0
- package/dist/components/p-BfTCfPZ1.js +3 -2
- package/dist/components/p-BfTCfPZ1.js.map +1 -0
- package/dist/components/p-BpCjj39Z.js +2 -0
- package/dist/components/p-BpCjj39Z.js.map +1 -0
- package/dist/components/p-BsHYIl56.js +2 -0
- package/dist/components/p-BsHYIl56.js.map +1 -0
- package/dist/components/p-C5rqq3bf.js +2 -0
- package/dist/components/p-C5rqq3bf.js.map +1 -0
- package/dist/components/p-CI0tffvo.js +2 -0
- package/dist/components/p-CI0tffvo.js.map +1 -0
- package/dist/components/p-CN0JX9-m.js +2 -1
- package/dist/components/p-CN0JX9-m.js.map +1 -0
- package/dist/components/p-ClmDNIy4.js +2 -0
- package/dist/components/p-ClmDNIy4.js.map +1 -0
- package/dist/components/p-DQEkWkMh.js +2 -0
- package/dist/components/p-DQEkWkMh.js.map +1 -0
- package/dist/components/p-X5fEFT9T.js +2 -0
- package/dist/components/p-X5fEFT9T.js.map +1 -0
- package/dist/components/p-vIq2biqy.js +13 -0
- package/dist/components/p-vIq2biqy.js.map +1 -0
- package/dist/esm/app-globals-DQuL1Twl.js +3 -0
- package/dist/esm/app-globals-DQuL1Twl.js.map +1 -0
- package/dist/esm/{assets-CvV1KMMV.js → assets-BD98wsl7.js} +4 -1
- package/dist/esm/assets-BD98wsl7.js.map +1 -0
- package/dist/esm/header-integration_7.entry.js +1016 -0
- package/dist/esm/header-integration_7.entry.js.map +1 -0
- package/dist/esm/{Effect-DyamyJqO.js → icons-D1lxdRXP.js} +975 -174
- package/dist/esm/icons-D1lxdRXP.js.map +1 -0
- package/dist/esm/{index-CekEw3_K.js → index-DoNkkDv1.js} +6 -1
- package/dist/esm/index-DoNkkDv1.js.map +1 -0
- package/dist/esm/{index-smGPjoDX.js → index-WeqgWisK.js} +11 -651
- package/dist/esm/index-WeqgWisK.js.map +1 -0
- package/dist/esm/index.js +7 -5
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lmvz-action.entry.js +5 -2
- package/dist/esm/lmvz-action.entry.js.map +1 -0
- package/dist/esm/lmvz-card.entry.js +7 -4
- package/dist/esm/lmvz-card.entry.js.map +1 -0
- package/dist/esm/lmvz-chip.entry.js +5 -2
- package/dist/esm/lmvz-chip.entry.js.map +1 -0
- package/dist/esm/lmvz-components.js +7 -4
- package/dist/esm/lmvz-components.js.map +1 -0
- package/dist/esm/loader.js +6 -3
- package/dist/esm/loader.js.map +1 -0
- package/dist/ext-libs.d.ts +1 -0
- package/dist/lmvz-components/index.esm.js +2 -1
- package/dist/lmvz-components/index.esm.js.map +1 -0
- package/dist/lmvz-components/lmvz-components.esm.js +2 -1
- package/dist/lmvz-components/lmvz-components.esm.js.map +1 -0
- package/dist/lmvz-components/p-33485219.entry.js +2 -0
- package/dist/lmvz-components/p-33485219.entry.js.map +1 -0
- package/dist/lmvz-components/p-76032c32.entry.js +2 -0
- package/dist/lmvz-components/p-76032c32.entry.js.map +1 -0
- package/dist/lmvz-components/p-7aeec9a8.entry.js +7 -0
- package/dist/lmvz-components/p-7aeec9a8.entry.js.map +1 -0
- package/dist/lmvz-components/p-84e0a9dd.entry.js +2 -0
- package/dist/lmvz-components/p-84e0a9dd.entry.js.map +1 -0
- package/dist/lmvz-components/p-CkJb8WVZ.js +2 -0
- package/dist/lmvz-components/p-CkJb8WVZ.js.map +1 -0
- package/dist/lmvz-components/p-DQuL1Twl.js +2 -1
- package/dist/lmvz-components/p-DQuL1Twl.js.map +1 -0
- package/dist/lmvz-components/p-WeqgWisK.js +3 -0
- package/dist/lmvz-components/p-WeqgWisK.js.map +1 -0
- package/dist/lmvz-components/p-Z9X0_ik0.js +2 -0
- package/dist/lmvz-components/p-Z9X0_ik0.js.map +1 -0
- package/dist/lmvz-components/p-eP0oxQ44.js +13 -0
- package/dist/lmvz-components/p-eP0oxQ44.js.map +1 -0
- package/dist/manifest.json +392 -68
- package/dist/stencil.config.base.js +45 -0
- package/dist/stencil.config.base.js.map +1 -0
- package/dist/stencil.config.dev.js +22 -0
- package/dist/stencil.config.dev.js.map +1 -0
- package/dist/stencil.config.integration.js +27 -0
- package/dist/stencil.config.integration.js.map +1 -0
- package/dist/stencil.config.js +16 -0
- package/dist/stencil.config.js.map +1 -0
- package/dist/stencil.config.prod.js +30 -0
- package/dist/stencil.config.prod.js.map +1 -0
- package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.base.d.ts +2 -0
- package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.d.ts +2 -0
- package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.dev.d.ts +2 -0
- package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.integration.d.ts +2 -0
- package/dist/types/Users/patrick.nemenz/workspace/lmvz/lmvz-ds/packages/components/.stencil/stencil.config.prod.d.ts +2 -0
- package/dist/types/components/lmvz-action/lmvz-action.d.ts +1 -1
- package/dist/types/components/lmvz-button/lmvz-button.d.ts +2 -2
- package/dist/types/components/lmvz-card/lmvz-card.d.ts +1 -1
- package/dist/types/components/lmvz-header/lmvz-header.d.ts +4 -4
- package/dist/types/components/lmvz-icon/lmvz-icon.d.ts +4 -4
- package/dist/types/components/lmvz-input/lmvz-input.d.ts +4 -4
- package/dist/types/components/lmvz-menuitem/lmvz-menuitem.d.ts +3 -3
- package/dist/types/components/lmvz-select/lmvz-select.d.ts +24 -0
- package/dist/types/components.d.ts +173 -3
- package/dist/types/index.d.ts +1 -1
- package/dist/types/integration/header-integration.d.ts +5 -0
- package/dist/types/utils/aria/aria-validation-controller.d.ts +1 -1
- package/dist/types/utils/aria/element-activation-controller.d.ts +1 -1
- package/dist/types/utils/component.d.ts +2 -2
- package/dist/types/utils/http.d.ts +3 -3
- package/dist/types/utils/validation/svg.d.ts +1 -1
- package/hydrate/index.js +998 -436
- package/hydrate/index.mjs +998 -436
- package/package.json +37 -73
- package/readme.md +2 -2
- package/dist/cjs/aria-loader-BBKbBZLq.js +0 -76
- package/dist/cjs/component-CRc6eHcV.js +0 -138
- package/dist/cjs/element-activation-controller-DC_6T0Rt.js +0 -31
- package/dist/cjs/icons-Brr4vqiE.js +0 -653
- package/dist/cjs/index-Bp6Dd2i1.js +0 -94
- package/dist/cjs/lmvz-button.cjs.entry.js +0 -73
- package/dist/cjs/lmvz-header.cjs.entry.js +0 -142
- package/dist/cjs/lmvz-icon.cjs.entry.js +0 -87
- package/dist/cjs/lmvz-input.cjs.entry.js +0 -177
- package/dist/cjs/lmvz-menuitem.cjs.entry.js +0 -34
- package/dist/cjs/reactive-controller-host-DWpVosFu.js +0 -189
- package/dist/collection/utils/typing.js +0 -1
- package/dist/components/p-B3JVFwO1.js +0 -1
- package/dist/components/p-BaPwpeMs.js +0 -1
- package/dist/components/p-CSRpdnrt.js +0 -1
- package/dist/components/p-DK2hpvEW.js +0 -12
- package/dist/components/p-DcMNH3fv.js +0 -1
- package/dist/components/p-DugBvwmd.js +0 -1
- package/dist/esm/aria-loader-DB71Xewa.js +0 -69
- package/dist/esm/component-B3JVFwO1.js +0 -132
- package/dist/esm/element-activation-controller-CN0JX9-m.js +0 -29
- package/dist/esm/icons-C69Um2xB.js +0 -649
- package/dist/esm/index-BfTCfPZ1.js +0 -92
- package/dist/esm/lmvz-button.entry.js +0 -71
- package/dist/esm/lmvz-header.entry.js +0 -140
- package/dist/esm/lmvz-icon.entry.js +0 -85
- package/dist/esm/lmvz-input.entry.js +0 -175
- package/dist/esm/lmvz-menuitem.entry.js +0 -32
- package/dist/esm/reactive-controller-host-1nFoJEdT.js +0 -186
- package/dist/lmvz-components/p-0e5aa1a3.entry.js +0 -1
- package/dist/lmvz-components/p-18c18de4.entry.js +0 -1
- package/dist/lmvz-components/p-5775a56c.entry.js +0 -1
- package/dist/lmvz-components/p-814ee542.entry.js +0 -1
- package/dist/lmvz-components/p-9faac8f3.entry.js +0 -1
- package/dist/lmvz-components/p-B3JVFwO1.js +0 -1
- package/dist/lmvz-components/p-B3j8zrhV.js +0 -1
- package/dist/lmvz-components/p-BEoSvNlI.js +0 -1
- package/dist/lmvz-components/p-BTpia82J.js +0 -1
- package/dist/lmvz-components/p-BfTCfPZ1.js +0 -6
- package/dist/lmvz-components/p-CN0JX9-m.js +0 -1
- package/dist/lmvz-components/p-D7GrtdQF.js +0 -1
- package/dist/lmvz-components/p-DyamyJqO.js +0 -1
- package/dist/lmvz-components/p-c61f7daa.entry.js +0 -1
- package/dist/lmvz-components/p-c6bae21b.entry.js +0 -1
- package/dist/lmvz-components/p-cM67HC0Z.js +0 -12
- package/dist/lmvz-components/p-d4b68381.entry.js +0 -1
- package/dist/lmvz-components/p-smGPjoDX.js +0 -2
- package/dist/types/utils/typing.d.ts +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"header-integration_7.cjs.entry.js","mappings":"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","names":["h","Host","isAriaValidationEnabled","Build","useVerboseLogging","ARIA_VALIDATION_RUNTIME_CHANGED_EVENT","queueValidation","logo","Effect.runPromise","fetchIconSvg","Effect.tapError","Effect.logError","Effect.catchAll","Effect.succeed","emptyDefaultSvg"],"sources":["src/integration/header-integration.tsx","../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","src/utils/aria/aria-validation-controller.ts","src/utils/aria/element-activation-controller.ts","src/utils/component.ts","src/utils/reactive-controller-host.ts","src/components/lmvz-button/lmvz-button.css?tag=lmvz-button&encapsulation=shadow","src/components/lmvz-button/lmvz-button.tsx","src/assets/icons/Logo.svg","src/utils/aria/list-keyboard-controller.ts","src/components/lmvz-header/lmvz-header.css?tag=lmvz-header&encapsulation=shadow","src/components/lmvz-header/lmvz-header.tsx","src/components/lmvz-icon/lmvz-icon.css?tag=lmvz-icon&encapsulation=scoped","src/components/lmvz-icon/lmvz-icon.tsx","src/components/lmvz-input/lmvz-input.css?tag=lmvz-input&encapsulation=scoped","src/components/lmvz-input/lmvz-input.tsx","src/components/lmvz-menuitem/lmvz-menuitem.css?tag=lmvz-menuitem&encapsulation=scoped","src/components/lmvz-menuitem/lmvz-menuitem.tsx","src/assets/icons/chevron-down.svg","src/components/lmvz-select/lmvz-select.css?tag=lmvz-select&encapsulation=scoped","src/components/lmvz-select/lmvz-select.tsx"],"sourcesContent":["import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'header-integration',\n styles: `\n .active button {\n background-color: var(--lmvz-semantic-color-status-selected);\n }\n `,\n shadow: true,\n})\nexport class HeaderIntegration {\n @Prop({ mutable: true }) activeNav?: string;\n\n private activate(event: CustomEvent<void>) {\n const target = event.currentTarget as HTMLLmvzButtonElement;\n const navItem = target.closest('[slot=\"nav-primary\"]') as HTMLElement | null;\n if (!navItem) return;\n\n const navId = navItem.id;\n if (!navId) {\n console.warn('Nav item does not have an id:', navItem);\n return;\n }\n\n console.log('Activating nav item:', navId);\n this.activeNav = navId;\n }\n\n render() {\n return (\n <Host>\n <lmvz-header lmvzActiveNav={this.activeNav}>\n {/* <lmvz-icon icon=\"Logo\" slot=\"brand\" aria-hidden></lmvz-icon> */}\n <lmvz-menuitem slot=\"nav-primary\" id=\"lehrmittel\" onLmvzActivation={this.activate.bind(this)}>\n <a href=\"#\">Lehrmittel</a>\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"nav-primary\" id=\"verwaltung\" onLmvzActivation={this.activate.bind(this)}>\n <a href=\"#\">Verwaltung</a>\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-lehrmittel\">\n <lmvz-icon icon=\"book\"></lmvz-icon>Deutsch 7\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-lehrmittel\">\n <lmvz-icon icon=\"book\"></lmvz-icon>Mathe 2\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-verwaltung\">\n <lmvz-icon icon=\"cog\"></lmvz-icon>iwas mit Verwaltung\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-verwaltung\" aria-label=\"Einstellungen\">\n <lmvz-icon icon=\"cog\"></lmvz-icon>\n </lmvz-menuitem>\n\n <lmvz-button slot=\"actions\" aria-label=\"Benutzerkonto\">\n <lmvz-icon icon=\"user\"></lmvz-icon>\n </lmvz-button>\n </lmvz-header>\n </Host>\n );\n }\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","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 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","/**\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","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","@import '~@lmvz-ds/lib-styles/define-layers.css';\n\n@import '~@lmvz-ds/lib-styles/fragments/_routerFont.css' layer(lmvz-ds.theme);\n@import '~@lmvz-ds/lib-styles/fragments/_reset.css' layer(lmvz-ds.reset);\n\n:host {\n /* * the (invalid nested) import will be handled by postcss */\n /* stylelint-disable-next-line no-invalid-position-at-import-rule */\n @import '~@lmvz-ds/lib-styles/fragments/_buttons.css';\n\n display: contents;\n}\n\n::slotted(*) {\n --lmvz-component-color: var(--lmvz-button-color);\n}\n","import { Component, Element, Event, Host, Prop, h, type EventEmitter } from '@stencil/core';\nimport classNames from 'classnames';\nimport type { Button } from '../../api';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ElementActivationController, type ElementActivationHost } from '../../utils/aria/element-activation-controller';\nimport { findFormByRef, inheritAriaAttributes, type Attributes, type FormRef } from '../../utils/component';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\n\n/**\n * @slot default - Slot for the content of the button\n */\n@Component({\n tag: 'lmvz-button',\n styleUrl: './lmvz-button.css',\n shadow: { delegatesFocus: true },\n})\nexport class LmvzButton extends ReactiveControllerHost implements AriaValidationHost, ElementActivationHost {\n @Element() el!: HTMLLmvzButtonElement;\n\n validationEl: HTMLButtonElement | undefined;\n\n private inheritedAttributes: Attributes = {};\n private formEl: HTMLFormElement | null = null;\n private formButtonEl: HTMLButtonElement | null = null;\n\n /**\n * Event emitted when the button is activated, either by a click or by pressing \"Enter\" when the button is focused.\n */\n @Event() lmvzActivation!: EventEmitter<void>;\n\n @Prop({ reflect: true, attribute: 'tabindex' }) get ti() {\n return 0;\n }\n\n /**\n * Scale of the button\n * @default 'default'\n */\n @Prop({ reflect: true }) scale: Button.Scale = 'default';\n\n /**\n * Variant of the button\n * @default 'secondary', since the primary button should be marked as such in context\n */\n @Prop({ reflect: true }) variant: Button.Variant = 'secondary';\n\n /**\n * Whether the button is disabled\n * @default false\n */\n @Prop({ reflect: true }) disabled = false;\n\n @Prop() type: 'submit' | 'button' = 'button';\n\n /**\n * The HTML form element or form element id. Used to submit a form when the button is not a child of the form.\n */\n @Prop() form?: FormRef;\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this));\n this.addController(\n new ElementActivationController(this, {\n localHandler: this.handleClick.bind(this),\n keys: ['Enter'],\n }),\n );\n }\n\n override connectedCallback() {\n this.inheritedAttributes = inheritAriaAttributes(this.el);\n super.connectedCallback();\n }\n\n /**\n * This renders a hidden native button element inside the associated form.\n * This allows users to submit a form by pressing \"Enter\" when a text\n * field inside of the form is focused, even though our native button is in the Shadow DOM.\n */\n private renderHiddenButton() {\n const formEl = (this.formEl = findFormByRef(this.form, this.el));\n if (!formEl) return;\n\n const { formButtonEl } = this;\n\n // append only once\n if (formButtonEl !== null && formEl.contains(formButtonEl)) return;\n\n const newFormButtonEl = (this.formButtonEl = document.createElement('button'));\n newFormButtonEl.type = 'submit';\n newFormButtonEl.style.display = 'none';\n newFormButtonEl.disabled = this.disabled;\n\n formEl.appendChild(newFormButtonEl);\n }\n\n private submitForm(ev: Event) {\n if (this.formEl && this.formButtonEl) {\n ev.preventDefault();\n this.formButtonEl.click();\n }\n }\n\n private handleClick = (ev: Event) => {\n if (this.type === 'submit') {\n this.submitForm(ev);\n }\n };\n\n render() {\n this.renderHiddenButton();\n\n return (\n <Host aria-disabled={this.disabled ? 'true' : null}>\n <button\n ref={(e) => (this.validationEl = e)}\n disabled={this.disabled}\n class={classNames(this.variant, { [this.scale ?? '']: !!this.scale, disabled: this.disabled })}\n {...this.inheritedAttributes}\n >\n <slot></slot>\n </button>\n </Host>\n );\n }\n}\n","<svg width=\"46\" height=\"72\" viewBox=\"0 0 46 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g clip-path=\"url(#clip0_272_405)\">\n<path d=\"M12.5 20.65C13.1 20.65 14.2 20.35 14.7 20.35C16.1 20.35 17.2 21.45 17.2 22.85C17.2 24.25 16.1 25.35 14.7 25.35H2.8C1.2 25.35 0 24.15 0 22.55C0 21.95 0.2 20.65 0.2 20.05V5.84999C0.2 5.14999 0 3.94999 0 3.34999C0 1.74999 1.2 0.549988 2.8 0.549988C4.3 0.549988 5.6 1.74999 5.6 3.34999C5.6 3.94999 5.4 5.14999 5.4 5.84999V20.55H12.5V20.65ZM22.1 22.75C22.1 22.15 22.3 20.95 22.3 20.25V5.84999C22.3 5.14999 22.1 3.94999 22.1 3.44999C22.1 1.94999 23.2 0.749988 24.6 0.749988H25.2C26.4 0.749988 27.2 1.54999 27.6 2.64999L28 3.44999L32.9 14.05C33.3 14.95 33.7 16.05 34 16.75C34.3 16.05 34.7 14.95 35.1 14.05L40 3.54999L40.3 2.54999C40.7 1.54999 41.5 0.649988 42.6 0.649988H43.2C44.7 0.649988 45.7 1.84999 45.7 3.34999C45.7 3.94999 45.5 5.14999 45.5 5.74999V20.15C45.5 20.85 45.7 22.05 45.7 22.65C45.7 24.25 44.5 25.45 43 25.45C41.4 25.45 40.3 24.25 40.3 22.65C40.3 21.95 40.4 20.75 40.4 20.15L40.6 14.05C40.6 13.15 40.7 11.75 40.7 10.65L37 19.05C36.7 19.75 36.6 19.95 36.4 20.35C36 21.25 35.3 21.85 33.9 21.85C32.5 21.85 31.8 21.25 31.4 20.45C31.2 20.05 31.2 19.75 30.8 19.05L27 10.75C27 10.75 27.1 13.15 27.2 14.05L27.4 20.15C27.4 20.85 27.5 21.95 27.5 22.65C27.5 24.25 26.4 25.45 24.8 25.45C23.3 25.55 22.1 24.25 22.1 22.75ZM28.7 32.95C29.1 32.95 30.2 33.15 30.7 33.15H41.8C42.3 33.15 43.2 32.95 43.7 32.95C44.9 32.95 45.8 33.85 45.8 35.05C45.8 36.15 44.9 37.15 43.7 37.15C43.3 37.15 42.3 36.95 41.8 36.95H30.8C30.3 36.95 29.2 37.15 28.8 37.15C27.6 37.15 26.7 36.25 26.7 35.05C26.6 33.95 27.5 32.95 28.7 32.95ZM2.1 67.25C2.5 67.25 3.6 67.45 4.1 67.45H18.5C19 67.45 19.9 67.25 20.4 67.25C21.6 67.25 22.5 68.15 22.5 69.35C22.5 70.45 21.6 71.45 20.4 71.45C20 71.45 19 71.25 18.5 71.25H4.1C3.6 71.25 2.5 71.45 2.1 71.45C0.9 71.45 0 70.55 0 69.35C0 68.25 0.9 67.25 2.1 67.25ZM21.9 35.65C21.9 35.95 21.8 36.35 21.6 36.75C21.3 37.45 20.9 38.35 20.7 38.85L14.7 54.65C14.5 55.05 14.4 55.55 14.2 56.35C13.8 57.65 12.6 58.25 11.2 58.25H10.8C9.4 58.25 8.2 57.75 7.8 56.35C7.6 55.55 7.4 55.15 7.2 54.65L1.2 38.85C1 38.35 0.6 37.55 0.2 36.85C0.1 36.45 0 35.95 0 35.65C0 34.15 1.2 32.85 2.8 32.85C3.9 32.85 5 33.55 5.3 34.75C5.5 35.55 5.5 36.15 6 37.55L10.2 49.45C10.5 50.35 10.9 51.45 11.1 52.35C11.3 51.45 11.6 50.45 11.9 49.55L16 37.55C16.5 36.05 16.4 35.65 16.7 34.85C17.1 33.65 18.1 32.85 19.3 32.85C20.9 32.85 21.9 34.15 21.9 35.65ZM29.7 71.45C28.2 71.45 27.2 70.45 27.2 69.15C27.2 68.75 27.2 68.25 27.8 67.45L37.4 53.45C37.9 52.75 38.5 52.05 39.1 51.35H32.2C31.5 51.35 30.7 51.65 30.1 51.65C28.7 51.65 27.6 50.75 27.6 49.35C27.6 47.95 28.7 46.95 30.1 46.95H42.7C44.2 46.95 45.2 47.85 45.2 49.25C45.2 49.65 45 50.35 44.5 51.05L35.2 64.85C34.7 65.65 34.1 66.45 33.5 67.05H41.1C41.9 67.05 42.7 66.75 43.3 66.75C44.7 66.75 45.7 67.75 45.7 69.05C45.7 70.55 44.5 71.55 43.2 71.55H29.7V71.45Z\" fill=\"black\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_272_405\">\n<rect width=\"46\" height=\"72\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n","import { canReceiveFocus, getDeepActiveElement } from '../component';\nimport type { ReactiveController } from '../reactive-controller-host';\n\nexport type ListKeyboardNavigationHost = {\n el: HTMLElement;\n};\n\n// type Config = {};\n\nexport class ListKeyboardNavigationController implements ReactiveController {\n private elements: Element[] = [];\n\n constructor(\n private readonly host: ListKeyboardNavigationHost,\n // private readonly config?: Config,\n ) {}\n\n hostDidRender() {\n this.host.el.addEventListener('keydown', this.handleKeydown);\n }\n\n updateElements(elements: Element[]) {\n this.elements = elements;\n }\n\n private handleKeydown = (event: KeyboardEvent) => {\n const { key } = event;\n if (!['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft'].includes(key)) return;\n\n const activeElement = getDeepActiveElement(document);\n const nextElement = this.getNextFocusableElement(activeElement, ['ArrowDown', 'ArrowRight'].includes(key) ? 'down' : 'up');\n if (nextElement) {\n event.preventDefault();\n (nextElement as HTMLElement).focus?.();\n }\n };\n\n private getNextFocusableElement(current: Element | undefined | null, direction: 'down' | 'up'): Element | undefined {\n if (!current) return undefined;\n const { elements } = this;\n const currentIndex = elements.indexOf(current);\n if (currentIndex === -1) return undefined;\n\n let nextIndex: number | undefined = undefined;\n if (direction === 'down') {\n nextIndex = (currentIndex + 1) % elements.length;\n } else if (direction === 'up') {\n nextIndex = (currentIndex - 1 + elements.length) % elements.length;\n }\n\n if (nextIndex == undefined) return undefined;\n\n const candidate = elements[nextIndex];\n if (!canReceiveFocus(candidate)) return this.getNextFocusableElement(candidate, direction);\n\n return candidate;\n }\n}\n",":host {\n display: flex;\n /* TODO: why does it overflow on smaller screens? */\n width: 100vw;\n flex-direction: row;\n align-items: center;\n box-sizing: border-box;\n\n background-color: var(--lmvz-semantic-color-surface-primary);\n\n --lmvz-header-x-spacing-level-1: var(--lmvz-dimension-8-28);\n --lmvz-header-x-spacing-level-2: var(--lmvz-component-buttongroup-wrapper-gap-x);\n\n padding: var(--lmvz-dimension-8-16) var(--lmvz-header-x-spacing-level-1);\n gap: var(--lmvz-header-x-spacing-level-1);\n\n .brand {\n /* min-width: var(--lmvz-dimension-48-96); */\n display: inline-flex;\n justify-content: center;\n align-items: center;\n }\n\n #fallback-logo-lmvz {\n height: 34px;\n width: auto;\n }\n\n nav {\n flex-grow: 1;\n }\n\n .primary-menubar {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n .secondary-menubar {\n display: flex;\n flex-direction: row;\n align-items: center;\n /* gap: var(--lmvz-component-buttongroup-wrapper-gap-x); */\n margin-left: var(--lmvz-header-x-spacing-level-2);\n padding-left: var(--lmvz-header-x-spacing-level-2);\n border-left: 1px solid var(--lmvz-semantic-color-border-default);\n }\n}\n","import { Component, Element, h, Host, Prop, Watch } from '@stencil/core';\nimport logo from '../../assets/icons/Logo.svg';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ListKeyboardNavigationController, type ListKeyboardNavigationHost } from '../../utils/aria/list-keyboard-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\n\n/**\n * An accessible, application-style navigation header component, that renders two connected levels of navigation.\n *\n * @slot brand - The branding area, typically containing a logo and/or site title.\n *\n * @slot nav-primary - The first level of the navigation.\n * This is required and must only contain <lmvz-menuitem> elements.\n * Each menuitem should have an id, which will be used to link it to the corresponding secondary nav items.\n *\n * @slot connect-nav-`lmvzActiveNav` - The second level of the navigation. This is optional and must also contain <lmvz-menuitem> elements.\n * Only if the secondary nav items' `slot=\"${name}\"` matches \"connect-nav-`lmvzActiveNav`\"\n * (including lmvzActiveNav from the component's props),\n * then these secondary items will be displayed in the second level navigation.\n *\n * @slot actions - An optional slot for actions, such as user profile, settings, logout, etc. This content is aligned to the right side of the header.\n */\n@Component({\n tag: 'lmvz-header',\n styleUrl: './lmvz-header.css',\n shadow: true,\n})\nexport class LmvzHeader extends ReactiveControllerHost implements AriaValidationHost, ListKeyboardNavigationHost {\n @Element() readonly el!: HTMLElement;\n get validationEl() {\n return this.el;\n }\n\n private primarySlot?: HTMLSlotElement;\n private secondarySlot?: HTMLSlotElement;\n private secondaryNav?: HTMLElement;\n\n private keyboardNavigationController = new ListKeyboardNavigationController(this);\n\n private get primaryMenuitems() {\n return this.primarySlot?.assignedElements({ flatten: false }) || [];\n }\n\n private get secondaryMenuitems() {\n return this.secondarySlot?.assignedElements({ flatten: true }) || [];\n }\n\n @Prop({ reflect: true }) get role() {\n return 'banner';\n }\n\n @Prop() lmvzActiveNav?: string;\n\n get secondarySlotName() {\n return `connect-nav-${this.lmvzActiveNav}`;\n }\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this, { reValidateOnPropChanges: true }));\n this.addController(this.keyboardNavigationController);\n }\n\n @Watch('lmvzActiveNav')\n handleActiveNavChange() {\n this.updateElementsActive();\n }\n\n override componentDidLoad() {\n this.primarySlot?.addEventListener('slotchange', this.handlePrimaryNavItemsChange.bind(this));\n this.handlePrimaryNavItemsChange(); // initial check for already assigned elements\n this.secondarySlot?.addEventListener('slotchange', this.handleSecondaryNavItemsChange.bind(this));\n super.componentDidLoad();\n }\n\n private handlePrimaryNavItemsChange() {\n const items = this.primaryMenuitems;\n if (!items.length) {\n console.warn('Primary slot has no assigned elements. Please add navigation items to the primary slot.');\n return;\n }\n\n items.forEach((el) => {\n el.setAttribute('aria-haspopup', 'true');\n el.setAttribute('aria-controls', `nav-secondary`);\n });\n this.updateElementsActive();\n this.updateKeyboardNavSubjects();\n }\n\n private handleSecondaryNavItemsChange() {\n const items = this.secondaryMenuitems;\n if (!items.length) {\n // It's valid to have no secondary items for a given primary item, so we just return early without warning\n return;\n }\n this.updateKeyboardNavSubjects();\n }\n\n private updateKeyboardNavSubjects() {\n this.keyboardNavigationController.updateElements([...this.primaryMenuitems, ...this.secondaryMenuitems]);\n }\n\n private updateElementsActive() {\n const items = this.primaryMenuitems;\n if (!items.length) return;\n\n let label = '';\n items.forEach((el) => {\n const isActive = el.id === this.lmvzActiveNav;\n if (isActive) label = el.textContent || el.id;\n el.setAttribute('aria-expanded', isActive ? 'true' : 'false');\n });\n if (!label) return;\n\n this.secondaryNav?.setAttribute('aria-label', `Untermenü für ${label}`);\n }\n\n private delegateFocus() {\n // If the header itself receives focus, delegate it to the first focusable element in the primary nav\n const firstFocusable = this.primaryMenuitems[0] as HTMLElement | undefined;\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n\n render() {\n return (\n <Host onFocus={this.delegateFocus.bind(this)}>\n <div class=\"brand\">\n <slot name=\"brand\">\n <img id=\"fallback-logo-lmvz\" src={logo} alt=\"Lehrmittelverlag Zürich\" />\n </slot>\n {/* brand image, title, etc. */}\n </div>\n\n <nav aria-label=\"Hauptnavigation\">\n <div role=\"menubar\" class=\"primary-menubar\">\n <slot name=\"nav-primary\" ref={(el) => (this.primarySlot = el)}></slot>\n\n <div role=\"menu\" id=\"nav-secondary\" class=\"secondary-menubar\" hidden={!this.lmvzActiveNav} ref={(el) => (this.secondaryNav = el)}>\n <slot name={this.secondarySlotName} ref={(el) => (this.secondarySlot = el)}></slot>\n </div>\n </div>\n </nav>\n\n <div class=\"actions\">\n <slot name=\"actions\"></slot>\n {/* user avatar, name, settings, etc. */}\n </div>\n </Host>\n );\n }\n}\n",":host {\n /**\n * @prop --lmvz-icon-color: The icon's color. This is inferred from the context (e.g. button) but can be overridden if needed, or when the icon is used standalone.\n */\n --lmvz-icon-color: var(--lmvz-component-color, var(--lmvz-semantic-color-on-surface-input-primary));\n\n display: inline-block;\n\n /* prevent additional whitespace */\n line-height: 0;\n\n svg {\n display: block;\n }\n\n svg > path {\n stroke: var(--lmvz-icon-color);\n fill: none;\n }\n}\n\n:host([size='xs']) {\n svg {\n width: var(--lmvz-component-icon-size-xs);\n height: var(--lmvz-component-icon-size-xs);\n }\n}\n:host([size='sm']) {\n svg {\n width: var(--lmvz-component-icon-size-sm);\n height: var(--lmvz-component-icon-size-sm);\n }\n}\n:host([size='md']) {\n svg {\n width: var(--lmvz-component-icon-size-md);\n height: var(--lmvz-component-icon-size-md);\n }\n}\n:host([size='lg']) {\n svg {\n width: var(--lmvz-component-icon-size-lg);\n height: var(--lmvz-component-icon-size-lg);\n }\n}\n:host([size='inherit']) {\n svg {\n width: inherit;\n height: inherit;\n }\n}\n\n:host([weight='light']) {\n svg > path {\n stroke-width: 1;\n }\n}\n:host([weight='medium']) {\n svg > path {\n /* TODO: use semantic token */\n stroke-width: 1.5;\n }\n}\n:host([weight='bold']) {\n svg > path {\n /* TODO: use semantic token */\n stroke-width: 2;\n }\n}\n:host([weight='filled']) {\n svg > path {\n stroke-width: 2;\n fill: var(--lmvz-icon-color);\n }\n}\n","import { Build, Component, Element, h, Host, Prop, State, Watch } from '@stencil/core';\nimport { Effect } from 'effect';\nimport type { Icon } from '../../api';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\nimport { emptyDefaultSvg, fetchIconSvg, type IconData } from './icons';\n\n/**\n * `lmvz-icon` is a web component that lazy-loads and displays an SVG icon from our predefined icon set.\n * It uses an IntersectionObserver to defer loading the icon until it becomes visible in the viewport. Once loaded, icon data is cached across instances.\n */\n@Component({\n tag: 'lmvz-icon',\n styleUrl: 'lmvz-icon.css',\n scoped: true,\n assetsDirs: ['../../assets/icons'],\n})\nexport class LmvzIcon extends ReactiveControllerHost implements AriaValidationHost {\n private intersectionObserver?: IntersectionObserver;\n private readonly ariaValidationController = new AriaValidationController(this);\n\n @Element() el!: HTMLElement;\n validationEl: HTMLElement | undefined;\n\n /**\n * The name of the icon to display (required).\n */\n @Prop({ reflect: true }) icon!: Icon.IconName;\n\n /**\n * The weight/style of the icon (optional, default is 'medium').\n */\n @Prop({ reflect: true }) weight?: Icon.IconWeight = 'medium';\n\n /**\n * The size of the icon (optional, default is 'md').\n */\n @Prop({ reflect: true }) size?: Icon.Size = 'md';\n\n @State() private iconData?: IconData;\n @State() private visible = false;\n\n @Prop({ reflect: true }) ariaLabel?: string;\n\n private get ariaHidden() {\n return !this.ariaLabel;\n }\n\n constructor() {\n super();\n this.addController(this.ariaValidationController);\n }\n\n override connectedCallback() {\n this.waitUntilVisible(() => {\n this.visible = true;\n this.loadIconPathData();\n });\n super.connectedCallback();\n }\n\n override disconnectedCallback() {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = undefined;\n }\n super.disconnectedCallback();\n }\n\n @Watch('icon')\n private async loadIconPathData() {\n const { icon, visible } = this;\n\n if (!Build.isBrowser || !icon || !visible) {\n return;\n }\n this.iconData = await Effect.runPromise(\n fetchIconSvg(this.icon).pipe(\n Effect.tapError((error) => Effect.logError(`Error loading icon \"${icon}\":`, error.message, error.cause, error.stack)),\n Effect.catchAll(() => Effect.succeed(emptyDefaultSvg())),\n ),\n );\n }\n\n override componentDidRender() {\n this.validationEl = this.el.querySelector('svg') as unknown as HTMLElement;\n this.ariaValidationController.revalidateAria();\n super.componentDidRender();\n }\n\n render() {\n return <Host role=\"img\" aria-hidden={`${this.ariaHidden}`} innerHTML={this.iconData}></Host>;\n }\n\n private waitUntilVisible(callback: () => unknown, rootMargin = 50) {\n if (!Build.isBrowser || typeof window === 'undefined' || !window.IntersectionObserver) {\n callback();\n return;\n }\n\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.some((entry) => {\n if (entry.isIntersecting) {\n this.intersectionObserver?.disconnect();\n this.intersectionObserver = undefined;\n callback();\n return true;\n }\n return false;\n });\n },\n { rootMargin: `${rootMargin}px` },\n );\n\n this.intersectionObserver.observe(this.el);\n }\n}\n","@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: block;\n font-family: var(--lmvz-global-font-family-default);\n /* Component Variables Mapping */\n --input-radius: var(--lmvz-component-input-radius-default);\n --input-bg: var(--lmvz-semantic-color-surface-input-primary);\n --input-border-color: var(--lmvz-semantic-color-border-default);\n --input-border-color-hover: var(--lmvz-semantic-color-border-hover);\n --input-border-color-focus: var(--lmvz-semantic-color-status-on-selected);\n --input-border-width: var(--lmvz-semantic-border-width-default);\n --input-height: 48px; /* From Figma input-size=48 */\n --input-padding-x: 16px;\n\n --label-color: var(--lmvz-semantic-color-on-surface-input-secondary);\n --input-text-color: var(--lmvz-semantic-color-on-surface-input-primary);\n --helper-text-color: var(--lmvz-semantic-color-on-surface-input-secondary);\n --error-text-color: var(--lmvz-semantic-color-status-on-danger);\n\n --label-floating-scale: 0.85; /* 14px -> 12px approx */\n --label-minimized-top: -6px;\n --label-minimized-bg: var(--input-bg);\n --label-minimized-padding-x: 4px;\n\n /* Disabled state uses opacity token */\n --input-disabled-opacity: var(--lmvz-component-input-disabled-opacity);\n}\n\n.input-container {\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n}\n\n.input-wrapper {\n background-color: var(--input-bg);\n border: var(--input-border-width) solid var(--input-border-color);\n border-radius: var(--input-radius);\n display: flex;\n align-items: center;\n height: var(--input-height);\n padding: 0 var(--input-padding-x);\n position: relative;\n transition: border-color 0.2s ease;\n gap: 8px; /* input-gap-x */\n}\n\n:host([disabled]) .input-wrapper {\n opacity: var(--input-disabled-opacity);\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.input-container:focus-within .input-wrapper {\n border-color: var(--input-border-color-focus);\n outline: 2px solid var(--input-border-color-focus);\n outline-offset: 2px;\n}\n\n/* Enhanced focus indicator for keyboard users */\n.input-container:has(input:focus-visible) .input-wrapper {\n box-shadow: 0 0 0 3px rgb(0 86 214 / 20%);\n}\n\n/* Error State */\n:host([error]) .input-wrapper {\n border-color: var(--error-text-color);\n}\n\n:host([error]):focus-within .input-wrapper {\n border-color: var(--error-text-color);\n outline-color: var(--error-text-color);\n}\n\n/* Hover State - Use CSS pseudo-selector instead of class */\n:host(:not([disabled])) .input-wrapper:hover {\n border-color: var(--input-border-color-hover);\n}\n\n.label-input-group {\n position: relative;\n flex-grow: 1;\n display: flex;\n align-items: center;\n height: 100%;\n}\n\nlabel {\n position: absolute;\n left: 0;\n top: 50%;\n transform: translateY(-50%);\n color: var(--label-color);\n font-size: 14px; /* body-md size from Figma */\n font-family: Router, sans-serif;\n font-weight: 400;\n pointer-events: none;\n transition: all 0.2s ease-out;\n background-color: transparent;\n padding: 0;\n margin: 0;\n line-height: normal;\n white-space: nowrap;\n}\n\nlabel.floating {\n top: 0; /* Align to top border area */\n transform: translateY(-50%) scale(0.85); /* Scale down */\n transform-origin: left top;\n background-color: var(--label-minimized-bg);\n padding: 0 var(--label-minimized-padding-x);\n left: -2px; /* Adjust for padding/border visual alignment */\n color: var(--input-text-color); /* Darker when floating */\n font-weight: 500; /* Medium weight when minimized */\n}\n\n.required-indicator {\n color: var(--error-text-color);\n margin-left: 2px;\n}\n\ninput {\n border: none;\n background: transparent;\n width: 100%;\n height: 100%;\n color: var(--input-text-color);\n font-family: inherit;\n font-size: 14px;\n outline: none;\n padding: 0;\n margin: 0;\n font-weight: 400; /* Regular weight */\n}\n\ninput::placeholder {\n color: var(--label-color);\n}\n\ndiv:empty {\n display: none;\n}\n\n[role='status'] {\n padding-top: 8px; /* space-gap-component-input-helper-text */\n padding-left: 12px; /* input-md-padding-x for helper text indent */\n font-size: 12px;\n color: var(--helper-text-color);\n font-family: Router, sans-serif;\n font-weight: 500; /* Medium weight */\n}\n\n[role='alert'] {\n padding-top: 8px;\n padding-left: 12px;\n font-size: 12px;\n color: var(--error-text-color);\n font-family: Router, sans-serif;\n font-weight: 500;\n}\n\n::slotted(lmvz-button) {\n /* Minimize padding for (icon) buttons due to height constraints */\n --lmvz-button-padding: 4px;\n}\n","import { AttachInternals, Component, Element, Event, type EventEmitter, h, Method, Prop, State, Watch } from '@stencil/core';\nimport classNames from 'classnames';\nimport type { Input } from '../../api';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { componentOnReady } from '../../utils/component';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\n\nlet inputIdCounter = 0;\n\n/**\n * Input component with floating label, (form) validation, and slotted content support.\n *\n * @example\n * ```html\n * <lmvz-input\n * label=\"Email\"\n * type=\"email\"\n * required\n * autocomplete=\"email\"\n * helper-text=\"We'll never share your email\"\n * ></lmvz-input>\n * ```\n *\n * @example\n * ```typescript\n * const input = document.querySelector('lmvz-input');\n * input.addEventListener('input', (e) => console.log(e.target.value));\n * await input.focus();\n * ```\n *\n * @slot before-input - Content to the left of the input. If interactive (e.g., clear button), use an lmvz-button element.\n * Example: <lmvz-button slot=\"before-input\" aria-label=\"Clear input\" tabindex=\"0\"><lmvz-icon icon=\"close-sm\"></lmvz-icon></lmvz-button>\n * @slot after-input - Content to the right of the input. If interactive (e.g., password toggle), use an lmvz-button element.\n * Example: <lmvz-button slot=\"after-input\" aria-label=\"Toggle password visibility\" tabindex=\"0\"><lmvz-icon icon=\"eye\"></lmvz-icon></lmvz-button>\n */\n@Component({\n tag: 'lmvz-input',\n styleUrl: './lmvz-input.css',\n scoped: true,\n formAssociated: true,\n})\nexport class LmvzInput extends ReactiveControllerHost implements AriaValidationHost {\n @Element() readonly el!: HTMLElement;\n get validationEl() {\n return this.el;\n }\n @Event() lmvzInput!: EventEmitter<string>;\n\n @AttachInternals() internals!: ElementInternals;\n\n private nativeInputElement?: HTMLInputElement;\n private inputId = `lmvz-input-${inputIdCounter++}`;\n private initialValue = '';\n\n /**\n * Internal state tracking native validation\n */\n @State() private nativeError = false;\n\n /**\n * Track if error was manually set via prop\n */\n private errorFromProp = false;\n\n private get helperId(): string | undefined {\n return this.helperText ? `${this.inputId}-helper` : undefined;\n }\n\n private get showErrorMessage() {\n return this.error && Boolean(this.errorMessage);\n }\n\n private get errorId(): string {\n return `${this.inputId}-error`;\n }\n\n /**\n * reactively updated via depedency of `error`\n */\n private get describedBy(): string | undefined {\n const ids: string[] = [];\n if (this.helperId) ids.push(this.helperId);\n if (this.showErrorMessage) ids.push(this.errorId);\n return ids.length > 0 ? ids.join(' ') : undefined;\n }\n\n /**\n * * PUBLIC API\n */\n\n /**\n * Value of the input\n */\n @Prop({ mutable: true }) value?: string;\n\n /**\n * Label text for the input\n */\n @Prop() label!: string;\n\n /**\n * Helper text displayed below the input\n */\n @Prop() helperText?: string;\n\n /**\n * Placeholder text\n */\n @Prop() placeholder?: string;\n\n /**\n * Whether the input is disabled\n * @default false\n */\n @Prop({ reflect: true }) disabled = false;\n\n /**\n * Whether the input is readonly\n * @default false\n */\n @Prop({ reflect: true }) readonly = false;\n\n /**\n * Whether the input is required\n * @default false\n */\n @Prop({ reflect: true }) required = false;\n\n /**\n * Name attribute for the input\n */\n @Prop() name?: string;\n\n /**\n * Type of the input\n * @default 'text'\n */\n @Prop() type: Input.Type = 'text';\n\n /**\n * Error message to display when error is true\n */\n @Prop() errorMessage?: string;\n\n /**\n * Autocomplete attribute for form autofill\n */\n @Prop() autocomplete?: Input.Autocomplete;\n\n /**\n * Input mode for mobile keyboards\n */\n @Prop() inputmode?: Input.Inputmode;\n\n /**\n * Autocorrect attribute for mobile keyboards\n * @default undefined\n */\n @Prop() autocorrect?: 'on' | 'off';\n\n /**\n * Autocapitalize attribute for mobile keyboards\n * @default undefined\n */\n @Prop() autocapitalize?: Input.Autocapitalize;\n\n /**\n * Spellcheck attribute\n * @default undefined\n */\n @Prop() spellcheck?: boolean;\n\n /**\n * Whether the input should autofocus\n * @default false\n */\n @Prop() autofocus = false;\n\n /**\n * Minimum length for text inputs\n */\n @Prop() minlength?: number;\n\n /**\n * Maximum length for text inputs\n */\n @Prop() maxlength?: number;\n\n /**\n * Validation pattern (regex)\n */\n @Prop() pattern?: string;\n\n /**\n * Minimum value for number/date inputs\n */\n @Prop() min?: number | string;\n\n /**\n * Maximum value for number/date inputs\n */\n @Prop() max?: number | string;\n\n /**\n * Step interval for number inputs\n */\n @Prop() step?: number | string;\n\n /**\n * Form id to associate with\n */\n @Prop() form?: string;\n\n /**\n * Whether the input is in an error state\n * When not set manually, this will automatically reflect native HTML5 validation state\n * @default false\n */\n @Prop({ reflect: true })\n get error(): boolean {\n return this.errorFromProp || this.nativeError;\n }\n set error(value: boolean) {\n this.errorFromProp = value;\n }\n\n @Method()\n async setValue(newValue: string | undefined) {\n const input = this.nativeInputElement;\n const val = newValue ?? '';\n\n if (input) {\n input.value = val;\n }\n this.value = val;\n this.internals.setFormValue?.(val); // undefined in stencil test environment\n this.lmvzInput.emit(val);\n }\n\n /**\n * Sets focus on the input\n */\n @Method()\n async focusInput() {\n this.nativeInputElement?.focus();\n }\n\n /**\n * Removes focus from the input\n */\n @Method()\n async blurInput() {\n this.nativeInputElement?.blur();\n }\n\n /**\n * Selects the text in the input\n */\n @Method()\n async select() {\n this.nativeInputElement?.select();\n }\n\n /**\n * Returns whether the input satisfies its validation constraints\n */\n @Method()\n async checkValidity(): Promise<boolean> {\n return this.nativeInputElement?.checkValidity?.() ?? false;\n }\n\n /**\n * Reports validation errors to the user\n */\n @Method()\n async reportValidity(): Promise<boolean> {\n return this.nativeInputElement?.reportValidity?.() ?? false;\n }\n\n /**\n * Returns the native HTMLInputElement.\n *\n * Promise resolves when the element is ready and the input is available. If the input is not yet rendered, it waits for the component to be ready.\n */\n @Method()\n async getInputElement(): Promise<HTMLInputElement | undefined> {\n if (!this.nativeInputElement) {\n await new Promise((resolve) => componentOnReady(this.el, resolve));\n }\n return Promise.resolve(this.nativeInputElement);\n }\n\n /**\n * * Lifecycle & Reactivity\n */\n\n constructor() {\n super();\n this.addController(\n new AriaValidationController(this, {\n reValidateOnPropChanges: true,\n }),\n );\n }\n\n override componentWillLoad() {\n this.initialValue = this.value ?? '';\n super.componentWillLoad();\n }\n\n formAssociatedCallback(form: HTMLFormElement | undefined) {\n if (!form) return;\n this.internals.setFormValue?.(this.value ?? ''); // undefined in stencil test environment\n }\n\n formResetCallback() {\n this.internals.setValidity({});\n this.setValue(this.initialValue);\n }\n\n formStateRestoreCallback(state: string) {\n this.setValue(state);\n }\n\n @Watch('value')\n protected handleValueChange(newValue: string | undefined) {\n if (!this.nativeInputElement) return;\n\n const isInternalChange = this.nativeInputElement.value === newValue;\n if (isInternalChange) return;\n\n this.setValue(newValue);\n }\n\n @Watch('disabled')\n protected handleDisabledChange(disabled: boolean) {\n if (disabled && this.nativeInputElement) {\n this.nativeInputElement.blur();\n }\n }\n\n /**\n * Fires whenever the input changes\n */\n private handleInput = (event: InputEvent) => {\n const input = event.target as HTMLInputElement;\n\n this.setValue(input.value);\n };\n\n /**\n * Fires when value changes and input loses focus.\n */\n private handleChange = (event: Event) => {\n const input = (event.target as HTMLInputElement) ?? this.nativeInputElement;\n this.updateNativeError(input);\n };\n\n private handleFocus = () => {};\n\n /**\n * Fires when the input loses focus\n */\n private handleBlur = (event: FocusEvent) => {\n const input = event.target as HTMLInputElement;\n input.reportValidity?.();\n };\n\n /**\n * Updates the nativeError state based on the validity of the input.\n * validity may not exist in test environments\n */\n private updateNativeError(fromEvent?: HTMLInputElement) {\n const input = fromEvent ?? this.nativeInputElement;\n if (!input) return;\n this.nativeError = !(input.checkValidity?.() ?? true);\n }\n\n render() {\n const hasValue = Boolean(this.value);\n const shouldFloatLabel = hasValue || Boolean(this.placeholder);\n\n return (\n <div\n class={classNames('input-container', {\n 'interaction-filled': hasValue,\n })}\n >\n <div class=\"input-wrapper\">\n <slot name=\"before-input\"></slot>\n\n <div class=\"label-input-group\">\n <label htmlFor={this.inputId} class={classNames({ floating: shouldFloatLabel })}>\n {this.label}\n {this.required && (\n <span class=\"required-indicator\" aria-hidden=\"true\">\n {' '}\n *\n </span>\n )}\n </label>\n <input\n id={this.inputId}\n ref={(el) => (this.nativeInputElement = el)}\n type={this.type}\n min={this.min}\n max={this.max}\n step={this.step}\n value={this.value}\n name={this.name}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readOnly={this.readonly}\n required={this.required}\n form={this.form}\n autocomplete={this.autocomplete}\n inputmode={this.inputmode}\n autocorrect={this.autocorrect}\n autocapitalize={this.autocapitalize}\n spellcheck={this.spellcheck}\n autofocus={this.autofocus}\n minlength={this.minlength}\n maxlength={this.maxlength}\n pattern={this.pattern}\n aria-invalid={this.error ? 'true' : 'false'}\n aria-required={this.required ? 'true' : 'false'}\n aria-describedby={this.describedBy}\n aria-errormessage={this.errorId}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n </div>\n\n <slot name=\"after-input\"></slot>\n </div>\n\n <div id={this.helperId} role=\"status\">\n {this.helperText || null}\n </div>\n\n <div id={this.errorId} role=\"alert\">\n {(this.showErrorMessage && this.errorMessage) || null}\n </div>\n </div>\n );\n }\n}\n","@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","<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M20.3334 8.66663L12.0001 17L3.66675 8.66663\" stroke=\"black\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>\n","@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: block;\n font-family: var(--lmvz-global-font-family-default);\n /* Extra top space to accommodate the floating label */\n\n --lmvz-internal-select-floating-label-top-offset: 0.375rem;\n\n padding-top: var(--lmvz-internal-select-floating-label-top-offset);\n\n /* Component variable mapping */\n --lmvz-select-radius: var(--lmvz-component-input-radius-default);\n --lmvz-select-bg: var(--lmvz-semantic-color-int-secondary);\n --lmvz-select-bg-hover: var(--lmvz-semantic-color-int-secondary-hover);\n --lmvz-select-text-color: var(--lmvz-semantic-color-int-on-secondary);\n --lmvz-select-label-color: var(--lmvz-semantic-color-on-surface-input-primary);\n --lmvz-select-padding-x: var(--lmvz-component-input-md-padding-x);\n --lmvz-select-gap: var(--lmvz-component-input-md-gap-x);\n --lmvz-select-height: 40px;\n --lmvz-select-label-font-size: var(--lmvz-component-component-typography-body-sm-font-size);\n --lmvz-select-label-top-offset: calc(var(--lmvz-internal-select-floating-label-top-offset) * -1);\n --lmvz-select-label-minimized-padding-x: 4px;\n --lmvz-select-disabled-opacity: var(--lmvz-component-input-disabled-opacity);\n --lmvz-select-helper-color: var(--lmvz-semantic-color-on-surface-input-secondary);\n --lmvz-select-focus-color: var(--lmvz-semantic-color-status-on-selected);\n --lmvz-select-error-color: var(--lmvz-semantic-color-status-on-danger);\n}\n\n.select-wrapper {\n position: relative;\n height: var(--lmvz-select-height);\n}\n\n/* Floating label – positioned above the trigger when a value is selected */\nlabel {\n position: absolute;\n top: 50%;\n left: var(--lmvz-select-padding-x);\n font-size: var(--lmvz-select-label-font-size);\n color: var(--lmvz-select-label-color);\n line-height: normal;\n white-space: nowrap;\n pointer-events: none;\n z-index: 2;\n transform: translateY(-50%);\n transform-origin: left top;\n transition:\n top 0.2s ease-out,\n transform 0.2s ease-out,\n opacity 0.2s ease-out,\n padding 0.2s ease-out;\n}\n\nlabel.assistive-label {\n opacity: 0;\n padding: 0;\n}\n\nlabel.floating-label {\n top: var(--lmvz-select-label-top-offset);\n transform: translateY(0) scale(0.85);\n left: calc(var(--lmvz-select-padding-x) - 2px);\n background-color: var(--lmvz-select-bg);\n padding: 0 var(--lmvz-select-label-minimized-padding-x);\n opacity: 1;\n font-weight: 500;\n}\n\nlabel > span[aria-hidden='true'],\ndiv[aria-hidden='true'] > span:first-child > span[aria-hidden='true'] {\n color: var(--lmvz-select-error-color);\n margin-left: 2px;\n display: inline-block;\n line-height: 0;\n vertical-align: middle;\n}\n\n/* Visual pill trigger */\ndiv[aria-hidden] {\n display: flex;\n align-items: center;\n gap: var(--lmvz-select-gap);\n height: 100%;\n padding: 0 var(--lmvz-select-padding-x);\n border-radius: var(--lmvz-select-radius);\n background-color: var(--lmvz-select-bg);\n cursor: pointer;\n position: relative;\n z-index: 1;\n transition: background-color 0.15s ease;\n}\n\n:host(:not([disabled])) .select-wrapper:hover div[aria-hidden] {\n background-color: var(--lmvz-select-bg-hover);\n}\n\n.select-wrapper:focus-within div[aria-hidden] {\n outline: 2px solid var(--lmvz-select-focus-color);\n outline-offset: 2px;\n}\n\ndiv[aria-hidden] > span:first-child {\n flex: 1 0 0;\n font-size: var(--lmvz-component-component-typography-body-md-font-size);\n font-weight: var(--lmvz-global-font-weight-500);\n color: var(--lmvz-select-text-color);\n line-height: 1.4;\n letter-spacing: var(--lmvz-component-body-md-letter-spacing);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\ndiv[aria-hidden] > span:last-child {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\nimg {\n display: block;\n width: var(--lmvz-component-icon-size-xs);\n height: var(--lmvz-component-icon-size-xs);\n}\n\n/* Native select – absolutely covers the trigger, invisible, intercepts clicks */\nselect {\n appearance: none;\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n cursor: pointer;\n z-index: 2;\n border: none;\n background: transparent;\n margin: 0;\n padding: 0;\n}\n\n:host([disabled]) .select-wrapper {\n opacity: var(--lmvz-select-disabled-opacity);\n pointer-events: none;\n cursor: not-allowed;\n}\n\n[role='status'] {\n margin-top: 4px;\n padding-left: var(--lmvz-select-padding-x);\n font-size: var(--lmvz-select-label-font-size);\n color: var(--lmvz-select-helper-color);\n line-height: normal;\n}\n","import { Component, Element, Event, type EventEmitter, h, Host, Prop, State, Watch } from '@stencil/core';\nimport chevronDownSvg from '../../assets/icons/chevron-down.svg';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\n\nlet selectIdCounter = 0;\n\n/**\n * Select component with floating label and pill-shaped trigger.\n * Wraps a native `<select>` element for full keyboard and form support.\n *\n * @example\n * ```html\n * <lmvz-select label=\"Country\" name=\"country\">\n * <option value=\"ch\">Switzerland</option>\n * <option value=\"de\">Germany</option>\n * <option value=\"at\">Austria</option>\n * </lmvz-select>\n * ```\n *\n * @example\n * ```typescript\n * const select = document.querySelector('lmvz-select');\n * select.addEventListener('lmvzChange', (e) => console.log(e.detail));\n * ```\n *\n * @slot default - Native `<option>` or `<optgroup>` elements.\n */\n@Component({\n tag: 'lmvz-select',\n styleUrl: './lmvz-select.css',\n scoped: true,\n})\nexport class LmvzSelect extends ReactiveControllerHost implements AriaValidationHost {\n @Element() readonly el!: HTMLElement;\n get validationEl() {\n return this.el;\n }\n\n private selectId = `lmvz-select-${selectIdCounter++}`;\n private nativeSelectEl?: HTMLSelectElement;\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this));\n }\n\n /**\n * Emitted when the user selects a new option. Detail contains the new value.\n */\n @Event() lmvzChange!: EventEmitter<string>;\n\n /**\n * Currently selected value.\n */\n @Prop({ mutable: true }) value?: string;\n\n /**\n * Label text displayed as a placeholder when no value is selected,\n * and floated above the trigger when a value is present.\n */\n @Prop() label!: string;\n\n /**\n * Helper text displayed below the select field.\n */\n @Prop() helperText?: string;\n\n /**\n * Whether the select is disabled.\n * @default false\n */\n @Prop({ reflect: true }) disabled = false;\n\n /**\n * Whether a value is required.\n * @default false\n */\n @Prop({ reflect: true }) required = false;\n\n /**\n * Name attribute passed to the native select for form submission.\n */\n @Prop() name?: string;\n\n @State() private selectedLabel = '';\n\n private get hasValue() {\n return Boolean(this.value);\n }\n\n override componentDidLoad() {\n this.syncSelectedLabel();\n super.componentDidLoad();\n }\n\n @Watch('value')\n protected handleValueChange(newValue: string | undefined) {\n if (this.nativeSelectEl && this.nativeSelectEl.value !== (newValue ?? '')) {\n this.nativeSelectEl.value = newValue ?? '';\n }\n this.syncSelectedLabel();\n }\n\n private syncSelectedLabel() {\n if (!this.nativeSelectEl) return;\n const idx = this.nativeSelectEl.selectedIndex;\n this.selectedLabel = idx >= 0 ? (this.nativeSelectEl.options[idx]?.text ?? '') : '';\n }\n\n private handleChange = (event: Event) => {\n const select = event.target as HTMLSelectElement;\n this.value = select.value;\n this.syncSelectedLabel();\n this.lmvzChange.emit(select.value);\n };\n\n render() {\n const hasValue = this.hasValue;\n const shouldShowLabel = hasValue;\n\n return (\n <Host>\n <div class=\"select-wrapper\">\n <label htmlFor={this.selectId} class={shouldShowLabel ? 'floating-label' : 'assistive-label'}>\n {this.label}\n {this.required && shouldShowLabel && <span aria-hidden=\"true\"> *</span>}\n </label>\n\n <div aria-hidden=\"true\">\n <span>\n {hasValue ? this.selectedLabel : this.label}\n {this.required && !hasValue && <span aria-hidden=\"true\"> *</span>}\n </span>\n <span>\n <img src={chevronDownSvg} alt=\"\" />\n </span>\n </div>\n\n <select\n id={this.selectId}\n ref={(el) => (this.nativeSelectEl = el)}\n name={this.name}\n disabled={this.disabled}\n required={this.required}\n aria-label={this.label}\n onChange={this.handleChange}\n >\n {!hasValue && <option value=\"\" disabled selected hidden></option>}\n <slot />\n </select>\n </div>\n\n {this.helperText && <div role=\"status\">{this.helperText}</div>}\n </Host>\n );\n }\n}\n"],"version":3}
|