@lmvz-ds/components 0.13.0 → 0.13.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 (110) hide show
  1. package/dist/{esm/assets-ozES4zSA.js → cjs/Effect-CpZhfb0D.js} +5538 -1194
  2. package/dist/cjs/aria-loader-BhgXpCuo.js +77 -0
  3. package/dist/cjs/assets-BnJmIx_h.js +26 -0
  4. package/dist/cjs/{icons-DM_TTn48.js → icons-Brr4vqiE.js} +165 -369
  5. package/dist/cjs/{index-D3BMpL5w.js → index-9ZJx0550.js} +3 -0
  6. package/dist/cjs/index-BVxGxK9i.js +35629 -0
  7. package/dist/cjs/index.cjs.js +12 -4
  8. package/dist/cjs/lmvz-action.cjs.entry.js +1 -1
  9. package/dist/cjs/lmvz-button.cjs.entry.js +6 -3
  10. package/dist/cjs/lmvz-card.cjs.entry.js +4 -4
  11. package/dist/cjs/lmvz-chip.cjs.entry.js +1 -1
  12. package/dist/cjs/lmvz-components.cjs.js +1 -1
  13. package/dist/cjs/lmvz-header.cjs.entry.js +8 -5
  14. package/dist/cjs/lmvz-icon.cjs.entry.js +20 -9
  15. package/dist/cjs/lmvz-input.cjs.entry.js +8 -5
  16. package/dist/cjs/lmvz-menuitem.cjs.entry.js +7 -4
  17. package/dist/cjs/loader.cjs.js +1 -1
  18. package/dist/cjs/{reactive-controller-host-BMDEj1kX.js → reactive-controller-host-t3uLq_s2.js} +71 -50
  19. package/dist/collection/components/lmvz-button/lmvz-button.js +3 -1
  20. package/dist/collection/components/lmvz-card/lmvz-card.js +3 -4
  21. package/dist/collection/components/lmvz-header/lmvz-header.js +5 -3
  22. package/dist/collection/components/lmvz-icon/icons.js +2 -2
  23. package/dist/collection/components/lmvz-icon/lmvz-icon.js +14 -5
  24. package/dist/collection/components/lmvz-input/lmvz-input.js +5 -3
  25. package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.js +4 -2
  26. package/dist/collection/index.js +1 -0
  27. package/dist/collection/integration/header-integration.js +1 -3
  28. package/dist/collection/utils/aria/aria-validation-controller.js +68 -27
  29. package/dist/collection/utils/assets.js +9 -6
  30. package/dist/collection/utils/http.js +2 -2
  31. package/dist/collection/utils/http.unit.js +1 -1
  32. package/dist/collection/utils/validation/svg.js +1 -1
  33. package/dist/components/index.js +1 -1
  34. package/dist/components/lmvz-action.js +1 -1
  35. package/dist/components/lmvz-button.js +1 -1
  36. package/dist/components/lmvz-card.js +1 -1
  37. package/dist/components/lmvz-chip.js +1 -1
  38. package/dist/components/lmvz-header.js +1 -1
  39. package/dist/components/lmvz-icon.js +1 -1
  40. package/dist/components/lmvz-input.js +1 -1
  41. package/dist/components/lmvz-menuitem.js +1 -1
  42. package/dist/components/p-B68hOTYN.js +12 -0
  43. package/dist/components/p-BaPwpeMs.js +1 -0
  44. package/dist/components/p-CSRpdnrt.js +1 -0
  45. package/dist/components/p-DFXwtZsD.js +1 -0
  46. package/dist/components/p-DcMNH3fv.js +1 -0
  47. package/dist/components/p-dQa_lGo8.js +1 -0
  48. package/dist/{cjs/assets-CB5ikzmP.js → esm/Effect-DyamyJqO.js} +5329 -1266
  49. package/dist/esm/aria-loader-BQXogs4-.js +70 -0
  50. package/dist/esm/assets-CvV1KMMV.js +23 -0
  51. package/dist/esm/{icons-kpJZ1u9g.js → icons-C69Um2xB.js} +69 -273
  52. package/dist/esm/index-BRxn9h5l.js +35626 -0
  53. package/dist/esm/{index-T5ljELGS.js → index-smGPjoDX.js} +3 -1
  54. package/dist/esm/index.js +5 -3
  55. package/dist/esm/lmvz-action.entry.js +1 -1
  56. package/dist/esm/lmvz-button.entry.js +6 -3
  57. package/dist/esm/lmvz-card.entry.js +4 -4
  58. package/dist/esm/lmvz-chip.entry.js +1 -1
  59. package/dist/esm/lmvz-components.js +2 -2
  60. package/dist/esm/lmvz-header.entry.js +8 -5
  61. package/dist/esm/lmvz-icon.entry.js +20 -9
  62. package/dist/esm/lmvz-input.entry.js +8 -5
  63. package/dist/esm/lmvz-menuitem.entry.js +7 -4
  64. package/dist/esm/loader.js +2 -2
  65. package/dist/esm/{reactive-controller-host-CZ3dGAjR.js → reactive-controller-host-puHvKP9Y.js} +65 -44
  66. package/dist/lmvz-components/index.esm.js +1 -1
  67. package/dist/lmvz-components/lmvz-components.esm.js +1 -1
  68. package/dist/lmvz-components/p-0e5aa1a3.entry.js +1 -0
  69. package/dist/lmvz-components/p-0f930140.entry.js +1 -0
  70. package/dist/lmvz-components/p-2df3646d.entry.js +1 -0
  71. package/dist/lmvz-components/p-470f6f56.entry.js +1 -0
  72. package/dist/lmvz-components/p-67af4826.entry.js +1 -0
  73. package/dist/lmvz-components/p-775b737d.entry.js +1 -0
  74. package/dist/lmvz-components/{p-feda2ec5.entry.js → p-9faac8f3.entry.js} +1 -1
  75. package/dist/lmvz-components/p-BEoSvNlI.js +1 -0
  76. package/dist/lmvz-components/p-D7GrtdQF.js +1 -0
  77. package/dist/lmvz-components/p-DJp2UHon.js +12 -0
  78. package/dist/lmvz-components/p-DWVncv6N.js +1 -0
  79. package/dist/lmvz-components/p-DyamyJqO.js +1 -0
  80. package/dist/lmvz-components/{p-980688a0.entry.js → p-d4b68381.entry.js} +1 -1
  81. package/dist/lmvz-components/p-qPGwETYT.js +1 -0
  82. package/dist/lmvz-components/p-smGPjoDX.js +2 -0
  83. package/dist/manifest.json +1 -1
  84. package/dist/types/components/lmvz-button/lmvz-button.d.ts +1 -0
  85. package/dist/types/components/lmvz-header/lmvz-header.d.ts +1 -0
  86. package/dist/types/components/lmvz-icon/lmvz-icon.d.ts +3 -0
  87. package/dist/types/components/lmvz-input/lmvz-input.d.ts +2 -1
  88. package/dist/types/components/lmvz-menuitem/lmvz-menuitem.d.ts +3 -1
  89. package/dist/types/index.d.ts +1 -0
  90. package/dist/types/utils/aria/aria-validation-controller.d.ts +8 -2
  91. package/dist/types/utils/assets.d.ts +1 -8
  92. package/dist/types/utils/http.d.ts +3 -3
  93. package/dist/types/utils/validation/svg.d.ts +2 -2
  94. package/hydrate/index.js +2225 -12448
  95. package/hydrate/index.mjs +2225 -12448
  96. package/package.json +6 -8
  97. package/dist/components/p-BBDH9X49.js +0 -1
  98. package/dist/components/p-Bs6_m7Uw.js +0 -1
  99. package/dist/components/p-CMteT-Yo.js +0 -1
  100. package/dist/components/p-vi4YzJmv.js +0 -1
  101. package/dist/lmvz-components/p-16878d4c.entry.js +0 -1
  102. package/dist/lmvz-components/p-4ad8c332.entry.js +0 -1
  103. package/dist/lmvz-components/p-5eee0752.entry.js +0 -1
  104. package/dist/lmvz-components/p-8ea1a349.entry.js +0 -1
  105. package/dist/lmvz-components/p-CZ3dGAjR.js +0 -1
  106. package/dist/lmvz-components/p-D9lc4ayG.js +0 -1
  107. package/dist/lmvz-components/p-T5ljELGS.js +0 -2
  108. package/dist/lmvz-components/p-a34542fa.entry.js +0 -1
  109. package/dist/lmvz-components/p-d2bf6a3f.entry.js +0 -1
  110. package/dist/lmvz-components/p-iviTjlUy.js +0 -1
@@ -1,6 +1,5 @@
1
1
  import { h, Host } from "@stencil/core";
2
- import { runSync } from "effect/Effect";
3
- import { syncCreateAssetUrlSafely } from "../../utils/assets";
2
+ import { createAssetUrlSafely } from "../../utils/assets";
4
3
  export class LmvzCard {
5
4
  cardTitle;
6
5
  imageUrl;
@@ -8,7 +7,7 @@ export class LmvzCard {
8
7
  primaryActionLabel = '';
9
8
  primaryAction;
10
9
  get fallbackImage() {
11
- return runSync(syncCreateAssetUrlSafely('card-placeholder.svg'));
10
+ return createAssetUrlSafely('card-placeholder.svg');
12
11
  }
13
12
  _onPrimaryClick() {
14
13
  this.primaryAction.emit();
@@ -20,7 +19,7 @@ export class LmvzCard {
20
19
  const imgStyle = {
21
20
  backgroundImage: `url(${this.imageUrl ?? this.fallbackImage})`,
22
21
  };
23
- return (h(Host, { key: '1438354a53604954320d01652aa1d84f8712e875', role: "article" }, h("div", { key: 'dcffae2c48ebf8f8769cf07c2e78806f12df6888', class: "top" }, h("div", { key: 'e41e1d0aafbfc5879b86022e91958ef3373b48b2', class: "image-wrapper", style: imgStyle }, h("div", { key: 'f6a1fc9706012f39aca9dd0b995290e6042e3407', class: "chip-slot" }, h("slot", { key: '4e014519c147705cc30b3268d652ea6c76c749ec', name: "chip" })))), h("div", { key: 'e7baf78b660e9a97edd0b6a0aa1bdb1afa593fed', class: "bottom" }, h("header", { key: 'a8dad9f91df60f535725328a4901833d47652678' }, h("h2", { key: '1cdbca46469750187856a46fa155128f1f8a677f', class: "title" }, this.cardTitle)), h("p", { key: 'f33c2c0af86d7be31fcbd676833b27c7d06e2dd9', class: "description" }, this.description), h("div", { key: 'a12595d514167fb957aac71fe3d144810b442f9d', class: "actions" }, h("button", { key: '9730cedbf83599c09eedaaae43331147691486d6', class: "primary", onClick: this._onPrimaryClick.bind(this), "data-testid": "primary" }, this.primaryActionLabel), h("button", { key: '48e9c511c406beb75334452769beade3dec9a3f5', class: "tertiary", "aria-label": "More actions", onClick: this._onOverflowClick }, h("span", { key: '81cc1af42a15dddb9dbd4f373a6a047c2e2cd563', class: "icon-placeholder" }, "..."))))));
22
+ return (h(Host, { key: 'ba2e8d9e25428c744da2470cbd677306c56b09ae', role: "article" }, h("div", { key: '54ff7545559a4b6fb00c94909717234f4dfedd7c', class: "top" }, h("div", { key: '7bff35f247b6e8aca9b6346103139daa65ca16a3', class: "image-wrapper", style: imgStyle }, h("div", { key: 'c2c3d21227175b9dc0a55c75294f6c21bc713a26', class: "chip-slot" }, h("slot", { key: '1a7002aab5fc3f9f698c3d1678f8819ea36f91d3', name: "chip" })))), h("div", { key: 'a313321abe4da83db4b2ba64fdefa28edde93d41', class: "bottom" }, h("header", { key: 'f5ba333fcaa59d5b4f61dee94aba4628f49db9d7' }, h("h2", { key: 'b7d9ad6944b136476703cde89f885b189583eef1', class: "title" }, this.cardTitle)), h("p", { key: '6594626904a4f9fbc53d5956b71bbdefe00add8c', class: "description" }, this.description), h("div", { key: 'd8bbfebeb572fcf6990160a0dba7c5ae8a5a7fc7', class: "actions" }, h("button", { key: '6311a97a18412f8fbf8eb33e8a0f7a17700e71c6', class: "primary", onClick: this._onPrimaryClick.bind(this), "data-testid": "primary" }, this.primaryActionLabel), h("button", { key: '12033ad5018d100f84f0149d83dc965d8e5b2c66', class: "tertiary", "aria-label": "More actions", onClick: this._onOverflowClick }, h("span", { key: 'e11f8008542b4f7f70d1273bb31200c50d02aabb', class: "icon-placeholder" }, "..."))))));
24
23
  }
25
24
  static get is() { return "lmvz-card"; }
26
25
  static get encapsulation() { return "scoped"; }
@@ -4,6 +4,7 @@ import { ListKeyboardNavigationController } from "../../utils/aria/list-keyboard
4
4
  import { ReactiveControllerHost } from "../../utils/reactive-controller-host";
5
5
  export class LmvzHeader extends ReactiveControllerHost {
6
6
  el;
7
+ validationEl = this.el;
7
8
  primarySlot;
8
9
  secondarySlot;
9
10
  secondaryNav;
@@ -33,6 +34,7 @@ export class LmvzHeader extends ReactiveControllerHost {
33
34
  this.primarySlot.addEventListener('slotchange', this.handlePrimaryNavItemsChange.bind(this));
34
35
  this.handlePrimaryNavItemsChange();
35
36
  this.secondarySlot.addEventListener('slotchange', this.handleSecondaryNavItemsChange.bind(this));
37
+ super.componentDidLoad();
36
38
  }
37
39
  handlePrimaryNavItemsChange() {
38
40
  const items = this.primaryMenuitems;
@@ -40,7 +42,7 @@ export class LmvzHeader extends ReactiveControllerHost {
40
42
  console.warn('Primary slot has no assigned elements. Please add navigation items to the primary slot.');
41
43
  return;
42
44
  }
43
- items.forEach(el => {
45
+ items.forEach((el) => {
44
46
  el.setAttribute('aria-haspopup', 'true');
45
47
  el.setAttribute('aria-controls', `nav-secondary`);
46
48
  });
@@ -59,7 +61,7 @@ export class LmvzHeader extends ReactiveControllerHost {
59
61
  updateElementsActive() {
60
62
  const items = this.primaryMenuitems;
61
63
  let label;
62
- items.forEach(el => {
64
+ items.forEach((el) => {
63
65
  const isActive = el.id === this.lmvzActiveNav;
64
66
  if (isActive)
65
67
  label = el.textContent || el.id;
@@ -74,7 +76,7 @@ export class LmvzHeader extends ReactiveControllerHost {
74
76
  }
75
77
  }
76
78
  render() {
77
- return (h(Host, { key: '783c855e49e1a2447107d6205a1b2c50285ccfff', onFocus: this.delegateFocus.bind(this) }, h("div", { key: '84a78b0ed3e170c49a711fa4091f80dbc7003b2f', class: "brand" }, h("slot", { key: '76cc54f17a7bc5f825433fc56351666a93891fd2', name: "brand" }, h("lmvz-icon", { key: 'e196e43720cb4b4c3f79b3071d534b50480f6206', id: "fallback-logo-lmvz", icon: "Logo", size: "inherit", "aria-label": "Lehrmittelverlag Z\u00FCrich" }))), h("nav", { key: 'd25a719752bd4085da5ad18af94afc66e9cabd5e', "aria-label": "Hauptnavigation" }, h("div", { key: '8a12c2c53bd061b3559ce9693780e592b3d7aa32', role: "menubar", class: "primary-menubar" }, h("slot", { key: '4461632675dc657f675883e8ef618e371ace0ad7', name: "nav-primary", ref: el => (this.primarySlot = el) }), h("div", { key: 'c1dabc588ac376db667df32d3edbdd6dce60aaad', role: "menu", id: "nav-secondary", class: "secondary-menubar", hidden: !this.lmvzActiveNav, ref: el => (this.secondaryNav = el) }, h("slot", { key: '74ca44ee2f755ffe9ea3ebc19cc2b227ae22df8b', name: this.secondarySlotName, ref: el => (this.secondarySlot = el) })))), h("div", { key: 'a4d250a5fcd10390aed1f5369c28ddec9aa9ee8d', class: "actions" }, h("slot", { key: '77a499ce12d269e79221ca971cc1b203d179f459', name: "actions" }))));
79
+ return (h(Host, { key: '7c257913615a89b9be8f959b4dc43664ee474113', onFocus: this.delegateFocus.bind(this) }, h("div", { key: '70f33263e629170d1b19cbfb1a00ca1adbbe91e0', class: 'brand' }, h("slot", { key: 'd9c99c51da3210e5459684e59e66baf1622a8946', name: 'brand' }, h("lmvz-icon", { key: '18bd0e88032c023d319bc3fac43c2b09d5098893', id: 'fallback-logo-lmvz', icon: 'Logo', size: 'inherit', "aria-label": 'Lehrmittelverlag Z\u00FCrich' }))), h("nav", { key: 'c56a1e63344e42b1be26fe817705f0265bdb2bcf', "aria-label": 'Hauptnavigation' }, h("div", { key: 'fbaebcb4857b0fba7b81cc35ef6092bb98ae89f8', role: 'menubar', class: 'primary-menubar' }, h("slot", { key: '4a408eacbb41fa57d838581c18389241dce0e634', name: 'nav-primary', ref: (el) => (this.primarySlot = el) }), h("div", { key: '6229842569958c724478c6aa15adc75b07d8417e', role: 'menu', id: 'nav-secondary', class: 'secondary-menubar', hidden: !this.lmvzActiveNav, ref: (el) => (this.secondaryNav = el) }, h("slot", { key: '4dd4278eaa77cfc984e338da6bb1aa7321c6a545', name: this.secondarySlotName, ref: (el) => (this.secondarySlot = el) })))), h("div", { key: '98b7802b0dc2dfe3a7a38bf89ae2b68994734396', class: 'actions' }, h("slot", { key: '5f7682fe0ad34496b887baab7b19641a86c01acb', name: 'actions' }))));
78
80
  }
79
81
  static get is() { return "lmvz-header"; }
80
82
  static get encapsulation() { return "shadow"; }
@@ -1,5 +1,5 @@
1
1
  import { Cache, Duration, Effect } from "effect";
2
- import { syncCreateAssetUrlSafely } from "../../utils/assets";
2
+ import { createAssetUrlSafely } from "../../utils/assets";
3
3
  import { httpClient, responseAsText } from "../../utils/http";
4
4
  import { createValidSVGString, SVGString } from "../../utils/validation/svg";
5
5
  export const emptyDefaultSvg = () => SVGString(`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"></svg>`);
@@ -8,7 +8,7 @@ const createIconCache = () => Cache.make({
8
8
  timeToLive: Duration.infinity,
9
9
  lookup: (key) => Effect.gen(function* () {
10
10
  const name = key;
11
- const assetPath = yield* syncCreateAssetUrlSafely(`${name}.svg`, 'icons');
11
+ const assetPath = createAssetUrlSafely(`${name}.svg`, 'icons');
12
12
  const res = yield* httpClient(assetPath);
13
13
  const responseString = yield* responseAsText(res);
14
14
  return yield* createValidSVGString(responseString);
@@ -5,7 +5,9 @@ import { ReactiveControllerHost } from "../../utils/reactive-controller-host";
5
5
  import { emptyDefaultSvg, fetchIconSvg } from "./icons";
6
6
  export class LmvzIcon extends ReactiveControllerHost {
7
7
  intersectionObserver;
8
+ ariaValidationController = new AriaValidationController(this);
8
9
  el;
10
+ validationEl;
9
11
  icon;
10
12
  weight = 'medium';
11
13
  size = 'md';
@@ -17,37 +19,44 @@ export class LmvzIcon extends ReactiveControllerHost {
17
19
  }
18
20
  constructor() {
19
21
  super();
20
- this.addController(new AriaValidationController(this));
22
+ this.addController(this.ariaValidationController);
21
23
  }
22
24
  connectedCallback() {
23
25
  this.waitUntilVisible(() => {
24
26
  this.visible = true;
25
27
  this.loadIconPathData();
26
28
  });
29
+ super.connectedCallback();
27
30
  }
28
31
  disconnectedCallback() {
29
32
  if (this.intersectionObserver) {
30
33
  this.intersectionObserver.disconnect();
31
34
  this.intersectionObserver = null;
32
35
  }
36
+ super.disconnectedCallback();
33
37
  }
34
38
  async loadIconPathData() {
35
39
  const { icon, visible } = this;
36
40
  if (!Build.isBrowser || !icon || !visible) {
37
41
  return;
38
42
  }
39
- this.iconData = await Effect.runPromise(fetchIconSvg(this.icon).pipe(Effect.tapError(error => Effect.logError(`Error loading icon "${icon}":`, error.message, error.cause, error.stack)), Effect.catchAll(() => Effect.succeed(emptyDefaultSvg()))));
43
+ this.iconData = await Effect.runPromise(fetchIconSvg(this.icon).pipe(Effect.tapError((error) => Effect.logError(`Error loading icon "${icon}":`, error.message, error.cause, error.stack)), Effect.catchAll(() => Effect.succeed(emptyDefaultSvg()))));
44
+ }
45
+ componentDidRender() {
46
+ this.validationEl = this.el.querySelector('svg');
47
+ this.ariaValidationController.revalidateAria();
48
+ super.componentDidRender();
40
49
  }
41
50
  render() {
42
- return h(Host, { key: 'd4c1cbfbaf39ebf6aa26415d46100763b9f89b5b', role: "img", "aria-hidden": `${this.ariaHidden}`, innerHTML: this.iconData });
51
+ return h(Host, { key: '8b1ce550253e994650fe91de38496aff7c7eccc2', role: 'img', "aria-hidden": `${this.ariaHidden}`, innerHTML: this.iconData });
43
52
  }
44
53
  waitUntilVisible(callback, rootMargin = 50) {
45
54
  if (!Build.isBrowser || typeof window === 'undefined' || !window.IntersectionObserver) {
46
55
  callback();
47
56
  return;
48
57
  }
49
- this.intersectionObserver = new IntersectionObserver(entries => {
50
- entries.some(entry => {
58
+ this.intersectionObserver = new IntersectionObserver((entries) => {
59
+ entries.some((entry) => {
51
60
  if (entry.isIntersecting) {
52
61
  this.intersectionObserver.disconnect();
53
62
  this.intersectionObserver = null;
@@ -6,6 +6,7 @@ import { ReactiveControllerHost } from "../../utils/reactive-controller-host";
6
6
  let inputIdCounter = 0;
7
7
  export class LmvzInput extends ReactiveControllerHost {
8
8
  el;
9
+ validationEl = this.el;
9
10
  lmvzInput;
10
11
  internals;
11
12
  nativeInputElement;
@@ -82,7 +83,7 @@ export class LmvzInput extends ReactiveControllerHost {
82
83
  }
83
84
  async getInputElement() {
84
85
  if (!this.nativeInputElement) {
85
- await new Promise(resolve => componentOnReady(this.el, resolve));
86
+ await new Promise((resolve) => componentOnReady(this.el, resolve));
86
87
  }
87
88
  return Promise.resolve(this.nativeInputElement);
88
89
  }
@@ -94,6 +95,7 @@ export class LmvzInput extends ReactiveControllerHost {
94
95
  }
95
96
  componentWillLoad() {
96
97
  this.initialValue = this.value;
98
+ super.componentWillLoad();
97
99
  }
98
100
  formAssociatedCallback(form) {
99
101
  if (!form)
@@ -142,9 +144,9 @@ export class LmvzInput extends ReactiveControllerHost {
142
144
  render() {
143
145
  const hasValue = Boolean(this.value);
144
146
  const shouldFloatLabel = hasValue || Boolean(this.placeholder);
145
- return (h("div", { key: '4dffa432df9b8ca5d89c02b59cfe25b9321ca162', class: classNames('input-container', {
147
+ return (h("div", { key: '79ab97e1e1d0217d5302ca1dea7087292ef19fc7', class: classNames('input-container', {
146
148
  'interaction-filled': hasValue,
147
- }) }, h("div", { key: 'ade1cd1137acce218d458c1b66b2eb29cf887b70', class: "input-wrapper" }, h("slot", { key: '013dff3540481724658ff754bf3db0585ec3b6f4', name: "before-input" }), h("div", { key: '6587bb63c79f97c31abff5be0a91eb16374971d5', class: "label-input-group" }, h("label", { key: '2ef0a35fbd38b255423d2793415568a661476db3', htmlFor: this.inputId, class: classNames({ floating: shouldFloatLabel }) }, this.label, this.required && (h("span", { key: '0785826710ee4ecea96037cc689c34a43113552e', class: "required-indicator", "aria-hidden": "true" }, ' ', "*"))), h("input", { key: '5ad0d4b2d1c11dd89824db87e331232ba703a05e', 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 })), h("slot", { key: 'a23676cc830cac7fbf87fef81a8d05b50b831725', name: "after-input" })), h("div", { key: 'e0a05138954d70508f840b6d5c4f53e74c2f2979', id: this.helperId, role: "status" }, this.helperText || null), h("div", { key: 'fcba57be2d596b3b8aa0ac97b2fd31dc3e77e14b', id: this.errorId, role: "alert" }, (this.showErrorMessage && this.errorMessage) || null)));
149
+ }) }, h("div", { key: '9e59a33c261f610f93e1d6db3a07107f9300bbda', class: 'input-wrapper' }, h("slot", { key: 'fadb3f5e49afa817014cdbd44774462b467827f4', name: 'before-input' }), h("div", { key: '27d592787bb841fbd430c2e8ce0adc10f59b68ec', class: 'label-input-group' }, h("label", { key: 'f83f154f356660ecafde254b5437ce6c42898b54', htmlFor: this.inputId, class: classNames({ floating: shouldFloatLabel }) }, this.label, this.required && (h("span", { key: 'b51463179a2099ecd687ccd2480136379b0d0502', class: 'required-indicator', "aria-hidden": 'true' }, ' ', "*"))), h("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 })), h("slot", { key: 'a8448a0827ce24194b21b8281d2b54eb76f24652', name: 'after-input' })), h("div", { key: '79413854b97380812c84f3128d1db053d4154008', id: this.helperId, role: 'status' }, this.helperText || null), h("div", { key: 'd34c6b421688934b69917f6da1f9bb22c220a6f9', id: this.errorId, role: 'alert' }, (this.showErrorMessage && this.errorMessage) || null)));
148
150
  }
149
151
  static get is() { return "lmvz-input"; }
150
152
  static get encapsulation() { return "scoped"; }
@@ -4,6 +4,8 @@ import { ElementActivationController } from "../../utils/aria/element-activation
4
4
  import { ReactiveControllerHost } from "../../utils/reactive-controller-host";
5
5
  export class LmvzMenuItem extends ReactiveControllerHost {
6
6
  el;
7
+ validationEl = this.el;
8
+ validationSlot;
7
9
  get role() {
8
10
  return 'menuitem';
9
11
  }
@@ -13,11 +15,11 @@ export class LmvzMenuItem extends ReactiveControllerHost {
13
15
  lmvzActivation;
14
16
  constructor() {
15
17
  super();
16
- this.addController(new AriaValidationController(this));
18
+ this.addController(new AriaValidationController(this, { validationTiming: 'slot' }));
17
19
  this.addController(new ElementActivationController(this));
18
20
  }
19
21
  render() {
20
- return (h(Host, { key: 'c4a21e628aaf4e983d51ce7b1f38ff66c47ec3ac' }, h("slot", { key: '0040d27a11c4bdd5a49dd54f352ba7d17b53ff7b' })));
22
+ return (h(Host, { key: 'a022a198618ac628cb39c97b29cf0c332b522e79' }, h("slot", { key: 'c8dab82b31b49db3d966cacb1cf9ef5cb1763797', ref: e => (this.validationSlot = e) })));
21
23
  }
22
24
  static get is() { return "lmvz-menuitem"; }
23
25
  static get encapsulation() { return "scoped"; }
@@ -1,3 +1,4 @@
1
+ export * from '@lmvz-ds/aria-validation';
1
2
  export * from './api';
2
3
  export * from './components/lmvz-icon/public';
3
4
  export * from './utils/public';
@@ -1,6 +1,4 @@
1
- import { enableAriaValidation } from "@lmvz-ds/aria-validation";
2
1
  import { h, Host } from "@stencil/core";
3
- enableAriaValidation();
4
2
  export class HeaderIntegration {
5
3
  activeNav;
6
4
  activate(event) {
@@ -17,7 +15,7 @@ export class HeaderIntegration {
17
15
  this.activeNav = navId;
18
16
  }
19
17
  render() {
20
- return (h(Host, { key: '2c1e17a546e2f02d3a0571c8ad25f04dc4ddc21c' }, h("lmvz-header", { key: '2072642f27497dba23b82766efb47bae66cf2ca4', lmvzActiveNav: this.activeNav }, h("lmvz-menuitem", { key: '2f3f76364aeccf1d0012403599df6089324a6407', slot: "nav-primary", id: "lehrmittel", onLmvzActivation: this.activate.bind(this) }, h("a", { key: '925a3cddc298fd33c08b2a911a7b668503dd6457', href: "#" }, "Lehrmittel")), h("lmvz-menuitem", { key: '3579a89fb31a3c4f34550553830b4f17c466a26c', slot: "nav-primary", id: "verwaltung", onLmvzActivation: this.activate.bind(this) }, h("a", { key: 'f33245d9ae6eada3eab9fd65f6994e3950785a49', href: "#" }, "Verwaltung")), h("lmvz-menuitem", { key: '53fb94f79851dd87bf235fe7008004cc6ac81ba5', slot: "connect-nav-lehrmittel" }, h("lmvz-icon", { key: '74a1a501f0b0207c041470e6133cf9811922ad90', icon: "book" }), "Deutsch 7"), h("lmvz-menuitem", { key: 'b5885aeabe690ea9b16e5e1779de50e231ee9e68', slot: "connect-nav-lehrmittel" }, h("lmvz-icon", { key: 'a5691f42169f9812cd46206baf3e71b91dbda01d', icon: "book" }), "Mathe 2"), h("lmvz-menuitem", { key: 'b171e9be2812c4743482a40cb10cad501d1e5826', slot: "connect-nav-verwaltung" }, h("lmvz-icon", { key: 'f89e3b94ea03de64a516df80bcc152dfa814b0fc', icon: "cog" }), "iwas mit Verwaltung"), h("lmvz-menuitem", { key: 'f32ca2a5aab550d65a7a9da9210944cb5c66f83c', slot: "connect-nav-verwaltung", "aria-label": "Einstellungen" }, h("lmvz-icon", { key: '6a8b0d2afd0c94e44567a74d46a55e526f53dbd5', icon: "cog" })), h("lmvz-button", { key: '9c31e29f041ed4ae515eef1b966e8fcb68c7acd8', slot: "actions", "aria-label": "Benutzerkonto" }, h("lmvz-icon", { key: '340aa71a47c0714850bbdcbfbf971931fb83060e', icon: "user" }))), h("main", { key: '16c5b3916cb4dd172423f41f33015d2348407659' }, h("h1", { key: 'f71be25ec19f727050709f092c8c28f7f8a1cfde' }, "Content"))));
18
+ return (h(Host, { key: '75fb60387c32835c7b7ef3cc30db812abfb9367e' }, h("lmvz-header", { key: '91149faea6215e9f1aed260462bbeb230b73b855', lmvzActiveNav: this.activeNav }, h("lmvz-menuitem", { key: 'd5d7dcc462e262c511eff6b90bd798d514632057', slot: "nav-primary", id: "lehrmittel", onLmvzActivation: this.activate.bind(this) }, h("a", { key: '4ac381b41e28f822c78da0056dac5e246f7e918b', href: "#" }, "Lehrmittel")), h("lmvz-menuitem", { key: '8ae037a821128c3cb2f36373c449636e2bfcc007', slot: "nav-primary", id: "verwaltung", onLmvzActivation: this.activate.bind(this) }, h("a", { key: '6c0fec0e451812f0721d426bf6b991b5fb25d9cd', href: "#" }, "Verwaltung")), h("lmvz-menuitem", { key: 'c43f7d2bbf035f2375b3def77cecc397b3cd8de6', slot: "connect-nav-lehrmittel" }, h("lmvz-icon", { key: '9c9c4d86c5027901c8cdfa0d66d615342034ff7b', icon: "book" }), "Deutsch 7"), h("lmvz-menuitem", { key: '7a91ed4e5aaf13a0d3e03e183dcf57f9c3d0f322', slot: "connect-nav-lehrmittel" }, h("lmvz-icon", { key: 'f1dea525f81b168de5db345d5f1dc978e63fbda8', icon: "book" }), "Mathe 2"), h("lmvz-menuitem", { key: '7fafd65317c833c22888ab57a28d0f28f314e92b', slot: "connect-nav-verwaltung" }, h("lmvz-icon", { key: '47b11e1ee520fd0898052071b52d1a89e5b54d43', icon: "cog" }), "iwas mit Verwaltung"), h("lmvz-menuitem", { key: '42d5fc054af9032a5f0ae185b2db2ef1fb565b11', slot: "connect-nav-verwaltung", "aria-label": "Einstellungen" }, h("lmvz-icon", { key: 'f962c1a573e72ee5e1ec67195e26be3b59185efb', icon: "cog" })), h("lmvz-button", { key: '31675becc7bc819577f9aeda2c474637a65e5949', slot: "actions", "aria-label": "Benutzerkonto" }, h("lmvz-icon", { key: '87f52382c676820e8e5d981fc4ac7824b892e923', icon: "user" }))), h("main", { key: 'b5949edfd76c42f5e654cf04a6e1f5cd3654ed0d' }, h("h1", { key: '75228585f485f33349c780ad82b22449811761ec' }, "Content"))));
21
19
  }
22
20
  static get is() { return "header-integration"; }
23
21
  static get encapsulation() { return "shadow"; }
@@ -1,14 +1,22 @@
1
- import { ARIA_VALIDATION_RUNTIME_CHANGED_EVENT, isAriaValidationEnabled, queueValidation } from "@lmvz-ds/aria-validation";
1
+ import { ARIA_VALIDATION_RUNTIME_CHANGED_EVENT, enableAriaValidation, isAriaValidationEnabled, queueValidation, useVerboseLogging, } from "@lmvz-ds/aria-validation";
2
+ import { Build } from "@stencil/core";
3
+ if (Build.isDev) {
4
+ enableAriaValidation();
5
+ }
2
6
  export class AriaValidationController {
3
7
  host;
4
8
  config;
5
9
  visibilityObserver;
6
10
  elementQueued = false;
7
11
  elementValidated = false;
8
- knownValidationErrors = [];
12
+ elementLoaded = false;
13
+ static knownValidationErrors = [];
9
14
  get disabled() {
10
15
  return !isAriaValidationEnabled();
11
16
  }
17
+ get useVerboseLogging() {
18
+ return this.config?.verboseLogging || Build.isDev || useVerboseLogging();
19
+ }
12
20
  constructor(host, config) {
13
21
  this.host = host;
14
22
  this.config = config;
@@ -19,12 +27,17 @@ export class AriaValidationController {
19
27
  this.checkLazyValidation();
20
28
  };
21
29
  hostDidLoad() {
30
+ this.elementLoaded = true;
22
31
  if (typeof window !== 'undefined') {
23
32
  window.addEventListener(ARIA_VALIDATION_RUNTIME_CHANGED_EVENT, this.onRuntimeConfigChange);
24
33
  }
25
34
  if (this.elementQueued || this.elementValidated)
26
35
  return;
27
- if (!this.host.el.checkVisibility()) {
36
+ if (this.config?.validationTiming === 'slot') {
37
+ this.observeSlot();
38
+ return;
39
+ }
40
+ if (!this.host.validationEl?.checkVisibility() || this.config?.validationTiming !== 'load') {
28
41
  this.observeVisibilityOnce();
29
42
  return;
30
43
  }
@@ -39,26 +52,40 @@ export class AriaValidationController {
39
52
  window.removeEventListener(ARIA_VALIDATION_RUNTIME_CHANGED_EVENT, this.onRuntimeConfigChange);
40
53
  }
41
54
  }
55
+ revalidateAria() {
56
+ this.enqueueValidation();
57
+ }
58
+ observeSlot() {
59
+ this.host.validationSlot?.addEventListener('slotchange', this.enqueueValidation.bind(this));
60
+ }
42
61
  observeVisibilityOnce() {
43
- this.visibilityObserver = new IntersectionObserver(entries => {
44
- for (const entry of entries) {
45
- if (entry.target !== this.host.el)
46
- continue;
47
- if (!entry.isIntersecting)
48
- continue;
49
- this.checkLazyValidation();
50
- this.discardVisibilityObserver();
51
- }
52
- }, {
53
- root: this.host.el.parentElement,
54
- rootMargin: '0px',
55
- threshold: 0.01,
62
+ window.setTimeout(() => {
63
+ if (!this.host.validationEl)
64
+ return;
65
+ this.visibilityObserver = new IntersectionObserver((entries) => {
66
+ for (const entry of entries) {
67
+ if (entry.target !== this.host.validationEl)
68
+ continue;
69
+ if (!entry.isIntersecting)
70
+ continue;
71
+ this.checkLazyValidation();
72
+ this.discardVisibilityObserver();
73
+ }
74
+ }, {
75
+ root: this.host.validationEl?.parentElement,
76
+ rootMargin: '0px',
77
+ threshold: 0.01,
78
+ });
79
+ this.visibilityObserver.observe(this.host.validationEl);
56
80
  });
57
- this.visibilityObserver.observe(this.host.el);
58
81
  }
59
82
  checkLazyValidation() {
83
+ if (!this.elementLoaded)
84
+ return;
60
85
  if (!this.config?.reValidateOnPropChanges && (this.elementQueued || this.elementValidated))
61
86
  return;
87
+ if (!this.host.validationEl?.checkVisibility())
88
+ return;
62
89
  this.enqueueValidation();
63
90
  }
64
91
  enqueueValidation() {
@@ -66,33 +93,47 @@ export class AriaValidationController {
66
93
  return;
67
94
  this.elementQueued = true;
68
95
  queueValidation({
69
- context: { include: this.host.el, exclude: this.knownValidationErrors },
96
+ context: { include: this.host.validationEl, exclude: AriaValidationController.knownValidationErrors },
70
97
  onComplete: (error, results) => {
71
98
  this.elementValidated = true;
99
+ const elementName = this.host.tagName || this.host.validationEl?.tagName || 'Element';
72
100
  if (error) {
73
- console.error('Error running ARIA validation:', error);
101
+ console.error('Error running ARIA validation:', error, elementName);
102
+ if (!this.host.validationEl?.tagName) {
103
+ console.dir(this.host);
104
+ }
74
105
  return;
75
106
  }
107
+ const message = [elementName];
76
108
  if (!results?.violations.length) {
77
- if (this.config?.verboseLogging) {
78
- console.log(`No ARIA validation violations found for ${this.host.el?.tagName || 'element'}.`);
109
+ if (this.useVerboseLogging) {
110
+ console.log(...message, 'has no ARIA violations');
111
+ if (!this.host.validationEl?.tagName) {
112
+ console.dir(this.host);
113
+ }
79
114
  }
80
115
  return;
81
116
  }
82
- const label = `ARIA validation violations found for ${this.host.el?.tagName || 'element'}`;
83
- if (this.config?.verboseLogging) {
117
+ const count = results.violations.length;
118
+ const label = [...message, results.violations.at(0).id, count > 1 ? `(+${count - 1} more)` : ''].filter(Boolean).join(' ');
119
+ if (this.useVerboseLogging) {
84
120
  console.group(label);
85
121
  }
86
122
  else {
87
123
  console.groupCollapsed(label);
88
124
  }
89
- const targets = results.violations.flatMap(violation => {
125
+ const targets = results.violations.flatMap((violation) => {
90
126
  console.dir(violation, { showHidden: true, compact: false });
91
- return violation.nodes.map(node => node.target);
127
+ return violation.nodes.map((node) => node.target);
92
128
  });
93
- console.log('element:', this.host.el);
129
+ if (this.host.validationEl) {
130
+ console.log('element:', this.host.validationEl);
131
+ }
132
+ else {
133
+ console.dir(this.host);
134
+ }
94
135
  console.groupEnd();
95
- this.knownValidationErrors.push(...targets);
136
+ AriaValidationController.knownValidationErrors.push(...targets);
96
137
  },
97
138
  });
98
139
  }
@@ -1,13 +1,16 @@
1
1
  import { getAssetPath } from "@stencil/core";
2
- import { Data, Effect } from "effect";
3
2
  import { getLocationBase } from "./environment";
4
- export class URLCreationError extends Data.TaggedError('URLCreationError') {
5
- }
6
3
  const relativeAssetsPath = '../../assets';
7
- export const syncCreateAssetUrlSafely = (file, pathFromAssetRoot) => {
4
+ export const createAssetUrlSafely = (file, pathFromAssetRoot) => {
8
5
  const relativeAssetPath = joinPath(relativeAssetsPath, pathFromAssetRoot, file);
9
- return Effect.try(() => getAssetPath(relativeAssetPath)).pipe(Effect.tapError(() => Effect.logWarning(`Failed to create URL for asset "${file}" in path "${pathFromAssetRoot}".
10
- Please provide an absolute URL in your app's 'setAssetPath(...)' configuration! Falling back to a relative URL, which may work in some environments but is not guaranteed to be correct.`)), Effect.orElseSucceed(() => new URL(relativeAssetPath, getLocationBase())));
6
+ try {
7
+ return getAssetPath(relativeAssetPath);
8
+ }
9
+ catch {
10
+ console.warn(`Failed to create URL for asset "${file}" in path "${pathFromAssetRoot}".
11
+ Please provide an absolute URL in your app's 'setAssetPath(...)' configuration! Falling back to a relative URL, which may work in some environments but is not guaranteed to be correct.`);
12
+ return new URL(relativeAssetPath, getLocationBase());
13
+ }
11
14
  };
12
15
  function joinPath(...parts) {
13
16
  return parts.filter(Boolean).join('/').replace('//', '/').replace('/./', '/');
@@ -1,4 +1,4 @@
1
- import { Data, Effect } from "effect";
1
+ import { Data, Micro as Effect } from "effect";
2
2
  export class FetchError extends Data.TaggedError('FetchError') {
3
3
  }
4
4
  export class NotFoundError extends Data.TaggedError('NotFoundError') {
@@ -9,7 +9,7 @@ export const httpClient = (input, init) => Effect.gen(function* () {
9
9
  catch: error => new FetchError({ cause: error }),
10
10
  });
11
11
  if (response.status === 404) {
12
- return yield* new NotFoundError({ url: response.url });
12
+ return yield* Effect.fail(new NotFoundError({ url: response.url }));
13
13
  }
14
14
  return response;
15
15
  });
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it, vi } from "@stencil/vitest";
2
- import { Effect } from "effect";
2
+ import { Micro as Effect } from "effect";
3
3
  import { FetchError, NotFoundError, ResponseTextError, httpClient, responseAsText } from "./http";
4
4
  describe('Http Utils', () => {
5
5
  describe('httpClient', () => {
@@ -1,4 +1,4 @@
1
- import { Brand, Data, Effect } from "effect";
1
+ import { Brand, Data, Micro as Effect } from "effect";
2
2
  export const SVGString = Brand.refined(isValidSVG, () => Brand.error('SVG data is malformed'));
3
3
  export class BrandValidationError extends Data.TaggedError('BrandValidationError') {
4
4
  constructor(error, type) {
@@ -1 +1 @@
1
- export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-vi4YzJmv.js";export{c as clearIconCache}from"./p-BBDH9X49.js";import{r as e}from"./p-Bs6_m7Uw.js";export{LmvzAction,defineCustomElement as defineCustomElementLmvzAction}from"./lmvz-action.js";export{LmvzButton,defineCustomElement as defineCustomElementLmvzButton}from"./lmvz-button.js";export{LmvzCard,defineCustomElement as defineCustomElementLmvzCard}from"./lmvz-card.js";export{LmvzChip,defineCustomElement as defineCustomElementLmvzChip}from"./lmvz-chip.js";export{LmvzHeader,defineCustomElement as defineCustomElementLmvzHeader}from"./lmvz-header.js";export{LmvzIcon,defineCustomElement as defineCustomElementLmvzIcon}from"./lmvz-icon.js";export{LmvzInput,defineCustomElement as defineCustomElementLmvzInput}from"./lmvz-input.js";export{LmvzMenuitem,defineCustomElement as defineCustomElementLmvzMenuitem}from"./lmvz-menuitem.js";const t=["primary","secondary","tertiary"],o=["small","default","large"],m=["xs","sm","md","lg"],n=[...m,"xl"],l=["text","email","password","tel","url","search","number"],i=[...m,"inherit"],d=["thin","medium","bold","filled"],u=["Logo","actions","adduser","alert","apple","arrow-down","arrow-left","arrow-right","arrow-up","book","bookmark","checkmark","chevron-down","chevron-left","chevron-right","chevron-up","close-l","close-sm","cog","computer","dashboard","delete","download","edit","external","facebook","favorite","filter","group","hide","home","info","instagram","letter","linkedin","logout","map","minus","navigation","plus","qr-scan","question","reader","reset","school","search","send","settings","share","shopping-cart","show","snapchat","sort","speech-bubble","star","student","upload","user","warn-circle","warn-triangle","whatsapp","world","x","youtube"];function f(t){return e(t).catch((e=>{console.error("Unhandled error in Effect:",e)}))}export{u as iconNames,i as iconSizes,d as iconWeights,l as inputTypes,f as run,o as scaleValues,m as sizes,n as textSizes,t as variants}
1
+ export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-BaPwpeMs.js";export{A as ARIA_VALIDATION_RUNTIME_CHANGED_EVENT,d as disableAriaValidation,e as enableAriaValidation,i as isAriaValidationEnabled,q as queueValidation,u as useVerboseLogging}from"./p-DFXwtZsD.js";export{c as clearIconCache}from"./p-dQa_lGo8.js";import{r as t}from"./p-CSRpdnrt.js";export{LmvzAction,defineCustomElement as defineCustomElementLmvzAction}from"./lmvz-action.js";export{LmvzButton,defineCustomElement as defineCustomElementLmvzButton}from"./lmvz-button.js";export{LmvzCard,defineCustomElement as defineCustomElementLmvzCard}from"./lmvz-card.js";export{LmvzChip,defineCustomElement as defineCustomElementLmvzChip}from"./lmvz-chip.js";export{LmvzHeader,defineCustomElement as defineCustomElementLmvzHeader}from"./lmvz-header.js";export{LmvzIcon,defineCustomElement as defineCustomElementLmvzIcon}from"./lmvz-icon.js";export{LmvzInput,defineCustomElement as defineCustomElementLmvzInput}from"./lmvz-input.js";export{LmvzMenuitem,defineCustomElement as defineCustomElementLmvzMenuitem}from"./lmvz-menuitem.js";const o=["primary","secondary","tertiary"],n=["small","default","large"],m=["xs","sm","md","lg"],l=[...m,"xl"],p=["text","email","password","tel","url","search","number"],f=[...m,"inherit"],v=["thin","medium","bold","filled"],h=["Logo","actions","adduser","alert","apple","arrow-down","arrow-left","arrow-right","arrow-up","book","bookmark","checkmark","chevron-down","chevron-left","chevron-right","chevron-up","close-l","close-sm","cog","computer","dashboard","delete","download","edit","external","facebook","favorite","filter","group","hide","home","info","instagram","letter","linkedin","logout","map","minus","navigation","plus","qr-scan","question","reader","reset","school","search","send","settings","share","shopping-cart","show","snapchat","sort","speech-bubble","star","student","upload","user","warn-circle","warn-triangle","whatsapp","world","x","youtube"];function z(e){return t(e).catch((e=>{console.error("Unhandled error in Effect:",e)}))}export{h as iconNames,f as iconSizes,v as iconWeights,p as inputTypes,z as run,n as scaleValues,m as sizes,l as textSizes,o as variants}
@@ -1 +1 @@
1
- import{p as t,H as e,c as s,h as c,d as i,t as o}from"./p-vi4YzJmv.js";const n=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.actionClick=s(this,"actionClick")}actionClick;_onClick(t){this.actionClick.emit(t)}render(){return c(i,{key:"71303bfe6ac64a96edd21800ae5e8c43a3a38c23",onClick:this._onClick.bind(this)},c("slot",{key:"94922fdfd355e7e4d1b78bedb80ae814c186b199"}))}static get style(){return":host{display:block}"}},[257,"lmvz-action"]),a=n,l=function(){"undefined"!=typeof customElements&&["lmvz-action"].forEach((t=>{"lmvz-action"===t&&(customElements.get(o(t))||customElements.define(o(t),n))}))};export{a as LmvzAction,l as defineCustomElement}
1
+ import{p as t,H as e,c as s,h as c,d as i,t as o}from"./p-BaPwpeMs.js";const n=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.actionClick=s(this,"actionClick")}actionClick;_onClick(t){this.actionClick.emit(t)}render(){return c(i,{key:"71303bfe6ac64a96edd21800ae5e8c43a3a38c23",onClick:this._onClick.bind(this)},c("slot",{key:"94922fdfd355e7e4d1b78bedb80ae814c186b199"}))}static get style(){return":host{display:block}"}},[257,"lmvz-action"]),a=n,l=function(){"undefined"!=typeof customElements&&["lmvz-action"].forEach((t=>{"lmvz-action"===t&&(customElements.get(o(t))||customElements.define(o(t),n))}))};export{a as LmvzAction,l as defineCustomElement}
@@ -1 +1 @@
1
- import{p as t,c as o,h as e,d as r,t as n}from"./p-vi4YzJmv.js";import{c as a}from"./p-BfTCfPZ1.js";import{R as l,A as m}from"./p-CMteT-Yo.js";import{E as i}from"./p-CN0JX9-m.js";import{i as s,f as d}from"./p-B3JVFwO1.js";const c=t(class extends l{get el(){return this}inheritedAttributes={};formEl=null;formButtonEl=null;lmvzActivation;get ti(){return 0}scale="default";variant="secondary";disabled=!1;type="button";form;constructor(t){super(!1),!1!==t&&this.__registerHost(),this.__attachShadow(),this.lmvzActivation=o(this,"lmvzActivation"),this.addController(new m(this)),this.addController(new i(this,{localHandler:this.handleClick.bind(this),keys:["Enter"]}))}connectedCallback(){this.inheritedAttributes=s(this.el)}renderHiddenButton(){const t=this.formEl=d(this.form,this.el);if(!t)return;const{formButtonEl:o}=this;if(null!==o&&t.contains(o))return;const e=this.formButtonEl=document.createElement("button");e.type="submit",e.style.display="none",e.disabled=this.disabled,t.appendChild(e)}submitForm(t){this.formEl&&this.formButtonEl&&(t.preventDefault(),this.formButtonEl.click())}handleClick=t=>{"submit"===this.type&&this.submitForm(t)};render(){return this.renderHiddenButton(),e(r,{key:"cd4a63b866c801ad7f96f59d15e561a54bfe9ec2","aria-disabled":this.disabled?"true":null},e("button",{key:"a1e3ecb88fb84d724df4939519bb22d4b6725c1d",disabled:this.disabled,class:a(this.variant,{[this.scale??""]:!!this.scale,disabled:this.disabled}),...this.inheritedAttributes},e("slot",{key:"f1fd32c993b1ef9f6d62d6f3affa169c9368df78"})))}static get delegatesFocus(){return!0}static get style(){return" @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); } "}},[785,"lmvz-button",{ti:[2562,"tabindex"],scale:[513],variant:[513],disabled:[516],type:[1],form:[1]}]),v=c,u=function(){"undefined"!=typeof customElements&&["lmvz-button"].forEach((t=>{"lmvz-button"===t&&(customElements.get(n(t))||customElements.define(n(t),c))}))};export{v as LmvzButton,u as defineCustomElement}
1
+ import{p as t,c as o,h as e,d as r,t as n}from"./p-BaPwpeMs.js";import{c as a}from"./p-BfTCfPZ1.js";import{R as l,a as m}from"./p-DFXwtZsD.js";import{E as i}from"./p-CN0JX9-m.js";import{i as s,f as d}from"./p-B3JVFwO1.js";const c=t(class extends l{get el(){return this}validationEl;inheritedAttributes={};formEl=null;formButtonEl=null;lmvzActivation;get ti(){return 0}scale="default";variant="secondary";disabled=!1;type="button";form;constructor(t){super(!1),!1!==t&&this.__registerHost(),this.__attachShadow(),this.lmvzActivation=o(this,"lmvzActivation"),this.addController(new m(this)),this.addController(new i(this,{localHandler:this.handleClick.bind(this),keys:["Enter"]}))}connectedCallback(){this.inheritedAttributes=s(this.el),super.connectedCallback()}renderHiddenButton(){const t=this.formEl=d(this.form,this.el);if(!t)return;const{formButtonEl:o}=this;if(null!==o&&t.contains(o))return;const e=this.formButtonEl=document.createElement("button");e.type="submit",e.style.display="none",e.disabled=this.disabled,t.appendChild(e)}submitForm(t){this.formEl&&this.formButtonEl&&(t.preventDefault(),this.formButtonEl.click())}handleClick=t=>{"submit"===this.type&&this.submitForm(t)};render(){return this.renderHiddenButton(),e(r,{key:"3f3eda78349322ce5160d7aac1290a73f0adcd4a","aria-disabled":this.disabled?"true":null},e("button",{key:"b132404d8d5f5bf0fa7e845b562c953c5ceec36c",ref:t=>this.validationEl=t,disabled:this.disabled,class:a(this.variant,{[this.scale??""]:!!this.scale,disabled:this.disabled}),...this.inheritedAttributes},e("slot",{key:"ce63f7f1061ec9c3f10cbcfc67998ddbf3e04c3d"})))}static get delegatesFocus(){return!0}static get style(){return" @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); } "}},[785,"lmvz-button",{ti:[2562,"tabindex"],scale:[513],variant:[513],disabled:[516],type:[1],form:[1]}]),v=c,u=function(){"undefined"!=typeof customElements&&["lmvz-button"].forEach((t=>{"lmvz-button"===t&&(customElements.get(n(t))||customElements.define(n(t),c))}))};export{v as LmvzButton,u as defineCustomElement}
@@ -1 +1 @@
1
- import{p as e,H as r,c as t,h as a,d as o,t as m}from"./p-vi4YzJmv.js";import{a as n,s as l}from"./p-Bs6_m7Uw.js";const i=e(class extends r{constructor(e){super(),!1!==e&&this.__registerHost(),this.primaryAction=t(this,"primaryAction")}cardTitle;imageUrl;description;primaryActionLabel="";primaryAction;get fallbackImage(){return n(l("card-placeholder.svg"))}_onPrimaryClick(){this.primaryAction.emit()}_onOverflowClick(e){console.log(e)}render(){return a(o,{key:"1438354a53604954320d01652aa1d84f8712e875",role:"article"},a("div",{key:"dcffae2c48ebf8f8769cf07c2e78806f12df6888",class:"top"},a("div",{key:"e41e1d0aafbfc5879b86022e91958ef3373b48b2",class:"image-wrapper",style:{backgroundImage:`url(${this.imageUrl??this.fallbackImage})`}},a("div",{key:"f6a1fc9706012f39aca9dd0b995290e6042e3407",class:"chip-slot"},a("slot",{key:"4e014519c147705cc30b3268d652ea6c76c749ec",name:"chip"})))),a("div",{key:"e7baf78b660e9a97edd0b6a0aa1bdb1afa593fed",class:"bottom"},a("header",{key:"a8dad9f91df60f535725328a4901833d47652678"},a("h2",{key:"1cdbca46469750187856a46fa155128f1f8a677f",class:"title"},this.cardTitle)),a("p",{key:"f33c2c0af86d7be31fcbd676833b27c7d06e2dd9",class:"description"},this.description),a("div",{key:"a12595d514167fb957aac71fe3d144810b442f9d",class:"actions"},a("button",{key:"9730cedbf83599c09eedaaae43331147691486d6",class:"primary",onClick:this._onPrimaryClick.bind(this),"data-testid":"primary"},this.primaryActionLabel),a("button",{key:"48e9c511c406beb75334452769beade3dec9a3f5",class:"tertiary","aria-label":"More actions",onClick:this._onOverflowClick},a("span",{key:"81cc1af42a15dddb9dbd4f373a6a047c2e2cd563",class:"icon-placeholder"},"...")))))}static get assetsDirs(){return["../../assets"]}static get style(){return"@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; }"}},[774,"lmvz-card",{cardTitle:[1,"card-title"],imageUrl:[1,"image-url"],description:[1],primaryActionLabel:[1,"primary-action-label"]}]),c=i,d=function(){"undefined"!=typeof customElements&&["lmvz-card"].forEach((e=>{"lmvz-card"===e&&(customElements.get(m(e))||customElements.define(m(e),i))}))};export{c as LmvzCard,d as defineCustomElement}
1
+ import{p as e,H as r,c as t,h as a,d as o,t as m}from"./p-BaPwpeMs.js";import{c as n}from"./p-DcMNH3fv.js";const l=e(class extends r{constructor(e){super(),!1!==e&&this.__registerHost(),this.primaryAction=t(this,"primaryAction")}cardTitle;imageUrl;description;primaryActionLabel="";primaryAction;get fallbackImage(){return n("card-placeholder.svg")}_onPrimaryClick(){this.primaryAction.emit()}_onOverflowClick(e){console.log(e)}render(){return a(o,{key:"ba2e8d9e25428c744da2470cbd677306c56b09ae",role:"article"},a("div",{key:"54ff7545559a4b6fb00c94909717234f4dfedd7c",class:"top"},a("div",{key:"7bff35f247b6e8aca9b6346103139daa65ca16a3",class:"image-wrapper",style:{backgroundImage:`url(${this.imageUrl??this.fallbackImage})`}},a("div",{key:"c2c3d21227175b9dc0a55c75294f6c21bc713a26",class:"chip-slot"},a("slot",{key:"1a7002aab5fc3f9f698c3d1678f8819ea36f91d3",name:"chip"})))),a("div",{key:"a313321abe4da83db4b2ba64fdefa28edde93d41",class:"bottom"},a("header",{key:"f5ba333fcaa59d5b4f61dee94aba4628f49db9d7"},a("h2",{key:"b7d9ad6944b136476703cde89f885b189583eef1",class:"title"},this.cardTitle)),a("p",{key:"6594626904a4f9fbc53d5956b71bbdefe00add8c",class:"description"},this.description),a("div",{key:"d8bbfebeb572fcf6990160a0dba7c5ae8a5a7fc7",class:"actions"},a("button",{key:"6311a97a18412f8fbf8eb33e8a0f7a17700e71c6",class:"primary",onClick:this._onPrimaryClick.bind(this),"data-testid":"primary"},this.primaryActionLabel),a("button",{key:"12033ad5018d100f84f0149d83dc965d8e5b2c66",class:"tertiary","aria-label":"More actions",onClick:this._onOverflowClick},a("span",{key:"e11f8008542b4f7f70d1273bb31200c50d02aabb",class:"icon-placeholder"},"...")))))}static get assetsDirs(){return["../../assets"]}static get style(){return"@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; }"}},[774,"lmvz-card",{cardTitle:[1,"card-title"],imageUrl:[1,"image-url"],description:[1],primaryActionLabel:[1,"primary-action-label"]}]),i=l,c=function(){"undefined"!=typeof customElements&&["lmvz-card"].forEach((e=>{"lmvz-card"===e&&(customElements.get(m(e))||customElements.define(m(e),l))}))};export{i as LmvzCard,c as defineCustomElement}
@@ -1 +1 @@
1
- import{p as t,H as s,h as e,d as c,t as n}from"./p-vi4YzJmv.js";const o=t(class extends s{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow()}text;render(){return e(c,{key:"b247f41d22bcf77998bf5a49669f1aa8d7fd3a63"},this.text)}static get style(){return":host{display:block}"}},[513,"lmvz-chip",{text:[1]}]),i=o,m=function(){"undefined"!=typeof customElements&&["lmvz-chip"].forEach((t=>{"lmvz-chip"===t&&(customElements.get(n(t))||customElements.define(n(t),o))}))};export{i as LmvzChip,m as defineCustomElement}
1
+ import{p as t,H as s,h as e,d as c,t as n}from"./p-BaPwpeMs.js";const o=t(class extends s{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow()}text;render(){return e(c,{key:"b247f41d22bcf77998bf5a49669f1aa8d7fd3a63"},this.text)}static get style(){return":host{display:block}"}},[513,"lmvz-chip",{text:[1]}]),r=o,a=function(){"undefined"!=typeof customElements&&["lmvz-chip"].forEach((t=>{"lmvz-chip"===t&&(customElements.get(n(t))||customElements.define(n(t),o))}))};export{r as LmvzChip,a as defineCustomElement}