@lmvz-ds/components 0.24.0 → 0.25.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 +11 -0
- package/cjs/{index-lW-SEvL7.js → index-BCFBLj0e.js} +1 -1
- package/cjs/lmvz-action.cjs.entry.js +1 -1
- package/cjs/lmvz-button_3.cjs.entry.js +4 -4
- package/cjs/lmvz-card.cjs.entry.js +2 -2
- package/cjs/lmvz-checkbox.cjs.entry.js +5 -5
- package/cjs/lmvz-chip.cjs.entry.js +3 -3
- package/cjs/lmvz-components.cjs.js +3 -3
- package/cjs/lmvz-header_2.cjs.entry.js +2 -2
- package/cjs/lmvz-input.cjs.entry.js +3 -3
- package/cjs/lmvz-menuitem.cjs.entry.js +3 -3
- package/cjs/lmvz-modal.cjs.entry.js +5 -5
- package/cjs/lmvz-radio.cjs.entry.js +334 -0
- package/cjs/lmvz-select.cjs.entry.js +4 -4
- package/cjs/lmvz-toggle.cjs.entry.js +7 -5
- package/cjs/loader.cjs.js +2 -2
- package/cjs/{reactive-controller-host-BOFg4vL-.js → reactive-controller-host-DrtMkMd7.js} +1 -1
- package/collection/collection-manifest.json +2 -1
- package/collection/components/lmvz-button/lmvz-button.css +7 -7
- package/collection/components/lmvz-button-group/lmvz-button-group.css +1 -1
- package/collection/components/lmvz-card/lmvz-card.css +7 -7
- package/collection/components/lmvz-checkbox/lmvz-checkbox.css +8 -11
- package/collection/components/lmvz-checkbox/lmvz-checkbox.js +2 -2
- package/collection/components/lmvz-chip/lmvz-chip.css +3 -3
- package/collection/components/lmvz-input/lmvz-input.css +5 -9
- package/collection/components/lmvz-menuitem/lmvz-menuitem.css +2 -2
- package/collection/components/lmvz-modal/lmvz-modal.css +28 -10
- package/collection/components/lmvz-modal/lmvz-modal.js +2 -2
- package/collection/components/lmvz-radio/lmvz-radio.css +182 -0
- package/collection/components/lmvz-radio/lmvz-radio.js +487 -0
- package/collection/components/lmvz-select/lmvz-select.css +3 -3
- package/collection/components/lmvz-select/lmvz-select.js +1 -1
- package/collection/components/lmvz-toggle/lmvz-toggle.css +4 -9
- package/collection/components/lmvz-toggle/lmvz-toggle.js +3 -3
- package/collection/integration/header-integration/header-integration.js +1 -1
- package/collection/styles/fragments/_focus-within.css +13 -0
- package/collection/utils/radio/radio-group-controller.js +160 -0
- package/components/index.d.ts +2 -0
- package/components/index.d.ts.bak +2 -0
- package/components/index.js +1 -1
- package/components/lmvz-action.js +1 -1
- package/components/lmvz-button-group.js +1 -1
- 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-radio.d.ts +11 -0
- package/components/lmvz-radio.d.ts.bak +11 -0
- package/components/lmvz-radio.js +1 -0
- package/components/lmvz-select.js +1 -1
- package/components/lmvz-toggle.js +1 -1
- package/components/p-Bb-kEOmU.js +1 -0
- package/components/{p-Cg2XX_J-.js → p-CCcoDnH-.js} +1 -1
- package/components/{p-slgmfnHm.js → p-CNmHnJ1D.js} +1 -1
- package/components/p-vUYpZZoR.js +1 -0
- package/esm/{index-Aa_425iY.js → index-CKYszC64.js} +1 -1
- package/esm/lmvz-action.entry.js +1 -1
- package/esm/lmvz-button_3.entry.js +4 -4
- package/esm/lmvz-card.entry.js +2 -2
- package/esm/lmvz-checkbox.entry.js +5 -5
- package/esm/lmvz-chip.entry.js +3 -3
- package/esm/lmvz-components.js +4 -4
- package/esm/lmvz-header_2.entry.js +2 -2
- package/esm/lmvz-input.entry.js +3 -3
- package/esm/lmvz-menuitem.entry.js +3 -3
- package/esm/lmvz-modal.entry.js +5 -5
- package/esm/lmvz-radio.entry.js +332 -0
- package/esm/lmvz-select.entry.js +4 -4
- package/esm/lmvz-toggle.entry.js +7 -5
- package/esm/loader.js +3 -3
- package/esm/{reactive-controller-host-CroMsXdS.js → reactive-controller-host-ZrGf1F2-.js} +1 -1
- package/hydrate/index.js +371 -19
- package/hydrate/index.mjs +371 -19
- package/lmvz-components/lmvz-components.esm.js +1 -1
- package/lmvz-components/{p-d1dacf7e.entry.js → p-01aeca60.entry.js} +1 -1
- package/lmvz-components/p-0dced359.entry.js +1 -0
- package/lmvz-components/{p-f6d1d9df.entry.js → p-2044a9ac.entry.js} +1 -1
- package/lmvz-components/p-3c2adbb4.entry.js +1 -0
- package/lmvz-components/{p-4263c9b2.entry.js → p-3df070b0.entry.js} +1 -1
- package/lmvz-components/{p-6f8cbc4f.entry.js → p-758078db.entry.js} +1 -1
- package/lmvz-components/p-90f5a19d.entry.js +1 -0
- package/lmvz-components/{p-BRl6zKXT.js → p-CwX1wKkM.js} +1 -1
- package/lmvz-components/p-acfeae08.entry.js +1 -0
- package/lmvz-components/{p-88adb9fa.entry.js → p-c01a6c70.entry.js} +1 -1
- package/lmvz-components/{p-a7c3074a.entry.js → p-e1eaa7a2.entry.js} +1 -1
- package/lmvz-components/p-e23d0054.entry.js +1 -0
- package/lmvz-components/p-fe607f10.entry.js +1 -0
- package/manifest.json +410 -2
- package/package.json +5 -1
- package/types/components/lmvz-radio/lmvz-radio.d.ts +42 -0
- package/types/components.d.ts +176 -0
- package/types/stencil-public-runtime.d.ts +1 -0
- package/types/utils/radio/radio-group-controller.d.ts +26 -0
- package/assets/icons/checkmark.svg +0 -4
- package/assets/icons/close-sm.svg +0 -3
- package/collection/assets/icons/checkmark.svg +0 -4
- package/collection/assets/icons/close-sm.svg +0 -3
- package/components/p-CcnyKhAw.js +0 -1
- package/components/p-DSvYtVoD.js +0 -1
- package/lmvz-components/p-2824a56b.entry.js +0 -1
- package/lmvz-components/p-3846ba08.entry.js +0 -1
- package/lmvz-components/p-4f5c3c4a.entry.js +0 -1
- package/lmvz-components/p-b3b04d46.entry.js +0 -1
- package/lmvz-components/p-fefefc54.entry.js +0 -1
- /package/components/{p-CK8cAKcB.js → p-DYr7Jc0V.js} +0 -0
- /package/lmvz-components/{p-Aa_425iY.js → p-CKYszC64.js} +0 -0
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
--checkbox-border-color-error: var(--lmvz-semantic-color-status-on-danger, #e52a31);
|
|
51
51
|
|
|
52
52
|
--checkbox-wrapper-bg-hover: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0);
|
|
53
|
-
--checkbox-wrapper-bg-checked: var(--lmvz-semantic-color-status-active, #
|
|
53
|
+
--checkbox-wrapper-bg-checked: var(--lmvz-semantic-color-status-active, #f6fbfe);
|
|
54
54
|
|
|
55
55
|
--checkbox-ripple-bg: var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0);
|
|
56
56
|
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
|
|
59
59
|
--checkbox-label-color: var(--lmvz-semantic-color-on-surface-primary, #000000);
|
|
60
60
|
--checkbox-label-color-checked: var(--lmvz-semantic-color-status-on-active, #0e7ab4);
|
|
61
|
-
--checkbox-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #
|
|
61
|
+
--checkbox-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #545454);
|
|
62
62
|
--checkbox-error-color: var(--lmvz-semantic-color-status-on-danger, #e52a31);
|
|
63
63
|
--checkbox-focus-color: var(--lmvz-semantic-color-status-on-active, #0e7ab4);
|
|
64
64
|
|
|
@@ -123,14 +123,14 @@ label {
|
|
|
123
123
|
transition: color var(--checkbox-duration) var(--checkbox-easing);
|
|
124
124
|
}
|
|
125
125
|
.helper-text {
|
|
126
|
-
font: var(--lmvz-typography-body-sm, 400 clamp(0.
|
|
126
|
+
font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.4
|
|
127
127
|
Router);
|
|
128
128
|
/* font-weight: 400 per DS token standard (body-sm). Note: lmvz-input.css [role='status'] incorrectly uses font-weight: 500 — DS inconsistency, see lmvz-input.css line ~153 */
|
|
129
129
|
color: var(--checkbox-helper-color);
|
|
130
130
|
margin-block-start: 2px;
|
|
131
131
|
}
|
|
132
132
|
.error-text {
|
|
133
|
-
font: var(--lmvz-typography-body-sm, 400 clamp(0.
|
|
133
|
+
font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.4
|
|
134
134
|
Router);
|
|
135
135
|
color: var(--checkbox-error-color);
|
|
136
136
|
display: block;
|
|
@@ -176,12 +176,9 @@ label {
|
|
|
176
176
|
:host([disabled]) input {
|
|
177
177
|
cursor: not-allowed;
|
|
178
178
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
outline:
|
|
182
|
-
outline-offset: 2px;
|
|
183
|
-
/* box-shadow: 0 0 0 3px rgba(15, 138, 204, 0.2); TODO: no design token available for focus shadow color/spread */
|
|
184
|
-
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));
|
|
179
|
+
:host(:focus-within) .pill {
|
|
180
|
+
outline: var(--lmvz-ds-outline, 1px solid #0e7ab4);
|
|
181
|
+
outline-offset: var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem));
|
|
185
182
|
}
|
|
186
183
|
/* Forced Colors / Windows High Contrast */
|
|
187
184
|
@media (forced-colors: active) {
|
|
@@ -204,7 +201,7 @@ input:focus-visible ~ .box {
|
|
|
204
201
|
color: HighlightText;
|
|
205
202
|
}
|
|
206
203
|
|
|
207
|
-
|
|
204
|
+
:host(:focus-within) .pill {
|
|
208
205
|
outline-color: Highlight;
|
|
209
206
|
box-shadow: none;
|
|
210
207
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import checkmark from "@lmvz-ds/icons/assets/checkmark.svg";
|
|
1
2
|
import { toValidSvgStringWithFallback } from "@lmvz-ds/lib-ts/validation/svg.js";
|
|
2
3
|
import { h, Host } from "@stencil/core";
|
|
3
|
-
import checkmark from "../../assets/icons/checkmark.svg";
|
|
4
4
|
import { AriaValidationController } from "../../utils/aria/aria-validation-controller";
|
|
5
5
|
import { ReactiveControllerHost } from "../../utils/reactive-controller-host";
|
|
6
6
|
const CHECKMARK_SVG = toValidSvgStringWithFallback(checkmark);
|
|
@@ -83,7 +83,7 @@ export class LmvzCheckbox extends ReactiveControllerHost {
|
|
|
83
83
|
this.lmvzChange.emit(this.checked);
|
|
84
84
|
};
|
|
85
85
|
render() {
|
|
86
|
-
return (h(Host, { key: '
|
|
86
|
+
return (h(Host, { key: '158efacac5c28a18003149d4acb0d1cf5385cef4' }, h("div", { key: '5deaf853f9c465b70b7e5472579c5d5212105c34', class: "pill" }, h("input", { key: '7e8da452d41cd48293569ec60dad0585ff3290f1', 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 }), h("span", { key: 'd1ee72be8e3fc2b4e70ff64b70bfcec93f08f063', class: "box", "aria-hidden": "true" }, this.checkedState && h("span", { key: '73e123aa8c91e9098b4d8bbd48bbc7bae6c12383', class: "indicator", innerHTML: CHECKMARK_SVG })), h("span", { key: '2a161e6db9e792dca1fa24c1562bd0b79d62235b', class: "content" }, h("label", { key: 'fb38792095bf6da433867472d866d6700db45dac', htmlFor: this.checkboxId }, this.label), this.helperText && (h("span", { key: 'b8c16fc4782f67e1dca82329d081943a7d75a524', class: "helper-text", id: this.helperId, role: "status" }, this.helperText)))), this.errorMessage && (h("span", { key: '87d6940217d379777e26c578cff761dcfd96e79a', class: "error-text", id: this.errorId, role: "alert" }, this.errorMessage))));
|
|
87
87
|
}
|
|
88
88
|
static get is() { return "lmvz-checkbox"; }
|
|
89
89
|
static get encapsulation() { return "scoped"; }
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
padding-inline: var(--lmvz-dimension-8-10, clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem));
|
|
8
8
|
border: 1px solid var(--lmvz-chip-border-color);
|
|
9
9
|
border-radius: var(--lmvz-semantic-border-radius-round, 999px);
|
|
10
|
-
font: var(--lmvz-typography-body-xs-strong, 500 clamp(0.
|
|
10
|
+
font: var(--lmvz-typography-body-xs-strong, 500 clamp(0.63rem, 0.61rem + 0.06vw, 0.69rem) / 1.4
|
|
11
11
|
Router);
|
|
12
12
|
background-color: var(--lmvz-chip-background-color);
|
|
13
13
|
color: var(--lmvz-chip-foreground-color);
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
:host([size='small']) {
|
|
35
35
|
padding-block: var(--lmvz-dimension-2-4, clamp(0.13rem, 0.09rem + 0.13vw, 0.25rem));
|
|
36
36
|
padding-inline: var(--lmvz-dimension-6-8, clamp(0.38rem, 0.34rem + 0.13vw, 0.5rem));
|
|
37
|
-
font: var(--lmvz-typography-body-2xs-strong, 500 clamp(0.
|
|
37
|
+
font: var(--lmvz-typography-body-2xs-strong, 500 clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem) / 1.4
|
|
38
38
|
Router);
|
|
39
39
|
gap: var(--lmvz-dimension-2-4, clamp(0.13rem, 0.09rem + 0.13vw, 0.25rem));
|
|
40
40
|
}
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
|
|
58
58
|
:host([type='active']) {
|
|
59
59
|
--lmvz-chip-border-color: var(--lmvz-semantic-color-status-on-active-subtle, #c1e6fa);
|
|
60
|
-
--lmvz-chip-background-color: var(--lmvz-semantic-color-status-active, #
|
|
60
|
+
--lmvz-chip-background-color: var(--lmvz-semantic-color-status-active, #f6fbfe);
|
|
61
61
|
--lmvz-chip-foreground-color: var(--lmvz-semantic-color-status-on-active, #0e7ab4);
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
--input-height: 48px; /* From Figma input-size=48 */
|
|
51
51
|
--input-padding-x: 16px;
|
|
52
52
|
|
|
53
|
-
--label-color: var(--lmvz-semantic-color-on-surface-input-secondary, #
|
|
53
|
+
--label-color: var(--lmvz-semantic-color-on-surface-input-secondary, #545454);
|
|
54
54
|
--input-text-color: var(--lmvz-semantic-color-on-surface-input-primary, #000000);
|
|
55
|
-
--helper-text-color: var(--lmvz-semantic-color-on-surface-input-secondary, #
|
|
55
|
+
--helper-text-color: var(--lmvz-semantic-color-on-surface-input-secondary, #545454);
|
|
56
56
|
--error-text-color: var(--lmvz-semantic-color-status-on-danger, #e52a31);
|
|
57
57
|
|
|
58
58
|
--label-floating-scale: 0.85; /* 14px -> 12px approx */
|
|
@@ -87,13 +87,9 @@
|
|
|
87
87
|
pointer-events: none;
|
|
88
88
|
}
|
|
89
89
|
.input-container:focus-within .input-wrapper {
|
|
90
|
-
border-color: var(--input-border-color-focus);
|
|
91
|
-
outline:
|
|
92
|
-
outline-offset:
|
|
93
|
-
}
|
|
94
|
-
/* Enhanced focus indicator for keyboard users */
|
|
95
|
-
.input-container:has(input:focus-visible) .input-wrapper {
|
|
96
|
-
box-shadow: 0 0 0 3px rgb(0 86 214 / 20%);
|
|
90
|
+
/* border-color: var(--input-border-color-focus); */
|
|
91
|
+
outline: var(--lmvz-ds-outline, 1px solid #0e7ab4);
|
|
92
|
+
outline-offset: var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem));
|
|
97
93
|
}
|
|
98
94
|
/* Error State */
|
|
99
95
|
:host([error]) .input-wrapper {
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
padding: var(--lmvz-component-input-md-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)) var(--lmvz-component-input-md-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
|
|
50
50
|
cursor: pointer;
|
|
51
51
|
|
|
52
|
-
--lmvz-menuitem-color: var(--lmvz-semantic-color-int-on-tertiary, #
|
|
52
|
+
--lmvz-menuitem-color: var(--lmvz-semantic-color-int-on-tertiary, #000000);
|
|
53
53
|
--lmvz-menuitem-background: var(--lmvz-semantic-color-int-tertiary, #ffffff);
|
|
54
54
|
|
|
55
55
|
background: var(--lmvz-menuitem-background);
|
|
@@ -66,6 +66,6 @@
|
|
|
66
66
|
z-index: 1;
|
|
67
67
|
}
|
|
68
68
|
:host([aria-expanded='true']) {
|
|
69
|
-
--lmvz-menuitem-background: var(--lmvz-semantic-color-status-active, #
|
|
69
|
+
--lmvz-menuitem-background: var(--lmvz-semantic-color-status-active, #f6fbfe);
|
|
70
70
|
--lmvz-menuitem-color: var(--lmvz-semantic-color-status-on-active, #0e7ab4);
|
|
71
71
|
}
|
|
@@ -66,6 +66,9 @@ dialog {
|
|
|
66
66
|
border: none;
|
|
67
67
|
padding: 0;
|
|
68
68
|
background: transparent;
|
|
69
|
+
height: 100vh;
|
|
70
|
+
width: 100vw;
|
|
71
|
+
contain: layout size;
|
|
69
72
|
}
|
|
70
73
|
dialog::backdrop {
|
|
71
74
|
/* TODO(LDHCID-135): Missing token for the modal backdrop color */
|
|
@@ -74,18 +77,23 @@ dialog::backdrop {
|
|
|
74
77
|
background: rgb(from var(--lmvz-semantic-color-int-primary, #000000) r g b / 0.29);
|
|
75
78
|
}
|
|
76
79
|
.modal-shell {
|
|
77
|
-
|
|
80
|
+
margin-inline: auto;
|
|
81
|
+
top: 50%;
|
|
82
|
+
transform: translateY(-50%);
|
|
83
|
+
|
|
84
|
+
box-sizing: border-box;
|
|
85
|
+
width: fit-content;
|
|
86
|
+
max-height: 100%;
|
|
87
|
+
max-width: clamp(20rem, 100%, 90vw);
|
|
88
|
+
|
|
78
89
|
display: flex;
|
|
79
90
|
flex-direction: column;
|
|
80
|
-
inline-size: fit-content;
|
|
81
|
-
max-inline-size: clamp(40rem, 100%, 80vw);
|
|
82
91
|
gap: var(--lmvz-modal-shell-gap);
|
|
83
|
-
padding
|
|
84
|
-
|
|
85
|
-
border-radius: var(--lmvz-component-modal-border-radius, 18px);
|
|
92
|
+
padding: var(--lmvz-component-card-lg-padding-y, clamp(2.25rem, 2.19rem + 0.26vw, 2.5rem)) var(--lmvz-component-card-lg-padding-x, clamp(1.5rem, 1.14rem + 1.55vw, 3rem));
|
|
93
|
+
border-radius: var(--lmvz-component-card-lg-border-radius, 18px);
|
|
86
94
|
background: var(--lmvz-semantic-color-surface-primary, #ffffff);
|
|
87
|
-
|
|
88
|
-
|
|
95
|
+
|
|
96
|
+
position: relative;
|
|
89
97
|
|
|
90
98
|
.close-button {
|
|
91
99
|
position: absolute;
|
|
@@ -93,9 +101,16 @@ dialog::backdrop {
|
|
|
93
101
|
right: var(--lmvz-dimension-10-12, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem));
|
|
94
102
|
}
|
|
95
103
|
}
|
|
96
|
-
@media (
|
|
104
|
+
@media (max-width: 402px) {
|
|
105
|
+
dialog {
|
|
106
|
+
margin: 0;
|
|
107
|
+
max-width: unset;
|
|
108
|
+
max-height: unset;
|
|
109
|
+
}
|
|
97
110
|
.modal-shell {
|
|
98
|
-
max-
|
|
111
|
+
max-width: 100vw;
|
|
112
|
+
border-radius: 0;
|
|
113
|
+
height: 100%;
|
|
99
114
|
}
|
|
100
115
|
}
|
|
101
116
|
.header {
|
|
@@ -115,4 +130,7 @@ dialog::backdrop {
|
|
|
115
130
|
.body {
|
|
116
131
|
font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
|
|
117
132
|
Router);
|
|
133
|
+
flex: 1;
|
|
134
|
+
overflow: scroll;
|
|
135
|
+
/* min-block-size: clamp(8rem, 40vw, 60vh); */
|
|
118
136
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import closeIcon from "@lmvz-ds/icons/assets/close-sm.svg";
|
|
1
2
|
import { toValidSvgStringWithFallback } from "@lmvz-ds/lib-ts/validation/svg.js";
|
|
2
3
|
import { Host, h } from "@stencil/core";
|
|
3
|
-
import closeIcon from "../../assets/icons/close-sm.svg";
|
|
4
4
|
import { AriaValidationController } from "../../utils/aria/aria-validation-controller";
|
|
5
5
|
import { getDeepActiveElement, inheritAriaAttributes } from "../../utils/component";
|
|
6
6
|
import { ReactiveControllerHost } from "../../utils/reactive-controller-host";
|
|
@@ -223,7 +223,7 @@ export class LmvzModal extends ReactiveControllerHost {
|
|
|
223
223
|
this.hasHeader = this.hasAssignedContent(this.headerSlot);
|
|
224
224
|
};
|
|
225
225
|
render() {
|
|
226
|
-
return (h(Host, { key: '
|
|
226
|
+
return (h(Host, { key: '1fbdbb1ab2d3ad423075465108d4ff807d07404e' }, h("dialog", { key: '622dd60366ad594e16471cc8921c97d23af14ccb', ref: (element) => (this.dialogEl = element), onCancel: this.handleDialogCancel, onClose: this.handleDialogClose, ...this.dialogAccessibilityAttributes }, h("div", { key: 'bcdfbefbd5f380e2bf946aed479d542a33927af1', class: "modal-shell" }, h("header", { key: 'dcd23467473d58b51bddaf613b3ac8c922eecdc6', class: { header: true, 'has-title': this.hasHeader } }, h("div", { key: 'b2aa21fda4a80d2ea003e6ec876c2b74df5d29fd', class: "title", id: this.dialogTitleId, hidden: !this.hasHeader }, h("slot", { key: 'b7238e5b24c0822a94087d4ff0567e6406542c73', name: "header", ref: (element) => (this.headerSlot = element), onSlotchange: this.handleHeaderSlotChange })), h("lmvz-button", { key: '5059671fb4d81c685becd3adb0be52dd92ec4dec', ref: (element) => (this.closeButtonEl = element), type: "button", class: "close-button", "aria-label": this.closeLabel, onClick: this.handleCloseButtonClick, variant: "tertiary" }, h("lmvz-icon", { key: '498447e60e0e33fc165f39cea35434080e869d3c', icon: closeIconSvg }))), h("div", { key: '39ecefb52d5990cb689b0e4f18a8b6fc501c840d', class: "body" }, h("slot", { key: 'b014d0633c28fb6b399f11f2323e102949548776' })), h("footer", { key: '201dae98bcf810f369d77b7e9f36d7cc71ed5db4', class: "actions", hidden: !this.buttonGroupEl?.hasActions }, h("lmvz-button-group", { key: 'e4559d383992e059f915670a0874cc3b9ef655a3', ref: (element) => (this.buttonGroupEl = element) }, h("slot", { key: '88b007e139d4a166a2ee886dcd0256293d5d33c9', name: "actions" })))))));
|
|
227
227
|
}
|
|
228
228
|
static get is() { return "lmvz-modal"; }
|
|
229
229
|
static get encapsulation() { return "shadow"; }
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
|
|
2
|
+
@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides;
|
|
3
|
+
/**
|
|
4
|
+
* This defines the order of our lmvz-ds' CSS layers. See readme.md for details.
|
|
5
|
+
* Important: Always import this file _before_ layering your own styles!
|
|
6
|
+
*/
|
|
7
|
+
@layer lmvz-ds.theme {
|
|
8
|
+
/**
|
|
9
|
+
* !CAUTION: Changes to this file have to be manually synced into `/packages/styles/src/no-transform/router-font.css`
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
@font-face {
|
|
13
|
+
font-family: Router;
|
|
14
|
+
src:
|
|
15
|
+
local('RouterBook-Regular'),
|
|
16
|
+
local('Router-Book'),
|
|
17
|
+
url('/assets/fonts/Router-Book.woff') format('woff');
|
|
18
|
+
font-weight: 400;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@font-face {
|
|
22
|
+
font-family: Router;
|
|
23
|
+
src:
|
|
24
|
+
local('RouterMedium-Regular'),
|
|
25
|
+
local('Router-Medium'),
|
|
26
|
+
url('/assets/fonts/Router-Medium.woff') format('woff');
|
|
27
|
+
font-weight: 500;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@font-face {
|
|
31
|
+
font-family: Router;
|
|
32
|
+
src:
|
|
33
|
+
local('RouterBold-Regular'),
|
|
34
|
+
local('Router-Bold'),
|
|
35
|
+
url('/assets/fonts/Router-Bold.woff') format('woff');
|
|
36
|
+
font-weight: 700;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
:host {
|
|
41
|
+
display: inline-block;
|
|
42
|
+
|
|
43
|
+
--radio-circle-size: var(--lmvz-global-s18, 18px);
|
|
44
|
+
--radio-dot-size: 0.5rem;
|
|
45
|
+
|
|
46
|
+
--radio-bg: var(--lmvz-semantic-color-surface-input-primary, #ffffff);
|
|
47
|
+
--radio-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0);
|
|
48
|
+
--radio-border-color-hover: var(--lmvz-semantic-color-border-hover, #c7c7c7);
|
|
49
|
+
--radio-border-color-checked: var(--lmvz-semantic-color-border-active, #0f8acc);
|
|
50
|
+
--radio-border-color-error: var(--lmvz-semantic-color-status-on-danger, #e52a31);
|
|
51
|
+
--radio-dot-color: var(--lmvz-semantic-color-border-active, #0f8acc);
|
|
52
|
+
|
|
53
|
+
--radio-wrapper-bg-hover: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0);
|
|
54
|
+
--radio-wrapper-bg-active: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0);
|
|
55
|
+
|
|
56
|
+
--radio-label-color: var(--lmvz-semantic-color-on-surface-primary, #000000);
|
|
57
|
+
--radio-label-color-checked: var(--lmvz-semantic-color-status-on-active, #0e7ab4);
|
|
58
|
+
--radio-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #545454);
|
|
59
|
+
|
|
60
|
+
--radio-easing: var(--lmvz-global-easing-default, ease);
|
|
61
|
+
--radio-duration: 0.2s;
|
|
62
|
+
|
|
63
|
+
display: flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
gap: var(--lmvz-component-input-gap-md, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
|
|
66
|
+
padding-block: var(--lmvz-dimension-2-8, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem));
|
|
67
|
+
padding-inline: var(--lmvz-dimension-8-12, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));
|
|
68
|
+
border-radius: var(--lmvz-semantic-border-radius-round, 999px);
|
|
69
|
+
overflow: clip;
|
|
70
|
+
cursor: pointer;
|
|
71
|
+
background-color: transparent;
|
|
72
|
+
position: relative;
|
|
73
|
+
transition: background-color var(--radio-duration) var(--radio-easing);
|
|
74
|
+
}
|
|
75
|
+
input {
|
|
76
|
+
position: absolute;
|
|
77
|
+
inset-block-start: var(--lmvz-dimension-2-8, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem));
|
|
78
|
+
inset-inline-start: var(--lmvz-dimension-4-10, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));
|
|
79
|
+
opacity: 0;
|
|
80
|
+
width: var(--radio-circle-size);
|
|
81
|
+
height: var(--radio-circle-size);
|
|
82
|
+
margin: 0;
|
|
83
|
+
cursor: pointer;
|
|
84
|
+
z-index: 1;
|
|
85
|
+
}
|
|
86
|
+
.circle {
|
|
87
|
+
width: var(--radio-circle-size);
|
|
88
|
+
height: var(--radio-circle-size);
|
|
89
|
+
border-radius: 50%;
|
|
90
|
+
border: var(--lmvz-semantic-border-width-default, 1px) solid var(--radio-border-color);
|
|
91
|
+
background-color: var(--radio-bg);
|
|
92
|
+
pointer-events: none;
|
|
93
|
+
flex-shrink: 0;
|
|
94
|
+
display: flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
justify-content: center;
|
|
97
|
+
box-sizing: border-box;
|
|
98
|
+
transition: border-color var(--radio-duration) var(--radio-easing);
|
|
99
|
+
}
|
|
100
|
+
.dot {
|
|
101
|
+
width: var(--radio-dot-size);
|
|
102
|
+
height: var(--radio-dot-size);
|
|
103
|
+
border-radius: 50%;
|
|
104
|
+
background-color: var(--radio-dot-color);
|
|
105
|
+
}
|
|
106
|
+
.content {
|
|
107
|
+
display: flex;
|
|
108
|
+
flex-direction: column;
|
|
109
|
+
overflow-wrap: break-word;
|
|
110
|
+
min-width: 0;
|
|
111
|
+
}
|
|
112
|
+
label {
|
|
113
|
+
font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
|
|
114
|
+
Router);
|
|
115
|
+
color: var(--radio-label-color);
|
|
116
|
+
cursor: pointer;
|
|
117
|
+
transition: color var(--radio-duration) var(--radio-easing);
|
|
118
|
+
}
|
|
119
|
+
.helper-text {
|
|
120
|
+
display: block;
|
|
121
|
+
font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.4
|
|
122
|
+
Router);
|
|
123
|
+
color: var(--radio-helper-color);
|
|
124
|
+
margin-block-start: 2px;
|
|
125
|
+
}
|
|
126
|
+
.helper-text:empty {
|
|
127
|
+
display: none;
|
|
128
|
+
}
|
|
129
|
+
/* Hover state, guarded to prevent sticky hover on touch devices */
|
|
130
|
+
@media (hover: hover) {
|
|
131
|
+
:host(:hover) .circle {
|
|
132
|
+
border-color: var(--radio-border-color-hover);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
:host(:hover) {
|
|
136
|
+
background-color: var(--radio-wrapper-bg-hover);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/* Active state */
|
|
140
|
+
:host(:active) {
|
|
141
|
+
background-color: var(--radio-wrapper-bg-active);
|
|
142
|
+
}
|
|
143
|
+
/* Checked state */
|
|
144
|
+
:host([checked]) .circle {
|
|
145
|
+
border-color: var(--radio-border-color-checked);
|
|
146
|
+
}
|
|
147
|
+
:host([checked]) label {
|
|
148
|
+
color: var(--radio-label-color-checked);
|
|
149
|
+
}
|
|
150
|
+
/* Error state. MUST appear AFTER checked state rules (error takes visual precedence) */
|
|
151
|
+
:host([error]) .circle {
|
|
152
|
+
border-color: var(--radio-border-color-error);
|
|
153
|
+
}
|
|
154
|
+
:host([error]) .helper-text {
|
|
155
|
+
color: var(--lmvz-semantic-color-status-on-danger, #e52a31);
|
|
156
|
+
}
|
|
157
|
+
/* Disabled state */
|
|
158
|
+
:host([disabled]) {
|
|
159
|
+
opacity: var(--lmvz-component-input-disabled-opacity, 40%);
|
|
160
|
+
pointer-events: none;
|
|
161
|
+
cursor: not-allowed;
|
|
162
|
+
}
|
|
163
|
+
/* Forced Colors / Windows High Contrast */
|
|
164
|
+
@media (forced-colors: active) {
|
|
165
|
+
.circle {
|
|
166
|
+
forced-color-adjust: auto;
|
|
167
|
+
border-color: ButtonText;
|
|
168
|
+
background-color: Field;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
:host([checked]) .circle {
|
|
172
|
+
border-color: Highlight;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.dot {
|
|
176
|
+
background-color: ButtonText;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
:host([checked]) .dot {
|
|
180
|
+
background-color: HighlightText;
|
|
181
|
+
}
|
|
182
|
+
}
|