@lmvz-ds/components 0.14.1 → 0.15.2

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 (70) hide show
  1. package/dist/cjs/{aria-loader-BBKbBZLq.js → aria-loader-B7b45RMv.js} +13 -3
  2. package/dist/cjs/index.cjs.js +1 -1
  3. package/dist/cjs/lmvz-button_3.cjs.entry.js +399 -0
  4. package/dist/cjs/lmvz-card.cjs.entry.js +1 -1
  5. package/dist/cjs/lmvz-components.cjs.js +1 -1
  6. package/dist/cjs/lmvz-header.cjs.entry.js +6 -4
  7. package/dist/cjs/lmvz-icon.cjs.entry.js +2 -2
  8. package/dist/cjs/lmvz-menuitem.cjs.entry.js +2 -2
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/{reactive-controller-host-DWpVosFu.js → reactive-controller-host-Ai9l4S9S.js} +1 -1
  11. package/dist/collection/collection-manifest.json +1 -0
  12. package/dist/collection/components/lmvz-button/lmvz-button.css +4 -0
  13. package/dist/collection/components/lmvz-card/lmvz-card.css +4 -0
  14. package/dist/collection/components/lmvz-header/lmvz-header.js +5 -3
  15. package/dist/collection/components/lmvz-input/lmvz-input.js +5 -3
  16. package/dist/collection/components/lmvz-select/lmvz-select.css +197 -0
  17. package/dist/collection/components/lmvz-select/lmvz-select.js +223 -0
  18. package/dist/collection/integration/header-integration.js +2 -2
  19. package/dist/components/index.d.ts +2 -0
  20. package/dist/components/index.js +1 -1
  21. package/dist/components/lmvz-button.js +1 -1
  22. package/dist/components/lmvz-card.js +1 -1
  23. package/dist/components/lmvz-header.js +1 -1
  24. package/dist/components/lmvz-icon.js +1 -1
  25. package/dist/components/lmvz-input.js +1 -1
  26. package/dist/components/lmvz-menuitem.js +1 -1
  27. package/dist/components/lmvz-select.d.ts +11 -0
  28. package/dist/components/lmvz-select.js +1 -0
  29. package/dist/components/p-DR19QMDG.js +1 -0
  30. package/dist/esm/{aria-loader-DB71Xewa.js → aria-loader-Ddn7Qz_6.js} +13 -3
  31. package/dist/esm/{component-B3JVFwO1.js → component-DpoTUPzl.js} +1 -1
  32. package/dist/esm/index.js +1 -1
  33. package/dist/esm/lmvz-button_3.entry.js +395 -0
  34. package/dist/esm/lmvz-card.entry.js +1 -1
  35. package/dist/esm/lmvz-components.js +1 -1
  36. package/dist/esm/lmvz-header.entry.js +7 -5
  37. package/dist/esm/lmvz-icon.entry.js +2 -2
  38. package/dist/esm/lmvz-menuitem.entry.js +2 -2
  39. package/dist/esm/loader.js +1 -1
  40. package/dist/esm/{reactive-controller-host-1nFoJEdT.js → reactive-controller-host-CdAJ3t-B.js} +1 -1
  41. package/dist/lmvz-components/index.esm.js +1 -1
  42. package/dist/lmvz-components/lmvz-components.esm.js +1 -1
  43. package/dist/lmvz-components/{p-c61f7daa.entry.js → p-70ca3319.entry.js} +1 -1
  44. package/dist/lmvz-components/p-73648317.entry.js +1 -0
  45. package/dist/lmvz-components/{p-5775a56c.entry.js → p-8ed959da.entry.js} +1 -1
  46. package/dist/lmvz-components/p-9526c364.entry.js +1 -0
  47. package/dist/lmvz-components/{p-B3j8zrhV.js → p-B7KSylv_.js} +1 -1
  48. package/dist/lmvz-components/{p-BTpia82J.js → p-D7RHrBYK.js} +1 -1
  49. package/dist/lmvz-components/{p-B3JVFwO1.js → p-DpoTUPzl.js} +1 -1
  50. package/dist/lmvz-components/p-ea1a9d4a.entry.js +6 -0
  51. package/dist/manifest.json +205 -1
  52. package/dist/types/components/lmvz-header/lmvz-header.d.ts +1 -1
  53. package/dist/types/components/lmvz-input/lmvz-input.d.ts +1 -1
  54. package/dist/types/components/lmvz-select/lmvz-select.d.ts +24 -0
  55. package/dist/types/components.d.ts +152 -0
  56. package/hydrate/index.js +105 -10
  57. package/hydrate/index.mjs +105 -10
  58. package/package.json +10 -6
  59. package/dist/cjs/index-Bp6Dd2i1.js +0 -94
  60. package/dist/cjs/lmvz-button.cjs.entry.js +0 -73
  61. package/dist/cjs/lmvz-input.cjs.entry.js +0 -177
  62. package/dist/components/p-DugBvwmd.js +0 -1
  63. package/dist/esm/index-BfTCfPZ1.js +0 -92
  64. package/dist/esm/lmvz-button.entry.js +0 -71
  65. package/dist/esm/lmvz-input.entry.js +0 -175
  66. package/dist/lmvz-components/p-0e5aa1a3.entry.js +0 -1
  67. package/dist/lmvz-components/p-18c18de4.entry.js +0 -1
  68. package/dist/lmvz-components/p-814ee542.entry.js +0 -1
  69. package/dist/lmvz-components/p-BfTCfPZ1.js +0 -6
  70. package/dist/lmvz-components/p-c6bae21b.entry.js +0 -1
@@ -260,6 +260,49 @@ export namespace Components {
260
260
  */
261
261
  "ti": number;
262
262
  }
263
+ /**
264
+ * Select component with floating label and pill-shaped trigger.
265
+ * Wraps a native `<select>` element for full keyboard and form support.
266
+ * @example ```html
267
+ * <lmvz-select label="Country" name="country">
268
+ * <option value="ch">Switzerland</option>
269
+ * <option value="de">Germany</option>
270
+ * <option value="at">Austria</option>
271
+ * </lmvz-select>
272
+ * ```
273
+ * @example ```typescript
274
+ * const select = document.querySelector('lmvz-select');
275
+ * select.addEventListener('lmvzChange', (e) => console.log(e.detail));
276
+ * ```
277
+ */
278
+ interface LmvzSelect {
279
+ /**
280
+ * Whether the select is disabled.
281
+ * @default false
282
+ */
283
+ "disabled": boolean;
284
+ /**
285
+ * Helper text displayed below the select field.
286
+ */
287
+ "helperText"?: string;
288
+ /**
289
+ * Label text displayed as a placeholder when no value is selected, and floated above the trigger when a value is present.
290
+ */
291
+ "label": string;
292
+ /**
293
+ * Name attribute passed to the native select for form submission.
294
+ */
295
+ "name"?: string;
296
+ /**
297
+ * Whether a value is required.
298
+ * @default false
299
+ */
300
+ "required": boolean;
301
+ /**
302
+ * Currently selected value.
303
+ */
304
+ "value"?: string;
305
+ }
263
306
  }
264
307
  export interface LmvzActionCustomEvent<T> extends CustomEvent<T> {
265
308
  detail: T;
@@ -281,6 +324,10 @@ export interface LmvzMenuitemCustomEvent<T> extends CustomEvent<T> {
281
324
  detail: T;
282
325
  target: HTMLLmvzMenuitemElement;
283
326
  }
327
+ export interface LmvzSelectCustomEvent<T> extends CustomEvent<T> {
328
+ detail: T;
329
+ target: HTMLLmvzSelectElement;
330
+ }
284
331
  declare global {
285
332
  interface HTMLLmvzActionElementEventMap {
286
333
  "actionClick": MouseEvent;
@@ -412,6 +459,38 @@ declare global {
412
459
  prototype: HTMLLmvzMenuitemElement;
413
460
  new (): HTMLLmvzMenuitemElement;
414
461
  };
462
+ interface HTMLLmvzSelectElementEventMap {
463
+ "lmvzChange": string;
464
+ }
465
+ /**
466
+ * Select component with floating label and pill-shaped trigger.
467
+ * Wraps a native `<select>` element for full keyboard and form support.
468
+ * @example ```html
469
+ * <lmvz-select label="Country" name="country">
470
+ * <option value="ch">Switzerland</option>
471
+ * <option value="de">Germany</option>
472
+ * <option value="at">Austria</option>
473
+ * </lmvz-select>
474
+ * ```
475
+ * @example ```typescript
476
+ * const select = document.querySelector('lmvz-select');
477
+ * select.addEventListener('lmvzChange', (e) => console.log(e.detail));
478
+ * ```
479
+ */
480
+ interface HTMLLmvzSelectElement extends Components.LmvzSelect, HTMLStencilElement {
481
+ addEventListener<K extends keyof HTMLLmvzSelectElementEventMap>(type: K, listener: (this: HTMLLmvzSelectElement, ev: LmvzSelectCustomEvent<HTMLLmvzSelectElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
482
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
483
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
484
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
485
+ removeEventListener<K extends keyof HTMLLmvzSelectElementEventMap>(type: K, listener: (this: HTMLLmvzSelectElement, ev: LmvzSelectCustomEvent<HTMLLmvzSelectElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
486
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
487
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
488
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
489
+ }
490
+ var HTMLLmvzSelectElement: {
491
+ prototype: HTMLLmvzSelectElement;
492
+ new (): HTMLLmvzSelectElement;
493
+ };
415
494
  interface HTMLElementTagNameMap {
416
495
  "lmvz-action": HTMLLmvzActionElement;
417
496
  "lmvz-button": HTMLLmvzButtonElement;
@@ -421,6 +500,7 @@ declare global {
421
500
  "lmvz-icon": HTMLLmvzIconElement;
422
501
  "lmvz-input": HTMLLmvzInputElement;
423
502
  "lmvz-menuitem": HTMLLmvzMenuitemElement;
503
+ "lmvz-select": HTMLLmvzSelectElement;
424
504
  }
425
505
  }
426
506
  declare namespace LocalJSX {
@@ -665,6 +745,53 @@ declare namespace LocalJSX {
665
745
  */
666
746
  "ti"?: number;
667
747
  }
748
+ /**
749
+ * Select component with floating label and pill-shaped trigger.
750
+ * Wraps a native `<select>` element for full keyboard and form support.
751
+ * @example ```html
752
+ * <lmvz-select label="Country" name="country">
753
+ * <option value="ch">Switzerland</option>
754
+ * <option value="de">Germany</option>
755
+ * <option value="at">Austria</option>
756
+ * </lmvz-select>
757
+ * ```
758
+ * @example ```typescript
759
+ * const select = document.querySelector('lmvz-select');
760
+ * select.addEventListener('lmvzChange', (e) => console.log(e.detail));
761
+ * ```
762
+ */
763
+ interface LmvzSelect {
764
+ /**
765
+ * Whether the select is disabled.
766
+ * @default false
767
+ */
768
+ "disabled"?: boolean;
769
+ /**
770
+ * Helper text displayed below the select field.
771
+ */
772
+ "helperText"?: string;
773
+ /**
774
+ * Label text displayed as a placeholder when no value is selected, and floated above the trigger when a value is present.
775
+ */
776
+ "label": string;
777
+ /**
778
+ * Name attribute passed to the native select for form submission.
779
+ */
780
+ "name"?: string;
781
+ /**
782
+ * Emitted when the user selects a new option. Detail contains the new value.
783
+ */
784
+ "onLmvzChange"?: (event: LmvzSelectCustomEvent<string>) => void;
785
+ /**
786
+ * Whether a value is required.
787
+ * @default false
788
+ */
789
+ "required"?: boolean;
790
+ /**
791
+ * Currently selected value.
792
+ */
793
+ "value"?: string;
794
+ }
668
795
 
669
796
  interface LmvzButtonAttributes {
670
797
  "ti": number;
@@ -723,6 +850,14 @@ declare namespace LocalJSX {
723
850
  "role": string;
724
851
  "ti": number;
725
852
  }
853
+ interface LmvzSelectAttributes {
854
+ "value": string;
855
+ "label": string;
856
+ "helperText": string;
857
+ "disabled": boolean;
858
+ "required": boolean;
859
+ "name": string;
860
+ }
726
861
 
727
862
  interface IntrinsicElements {
728
863
  "lmvz-action": LmvzAction;
@@ -733,6 +868,7 @@ declare namespace LocalJSX {
733
868
  "lmvz-icon": Omit<LmvzIcon, keyof LmvzIconAttributes> & { [K in keyof LmvzIcon & keyof LmvzIconAttributes]?: LmvzIcon[K] } & { [K in keyof LmvzIcon & keyof LmvzIconAttributes as `attr:${K}`]?: LmvzIconAttributes[K] } & { [K in keyof LmvzIcon & keyof LmvzIconAttributes as `prop:${K}`]?: LmvzIcon[K] } & OneOf<"icon", LmvzIcon["icon"], LmvzIconAttributes["icon"]>;
734
869
  "lmvz-input": Omit<LmvzInput, keyof LmvzInputAttributes> & { [K in keyof LmvzInput & keyof LmvzInputAttributes]?: LmvzInput[K] } & { [K in keyof LmvzInput & keyof LmvzInputAttributes as `attr:${K}`]?: LmvzInputAttributes[K] } & { [K in keyof LmvzInput & keyof LmvzInputAttributes as `prop:${K}`]?: LmvzInput[K] } & OneOf<"label", LmvzInput["label"], LmvzInputAttributes["label"]>;
735
870
  "lmvz-menuitem": Omit<LmvzMenuitem, keyof LmvzMenuitemAttributes> & { [K in keyof LmvzMenuitem & keyof LmvzMenuitemAttributes]?: LmvzMenuitem[K] } & { [K in keyof LmvzMenuitem & keyof LmvzMenuitemAttributes as `attr:${K}`]?: LmvzMenuitemAttributes[K] } & { [K in keyof LmvzMenuitem & keyof LmvzMenuitemAttributes as `prop:${K}`]?: LmvzMenuitem[K] };
871
+ "lmvz-select": Omit<LmvzSelect, keyof LmvzSelectAttributes> & { [K in keyof LmvzSelect & keyof LmvzSelectAttributes]?: LmvzSelect[K] } & { [K in keyof LmvzSelect & keyof LmvzSelectAttributes as `attr:${K}`]?: LmvzSelectAttributes[K] } & { [K in keyof LmvzSelect & keyof LmvzSelectAttributes as `prop:${K}`]?: LmvzSelect[K] } & OneOf<"label", LmvzSelect["label"], LmvzSelectAttributes["label"]>;
736
872
  }
737
873
  }
738
874
  export { LocalJSX as JSX };
@@ -774,6 +910,22 @@ declare module "@stencil/core" {
774
910
  * A menu item component to be used within the `lmvz-header` component's navigation slots.
775
911
  */
776
912
  "lmvz-menuitem": LocalJSX.IntrinsicElements["lmvz-menuitem"] & JSXBase.HTMLAttributes<HTMLLmvzMenuitemElement>;
913
+ /**
914
+ * Select component with floating label and pill-shaped trigger.
915
+ * Wraps a native `<select>` element for full keyboard and form support.
916
+ * @example ```html
917
+ * <lmvz-select label="Country" name="country">
918
+ * <option value="ch">Switzerland</option>
919
+ * <option value="de">Germany</option>
920
+ * <option value="at">Austria</option>
921
+ * </lmvz-select>
922
+ * ```
923
+ * @example ```typescript
924
+ * const select = document.querySelector('lmvz-select');
925
+ * select.addEventListener('lmvzChange', (e) => console.log(e.detail));
926
+ * ```
927
+ */
928
+ "lmvz-select": LocalJSX.IntrinsicElements["lmvz-select"] & JSXBase.HTMLAttributes<HTMLLmvzSelectElement>;
777
929
  }
778
930
  }
779
931
  }
package/hydrate/index.js CHANGED
@@ -5235,10 +5235,20 @@ function getRuntimeState() {
5235
5235
  const isAriaValidationEnabled = () => getRuntimeState().enabled;
5236
5236
  const useVerboseLogging = () => getRuntimeState().verboseLogging ?? false;
5237
5237
  function queueValidation(...args) {
5238
- const state = getRuntimeState();
5239
- if (!state.enabled || !state.runtime)
5238
+ const { enabled, runtime, loadPromise } = getRuntimeState();
5239
+ if (!enabled)
5240
5240
  return;
5241
- state.runtime.enqueueValidation(...args);
5241
+ if (!runtime) {
5242
+ if (loadPromise) {
5243
+ loadPromise.then((loadedRuntime) => {
5244
+ if (loadedRuntime) {
5245
+ loadedRuntime.enqueueValidation(...args);
5246
+ }
5247
+ });
5248
+ return;
5249
+ }
5250
+ }
5251
+ runtime.enqueueValidation(...args);
5242
5252
  }
5243
5253
 
5244
5254
  class AriaValidationController {
@@ -5582,7 +5592,7 @@ class ReactiveControllerHost {
5582
5592
  }
5583
5593
  }
5584
5594
 
5585
- const lmvzButtonCss = () => ` @layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'), local('Router'); font-weight: 400 normal; } @font-face { font-family: Router; src: local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'), local('Router'); font-weight: 500; } @font-face { font-family: Router; src: local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'), local('Router'); font-weight: 700 bold; } } @layer lmvz-ds.reset { h1, h2, h3, h4, h5, h6 { margin: 0; } } :host { button { --lmvz-button-color: var(--lmvz-component-color, var(--lmvz-semantic-color-int-on-primary, #ffffff)); --lmvz-button-padding-inline: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-padding-block: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); --lmvz-button-radius: var(--lmvz-component-input-radius-default, 999px); --lmvz-button-border-width: 0; --lmvz-button-border-color: transparent; --lmvz-button-background: var(--lmvz-semantic-color-int-primary, #000000); display: inline-flex; align-items: center; justify-content: center; gap: var(--lmvz-button-gap); padding-block: var(--lmvz-button-padding-block); padding-inline: var(--lmvz-button-padding-inline); border-radius: var(--lmvz-button-radius); border: var(--lmvz-button-border-width) solid var(--lmvz-button-border-color); background-color: var(--lmvz-button-background); color: var(--lmvz-button-color); cursor: pointer; font: var(--lmvz-button-font); text-align: center; text-decoration: none; white-space: nowrap; transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; } button > * { font: inherit; color: inherit; } button:focus-visible { outline: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-status-selected, #f1f9fe); outline-offset: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); } button:is([disabled], .disabled) { cursor: not-allowed; pointer-events: none; opacity: var(--lmvz-component-input-disabled-opacity, 40%); } button:not([disabled]):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-hover, #2e2e2e); } button:not([disabled]):active { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-active, #545454); } button.secondary { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary, #f0f0f0); --lmvz-button-color: var(--lmvz-semantic-color-int-on-secondary, #000000); --lmvz-button-border-width: var(--lmvz-semantic-border-width-default, 1px); --lmvz-button-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); } button.secondary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0); --lmvz-button-border-color: var(--lmvz-semantic-color-border-hover, #c7c7c7); } button.secondary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-active, #d4d4d4); --lmvz-button-border-color: var(--lmvz-semantic-color-border-active, #d4d4d4); } button.tertiary { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary, #ffffff); --lmvz-button-color: var(--lmvz-semantic-color-int-on-tertiary, #545454); } button.tertiary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); } button.tertiary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0); } button.small { --lmvz-button-padding-inline: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-padding-block: var(--lmvz-component-input-sm-padding-y, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-gap: var(--lmvz-component-input-sm-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } button.large { --lmvz-button-padding-inline: var(--lmvz-component-input-lg-padding-x, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-padding-block: var(--lmvz-component-input-lg-padding-y, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-gap: var(--lmvz-component-input-lg-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); } display: contents; } ::slotted(*) { --lmvz-component-color: var(--lmvz-button-color); } `;
5595
+ const lmvzButtonCss = () => ` @layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'), local('Router'); font-weight: 400 normal; } @font-face { font-family: Router; src: local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'), local('Router'); font-weight: 500; } @font-face { font-family: Router; src: local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'), local('Router'); font-weight: 700 bold; } } @layer lmvz-ds.reset { body { margin: 0; } h1, h2, h3, h4, h5, h6 { margin: 0; } } :host { button { --lmvz-button-color: var(--lmvz-component-color, var(--lmvz-semantic-color-int-on-primary, #ffffff)); --lmvz-button-padding-inline: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-padding-block: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); --lmvz-button-radius: var(--lmvz-component-input-radius-default, 999px); --lmvz-button-border-width: 0; --lmvz-button-border-color: transparent; --lmvz-button-background: var(--lmvz-semantic-color-int-primary, #000000); display: inline-flex; align-items: center; justify-content: center; gap: var(--lmvz-button-gap); padding-block: var(--lmvz-button-padding-block); padding-inline: var(--lmvz-button-padding-inline); border-radius: var(--lmvz-button-radius); border: var(--lmvz-button-border-width) solid var(--lmvz-button-border-color); background-color: var(--lmvz-button-background); color: var(--lmvz-button-color); cursor: pointer; font: var(--lmvz-button-font); text-align: center; text-decoration: none; white-space: nowrap; transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; } button > * { font: inherit; color: inherit; } button:focus-visible { outline: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-status-selected, #f1f9fe); outline-offset: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); } button:is([disabled], .disabled) { cursor: not-allowed; pointer-events: none; opacity: var(--lmvz-component-input-disabled-opacity, 40%); } button:not([disabled]):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-hover, #2e2e2e); } button:not([disabled]):active { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-active, #545454); } button.secondary { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary, #f0f0f0); --lmvz-button-color: var(--lmvz-semantic-color-int-on-secondary, #000000); --lmvz-button-border-width: var(--lmvz-semantic-border-width-default, 1px); --lmvz-button-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); } button.secondary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0); --lmvz-button-border-color: var(--lmvz-semantic-color-border-hover, #c7c7c7); } button.secondary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-active, #d4d4d4); --lmvz-button-border-color: var(--lmvz-semantic-color-border-active, #d4d4d4); } button.tertiary { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary, #ffffff); --lmvz-button-color: var(--lmvz-semantic-color-int-on-tertiary, #545454); } button.tertiary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); } button.tertiary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0); } button.small { --lmvz-button-padding-inline: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-padding-block: var(--lmvz-component-input-sm-padding-y, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-gap: var(--lmvz-component-input-sm-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } button.large { --lmvz-button-padding-inline: var(--lmvz-component-input-lg-padding-x, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-padding-block: var(--lmvz-component-input-lg-padding-y, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-gap: var(--lmvz-component-input-lg-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); } display: contents; } ::slotted(*) { --lmvz-component-color: var(--lmvz-button-color); } `;
5586
5596
 
5587
5597
  class LmvzButton extends ReactiveControllerHost {
5588
5598
  get el() { return getElement(this); }
@@ -5680,7 +5690,7 @@ function joinPath(...parts) {
5680
5690
  return parts.filter(Boolean).join('/').replace('//', '/').replace('/./', '/');
5681
5691
  }
5682
5692
 
5683
- const lmvzCardCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'), local('Router'); font-weight: 400 normal; } @font-face { font-family: Router; src: local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'), local('Router'); font-weight: 500; } @font-face { font-family: Router; src: local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'), local('Router'); font-weight: 700 bold; } } @layer lmvz-ds.reset { h1, h2, h3, h4, h5, h6 { margin: 0; } } .sc-lmvz-card-h { button { --lmvz-button-color: var(--lmvz-component-color, var(--lmvz-semantic-color-int-on-primary, #ffffff)); --lmvz-button-padding-inline: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-padding-block: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); --lmvz-button-radius: var(--lmvz-component-input-radius-default, 999px); --lmvz-button-border-width: 0; --lmvz-button-border-color: transparent; --lmvz-button-background: var(--lmvz-semantic-color-int-primary, #000000); display: inline-flex; align-items: center; justify-content: center; gap: var(--lmvz-button-gap); padding-block: var(--lmvz-button-padding-block); padding-inline: var(--lmvz-button-padding-inline); border-radius: var(--lmvz-button-radius); border: var(--lmvz-button-border-width) solid var(--lmvz-button-border-color); background-color: var(--lmvz-button-background); color: var(--lmvz-button-color); cursor: pointer; font: var(--lmvz-button-font); text-align: center; text-decoration: none; white-space: nowrap; transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; } button > * { font: inherit; color: inherit; } button:focus-visible { outline: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-status-selected, #f1f9fe); outline-offset: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); } button:is([disabled], .disabled) { cursor: not-allowed; pointer-events: none; opacity: var(--lmvz-component-input-disabled-opacity, 40%); } button:not([disabled]):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-hover, #2e2e2e); } button:not([disabled]):active { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-active, #545454); } button.secondary { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary, #f0f0f0); --lmvz-button-color: var(--lmvz-semantic-color-int-on-secondary, #000000); --lmvz-button-border-width: var(--lmvz-semantic-border-width-default, 1px); --lmvz-button-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); } button.secondary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0); --lmvz-button-border-color: var(--lmvz-semantic-color-border-hover, #c7c7c7); } button.secondary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-active, #d4d4d4); --lmvz-button-border-color: var(--lmvz-semantic-color-border-active, #d4d4d4); } button.tertiary { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary, #ffffff); --lmvz-button-color: var(--lmvz-semantic-color-int-on-tertiary, #545454); } button.tertiary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); } button.tertiary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0); } button.small { --lmvz-button-padding-inline: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-padding-block: var(--lmvz-component-input-sm-padding-y, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-gap: var(--lmvz-component-input-sm-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } button.large { --lmvz-button-padding-inline: var(--lmvz-component-input-lg-padding-x, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-padding-block: var(--lmvz-component-input-lg-padding-y, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-gap: var(--lmvz-component-input-lg-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); } display: flex; min-width: var(--lmvz-other-component-card-minwidth, 20.4375rem); max-width: var(--lmvz-other-component-card-maxwidth, 21.6875rem); flex-direction: column; align-items: flex-start; border-radius: var(--lmvz-semantic-border-radius-lg, 14px); border: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-border-default, #e0e0e0); background: var(--lmvz-semantic-color-surface-primary, #ffffff); } *.sc-lmvz-card { color: var(--lmvz-semantic-color-on-surface-primary, #000000); font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } .top.sc-lmvz-card { display: flex; padding: var(--lmvz-dimension-8-12, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); flex-direction: column; justify-content: center; align-items: center; align-self: stretch; } .bottom.sc-lmvz-card { display: flex; min-width: 150px; padding: var(--lmvz-dimension-4-6, clamp(0.25rem, 0.22rem + 0.13vw, 0.38rem)) var(--lmvz-dimension-10-14, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)) var(--lmvz-dimension-10-14, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)) var(--lmvz-dimension-10-14, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)); flex-direction: column; align-items: flex-start; align-self: stretch; } .title.sc-lmvz-card { margin: 0; display: flex; justify-content: center; align-items: center; align-self: stretch; padding-bottom: var(--lmvz-global-s4, 4px); overflow-wrap: break-word; font: var(--lmvz-typography-heading-2xl, 500 clamp(2rem, 1.94rem + 0.26vw, 2.25rem) / 1.2 Router); } .description.sc-lmvz-card { display: flex; margin: 0; padding-bottom: var(--lmvz-component-body-sm-padding-bottom, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); align-items: flex-start; align-self: stretch; white-space: pre-line; font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } .image-wrapper.sc-lmvz-card { aspect-ratio: 4 / 3; width: 100%; background-size: cover; background-position: center; flex: 1 0 0; align-self: stretch; border-radius: var(--lmvz-semantic-border-radius-md, 6px); } .actions.sc-lmvz-card { margin-top: var(--lmvz-component-form-wrapper-gap-y, clamp(1.13rem, 0.97rem + 0.65vw, 1.75rem)); display: flex; align-items: center; gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); align-self: stretch; } button.primary.sc-lmvz-card, lmvz-button.primary.sc-lmvz-card { display: flex; justify-content: center; align-items: center; gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); flex: 1 0 0; }`;
5693
+ const lmvzCardCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'), local('Router'); font-weight: 400 normal; } @font-face { font-family: Router; src: local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'), local('Router'); font-weight: 500; } @font-face { font-family: Router; src: local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'), local('Router'); font-weight: 700 bold; } } @layer lmvz-ds.reset { body { margin: 0; } h1, h2, h3, h4, h5, h6 { margin: 0; } } .sc-lmvz-card-h { button { --lmvz-button-color: var(--lmvz-component-color, var(--lmvz-semantic-color-int-on-primary, #ffffff)); --lmvz-button-padding-inline: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-padding-block: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); --lmvz-button-radius: var(--lmvz-component-input-radius-default, 999px); --lmvz-button-border-width: 0; --lmvz-button-border-color: transparent; --lmvz-button-background: var(--lmvz-semantic-color-int-primary, #000000); display: inline-flex; align-items: center; justify-content: center; gap: var(--lmvz-button-gap); padding-block: var(--lmvz-button-padding-block); padding-inline: var(--lmvz-button-padding-inline); border-radius: var(--lmvz-button-radius); border: var(--lmvz-button-border-width) solid var(--lmvz-button-border-color); background-color: var(--lmvz-button-background); color: var(--lmvz-button-color); cursor: pointer; font: var(--lmvz-button-font); text-align: center; text-decoration: none; white-space: nowrap; transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; } button > * { font: inherit; color: inherit; } button:focus-visible { outline: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-status-selected, #f1f9fe); outline-offset: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); } button:is([disabled], .disabled) { cursor: not-allowed; pointer-events: none; opacity: var(--lmvz-component-input-disabled-opacity, 40%); } button:not([disabled]):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-hover, #2e2e2e); } button:not([disabled]):active { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-active, #545454); } button.secondary { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary, #f0f0f0); --lmvz-button-color: var(--lmvz-semantic-color-int-on-secondary, #000000); --lmvz-button-border-width: var(--lmvz-semantic-border-width-default, 1px); --lmvz-button-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); } button.secondary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0); --lmvz-button-border-color: var(--lmvz-semantic-color-border-hover, #c7c7c7); } button.secondary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-active, #d4d4d4); --lmvz-button-border-color: var(--lmvz-semantic-color-border-active, #d4d4d4); } button.tertiary { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary, #ffffff); --lmvz-button-color: var(--lmvz-semantic-color-int-on-tertiary, #545454); } button.tertiary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); } button.tertiary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0); } button.small { --lmvz-button-padding-inline: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-padding-block: var(--lmvz-component-input-sm-padding-y, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-gap: var(--lmvz-component-input-sm-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } button.large { --lmvz-button-padding-inline: var(--lmvz-component-input-lg-padding-x, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-padding-block: var(--lmvz-component-input-lg-padding-y, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-gap: var(--lmvz-component-input-lg-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); } display: flex; min-width: var(--lmvz-other-component-card-minwidth, 20.4375rem); max-width: var(--lmvz-other-component-card-maxwidth, 21.6875rem); flex-direction: column; align-items: flex-start; border-radius: var(--lmvz-semantic-border-radius-lg, 14px); border: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-border-default, #e0e0e0); background: var(--lmvz-semantic-color-surface-primary, #ffffff); } *.sc-lmvz-card { color: var(--lmvz-semantic-color-on-surface-primary, #000000); font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } .top.sc-lmvz-card { display: flex; padding: var(--lmvz-dimension-8-12, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); flex-direction: column; justify-content: center; align-items: center; align-self: stretch; } .bottom.sc-lmvz-card { display: flex; min-width: 150px; padding: var(--lmvz-dimension-4-6, clamp(0.25rem, 0.22rem + 0.13vw, 0.38rem)) var(--lmvz-dimension-10-14, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)) var(--lmvz-dimension-10-14, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)) var(--lmvz-dimension-10-14, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)); flex-direction: column; align-items: flex-start; align-self: stretch; } .title.sc-lmvz-card { margin: 0; display: flex; justify-content: center; align-items: center; align-self: stretch; padding-bottom: var(--lmvz-global-s4, 4px); overflow-wrap: break-word; font: var(--lmvz-typography-heading-2xl, 500 clamp(2rem, 1.94rem + 0.26vw, 2.25rem) / 1.2 Router); } .description.sc-lmvz-card { display: flex; margin: 0; padding-bottom: var(--lmvz-component-body-sm-padding-bottom, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); align-items: flex-start; align-self: stretch; white-space: pre-line; font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } .image-wrapper.sc-lmvz-card { aspect-ratio: 4 / 3; width: 100%; background-size: cover; background-position: center; flex: 1 0 0; align-self: stretch; border-radius: var(--lmvz-semantic-border-radius-md, 6px); } .actions.sc-lmvz-card { margin-top: var(--lmvz-component-form-wrapper-gap-y, clamp(1.13rem, 0.97rem + 0.65vw, 1.75rem)); display: flex; align-items: center; gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); align-self: stretch; } button.primary.sc-lmvz-card, lmvz-button.primary.sc-lmvz-card { display: flex; justify-content: center; align-items: center; gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); flex: 1 0 0; }`;
5684
5694
 
5685
5695
  class LmvzCard {
5686
5696
  constructor(hostRef) {
@@ -5797,7 +5807,9 @@ const lmvzHeaderCss = () => `:host{display:flex;width:100vw;flex-direction:row;a
5797
5807
 
5798
5808
  class LmvzHeader extends ReactiveControllerHost {
5799
5809
  get el() { return getElement(this); }
5800
- validationEl = this.el;
5810
+ get validationEl() {
5811
+ return this.el;
5812
+ }
5801
5813
  primarySlot;
5802
5814
  secondarySlot;
5803
5815
  secondaryNav;
@@ -5871,7 +5883,7 @@ class LmvzHeader extends ReactiveControllerHost {
5871
5883
  }
5872
5884
  }
5873
5885
  render() {
5874
- return (hAsync(Host, { key: 'e5efeeb233de82c44e23302d20ebb488dfc6307b', onFocus: this.delegateFocus.bind(this) }, hAsync("div", { key: '5e34efe17901ec990d09cd6764c37858ced1f021', class: "brand" }, hAsync("slot", { key: 'd30fa8bf8e77a6f02bad45dbad58fe9bbdc8b3f3', name: "brand" }, hAsync("img", { key: '074192bf3b5b4bcdb19302a954c56c5c61ee4b8f', id: "fallback-logo-lmvz", src: logoSvg, alt: "Lehrmittelverlag Z\u00FCrich" }))), hAsync("nav", { key: '663f04ecb9d6ea026f9476888b532f8e1c4e432c', "aria-label": "Hauptnavigation" }, hAsync("div", { key: 'ed0f492144c2b94822db02733c371329a95d8a1e', role: "menubar", class: "primary-menubar" }, hAsync("slot", { key: 'cbcf15f96b5b6c2133506902dc992c962e4873fb', name: "nav-primary", ref: (el) => (this.primarySlot = el) }), hAsync("div", { key: '109ca0ea7ee937c9a1a4a510305595486ea48d94', role: "menu", id: "nav-secondary", class: "secondary-menubar", hidden: !this.lmvzActiveNav, ref: (el) => (this.secondaryNav = el) }, hAsync("slot", { key: 'b88d0da4772cf171854c369fa4e01131377c4f35', name: this.secondarySlotName, ref: (el) => (this.secondarySlot = el) })))), hAsync("div", { key: '4f024b948ea1ebce1ef914b1149420cd9ed817dd', class: "actions" }, hAsync("slot", { key: 'b1f6cff936e2a8fa5c0ff4e3bcc938a5c4f88e0c', name: "actions" }))));
5886
+ return (hAsync(Host, { key: '1ac6c66802a59061742f677e0c3ab2fb1b12363b', onFocus: this.delegateFocus.bind(this) }, hAsync("div", { key: 'ea534c09323539a0df13cb00d0aec382d3c81dd8', class: "brand" }, hAsync("slot", { key: 'b303a741a7d44869c4e53295ab13d606b5ed1d63', name: "brand" }, hAsync("img", { key: '7fd47fa34f3404016be40c8bd49ea28fddd58a8a', id: "fallback-logo-lmvz", src: logoSvg, alt: "Lehrmittelverlag Z\u00FCrich" }))), hAsync("nav", { key: '8e4f9db8b85f3dbea452bb309ae55bc1fac16dcb', "aria-label": "Hauptnavigation" }, hAsync("div", { key: '681c36337dcb3bc4e1833e602af4c642ab1c6acb', role: "menubar", class: "primary-menubar" }, hAsync("slot", { key: '6298235a3421ab083943f25a93c239ae686b8a20', name: "nav-primary", ref: (el) => (this.primarySlot = el) }), hAsync("div", { key: '64b02f2562779e5e412e5076c66d9fcd2a0bb6f5', role: "menu", id: "nav-secondary", class: "secondary-menubar", hidden: !this.lmvzActiveNav, ref: (el) => (this.secondaryNav = el) }, hAsync("slot", { key: '6e0589f700073ba93dc15f5873ca61e03eba5975', name: this.secondarySlotName, ref: (el) => (this.secondarySlot = el) })))), hAsync("div", { key: '50a84ddd9ed61f6c2a1fa32a91ccfdcfb1f3ae94', class: "actions" }, hAsync("slot", { key: 'e57d76343a0f21666479e9a1d3ae4e94843b403e', name: "actions" }))));
5875
5887
  }
5876
5888
  static get watchers() { return {
5877
5889
  "lmvzActiveNav": [{
@@ -9721,7 +9733,9 @@ const lmvzInputCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.compone
9721
9733
  let inputIdCounter = 0;
9722
9734
  class LmvzInput extends ReactiveControllerHost {
9723
9735
  get el() { return getElement(this); }
9724
- validationEl = this.el;
9736
+ get validationEl() {
9737
+ return this.el;
9738
+ }
9725
9739
  lmvzInput;
9726
9740
  internals;
9727
9741
  nativeInputElement;
@@ -9868,9 +9882,9 @@ class LmvzInput extends ReactiveControllerHost {
9868
9882
  render() {
9869
9883
  const hasValue = Boolean(this.value);
9870
9884
  const shouldFloatLabel = hasValue || Boolean(this.placeholder);
9871
- return (hAsync("div", { key: '79ab97e1e1d0217d5302ca1dea7087292ef19fc7', class: classNames('input-container', {
9885
+ return (hAsync("div", { key: '50e70a8963db11234428d8753b4ac4a22424fe93', class: classNames('input-container', {
9872
9886
  'interaction-filled': hasValue,
9873
- }) }, hAsync("div", { key: '9e59a33c261f610f93e1d6db3a07107f9300bbda', class: 'input-wrapper' }, hAsync("slot", { key: 'fadb3f5e49afa817014cdbd44774462b467827f4', name: 'before-input' }), hAsync("div", { key: '27d592787bb841fbd430c2e8ce0adc10f59b68ec', class: 'label-input-group' }, hAsync("label", { key: 'f83f154f356660ecafde254b5437ce6c42898b54', htmlFor: this.inputId, class: classNames({ floating: shouldFloatLabel }) }, this.label, this.required && (hAsync("span", { key: 'b51463179a2099ecd687ccd2480136379b0d0502', class: 'required-indicator', "aria-hidden": 'true' }, ' ', "*"))), hAsync("input", { key: '30d8308f286e82fba5d2ebdad972509c06294543', id: this.inputId, ref: (el) => (this.nativeInputElement = el), type: this.type, min: this.min, max: this.max, step: this.step, value: this.value, name: this.name, placeholder: this.placeholder, disabled: this.disabled, readOnly: this.readonly, required: this.required, form: this.form, autocomplete: this.autocomplete, inputmode: this.inputmode, autocorrect: this.autocorrect, autocapitalize: this.autocapitalize, spellcheck: this.spellcheck, autofocus: this.autofocus, minlength: this.minlength, maxlength: this.maxlength, pattern: this.pattern, "aria-invalid": this.error ? 'true' : 'false', "aria-required": this.required ? 'true' : 'false', "aria-describedby": this.describedBy, "aria-errormessage": this.errorId, onInput: this.handleInput, onChange: this.handleChange, onFocus: this.handleFocus, onBlur: this.handleBlur })), hAsync("slot", { key: 'a8448a0827ce24194b21b8281d2b54eb76f24652', name: 'after-input' })), hAsync("div", { key: '79413854b97380812c84f3128d1db053d4154008', id: this.helperId, role: 'status' }, this.helperText || null), hAsync("div", { key: 'd34c6b421688934b69917f6da1f9bb22c220a6f9', id: this.errorId, role: 'alert' }, (this.showErrorMessage && this.errorMessage) || null)));
9887
+ }) }, hAsync("div", { key: '15fdd5c130ff915830b5a9055743d3493f02baf0', class: "input-wrapper" }, hAsync("slot", { key: '16dd0a7af0ea88b1b4f23e9c62bc20f28425b9ee', name: "before-input" }), hAsync("div", { key: '46afc3affa6fca9049da985fb65a2aab94b0d479', class: "label-input-group" }, hAsync("label", { key: '21c938202cdd21beb284b75d2451247a421a0218', htmlFor: this.inputId, class: classNames({ floating: shouldFloatLabel }) }, this.label, this.required && (hAsync("span", { key: '0bbba8b04242a1bee0bf0b5b0bc15c11f616cbac', class: "required-indicator", "aria-hidden": "true" }, ' ', "*"))), hAsync("input", { key: '9af271fb9251e78706190a0e6cb8373ace8a10f7', id: this.inputId, ref: (el) => (this.nativeInputElement = el), type: this.type, min: this.min, max: this.max, step: this.step, value: this.value, name: this.name, placeholder: this.placeholder, disabled: this.disabled, readOnly: this.readonly, required: this.required, form: this.form, autocomplete: this.autocomplete, inputmode: this.inputmode, autocorrect: this.autocorrect, autocapitalize: this.autocapitalize, spellcheck: this.spellcheck, autofocus: this.autofocus, minlength: this.minlength, maxlength: this.maxlength, pattern: this.pattern, "aria-invalid": this.error ? 'true' : 'false', "aria-required": this.required ? 'true' : 'false', "aria-describedby": this.describedBy, "aria-errormessage": this.errorId, onInput: this.handleInput, onChange: this.handleChange, onFocus: this.handleFocus, onBlur: this.handleBlur })), hAsync("slot", { key: 'db559809a6a5614b522f362c3cf6e97469fb4da4', name: "after-input" })), hAsync("div", { key: '191b364963a017f6b458c2d33fbc4a1b376b8379', id: this.helperId, role: "status" }, this.helperText || null), hAsync("div", { key: '058d13a869f6a3c49f94793eeacecb2b2e672e5c', id: this.errorId, role: "alert" }, (this.showErrorMessage && this.errorMessage) || null)));
9874
9888
  }
9875
9889
  static get formAssociated() { return true; }
9876
9890
  static get watchers() { return {
@@ -9962,6 +9976,86 @@ class LmvzMenuItem extends ReactiveControllerHost {
9962
9976
  }; }
9963
9977
  }
9964
9978
 
9979
+ const chevronDownSvg = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIwLjMzMzQgOC42NjY2M0wxMi4wMDAxIDE3TDMuNjY2NzUgOC42NjY2MyIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=';
9980
+
9981
+ const lmvzSelectCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'), local('Router'); font-weight: 400 normal; } @font-face { font-family: Router; src: local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'), local('Router'); font-weight: 500; } @font-face { font-family: Router; src: local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'), local('Router'); font-weight: 700 bold; } } .sc-lmvz-select-h { display: block; font-family: var(--lmvz-global-font-family-default, Router); --lmvz-internal-select-floating-label-top-offset: 0.375rem; padding-top: var(--lmvz-internal-select-floating-label-top-offset); --lmvz-select-radius: var(--lmvz-component-input-radius-default, 999px); --lmvz-select-bg: var(--lmvz-semantic-color-int-secondary, #f0f0f0); --lmvz-select-bg-hover: var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0); --lmvz-select-text-color: var(--lmvz-semantic-color-int-on-secondary, #000000); --lmvz-select-label-color: var(--lmvz-semantic-color-on-surface-input-primary, #000000); --lmvz-select-padding-x: var(--lmvz-component-input-md-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)); --lmvz-select-gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-select-height: 40px; --lmvz-select-label-font-size: var(--lmvz-component-component-typography-body-sm-font-size, 0.75rem); --lmvz-select-label-top-offset: calc(var(--lmvz-internal-select-floating-label-top-offset) * -1); --lmvz-select-label-minimized-padding-x: 4px; --lmvz-select-disabled-opacity: var(--lmvz-component-input-disabled-opacity, 40%); --lmvz-select-helper-color: var(--lmvz-semantic-color-on-surface-input-secondary, #7a7a7a); --lmvz-select-focus-color: var(--lmvz-semantic-color-status-on-selected, #0e7ab4); --lmvz-select-error-color: var(--lmvz-semantic-color-status-on-danger, #e52a31); } .select-wrapper.sc-lmvz-select { position: relative; height: var(--lmvz-select-height); } label.sc-lmvz-select { position: absolute; top: 50%; left: var(--lmvz-select-padding-x); font-size: var(--lmvz-select-label-font-size); color: var(--lmvz-select-label-color); line-height: normal; white-space: nowrap; pointer-events: none; z-index: 2; transform: translateY(-50%); transform-origin: left top; transition: top 0.2s ease-out, transform 0.2s ease-out, opacity 0.2s ease-out, padding 0.2s ease-out; } label.assistive-label.sc-lmvz-select { opacity: 0; padding: 0; } label.floating-label.sc-lmvz-select { top: var(--lmvz-select-label-top-offset); transform: translateY(0) scale(0.85); left: calc(var(--lmvz-select-padding-x) - 2px); background-color: var(--lmvz-select-bg); padding: 0 var(--lmvz-select-label-minimized-padding-x); opacity: 1; font-weight: 500; } label.sc-lmvz-select > span[aria-hidden='true'].sc-lmvz-select, div[aria-hidden='true'].sc-lmvz-select > span.sc-lmvz-select:first-child > span[aria-hidden='true'].sc-lmvz-select { color: var(--lmvz-select-error-color); margin-left: 2px; display: inline-block; line-height: 0; vertical-align: middle; } div[aria-hidden].sc-lmvz-select { display: flex; align-items: center; gap: var(--lmvz-select-gap); height: 100%; padding: 0 var(--lmvz-select-padding-x); border-radius: var(--lmvz-select-radius); background-color: var(--lmvz-select-bg); cursor: pointer; position: relative; z-index: 1; transition: background-color 0.15s ease; } .sc-lmvz-select-h:not([disabled]) .select-wrapper.sc-lmvz-select:hover div[aria-hidden].sc-lmvz-select { background-color: var(--lmvz-select-bg-hover); } .select-wrapper.sc-lmvz-select:focus-within div[aria-hidden].sc-lmvz-select { outline: 2px solid var(--lmvz-select-focus-color); outline-offset: 2px; } div[aria-hidden].sc-lmvz-select > span.sc-lmvz-select:first-child { flex: 1 0 0; font-size: var(--lmvz-component-component-typography-body-md-font-size, 0.875rem); font-weight: var(--lmvz-global-font-weight-500, 500); color: var(--lmvz-select-text-color); line-height: 1.4; letter-spacing: var(--lmvz-component-body-md-letter-spacing, 0px); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } div[aria-hidden].sc-lmvz-select > span.sc-lmvz-select:last-child { flex-shrink: 0; display: flex; align-items: center; justify-content: center; } img.sc-lmvz-select { display: block; width: var(--lmvz-component-icon-size-xs, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)); height: var(--lmvz-component-icon-size-xs, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)); } select.sc-lmvz-select { appearance: none; position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 2; border: none; background: transparent; margin: 0; padding: 0; } [disabled].sc-lmvz-select-h .select-wrapper.sc-lmvz-select { opacity: var(--lmvz-select-disabled-opacity); pointer-events: none; cursor: not-allowed; } [role='status'].sc-lmvz-select { margin-top: 4px; padding-left: var(--lmvz-select-padding-x); font-size: var(--lmvz-select-label-font-size); color: var(--lmvz-select-helper-color); line-height: normal; }`;
9982
+
9983
+ let selectIdCounter = 0;
9984
+ class LmvzSelect extends ReactiveControllerHost {
9985
+ get el() { return getElement(this); }
9986
+ get validationEl() {
9987
+ return this.el;
9988
+ }
9989
+ selectId = `lmvz-select-${selectIdCounter++}`;
9990
+ nativeSelectEl;
9991
+ constructor(hostRef) {
9992
+ super();
9993
+ registerInstance(this, hostRef);
9994
+ this.lmvzChange = createEvent(this, "lmvzChange");
9995
+ this.addController(new AriaValidationController(this));
9996
+ }
9997
+ lmvzChange;
9998
+ value;
9999
+ label;
10000
+ helperText;
10001
+ disabled = false;
10002
+ required = false;
10003
+ name;
10004
+ selectedLabel = '';
10005
+ get hasValue() {
10006
+ return Boolean(this.value);
10007
+ }
10008
+ componentDidLoad() {
10009
+ this.syncSelectedLabel();
10010
+ super.componentDidLoad();
10011
+ }
10012
+ handleValueChange(newValue) {
10013
+ if (this.nativeSelectEl && this.nativeSelectEl.value !== (newValue ?? '')) {
10014
+ this.nativeSelectEl.value = newValue ?? '';
10015
+ }
10016
+ this.syncSelectedLabel();
10017
+ }
10018
+ syncSelectedLabel() {
10019
+ if (!this.nativeSelectEl)
10020
+ return;
10021
+ const idx = this.nativeSelectEl.selectedIndex;
10022
+ this.selectedLabel = idx >= 0 ? (this.nativeSelectEl.options[idx]?.text ?? '') : '';
10023
+ }
10024
+ handleChange = (event) => {
10025
+ const select = event.target;
10026
+ this.value = select.value;
10027
+ this.syncSelectedLabel();
10028
+ this.lmvzChange.emit(select.value);
10029
+ };
10030
+ render() {
10031
+ const hasValue = this.hasValue;
10032
+ const shouldShowLabel = hasValue;
10033
+ return (hAsync(Host, { key: '2e93e1107001237254f4f9d1a0bee5caf1ab2471' }, hAsync("div", { key: 'a5403bf851515d24b9a112661f457b9a6d1bc189', class: "select-wrapper" }, hAsync("label", { key: 'c0821beee587d720ef3bf185094645dd2d22b701', htmlFor: this.selectId, class: shouldShowLabel ? 'floating-label' : 'assistive-label' }, this.label, this.required && shouldShowLabel && hAsync("span", { key: '3659c7947caa419ccf21954da3efc24e5bac6963', "aria-hidden": "true" }, " *")), hAsync("div", { key: '65db22f89f119cbb96ed9de556fd60d7d1c5cce3', "aria-hidden": "true" }, hAsync("span", { key: 'e0e53b6fe461ab078a6268f2f0050a14722d15a4' }, hasValue ? this.selectedLabel : this.label, this.required && !hasValue && hAsync("span", { key: '2f508f1d94c1437da702e81d2520f9df3f9e96ea', "aria-hidden": "true" }, " *")), hAsync("span", { key: '7bbc03b8f6665341874e6bcc02592bfdc7aa5861' }, hAsync("img", { key: '6453a928e8aa56bfd39b40d11685554bb37c16e4', src: chevronDownSvg, alt: "" }))), hAsync("select", { key: '40170929a774d271c1487e16d15410715471c06b', id: this.selectId, ref: (el) => (this.nativeSelectEl = el), name: this.name, disabled: this.disabled, required: this.required, "aria-label": this.label, onChange: this.handleChange }, !hasValue && hAsync("option", { key: '5d29283095f87f4d3d38183c4a7e42f5b0e806e4', value: "", disabled: true, selected: true, hidden: true }), hAsync("slot", { key: '56bf95ba5ab35768681eac7770e56560f6b57f88' }))), this.helperText && hAsync("div", { key: 'fbe735b28acdd21088d377635804781197c0b1b1', role: "status" }, this.helperText)));
10034
+ }
10035
+ static get watchers() { return {
10036
+ "value": [{
10037
+ "handleValueChange": 0
10038
+ }]
10039
+ }; }
10040
+ static get style() { return lmvzSelectCss(); }
10041
+ static get cmpMeta() { return {
10042
+ "$flags$": 774,
10043
+ "$tagName$": "lmvz-select",
10044
+ "$members$": {
10045
+ "value": [1025],
10046
+ "label": [1],
10047
+ "helperText": [1, "helper-text"],
10048
+ "disabled": [516],
10049
+ "required": [516],
10050
+ "name": [1],
10051
+ "selectedLabel": [32]
10052
+ },
10053
+ "$listeners$": undefined,
10054
+ "$lazyBundleId$": "-",
10055
+ "$attrsToReflect$": [["disabled", "disabled"], ["required", "required"]]
10056
+ }; }
10057
+ }
10058
+
9965
10059
  registerComponents([
9966
10060
  LmvzAction,
9967
10061
  LmvzButton,
@@ -9971,6 +10065,7 @@ registerComponents([
9971
10065
  LmvzIcon,
9972
10066
  LmvzInput,
9973
10067
  LmvzMenuItem,
10068
+ LmvzSelect,
9974
10069
  ]);
9975
10070
 
9976
10071
  exports.hydrateApp = hydrateApp;