@lmvz-ds/components 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/cjs/{aria-loader-Cec1zR2g.js → aria-loader-BRo2FTGh.js} +1 -0
- package/cjs/index.cjs.js +1 -1
- package/cjs/lmvz-button_3.cjs.entry.js +375 -0
- package/cjs/lmvz-card.cjs.entry.js +2 -2
- package/cjs/lmvz-checkbox.cjs.entry.js +3 -3
- package/cjs/lmvz-chip.cjs.entry.js +3 -3
- package/cjs/lmvz-components.cjs.js +1 -1
- package/cjs/lmvz-header_2.cjs.entry.js +3 -3
- package/cjs/lmvz-input.cjs.entry.js +4 -4
- package/cjs/lmvz-menuitem.cjs.entry.js +3 -3
- package/cjs/lmvz-modal.cjs.entry.js +6 -109
- package/cjs/lmvz-select.cjs.entry.js +3 -3
- package/cjs/lmvz-toggle.cjs.entry.js +3 -3
- package/cjs/loader.cjs.js +1 -1
- package/cjs/{reactive-controller-host-DnSTWHCF.js → reactive-controller-host-BOFg4vL-.js} +1 -1
- package/collection/collection-manifest.json +1 -0
- package/collection/components/lmvz-button/lmvz-button.css +28 -17
- package/collection/components/lmvz-button/lmvz-button.js +6 -7
- package/collection/components/lmvz-button-group/lmvz-button-group.css +14 -0
- package/collection/components/lmvz-button-group/lmvz-button-group.js +216 -0
- package/collection/components/lmvz-card/lmvz-card.css +27 -16
- package/collection/components/lmvz-card/lmvz-card.js +1 -1
- package/collection/components/lmvz-checkbox/lmvz-checkbox.js +1 -1
- package/collection/components/lmvz-chip/lmvz-chip.js +1 -1
- package/collection/components/lmvz-header/lmvz-header.js +1 -1
- package/collection/components/lmvz-icon/lmvz-icon.js +1 -1
- package/collection/components/lmvz-input/lmvz-input.js +2 -2
- package/collection/components/lmvz-menuitem/lmvz-menuitem.js +1 -1
- package/collection/components/lmvz-modal/lmvz-modal.css +24 -30
- package/collection/components/lmvz-modal/lmvz-modal.js +4 -108
- package/collection/components/lmvz-select/lmvz-select.js +1 -1
- package/collection/components/lmvz-toggle/lmvz-toggle.js +1 -1
- package/collection/integration/header-integration/header-integration.js +1 -1
- package/components/index.d.ts +2 -0
- package/components/index.d.ts.bak +2 -0
- package/components/index.js +1 -1
- package/components/lmvz-button-group.d.ts +11 -0
- package/components/lmvz-button-group.d.ts.bak +11 -0
- package/components/lmvz-button-group.js +1 -0
- package/components/lmvz-button.js +1 -1
- package/components/lmvz-card.js +1 -1
- package/components/lmvz-checkbox.js +1 -1
- package/components/lmvz-chip.js +1 -1
- package/components/lmvz-header.js +1 -1
- package/components/lmvz-icon.js +1 -1
- package/components/lmvz-input.js +1 -1
- package/components/lmvz-menuitem.js +1 -1
- package/components/lmvz-modal.js +1 -1
- package/components/lmvz-select.js +1 -1
- package/components/lmvz-toggle.js +1 -1
- package/components/p-CdDO7mQa.js +1 -0
- package/components/p-Cg2XX_J-.js +1 -0
- package/components/p-DSvYtVoD.js +1 -0
- package/components/p-K_EPq-vy.js +1 -0
- package/components/p-slgmfnHm.js +1 -0
- package/esm/{aria-loader-BVolm0lC.js → aria-loader-GfsGHZHY.js} +1 -1
- package/esm/index.js +1 -1
- package/esm/lmvz-button_3.entry.js +371 -0
- package/esm/lmvz-card.entry.js +2 -2
- package/esm/lmvz-checkbox.entry.js +3 -3
- package/esm/lmvz-chip.entry.js +3 -3
- package/esm/lmvz-components.js +1 -1
- package/esm/lmvz-header_2.entry.js +3 -3
- package/esm/lmvz-input.entry.js +4 -4
- package/esm/lmvz-menuitem.entry.js +3 -3
- package/esm/lmvz-modal.entry.js +6 -109
- package/esm/lmvz-select.entry.js +3 -3
- package/esm/lmvz-toggle.entry.js +3 -3
- package/esm/loader.js +1 -1
- package/esm/{reactive-controller-host-lF2kXM1x.js → reactive-controller-host-CroMsXdS.js} +1 -1
- package/hydrate/index.js +268 -184
- package/hydrate/index.mjs +268 -184
- package/lmvz-components/index.esm.js +1 -1
- package/lmvz-components/lmvz-components.esm.js +1 -1
- package/lmvz-components/p-05896617.entry.js +1 -0
- package/lmvz-components/{p-1b181e90.entry.js → p-267344a7.entry.js} +1 -1
- package/lmvz-components/{p-ea335543.entry.js → p-2b09b8bc.entry.js} +1 -1
- package/lmvz-components/p-3df92762.entry.js +1 -0
- package/lmvz-components/{p-f8ea0eb2.entry.js → p-5f550b9f.entry.js} +1 -1
- package/lmvz-components/p-8e43fabb.entry.js +1 -0
- package/lmvz-components/{p-DCTzMRMQ.js → p-BRl6zKXT.js} +1 -1
- package/lmvz-components/p-CdDO7mQa.js +1 -0
- package/lmvz-components/p-d1dacf7e.entry.js +1 -0
- package/lmvz-components/{p-d984e118.entry.js → p-f6d1d9df.entry.js} +1 -1
- package/lmvz-components/p-f7f32879.entry.js +1 -0
- package/lmvz-components/{p-08a08b63.entry.js → p-fa4e00cf.entry.js} +1 -1
- package/manifest.json +105 -11
- package/package.json +5 -1
- package/types/components/lmvz-button/lmvz-button.d.ts +1 -1
- package/types/components/lmvz-button-group/lmvz-button-group.d.ts +20 -0
- package/types/components/lmvz-modal/lmvz-modal.d.ts +1 -16
- package/types/components.d.ts +27 -3
- package/cjs/lmvz-button_2.cjs.entry.js +0 -198
- package/components/p-Boj0PCdB.js +0 -1
- package/components/p-Cc6dOWwS.js +0 -1
- package/components/p-DBc1BzQb.js +0 -1
- package/esm/lmvz-button_2.entry.js +0 -195
- package/lmvz-components/p-23fb2476.entry.js +0 -1
- package/lmvz-components/p-6bb145e4.entry.js +0 -1
- package/lmvz-components/p-7a310b1e.entry.js +0 -1
- package/lmvz-components/p-b7940687.entry.js +0 -1
- package/lmvz-components/p-db8306a5.entry.js +0 -1
- package/lmvz-components/p-dhVSUYqd.js +0 -1
package/hydrate/index.mjs
CHANGED
|
@@ -5884,7 +5884,7 @@ class ReactiveControllerHost {
|
|
|
5884
5884
|
}
|
|
5885
5885
|
}
|
|
5886
5886
|
|
|
5887
|
-
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 {
|
|
5887
|
+
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; } *[hidden] { display: none !important; } } :host { button { --lmvz-button-color: var(--lmvz-component-color, var(--lmvz-semantic-color-int-on-secondary, #000000)); --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-secondary, #f0f0f0); 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-on-active, #0e7ab4); 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-secondary-hover, #e0e0e0); } button:not([disabled]):active { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-active, #d4d4d4); } button.primary { --lmvz-button-background: var(--lmvz-semantic-color-int-primary, #000000); --lmvz-button-color: var(--lmvz-semantic-color-int-on-primary, #ffffff); --lmvz-button-border-width: 0; --lmvz-button-border-color: transparent; } button.primary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-hover, #2e2e2e); --lmvz-button-border-color: var(--lmvz-semantic-color-border-hover, #c7c7c7); } button.primary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-active, #545454); --lmvz-button-border-color: var(--lmvz-semantic-color-border-active, #0f8acc); } 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: 0; --lmvz-button-border-color: transparent; } 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, #0f8acc); } 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: inline-block; } ::slotted(*) { --lmvz-component-color: var(--lmvz-button-color); } `;
|
|
5888
5888
|
|
|
5889
5889
|
class LmvzButton extends ReactiveControllerHost {
|
|
5890
5890
|
get el() { return getElement(this); }
|
|
@@ -5897,7 +5897,7 @@ class LmvzButton extends ReactiveControllerHost {
|
|
|
5897
5897
|
return 0;
|
|
5898
5898
|
}
|
|
5899
5899
|
scale = 'default';
|
|
5900
|
-
variant
|
|
5900
|
+
variant;
|
|
5901
5901
|
disabled = false;
|
|
5902
5902
|
type = 'button';
|
|
5903
5903
|
form;
|
|
@@ -5972,7 +5972,7 @@ class LmvzButton extends ReactiveControllerHost {
|
|
|
5972
5972
|
};
|
|
5973
5973
|
render() {
|
|
5974
5974
|
this.renderHiddenButton();
|
|
5975
|
-
return (hAsync(Host, { key: '
|
|
5975
|
+
return (hAsync(Host, { key: '8196de85afc3878c6f38e582d7c031f5d19bcd36', "aria-disabled": this.disabled ? 'true' : null }, hAsync("button", { key: '226f2f4ddbf861a8aed66d72c1980aa713e667f3', ref: (e) => (this.validationEl = e), disabled: this.disabled, type: this.type, class: classNames(this.variant ?? 'secondary', { [this.scale ?? '']: !!this.scale, disabled: this.disabled }), ...this.inheritedAttributes }, hAsync("slot", { key: '436ecc98fc7d7350c67d01d13e5fd4566a238b03' }))));
|
|
5976
5976
|
}
|
|
5977
5977
|
static get delegatesFocus() { return true; }
|
|
5978
5978
|
static get style() { return lmvzButtonCss(); }
|
|
@@ -5996,69 +5996,22 @@ class LmvzButton extends ReactiveControllerHost {
|
|
|
5996
5996
|
}; }
|
|
5997
5997
|
}
|
|
5998
5998
|
|
|
5999
|
-
|
|
6000
|
-
|
|
6001
|
-
|
|
6002
|
-
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
|
|
6006
|
-
|
|
6007
|
-
|
|
6008
|
-
|
|
6009
|
-
|
|
6010
|
-
|
|
6011
|
-
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.`);
|
|
6012
|
-
return new URL(relativeAssetPath, getLocationBase());
|
|
6013
|
-
}
|
|
6014
|
-
};
|
|
6015
|
-
function joinPath(...parts) {
|
|
6016
|
-
return parts.filter(Boolean).join('/').replace('//', '/').replace('/./', '/');
|
|
5999
|
+
/**
|
|
6000
|
+
* Returns a function that delegates to the given predicate/filter and negates its result.
|
|
6001
|
+
* The returned function preserves the input function's types, arguments and timing.
|
|
6002
|
+
*
|
|
6003
|
+
* @param delegate - The predicate/filter function to negate.
|
|
6004
|
+
* @returns A function that returns the negated result.
|
|
6005
|
+
*/
|
|
6006
|
+
function negate(delegate) {
|
|
6007
|
+
return (...args) => {
|
|
6008
|
+
const result = delegate(...args);
|
|
6009
|
+
return isPromise(result) ? result.then((res) => !res) : !result;
|
|
6010
|
+
};
|
|
6017
6011
|
}
|
|
6018
6012
|
|
|
6019
|
-
const
|
|
6020
|
-
|
|
6021
|
-
class LmvzCard {
|
|
6022
|
-
constructor(hostRef) {
|
|
6023
|
-
registerInstance(this, hostRef);
|
|
6024
|
-
this.primaryAction = createEvent(this, "primaryAction", 7);
|
|
6025
|
-
}
|
|
6026
|
-
cardTitle;
|
|
6027
|
-
imageUrl;
|
|
6028
|
-
description;
|
|
6029
|
-
primaryActionLabel = '';
|
|
6030
|
-
primaryAction;
|
|
6031
|
-
get fallbackImage() {
|
|
6032
|
-
return createAssetUrlSafely('card-placeholder.svg');
|
|
6033
|
-
}
|
|
6034
|
-
_onPrimaryClick() {
|
|
6035
|
-
this.primaryAction.emit();
|
|
6036
|
-
}
|
|
6037
|
-
_onOverflowClick(event) {
|
|
6038
|
-
console.log(event);
|
|
6039
|
-
}
|
|
6040
|
-
render() {
|
|
6041
|
-
const imgStyle = {
|
|
6042
|
-
backgroundImage: `url(${this.imageUrl ?? this.fallbackImage})`,
|
|
6043
|
-
};
|
|
6044
|
-
return (hAsync(Host, { key: '46c2832b4f90b9eb222749632bc7ad59cd645e10', role: "article" }, hAsync("div", { key: 'cc387fe96cff2dd04c24f75cf838a2bf6f438279', class: "top" }, hAsync("div", { key: 'f9a54a5f81378ef4265e1d74c36c78af002e8874', class: "image-wrapper", style: imgStyle }, hAsync("div", { key: '76daed00408f7ae9ee46977637ddcd3d4f846380', class: "chip-slot" }, hAsync("slot", { key: '6ad522ef7428166b876d0218ef8d801c4ef337f1', name: "chip" })))), hAsync("div", { key: '9c9799668ac199cfecbe10061e271d70d70e2d07', class: "bottom" }, hAsync("header", { key: '1bec743235bea5c7ab163225ffbd7bc6cf11f754' }, hAsync("h2", { key: '06f8e14153328bc5ca920e71e09d9343047c440c', class: "title" }, this.cardTitle)), hAsync("p", { key: '86b95db4e6464ca3236b4a03798013c3580819bf', class: "description" }, this.description), hAsync("div", { key: '553dc998d5318a4730196baa0b9baff3a0a3369f', class: "actions" }, hAsync("button", { key: '7532d01b46769198c23a1b1015c187fdefce146a', class: "primary", onClick: this._onPrimaryClick.bind(this), "data-testid": "primary" }, this.primaryActionLabel), hAsync("button", { key: '633d679ae59b1896aa2a06e04b4564569cf27a7d', class: "tertiary", "aria-label": "More actions", onClick: this._onOverflowClick }, hAsync("span", { key: 'b72c45f93d259502b9d7c5ffb19e292a53c60ec6', class: "icon-placeholder" }, "..."))))));
|
|
6045
|
-
}
|
|
6046
|
-
static get assetsDirs() { return ["../../assets"]; }
|
|
6047
|
-
static get style() { return lmvzCardCss(); }
|
|
6048
|
-
static get cmpMeta() { return {
|
|
6049
|
-
"$flags$": 774,
|
|
6050
|
-
"$tagName$": "lmvz-card",
|
|
6051
|
-
"$members$": {
|
|
6052
|
-
"cardTitle": [1, "card-title"],
|
|
6053
|
-
"imageUrl": [1, "image-url"],
|
|
6054
|
-
"description": [1],
|
|
6055
|
-
"primaryActionLabel": [1, "primary-action-label"]
|
|
6056
|
-
},
|
|
6057
|
-
"$listeners$": undefined,
|
|
6058
|
-
"$lazyBundleId$": "-",
|
|
6059
|
-
"$attrsToReflect$": []
|
|
6060
|
-
}; }
|
|
6061
|
-
}
|
|
6013
|
+
const chipTypes = ['active', 'warning', 'success', 'error', 'neutral'];
|
|
6014
|
+
const chipSizes = ['default', 'small'];
|
|
6062
6015
|
|
|
6063
6016
|
/**
|
|
6064
6017
|
* Tests if a value is a `function`.
|
|
@@ -8210,6 +8163,243 @@ function toValidSvgStringWithFallback(value) {
|
|
|
8210
8163
|
}
|
|
8211
8164
|
}
|
|
8212
8165
|
|
|
8166
|
+
const lmvzButtonGroupCss = () => `:host{display:flex;justify-content:flex-end;gap:var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));font:var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router);flex-wrap:wrap}::slotted([hidden]){display:none !important}`;
|
|
8167
|
+
|
|
8168
|
+
class LmvzButtonGroup {
|
|
8169
|
+
constructor(hostRef) {
|
|
8170
|
+
registerInstance(this, hostRef);
|
|
8171
|
+
}
|
|
8172
|
+
actionsSlot;
|
|
8173
|
+
validationMessageCache = [];
|
|
8174
|
+
actionsStateObserver;
|
|
8175
|
+
get primaryEnabledAction() {
|
|
8176
|
+
return this.enabledButtons.find(isPrimaryAction) ?? this.enabledButtons[0];
|
|
8177
|
+
}
|
|
8178
|
+
get hasActions() {
|
|
8179
|
+
return this.assignedButtons.some((element) => isVisible(element) && isActionButton(element) && !isDisabledButton(element));
|
|
8180
|
+
}
|
|
8181
|
+
componentDidLoad() {
|
|
8182
|
+
this.handleActionsSlotChange();
|
|
8183
|
+
}
|
|
8184
|
+
disconnectedCallback() {
|
|
8185
|
+
this.actionsStateObserver?.disconnect();
|
|
8186
|
+
}
|
|
8187
|
+
get assignedElements() {
|
|
8188
|
+
return this.actionsSlot?.assignedElements({ flatten: true }) ?? [];
|
|
8189
|
+
}
|
|
8190
|
+
get assignedButtons() {
|
|
8191
|
+
return this.assignedElements.filter(isActionButton);
|
|
8192
|
+
}
|
|
8193
|
+
get visibleButtons() {
|
|
8194
|
+
return this.assignedButtons.filter(isVisible);
|
|
8195
|
+
}
|
|
8196
|
+
get enabledButtons() {
|
|
8197
|
+
return this.visibleButtons.filter(negate(isDisabledButton));
|
|
8198
|
+
}
|
|
8199
|
+
getActionValidationResult() {
|
|
8200
|
+
if (!this.visibleButtons.length) {
|
|
8201
|
+
return [];
|
|
8202
|
+
}
|
|
8203
|
+
const primaryActions = this.visibleButtons.filter(isPrimaryAction);
|
|
8204
|
+
const secondaryActions = this.visibleButtons.filter(isSecondaryAction);
|
|
8205
|
+
const issues = [];
|
|
8206
|
+
const order = this.visibleButtons.toReversed();
|
|
8207
|
+
if (primaryActions.length !== 1)
|
|
8208
|
+
issues.push('LmvzModal actions slot must contain exactly one primary action.');
|
|
8209
|
+
if (secondaryActions.length > 1)
|
|
8210
|
+
issues.push(`LmvzModal actions slot must contain at most one secondary action (received ${secondaryActions.length})`);
|
|
8211
|
+
if (primaryActions.length) {
|
|
8212
|
+
const primaryAction = primaryActions[0];
|
|
8213
|
+
const secondaryAction = secondaryActions[0];
|
|
8214
|
+
if (order.indexOf(primaryAction) !== 0)
|
|
8215
|
+
issues.push('Primary action must be the last focusable element in the actions slot (i.e. rightmost button).');
|
|
8216
|
+
if (secondaryAction && order.indexOf(secondaryAction) !== 1)
|
|
8217
|
+
issues.push('Secondary action must be the second-to-last focusable element in the actions slot (i.e. left of primary button).');
|
|
8218
|
+
}
|
|
8219
|
+
else if (secondaryActions.length) {
|
|
8220
|
+
const secondaryAction = secondaryActions[0];
|
|
8221
|
+
if (order.indexOf(secondaryAction) !== 0)
|
|
8222
|
+
issues.push('Secondary action must be the last focusable element in the actions slot when no primary action is present (i.e. rightmost button).');
|
|
8223
|
+
}
|
|
8224
|
+
return issues;
|
|
8225
|
+
}
|
|
8226
|
+
handleActionsSlotChange = () => {
|
|
8227
|
+
this.observeActionState();
|
|
8228
|
+
this.syncActionsState();
|
|
8229
|
+
};
|
|
8230
|
+
observeActionState() {
|
|
8231
|
+
if (typeof MutationObserver === 'undefined')
|
|
8232
|
+
return;
|
|
8233
|
+
this.actionsStateObserver?.disconnect();
|
|
8234
|
+
if (!this.assignedButtons.length)
|
|
8235
|
+
return;
|
|
8236
|
+
this.actionsStateObserver = new MutationObserver(() => {
|
|
8237
|
+
this.syncActionsState();
|
|
8238
|
+
});
|
|
8239
|
+
this.assignedButtons.forEach((element) => {
|
|
8240
|
+
this.actionsStateObserver?.observe(element, {
|
|
8241
|
+
attributes: true,
|
|
8242
|
+
attributeFilter: ['disabled', 'hidden', 'variant'],
|
|
8243
|
+
});
|
|
8244
|
+
});
|
|
8245
|
+
}
|
|
8246
|
+
syncActionsState() {
|
|
8247
|
+
const assignedElements = this.assignedElements;
|
|
8248
|
+
assignedElements.forEach((element) => {
|
|
8249
|
+
const isAllowedAction = ['LMVZ-BUTTON', 'BUTTON'].includes(element.tagName.toUpperCase());
|
|
8250
|
+
if (isAllowedAction)
|
|
8251
|
+
return;
|
|
8252
|
+
if (!element.hasAttribute('hidden')) {
|
|
8253
|
+
element.setAttribute('hidden', '');
|
|
8254
|
+
}
|
|
8255
|
+
if (element.getAttribute('aria-hidden') !== 'true') {
|
|
8256
|
+
element.setAttribute('aria-hidden', 'true');
|
|
8257
|
+
}
|
|
8258
|
+
});
|
|
8259
|
+
this.checkActions();
|
|
8260
|
+
const length = this.visibleButtons.length;
|
|
8261
|
+
for (let i = 0; i < length; i++) {
|
|
8262
|
+
const variant = i === length - 1 ? 'primary' : i === length - 2 ? 'secondary' : 'tertiary';
|
|
8263
|
+
const element = this.visibleButtons.at(i);
|
|
8264
|
+
if (!element)
|
|
8265
|
+
continue;
|
|
8266
|
+
if (isLmvzButton(element)) {
|
|
8267
|
+
if (!element.getAttribute('variant'))
|
|
8268
|
+
element.setAttribute('variant', variant);
|
|
8269
|
+
}
|
|
8270
|
+
else {
|
|
8271
|
+
element.classList.add(variant);
|
|
8272
|
+
}
|
|
8273
|
+
}
|
|
8274
|
+
this.focusPrimaryAction();
|
|
8275
|
+
}
|
|
8276
|
+
focusPrimaryAction() {
|
|
8277
|
+
const focusTarget = this.primaryEnabledAction;
|
|
8278
|
+
if (!focusTarget || typeof window === 'undefined')
|
|
8279
|
+
return;
|
|
8280
|
+
window.requestAnimationFrame(() => {
|
|
8281
|
+
if (canReceiveFocus(focusTarget)) {
|
|
8282
|
+
focusTarget.focus();
|
|
8283
|
+
}
|
|
8284
|
+
});
|
|
8285
|
+
}
|
|
8286
|
+
checkActions() {
|
|
8287
|
+
if (!isAriaValidationEnabled())
|
|
8288
|
+
return;
|
|
8289
|
+
const issues = this.getActionValidationResult();
|
|
8290
|
+
if (!issues.length) {
|
|
8291
|
+
return;
|
|
8292
|
+
}
|
|
8293
|
+
issues.forEach((issue) => {
|
|
8294
|
+
if (this.validationMessageCache.includes(issue))
|
|
8295
|
+
return;
|
|
8296
|
+
console.warn(issue);
|
|
8297
|
+
this.validationMessageCache.push(issue);
|
|
8298
|
+
});
|
|
8299
|
+
}
|
|
8300
|
+
render() {
|
|
8301
|
+
return (hAsync(Host, { key: '56b60821ecaa2301d13e78d621e873aa74cd170e' }, hAsync("slot", { key: 'e6a1422950fa5b0026356b7788a607a690116186', ref: (element) => (this.actionsSlot = element), onSlotchange: this.handleActionsSlotChange })));
|
|
8302
|
+
}
|
|
8303
|
+
static get style() { return lmvzButtonGroupCss(); }
|
|
8304
|
+
static get cmpMeta() { return {
|
|
8305
|
+
"$flags$": 265,
|
|
8306
|
+
"$tagName$": "lmvz-button-group",
|
|
8307
|
+
"$members$": {
|
|
8308
|
+
"primaryEnabledAction": [2064],
|
|
8309
|
+
"hasActions": [2052, "has-actions"]
|
|
8310
|
+
},
|
|
8311
|
+
"$listeners$": undefined,
|
|
8312
|
+
"$lazyBundleId$": "-",
|
|
8313
|
+
"$attrsToReflect$": []
|
|
8314
|
+
}; }
|
|
8315
|
+
}
|
|
8316
|
+
function isActionButton(element) {
|
|
8317
|
+
return ['LMVZ-BUTTON', 'BUTTON'].includes(element.tagName.toUpperCase());
|
|
8318
|
+
}
|
|
8319
|
+
function isLmvzButton(element) {
|
|
8320
|
+
return element?.tagName.toUpperCase() === 'LMVZ-BUTTON';
|
|
8321
|
+
}
|
|
8322
|
+
function isDisabledButton(element) {
|
|
8323
|
+
return element.hasAttribute('disabled') || element.disabled === true;
|
|
8324
|
+
}
|
|
8325
|
+
function isVisible(element) {
|
|
8326
|
+
return !element.hasAttribute('hidden');
|
|
8327
|
+
}
|
|
8328
|
+
function getActionVariant(element) {
|
|
8329
|
+
const variant = element.getAttribute('variant') ?? element.variant;
|
|
8330
|
+
return variant === 'primary' || variant === 'secondary' || variant === 'tertiary' ? variant : 'secondary';
|
|
8331
|
+
}
|
|
8332
|
+
function isPrimaryAction(element) {
|
|
8333
|
+
return getActionVariant(element) === 'primary';
|
|
8334
|
+
}
|
|
8335
|
+
function isSecondaryAction(element) {
|
|
8336
|
+
return getActionVariant(element) === 'secondary';
|
|
8337
|
+
}
|
|
8338
|
+
|
|
8339
|
+
function getLocationBase() {
|
|
8340
|
+
return (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('@app-factory-entry.js', document.baseURI).href)) ?? window?.location?.origin ?? '';
|
|
8341
|
+
}
|
|
8342
|
+
|
|
8343
|
+
const relativeAssetsPath = '../../assets';
|
|
8344
|
+
const createAssetUrlSafely = (file, pathFromAssetRoot) => {
|
|
8345
|
+
const relativeAssetPath = joinPath(relativeAssetsPath, pathFromAssetRoot, file);
|
|
8346
|
+
try {
|
|
8347
|
+
return getAssetPath(relativeAssetPath);
|
|
8348
|
+
}
|
|
8349
|
+
catch {
|
|
8350
|
+
console.warn(`Failed to create URL for asset "${file}" in path "${pathFromAssetRoot}".
|
|
8351
|
+
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.`);
|
|
8352
|
+
return new URL(relativeAssetPath, getLocationBase());
|
|
8353
|
+
}
|
|
8354
|
+
};
|
|
8355
|
+
function joinPath(...parts) {
|
|
8356
|
+
return parts.filter(Boolean).join('/').replace('//', '/').replace('/./', '/');
|
|
8357
|
+
}
|
|
8358
|
+
|
|
8359
|
+
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; } *[hidden] { display: none !important; } } .sc-lmvz-card-h { button { --lmvz-button-color: var(--lmvz-component-color, var(--lmvz-semantic-color-int-on-secondary, #000000)); --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-secondary, #f0f0f0); 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-on-active, #0e7ab4); 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-secondary-hover, #e0e0e0); } button:not([disabled]):active { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-active, #d4d4d4); } button.primary { --lmvz-button-background: var(--lmvz-semantic-color-int-primary, #000000); --lmvz-button-color: var(--lmvz-semantic-color-int-on-primary, #ffffff); --lmvz-button-border-width: 0; --lmvz-button-border-color: transparent; } button.primary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-hover, #2e2e2e); --lmvz-button-border-color: var(--lmvz-semantic-color-border-hover, #c7c7c7); } button.primary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-active, #545454); --lmvz-button-border-color: var(--lmvz-semantic-color-border-active, #0f8acc); } 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: 0; --lmvz-button-border-color: transparent; } 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, #0f8acc); } 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-card-component-card-minwidth, 20.4375rem); max-width: var(--lmvz-card-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(2.25rem, 2.13rem + 0.52vw, 2.75rem) / 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; }`;
|
|
8360
|
+
|
|
8361
|
+
class LmvzCard {
|
|
8362
|
+
constructor(hostRef) {
|
|
8363
|
+
registerInstance(this, hostRef);
|
|
8364
|
+
this.primaryAction = createEvent(this, "primaryAction", 7);
|
|
8365
|
+
}
|
|
8366
|
+
cardTitle;
|
|
8367
|
+
imageUrl;
|
|
8368
|
+
description;
|
|
8369
|
+
primaryActionLabel = '';
|
|
8370
|
+
primaryAction;
|
|
8371
|
+
get fallbackImage() {
|
|
8372
|
+
return createAssetUrlSafely('card-placeholder.svg');
|
|
8373
|
+
}
|
|
8374
|
+
_onPrimaryClick() {
|
|
8375
|
+
this.primaryAction.emit();
|
|
8376
|
+
}
|
|
8377
|
+
_onOverflowClick(event) {
|
|
8378
|
+
console.log(event);
|
|
8379
|
+
}
|
|
8380
|
+
render() {
|
|
8381
|
+
const imgStyle = {
|
|
8382
|
+
backgroundImage: `url(${this.imageUrl ?? this.fallbackImage})`,
|
|
8383
|
+
};
|
|
8384
|
+
return (hAsync(Host, { key: '2d9ecdeed986f142fb7ff477b56dece59549bbc7', role: "article" }, hAsync("div", { key: '34fc9c3a1338b31ce73424e8c07c79a291ead85c', class: "top" }, hAsync("div", { key: '1756e6b26d7f42499753c36ed0fc13755fe32bfe', class: "image-wrapper", style: imgStyle }, hAsync("div", { key: 'cd8be8acc9e949092b6363024316d12d445a9fbc', class: "chip-slot" }, hAsync("slot", { key: '26389ab3b7031b948ff1701857e6028446662cf5', name: "chip" })))), hAsync("div", { key: '2fa61cd7bef437f15929ae39be7fa294e8778321', class: "bottom" }, hAsync("header", { key: 'b237ca025e42a29f528f827dc3c83b3b0f9267c0' }, hAsync("h2", { key: 'ffd0a509ba97acb75d4c15d0fd01eef08689a2a7', class: "title" }, this.cardTitle)), hAsync("p", { key: 'c40bd5d5f7e41a0cebc2f7f9e572ba98cc892cc1', class: "description" }, this.description), hAsync("div", { key: '7663f93b41ef1e798b464bd6ad75ca8a53c0667b', class: "actions" }, hAsync("button", { key: '3348e6700aa1571183558ab8fe4f73393c1cc943', class: "primary", onClick: this._onPrimaryClick.bind(this), "data-testid": "primary" }, this.primaryActionLabel), hAsync("button", { key: 'd3a12cdabbdd68c3b04e06984db44abd3bbd22ea', class: "tertiary", "aria-label": "More actions", onClick: this._onOverflowClick }, hAsync("span", { key: '80e31e6b691e18d1b42a2b4831349c3abf8e02b0', class: "icon-placeholder" }, "..."))))));
|
|
8385
|
+
}
|
|
8386
|
+
static get assetsDirs() { return ["../../assets"]; }
|
|
8387
|
+
static get style() { return lmvzCardCss(); }
|
|
8388
|
+
static get cmpMeta() { return {
|
|
8389
|
+
"$flags$": 774,
|
|
8390
|
+
"$tagName$": "lmvz-card",
|
|
8391
|
+
"$members$": {
|
|
8392
|
+
"cardTitle": [1, "card-title"],
|
|
8393
|
+
"imageUrl": [1, "image-url"],
|
|
8394
|
+
"description": [1],
|
|
8395
|
+
"primaryActionLabel": [1, "primary-action-label"]
|
|
8396
|
+
},
|
|
8397
|
+
"$listeners$": undefined,
|
|
8398
|
+
"$lazyBundleId$": "-",
|
|
8399
|
+
"$attrsToReflect$": []
|
|
8400
|
+
}; }
|
|
8401
|
+
}
|
|
8402
|
+
|
|
8213
8403
|
const checkmarkSvg = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIKICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiPgogICAgPHBhdGggZD0iTTMuNzUgMTIuNTYyNUw4LjgzMDc5IDE3LjYyNUwyMC40Mzc1IDYuMzc1IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+';
|
|
8214
8404
|
|
|
8215
8405
|
const lmvzCheckboxCss = () => `@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-checkbox-h { display: inline-block; --checkbox-box-size: var(--lmvz-global-s18, 18px); --checkbox-border-radius: var(--lmvz-global-s4, 4px); --checkbox-bg: var(--lmvz-semantic-color-surface-input-primary, #ffffff); --checkbox-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); --checkbox-border-color-hover: var(--lmvz-semantic-color-border-hover, #c7c7c7); --checkbox-border-color-checked: var(--lmvz-semantic-color-border-active, #0f8acc); --checkbox-border-color-error: var(--lmvz-semantic-color-status-on-danger, #e52a31); --checkbox-wrapper-bg-hover: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); --checkbox-wrapper-bg-checked: var(--lmvz-semantic-color-status-active, #f1f9fe); --checkbox-ripple-bg: var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0); --checkbox-checkmark-color: var(--lmvz-semantic-color-border-active, #0f8acc); --checkbox-label-color: var(--lmvz-semantic-color-on-surface-primary, #000000); --checkbox-label-color-checked: var(--lmvz-semantic-color-status-on-active, #0e7ab4); --checkbox-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #7a7a7a); --checkbox-error-color: var(--lmvz-semantic-color-status-on-danger, #e52a31); --checkbox-focus-color: var(--lmvz-semantic-color-status-on-active, #0e7ab4); --checkbox-easing: var(--lmvz-global-easing-default, ease); --checkbox-duration: 0.2s; } .pill.sc-lmvz-checkbox { display: flex; align-items: center; gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); padding-block: var(--lmvz-dimension-2-8, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem)); padding-inline: var(--lmvz-dimension-4-10, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); border-radius: var(--lmvz-semantic-border-radius-round, 999px); cursor: pointer; text-decoration: none; background-color: transparent; transition: background-color var(--checkbox-duration) var(--checkbox-easing); } input.sc-lmvz-checkbox { position: absolute; opacity: 0; width: var(--checkbox-box-size); height: var(--checkbox-box-size); margin: 0; cursor: pointer; z-index: 1; } .box.sc-lmvz-checkbox { display: flex; align-items: center; justify-content: center; width: var(--checkbox-box-size); height: var(--checkbox-box-size); background-color: var(--checkbox-bg); border: var(--lmvz-semantic-border-width-default, 1px) solid var(--checkbox-border-color); border-radius: var(--checkbox-border-radius); color: var(--checkbox-checkmark-color); transition: border-color var(--checkbox-duration) var(--checkbox-easing), background-color var(--checkbox-duration) var(--checkbox-easing); pointer-events: none; flex-shrink: 0; } .indicator.sc-lmvz-checkbox { display: flex; align-items: center; justify-content: center; line-height: 0; } .content.sc-lmvz-checkbox { display: flex; flex-direction: column; overflow-wrap: break-word; min-width: 0; } label.sc-lmvz-checkbox { font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); color: var(--checkbox-label-color); transition: color var(--checkbox-duration) var(--checkbox-easing); } .helper-text.sc-lmvz-checkbox { font: var(--lmvz-typography-body-sm, 400 clamp(0.75rem, 0.73rem + 0.06vw, 0.81rem) / 1.4 Router); color: var(--checkbox-helper-color); margin-block-start: 2px; } .error-text.sc-lmvz-checkbox { font: var(--lmvz-typography-body-sm, 400 clamp(0.75rem, 0.73rem + 0.06vw, 0.81rem) / 1.4 Router); color: var(--checkbox-error-color); display: block; margin-block-start: 4px; padding-inline: 10px; } @media (hover: hover) { .pill.sc-lmvz-checkbox:hover { background-color: var(--checkbox-wrapper-bg-hover); } .pill.sc-lmvz-checkbox:hover .box.sc-lmvz-checkbox { border-color: var(--checkbox-border-color-hover); } } [checked].sc-lmvz-checkbox-h .pill.sc-lmvz-checkbox { background-color: var(--checkbox-wrapper-bg-checked); } [checked].sc-lmvz-checkbox-h .box.sc-lmvz-checkbox { border-color: var(--checkbox-border-color-checked); } [checked].sc-lmvz-checkbox-h label.sc-lmvz-checkbox { color: var(--checkbox-label-color-checked); } [error].sc-lmvz-checkbox-h .box.sc-lmvz-checkbox { border-color: var(--checkbox-border-color-error); } [error].sc-lmvz-checkbox-h .helper-text.sc-lmvz-checkbox { color: var(--checkbox-error-color); } [disabled].sc-lmvz-checkbox-h { opacity: var(--lmvz-component-input-disabled-opacity, 40%); pointer-events: none; } [disabled].sc-lmvz-checkbox-h .pill.sc-lmvz-checkbox { cursor: not-allowed; } [disabled].sc-lmvz-checkbox-h input.sc-lmvz-checkbox { cursor: not-allowed; } input.sc-lmvz-checkbox:focus-visible ~ .box.sc-lmvz-checkbox { outline: 2px solid var(--checkbox-focus-color); outline-offset: 2px; box-shadow: 0 var(--lmvz-semantic-shadow-l1-1-position-y, 2px) 0 var(--lmvz-semantic-shadow-l1-1-blur, 4px) var(--lmvz-semantic-color-shadow-l1-colored, rgba(175, 223, 249, 0.42)); } @media (forced-colors: active) { .box.sc-lmvz-checkbox { forced-color-adjust: auto; border-color: ButtonText; background-color: Field; } [checked].sc-lmvz-checkbox-h .box.sc-lmvz-checkbox { border-color: Highlight; background-color: Field; } .indicator.sc-lmvz-checkbox { color: ButtonText; } [checked].sc-lmvz-checkbox-h .indicator.sc-lmvz-checkbox { color: HighlightText; } input.sc-lmvz-checkbox:focus-visible ~ .box.sc-lmvz-checkbox { outline-color: Highlight; box-shadow: none; } }`;
|
|
@@ -8303,7 +8493,7 @@ class LmvzCheckbox extends ReactiveControllerHost {
|
|
|
8303
8493
|
this.lmvzChange.emit(this.checked);
|
|
8304
8494
|
};
|
|
8305
8495
|
render() {
|
|
8306
|
-
return (hAsync(Host, { key: '
|
|
8496
|
+
return (hAsync(Host, { key: '70201fa49465f1e29b98bb251ea254be0293b1df' }, hAsync("div", { key: 'dfeb788e3e2d9a8329e7798954c744eee616692e', class: "pill" }, hAsync("input", { key: '79fefaa297a5fbbb1b7f180c7cf4cccf8650a1f0', type: "checkbox", id: this.checkboxId, checked: this.checkedState, disabled: this.disabled, required: this.required, "aria-required": this.required ? 'true' : 'false', "aria-invalid": this.error ? 'true' : 'false', "aria-describedby": this.ariaDescribedBy, "aria-errormessage": this.error && this.errorId ? this.errorId : undefined, ref: (el) => (this.nativeInput = el), onChange: this.handleChange, autoFocus: this.autofocus }), hAsync("span", { key: '8808a026274979678515b3e750065af38d62fff9', class: "box", "aria-hidden": "true" }, this.checkedState && hAsync("span", { key: '861c08fb2a5cc6f24d3ae0a9f28cb6d2f51beda4', class: "indicator", innerHTML: CHECKMARK_SVG })), hAsync("span", { key: '6dc36656d76bd3a6816553b4dcbdbea2c9bd2b0f', class: "content" }, hAsync("label", { key: 'c343c4261e2eb231925d0f3ca0a83f9f3cdd0b9b', htmlFor: this.checkboxId }, this.label), this.helperText && (hAsync("span", { key: '8473ed19adfe975b715a5e0b78c949c6b11de99e', class: "helper-text", id: this.helperId, role: "status" }, this.helperText)))), this.errorMessage && (hAsync("span", { key: 'e934cec1cc622908188cf9090e24988e5df45799', class: "error-text", id: this.errorId, role: "alert" }, this.errorMessage))));
|
|
8307
8497
|
}
|
|
8308
8498
|
static get formAssociated() { return true; }
|
|
8309
8499
|
static get watchers() { return {
|
|
@@ -8351,9 +8541,6 @@ function debounce(func, wait) {
|
|
|
8351
8541
|
};
|
|
8352
8542
|
}
|
|
8353
8543
|
|
|
8354
|
-
const chipTypes = ['active', 'warning', 'success', 'error', 'neutral'];
|
|
8355
|
-
const chipSizes = ['default', 'small'];
|
|
8356
|
-
|
|
8357
8544
|
const lmvzChipCss = () => `:host { --lmvz-chip-border-color: var(--lmvz-semantic-color-status-on-neutral-subtle, #d4d4d4); --lmvz-chip-background-color: var(--lmvz-semantic-color-status-neutral, #fcfcfc); --lmvz-chip-foreground-color: var(--lmvz-semantic-color-status-on-neutral, #545454); padding-block: var(--lmvz-dimension-4-6, clamp(0.25rem, 0.22rem + 0.13vw, 0.38rem)); padding-inline: var(--lmvz-dimension-8-10, clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem)); border: 1px solid var(--lmvz-chip-border-color); border-radius: var(--lmvz-semantic-border-radius-round, 999px); font: var(--lmvz-typography-body-xs-strong, 500 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.4 Router); background-color: var(--lmvz-chip-background-color); color: var(--lmvz-chip-foreground-color); display: inline-flex; align-items: center; justify-content: center; gap: var(--lmvz-dimension-4-6, clamp(0.25rem, 0.22rem + 0.13vw, 0.38rem)); box-sizing: border-box; max-width: 100%; overflow: hidden; white-space: nowrap; > .content-overflow-wrapper { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } } :host([size='small']) { padding-block: var(--lmvz-dimension-2-4, clamp(0.13rem, 0.09rem + 0.13vw, 0.25rem)); padding-inline: var(--lmvz-dimension-6-8, clamp(0.38rem, 0.34rem + 0.13vw, 0.5rem)); font: var(--lmvz-typography-body-2xs-strong, 500 clamp(0.63rem, 0.61rem + 0.06vw, 0.69rem) / 1.4 Router); gap: var(--lmvz-dimension-2-4, clamp(0.13rem, 0.09rem + 0.13vw, 0.25rem)); } ::slotted(*) { display: inline; white-space: inherit; } ::slotted(lmvz-icon) { --lmvz-component-color: var(--lmvz-chip-foreground-color); --lmvz-component-size: var(--lmvz-dimension-12-14, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); } :host([size='small']) ::slotted(lmvz-icon) { --lmvz-component-size: var(--lmvz-dimension-10-12, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem)); } :host([type='active']) { --lmvz-chip-border-color: var(--lmvz-semantic-color-status-on-active-subtle, #c1e6fa); --lmvz-chip-background-color: var(--lmvz-semantic-color-status-active, #f1f9fe); --lmvz-chip-foreground-color: var(--lmvz-semantic-color-status-on-active, #0e7ab4); } :host([type='warning']) { --lmvz-chip-border-color: var(--lmvz-semantic-color-status-on-warning-subtle, #ffdf75); --lmvz-chip-background-color: var(--lmvz-semantic-color-status-warning, #fffbf0); --lmvz-chip-foreground-color: var(--lmvz-semantic-color-status-on-warning, #7a5e00); } :host([type='success']) { --lmvz-chip-border-color: var(--lmvz-semantic-color-status-on-success-subtle, #a5dad3); --lmvz-chip-background-color: var(--lmvz-semantic-color-status-success, #f1f9f8); --lmvz-chip-foreground-color: var(--lmvz-semantic-color-status-on-success, #37867c); } :host([type='error']) { --lmvz-chip-border-color: var(--lmvz-semantic-color-status-on-danger-subtle, #f7bfc2); --lmvz-chip-background-color: var(--lmvz-semantic-color-status-danger, #fdf1f2); --lmvz-chip-foreground-color: var(--lmvz-semantic-color-status-on-danger, #e52a31); } :host([type='neutral']) { --lmvz-chip-border-color: var(--lmvz-semantic-color-status-on-neutral-subtle, #d4d4d4); --lmvz-chip-background-color: var(--lmvz-semantic-color-status-neutral, #fcfcfc); --lmvz-chip-foreground-color: var(--lmvz-semantic-color-status-on-neutral, #545454); } `;
|
|
8358
8545
|
|
|
8359
8546
|
class LmvzChip extends ReactiveControllerHost {
|
|
@@ -8402,7 +8589,7 @@ class LmvzChip extends ReactiveControllerHost {
|
|
|
8402
8589
|
}
|
|
8403
8590
|
}, 500);
|
|
8404
8591
|
render() {
|
|
8405
|
-
return (hAsync(Host, { key: '
|
|
8592
|
+
return (hAsync(Host, { key: '70654d69189e77f9356853a921366083b2c4b969', type: this.type, size: this.size }, hAsync("slot", { key: 'c7e667b93166286fe68a812dd8eec82885e3fc5e', name: "before-text", ref: (el) => (this.beforeSlot = el), onSlotchange: () => this.checkContent() }), hAsync("span", { key: 'af38dd0429b42685a114e26175ce42d09f5fdcc1', class: "content-overflow-wrapper" }, hAsync("slot", { key: '924158498d65b9ac7c912b6b1a479016176e0b78', ref: (el) => (this.defaultSlot = el), onSlotchange: () => this.checkContent() })), hAsync("slot", { key: '9ff0394dbfb2131fafe513d0f2d8ce26c7781f20', name: "after-text", ref: (el) => (this.afterSlot = el), onSlotchange: () => this.checkContent() })));
|
|
8406
8593
|
}
|
|
8407
8594
|
static get watchers() { return {
|
|
8408
8595
|
"type": [{
|
|
@@ -8558,7 +8745,7 @@ class LmvzHeader extends ReactiveControllerHost {
|
|
|
8558
8745
|
}
|
|
8559
8746
|
}
|
|
8560
8747
|
render() {
|
|
8561
|
-
return (hAsync(Host, { key: '
|
|
8748
|
+
return (hAsync(Host, { key: '323b7b13ef147f48e5f06537c7f27ab6e8a649ca', onFocus: this.delegateFocus.bind(this) }, hAsync("div", { key: '518434d55b7bfc5c1a8988f707984b8e2a41163c', class: "brand" }, hAsync("slot", { key: '1829a1ba10ba3a4e1a0e32564c534e960dc652d1', name: "brand" }, hAsync("img", { key: '485c217a7fc920646ec531cac9744a10f29dab4e', id: "fallback-logo-lmvz", src: logoSvg, alt: "Lehrmittelverlag Z\u00FCrich" }))), hAsync("nav", { key: 'df2cea9f42427c0bb51a498cc2627f0113a608a0', "aria-label": "Hauptnavigation" }, hAsync("div", { key: '93d6e0edc45c0032c5d3c93ea5f22e204fb0617e', role: "menubar", class: "primary-menubar" }, hAsync("slot", { key: '1b0238ca89023cc9a0ec4453e79a4597aaa92f2a', name: "nav-primary", ref: (el) => (this.primarySlot = el) }), hAsync("div", { key: 'd7576b23a5f9268a106c98052a869825493e0485', role: "menu", id: "nav-secondary", class: "secondary-menubar", hidden: !this.lmvzActiveNav, ref: (el) => (this.secondaryNav = el) }, hAsync("slot", { key: 'ada5f271c58350c44bb55c3bd976450214795f2b', name: this.secondarySlotName, ref: (el) => (this.secondarySlot = el) })))), hAsync("div", { key: 'db47039ebf932942210fd3f0920f9f86f9d2b09b', class: "actions" }, hAsync("slot", { key: '2d220a2946f26e69052d20dd4524e60fafbfe137', name: "actions" }))));
|
|
8562
8749
|
}
|
|
8563
8750
|
static get watchers() { return {
|
|
8564
8751
|
"lmvzActiveNav": [{
|
|
@@ -8626,7 +8813,7 @@ class LmvzIcon extends ReactiveControllerHost {
|
|
|
8626
8813
|
super.componentDidRender();
|
|
8627
8814
|
}
|
|
8628
8815
|
render() {
|
|
8629
|
-
return hAsync(Host, { key: '
|
|
8816
|
+
return hAsync(Host, { key: '03b4391d02a77409257bcda51c2b65ad9a9e0a0c', role: "img", "aria-hidden": `${this.ariaHidden}`, innerHTML: this.iconData });
|
|
8630
8817
|
}
|
|
8631
8818
|
waitUntilVisible(callback, rootMargin = 50) {
|
|
8632
8819
|
{
|
|
@@ -8819,9 +9006,9 @@ class LmvzInput extends ReactiveControllerHost {
|
|
|
8819
9006
|
render() {
|
|
8820
9007
|
const hasValue = Boolean(this.value);
|
|
8821
9008
|
const shouldFloatLabel = hasValue || Boolean(this.placeholder);
|
|
8822
|
-
return (hAsync("div", { key: '
|
|
9009
|
+
return (hAsync("div", { key: 'b8c3aaccafb89725aaa157a72633c67ae8b4d58c', class: classNames('input-container', {
|
|
8823
9010
|
'interaction-filled': hasValue,
|
|
8824
|
-
}) }, hAsync("div", { key: '
|
|
9011
|
+
}) }, hAsync("div", { key: '80261c486d3bfe61aa060d50e9a6774c961339a1', class: "input-wrapper" }, hAsync("slot", { key: '6856dd64991251adc63d8064ed63e9cf7b1773a2', name: "before-input" }), hAsync("div", { key: 'c975357079efef465c56fb50cbb404bd1cbe3fb1', class: "label-input-group" }, hAsync("label", { key: '798417172f8411be97866edbffbd2bb98c308c69', htmlFor: this.inputId, class: classNames({ floating: shouldFloatLabel }) }, this.label, this.required && (hAsync("span", { key: '9fd59f3d93c984304e6c8ae6531df82bc0057243', class: "required-indicator", "aria-hidden": "true" }, ' ', "*"))), hAsync("input", { key: 'a4e1133b4891c01044365eb3c97ee234c84c9bac', 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: 'c774f03e704889b524f305c00d60c0902abdff5f', name: "after-input" })), hAsync("div", { key: 'f513746541c71ce0d67c26eb220b54408fc3f136', id: this.helperId, role: "status" }, this.helperText || null), hAsync("div", { key: '197683e55807bf100ca1543f5b84b14e910e721f', id: this.errorId, role: "alert" }, (this.showErrorMessage && this.errorMessage) || null)));
|
|
8825
9012
|
}
|
|
8826
9013
|
static get formAssociated() { return true; }
|
|
8827
9014
|
static get watchers() { return {
|
|
@@ -8899,7 +9086,7 @@ class LmvzMenuItem extends ReactiveControllerHost {
|
|
|
8899
9086
|
this.addController(new ElementActivationController(this));
|
|
8900
9087
|
}
|
|
8901
9088
|
render() {
|
|
8902
|
-
return (hAsync(Host, { key: '
|
|
9089
|
+
return (hAsync(Host, { key: '3a722fe1fbacabd99ac5a5bd23537a1ff383fb95' }, hAsync("slot", { key: 'e475dd50bbd2f9f349edb61766a0b21c1fb1ae16', ref: (e) => (this.validationSlot = e) })));
|
|
8903
9090
|
}
|
|
8904
9091
|
static get style() { return lmvzMenuitemCss(); }
|
|
8905
9092
|
static get cmpMeta() { return {
|
|
@@ -8917,7 +9104,7 @@ class LmvzMenuItem extends ReactiveControllerHost {
|
|
|
8917
9104
|
|
|
8918
9105
|
const closeSmSvg = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTYgNkwxMiAxMk0xMiAxMkwxOCAxOE0xMiAxMkw2IDE4TTEyIDEyTDE4IDYiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+Cg==';
|
|
8919
9106
|
|
|
8920
|
-
const lmvzModalCss = () => ` @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; }
|
|
9107
|
+
const lmvzModalCss = () => ` @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; } *[hidden] { display: none !important; } } :host { display: contents; --lmvz-modal-shell-gap: var(--lmvz-dimension-16-20, clamp(1rem, 0.94rem + 0.26vw, 1.25rem)); } dialog { border: none; padding: 0; background: transparent; } dialog::backdrop { background: rgba(0, 0, 0, 0.19); background: rgb(from var(--lmvz-semantic-color-int-primary, #000000) r g b / 0.29); } .modal-shell { position: relative; display: flex; flex-direction: column; inline-size: fit-content; max-inline-size: clamp(40rem, 100%, 80vw); gap: var(--lmvz-modal-shell-gap); padding-block: var(--lmvz-component-modal-padding-y, clamp(2.25rem, 2.19rem + 0.26vw, 2.5rem)); padding-inline: var(--lmvz-component-modal-padding-x, clamp(1.5rem, 1.14rem + 1.55vw, 3rem)); border-radius: var(--lmvz-component-modal-border-radius, 18px); background: var(--lmvz-semantic-color-surface-primary, #ffffff); overflow: auto; .close-button { position: absolute; top: var(--lmvz-dimension-10-12, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem)); right: var(--lmvz-dimension-10-12, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem)); } } @media (min-width: 768px) { .modal-shell { max-inline-size: 100vw; } } .header { display: flex; align-items: flex-start; justify-content: flex-end; gap: var(--lmvz-modal-shell-gap); } .title { min-inline-size: 0; font: var(--lmvz-typography-heading-lg, 500 clamp(1.25rem, 1.19rem + 0.26vw, 1.5rem) / 1.4 Router); } .has-title .title { flex: 1 1 auto; } .body { font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } `;
|
|
8921
9108
|
|
|
8922
9109
|
const closeIconSvg = toValidSvgStringWithFallback(closeSmSvg);
|
|
8923
9110
|
let modalIdCounter = 0;
|
|
@@ -8926,16 +9113,13 @@ class LmvzModal extends ReactiveControllerHost {
|
|
|
8926
9113
|
inheritedAriaAttributes = {};
|
|
8927
9114
|
dialogEl;
|
|
8928
9115
|
dialogStateObserver;
|
|
8929
|
-
actionsStateObserver;
|
|
8930
9116
|
headerSlot;
|
|
8931
|
-
|
|
9117
|
+
buttonGroupEl;
|
|
8932
9118
|
closeButtonEl;
|
|
8933
9119
|
previouslyFocusedElement = null;
|
|
8934
9120
|
wrappedDialogShowModal;
|
|
8935
|
-
lastActionValidationMessage;
|
|
8936
9121
|
pendingCloseReturnValue;
|
|
8937
9122
|
dialogTitleId = `lmvz-modal-title-${modalIdCounter++}`;
|
|
8938
|
-
hasActions = false;
|
|
8939
9123
|
hasHeader = false;
|
|
8940
9124
|
open = false;
|
|
8941
9125
|
closeLabel = 'Schliessen';
|
|
@@ -8947,9 +9131,6 @@ class LmvzModal extends ReactiveControllerHost {
|
|
|
8947
9131
|
get validationEl() {
|
|
8948
9132
|
return this.dialogEl ?? this.el;
|
|
8949
9133
|
}
|
|
8950
|
-
get validationSlot() {
|
|
8951
|
-
return this.actionsSlot;
|
|
8952
|
-
}
|
|
8953
9134
|
constructor(hostRef) {
|
|
8954
9135
|
super();
|
|
8955
9136
|
registerInstance(this, hostRef);
|
|
@@ -8980,13 +9161,11 @@ class LmvzModal extends ReactiveControllerHost {
|
|
|
8980
9161
|
}
|
|
8981
9162
|
componentDidLoad() {
|
|
8982
9163
|
this.handleHeaderSlotChange();
|
|
8983
|
-
this.handleActionsSlotChange();
|
|
8984
9164
|
this.observeDialogState();
|
|
8985
9165
|
this.syncDialogVisibility();
|
|
8986
9166
|
super.componentDidLoad();
|
|
8987
9167
|
}
|
|
8988
9168
|
disconnectedCallback() {
|
|
8989
|
-
this.actionsStateObserver?.disconnect();
|
|
8990
9169
|
this.dialogStateObserver?.disconnect();
|
|
8991
9170
|
super.disconnectedCallback();
|
|
8992
9171
|
}
|
|
@@ -9018,43 +9197,6 @@ class LmvzModal extends ReactiveControllerHost {
|
|
|
9018
9197
|
}
|
|
9019
9198
|
return attributes;
|
|
9020
9199
|
}
|
|
9021
|
-
get actionButtons() {
|
|
9022
|
-
return (this.actionsSlot?.assignedElements({ flatten: true }) ?? []).filter((element) => {
|
|
9023
|
-
return this.isVisibleActionButton(element);
|
|
9024
|
-
});
|
|
9025
|
-
}
|
|
9026
|
-
get enabledActionButtons() {
|
|
9027
|
-
return this.actionButtons.filter((element) => {
|
|
9028
|
-
return !this.isDisabledActionButton(element);
|
|
9029
|
-
});
|
|
9030
|
-
}
|
|
9031
|
-
get assignedActionElements() {
|
|
9032
|
-
return this.actionsSlot?.assignedElements({ flatten: true }) ?? [];
|
|
9033
|
-
}
|
|
9034
|
-
isDisabledActionButton(element) {
|
|
9035
|
-
return element.hasAttribute('disabled') || element.disabled === true;
|
|
9036
|
-
}
|
|
9037
|
-
getActionVariant(element) {
|
|
9038
|
-
const variant = element.getAttribute('variant') ?? element.variant;
|
|
9039
|
-
return variant === 'primary' || variant === 'secondary' || variant === 'tertiary' ? variant : 'secondary';
|
|
9040
|
-
}
|
|
9041
|
-
getActionValidationResult() {
|
|
9042
|
-
if (!this.actionButtons.length) {
|
|
9043
|
-
return {};
|
|
9044
|
-
}
|
|
9045
|
-
const primaryActions = this.actionButtons.filter((element) => this.getActionVariant(element) === 'primary');
|
|
9046
|
-
const secondaryActions = this.actionButtons.filter((element) => this.getActionVariant(element) === 'secondary');
|
|
9047
|
-
const issues = [
|
|
9048
|
-
primaryActions.length !== 1 ? `${primaryActions.length} primary action${primaryActions.length === 1 ? '' : 's'}` : undefined,
|
|
9049
|
-
secondaryActions.length > 1 ? `${secondaryActions.length} secondary actions` : undefined,
|
|
9050
|
-
].filter((issue) => Boolean(issue));
|
|
9051
|
-
return {
|
|
9052
|
-
errorMessage: issues.length
|
|
9053
|
-
? `LmvzModal actions slot must contain exactly one primary action, at most one secondary action, and optional tertiary actions. Received ${issues.join(' and ')}.`
|
|
9054
|
-
: undefined,
|
|
9055
|
-
primaryAction: primaryActions[0],
|
|
9056
|
-
};
|
|
9057
|
-
}
|
|
9058
9200
|
hasAssignedContent(slot) {
|
|
9059
9201
|
return Boolean(slot?.assignedNodes({ flatten: true }).some((node) => {
|
|
9060
9202
|
if (node.nodeType === Node.TEXT_NODE) {
|
|
@@ -9081,9 +9223,6 @@ class LmvzModal extends ReactiveControllerHost {
|
|
|
9081
9223
|
attributeFilter: ['open'],
|
|
9082
9224
|
});
|
|
9083
9225
|
}
|
|
9084
|
-
isVisibleActionButton(element) {
|
|
9085
|
-
return element.tagName === 'LMVZ-BUTTON' && !element.hasAttribute('hidden');
|
|
9086
|
-
}
|
|
9087
9226
|
capturePreviouslyFocusedElement() {
|
|
9088
9227
|
const dialog = this.dialogEl;
|
|
9089
9228
|
const activeElement = getDeepActiveElement(document);
|
|
@@ -9136,10 +9275,7 @@ class LmvzModal extends ReactiveControllerHost {
|
|
|
9136
9275
|
}
|
|
9137
9276
|
}
|
|
9138
9277
|
focusPrimaryAction() {
|
|
9139
|
-
const
|
|
9140
|
-
return this.getActionVariant(element) === 'primary';
|
|
9141
|
-
}) ?? this.enabledActionButtons[0];
|
|
9142
|
-
const focusTarget = primaryAction ?? this.closeButtonEl;
|
|
9278
|
+
const focusTarget = this.buttonGroupEl?.primaryEnabledAction ?? this.closeButtonEl;
|
|
9143
9279
|
if (!focusTarget || typeof window === 'undefined')
|
|
9144
9280
|
return;
|
|
9145
9281
|
window.requestAnimationFrame(() => {
|
|
@@ -9191,60 +9327,8 @@ class LmvzModal extends ReactiveControllerHost {
|
|
|
9191
9327
|
handleHeaderSlotChange = () => {
|
|
9192
9328
|
this.hasHeader = this.hasAssignedContent(this.headerSlot);
|
|
9193
9329
|
};
|
|
9194
|
-
observeActionState() {
|
|
9195
|
-
if (typeof MutationObserver === 'undefined')
|
|
9196
|
-
return;
|
|
9197
|
-
this.actionsStateObserver?.disconnect();
|
|
9198
|
-
if (!this.assignedActionElements.length)
|
|
9199
|
-
return;
|
|
9200
|
-
this.actionsStateObserver = new MutationObserver(() => {
|
|
9201
|
-
this.syncActionsState();
|
|
9202
|
-
});
|
|
9203
|
-
this.assignedActionElements.forEach((element) => {
|
|
9204
|
-
this.actionsStateObserver?.observe(element, {
|
|
9205
|
-
attributes: true,
|
|
9206
|
-
attributeFilter: ['disabled', 'hidden', 'variant'],
|
|
9207
|
-
});
|
|
9208
|
-
});
|
|
9209
|
-
}
|
|
9210
|
-
syncActionsState() {
|
|
9211
|
-
const assignedElements = this.assignedActionElements;
|
|
9212
|
-
assignedElements.forEach((element) => {
|
|
9213
|
-
const isAllowedAction = ['LMVZ-BUTTON', 'BUTTON'].includes(element.tagName.toUpperCase());
|
|
9214
|
-
if (isAllowedAction)
|
|
9215
|
-
return;
|
|
9216
|
-
if (!element.hasAttribute('hidden')) {
|
|
9217
|
-
element.setAttribute('hidden', '');
|
|
9218
|
-
}
|
|
9219
|
-
if (element.getAttribute('aria-hidden') !== 'true') {
|
|
9220
|
-
element.setAttribute('aria-hidden', 'true');
|
|
9221
|
-
}
|
|
9222
|
-
});
|
|
9223
|
-
this.hasActions = assignedElements.some((element) => this.isVisibleActionButton(element));
|
|
9224
|
-
this.checkActions();
|
|
9225
|
-
if (this.open) {
|
|
9226
|
-
this.focusPrimaryAction();
|
|
9227
|
-
}
|
|
9228
|
-
}
|
|
9229
|
-
handleActionsSlotChange = () => {
|
|
9230
|
-
this.syncActionsState();
|
|
9231
|
-
this.observeActionState();
|
|
9232
|
-
};
|
|
9233
|
-
checkActions() {
|
|
9234
|
-
if (!isAriaValidationEnabled())
|
|
9235
|
-
return;
|
|
9236
|
-
const { errorMessage } = this.getActionValidationResult();
|
|
9237
|
-
if (!errorMessage) {
|
|
9238
|
-
this.lastActionValidationMessage = undefined;
|
|
9239
|
-
return;
|
|
9240
|
-
}
|
|
9241
|
-
if (this.lastActionValidationMessage === errorMessage)
|
|
9242
|
-
return;
|
|
9243
|
-
console.error(errorMessage);
|
|
9244
|
-
this.lastActionValidationMessage = errorMessage;
|
|
9245
|
-
}
|
|
9246
9330
|
render() {
|
|
9247
|
-
return (hAsync(Host, { key: '
|
|
9331
|
+
return (hAsync(Host, { key: 'f014c692b82fae6dd96dffdbda4043aa9174004f' }, hAsync("dialog", { key: '8939eda4aba44f1b6c9e8983cacddba83f668692', ref: (element) => (this.dialogEl = element), onCancel: this.handleDialogCancel, onClose: this.handleDialogClose, ...this.dialogAccessibilityAttributes }, hAsync("div", { key: '93f43c5f7c258494c86f9604b7eeac0046f912d6', class: "modal-shell" }, hAsync("header", { key: '2e8177a5e0812007fede430533e6a0aa9b7bc0ea', class: { header: true, 'has-title': this.hasHeader } }, hAsync("div", { key: 'fb4b537386077b837758f4b61c45433ad6c747cc', class: "title", id: this.dialogTitleId, hidden: !this.hasHeader }, hAsync("slot", { key: '2507b2b7af3b18e859e87b7d682bdf189c4df53d', name: "header", ref: (element) => (this.headerSlot = element), onSlotchange: this.handleHeaderSlotChange })), hAsync("lmvz-button", { key: '5e4bcd8771babae9a9dc34fc908eb9210639a497', ref: (element) => (this.closeButtonEl = element), type: "button", class: "close-button", "aria-label": this.closeLabel, onClick: this.handleCloseButtonClick, variant: "tertiary" }, hAsync("lmvz-icon", { key: '32aada0eea679fd1610eb704ac02cca1f27168ff', icon: closeIconSvg }))), hAsync("div", { key: '1dc811f3edcd9ab1611483c90345483fee94b318', class: "body" }, hAsync("slot", { key: 'cf870234c54d659cdd85d1a736626707f65cca4a' })), hAsync("footer", { key: 'c2ed7badb41a09d1187af2221f33fc2a87bcb606', class: "actions", hidden: !this.buttonGroupEl?.hasActions }, hAsync("lmvz-button-group", { key: 'c4846b44ff94b0411d79d88b3bb8447dd2a5967a', ref: (element) => (this.buttonGroupEl = element) }, hAsync("slot", { key: '3aa5aa7b3a5d68c5c3c2da1739bee57316db07ff', name: "actions" })))))));
|
|
9248
9332
|
}
|
|
9249
9333
|
static get watchers() { return {
|
|
9250
9334
|
"open": [{
|
|
@@ -9258,7 +9342,6 @@ class LmvzModal extends ReactiveControllerHost {
|
|
|
9258
9342
|
"$members$": {
|
|
9259
9343
|
"open": [1540],
|
|
9260
9344
|
"closeLabel": [1, "close-label"],
|
|
9261
|
-
"hasActions": [32],
|
|
9262
9345
|
"hasHeader": [32]
|
|
9263
9346
|
},
|
|
9264
9347
|
"$listeners$": [[0, "submit", "handleFormDialogSubmit"]],
|
|
@@ -9321,7 +9404,7 @@ class LmvzSelect extends ReactiveControllerHost {
|
|
|
9321
9404
|
render() {
|
|
9322
9405
|
const hasValue = this.hasValue;
|
|
9323
9406
|
const shouldShowLabel = hasValue;
|
|
9324
|
-
return (hAsync(Host, { key: '
|
|
9407
|
+
return (hAsync(Host, { key: 'f4d3104f4022581e4661f2181eec5d56ac7027af' }, hAsync("div", { key: '1f8b1fdf7c6d8c65390298e0cd9dca24ef4903d7', class: "select-wrapper" }, hAsync("label", { key: 'ff7a2e509c637424387b38b163739183deda3cba', htmlFor: this.selectId, class: shouldShowLabel ? 'floating-label' : 'assistive-label' }, this.label, this.required && shouldShowLabel && hAsync("span", { key: '7e3c03652d16dd1a20628d800ccae4221062d4b8', "aria-hidden": "true" }, " *")), hAsync("div", { key: 'a2ee01b6ddfa98565fc1c41c9b9391091d254daf', "aria-hidden": "true" }, hAsync("span", { key: 'c96a6960f693baca0ba48b44e569ad87c1bbc980' }, hasValue ? this.selectedLabel : this.label, this.required && !hasValue && hAsync("span", { key: '4631b13509919f7bfd0e5a1287334cd3a8412e50', "aria-hidden": "true" }, " *")), hAsync("span", { key: '4781647ee3a6a780e4253b9f92738c4645e20578' }, hAsync("img", { key: 'c83dab75df9ff20ec40b63f45cbe8262d1c71d7d', src: chevronDownSvg, alt: "" }))), hAsync("select", { key: '035b19878300ac1f7b04b61157e39587782b44f7', 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: 'da76b299a1df9da8475e115b82d7e427cc659bfa', value: "", disabled: true, selected: true, hidden: true }), hAsync("slot", { key: '1a91b540bc8ab97723df24c9c77d2bd52d941c92' }))), this.helperText && hAsync("div", { key: '347fe4d805a58e03f2cb2ef427b0dba0b805e8be', role: "status" }, this.helperText)));
|
|
9325
9408
|
}
|
|
9326
9409
|
static get watchers() { return {
|
|
9327
9410
|
"value": [{
|
|
@@ -9421,7 +9504,7 @@ class LmvzToggle extends ReactiveControllerHost {
|
|
|
9421
9504
|
this.lmvzChange.emit(newChecked);
|
|
9422
9505
|
};
|
|
9423
9506
|
render() {
|
|
9424
|
-
return (hAsync(Host, { key: '
|
|
9507
|
+
return (hAsync(Host, { key: 'b7d3c3d2ae30744669032797b2fefcd1e7fe0b61' }, hAsync("span", { key: '93dc128b588e19a5e322cb93efae33669375709a', class: "track" }, hAsync("input", { key: '80650720ac6276f7c8996e071d8104e98002e06e', type: "checkbox", role: "switch", id: this.toggleId, checked: this.checked, disabled: this.disabled, required: this.required, name: this.name, value: this.value, form: this.form, ref: (el) => (this.nativeInputElement = el), onChange: this.handleChange }), hAsync("span", { key: '59838c27a032d7a116faea67fa1dc75cf9ee92cd', class: "thumb", "aria-hidden": "true" })), hAsync("label", { key: '809057cf268adf05c8163a802a6020dca9b666b9', htmlFor: this.toggleId }, this.label)));
|
|
9425
9508
|
}
|
|
9426
9509
|
static get formAssociated() { return true; }
|
|
9427
9510
|
static get watchers() { return {
|
|
@@ -9459,6 +9542,7 @@ class LmvzToggle extends ReactiveControllerHost {
|
|
|
9459
9542
|
registerComponents([
|
|
9460
9543
|
LmvzAction,
|
|
9461
9544
|
LmvzButton,
|
|
9545
|
+
LmvzButtonGroup,
|
|
9462
9546
|
LmvzCard,
|
|
9463
9547
|
LmvzCheckbox,
|
|
9464
9548
|
LmvzChip,
|