@lmvz-ds/components 0.36.0 → 0.36.1
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 +8 -0
- package/cjs/aria.constants-DPK5mQEL.js +65 -0
- package/cjs/{stencil.util-TjS8_DoU.js → async.util-Dnl6c82X.js} +1 -13
- package/cjs/{directional-focus-controller-3uDoin45.js → directional-focus-controller-8Xd_7MHT.js} +1 -1
- package/cjs/{element-activation-controller-BWtUKzu2.js → element-activation-controller-DzTUocEO.js} +1 -1
- package/cjs/{element.util-CctmBvUY.js → element.util-BlhcwmfR.js} +2 -62
- package/cjs/lmvz-action-list.cjs.entry.js +3 -2
- package/cjs/lmvz-button-group.cjs.entry.js +2 -1
- package/cjs/lmvz-button_2.cjs.entry.js +3 -2
- package/cjs/lmvz-checkbox.cjs.entry.js +38 -4
- package/cjs/lmvz-components.cjs.js +1 -1
- package/cjs/lmvz-datepicker.cjs.entry.js +10 -3
- package/cjs/lmvz-header_2.cjs.entry.js +4 -3
- package/cjs/lmvz-input.cjs.entry.js +242 -0
- package/cjs/lmvz-menuitem.cjs.entry.js +3 -2
- package/cjs/lmvz-modal.cjs.entry.js +2 -1
- package/cjs/{lmvz-input_2.cjs.entry.js → lmvz-popover.cjs.entry.js} +24 -228
- package/cjs/lmvz-radio.cjs.entry.js +61 -3
- package/cjs/lmvz-select.cjs.entry.js +423 -16
- package/cjs/lmvz-snackbar.cjs.entry.js +1 -1
- package/cjs/lmvz-spinner.cjs.entry.js +1 -1
- package/cjs/lmvz-tab.cjs.entry.js +1 -1
- package/cjs/lmvz-tabs.cjs.entry.js +4 -3
- package/cjs/lmvz-toggle.cjs.entry.js +7 -3
- package/cjs/loader.cjs.js +1 -1
- package/cjs/stencil.util-CBrPLd-F.js +17 -0
- package/collection/components/lmvz-checkbox/lmvz-checkbox.css +4 -2
- package/collection/components/lmvz-checkbox/lmvz-checkbox.js +68 -8
- package/collection/components/lmvz-datepicker/lmvz-datepicker.css +0 -5
- package/collection/components/lmvz-datepicker/lmvz-datepicker.js +17 -3
- package/collection/components/lmvz-input/lmvz-input.css +1 -1
- package/collection/components/lmvz-input/lmvz-input.js +47 -12
- package/collection/components/lmvz-popover/lmvz-popover.css +1 -1
- package/collection/components/lmvz-popover/lmvz-popover.js +45 -5
- package/collection/components/lmvz-radio/lmvz-radio.js +77 -9
- package/collection/components/lmvz-select/lmvz-select.css +96 -34
- package/collection/components/lmvz-select/lmvz-select.js +412 -21
- package/collection/components/lmvz-snackbar/lmvz-snackbar.js +1 -1
- package/collection/components/lmvz-spinner/lmvz-spinner.js +1 -1
- package/collection/components/lmvz-tab/lmvz-tab.js +1 -1
- package/collection/components/lmvz-tabs/lmvz-tabs.js +1 -1
- package/collection/components/lmvz-toggle/lmvz-toggle.js +21 -1
- package/collection/integration/header-integration/header-integration.js +1 -1
- package/collection/styles/fragments/_focus-within.css +2 -2
- package/collection/utils/aria/listbox-controller.js +154 -0
- package/collection/utils/radio/radio-group-controller.js +17 -0
- package/components/lmvz-checkbox.js +1 -1
- package/components/lmvz-datepicker.js +1 -1
- package/components/lmvz-input.js +1 -1
- package/components/lmvz-popover.js +1 -1
- package/components/lmvz-radio.js +1 -1
- package/components/lmvz-select.js +1 -1
- package/components/lmvz-snackbar.js +1 -1
- package/components/lmvz-spinner.js +1 -1
- package/components/lmvz-tab.js +1 -1
- package/components/lmvz-tabs.js +1 -1
- package/components/lmvz-toggle.js +1 -1
- package/components/p-BApwCp0R.js +1 -0
- package/components/p-C5gRiLRR.js +1 -0
- package/esm/aria.constants-DIyiticz.js +62 -0
- package/esm/{stencil.util-C3QOYC8E.js → async.util-DZj20TV1.js} +1 -13
- package/esm/{directional-focus-controller-Bhu7RqYE.js → directional-focus-controller-QukTTWBE.js} +1 -1
- package/esm/{element-activation-controller-BuwyVq4A.js → element-activation-controller-dxJZKMag.js} +1 -1
- package/esm/{element.util-Bd9JyKJZ.js → element.util-3ydVsxUW.js} +2 -61
- package/esm/lmvz-action-list.entry.js +3 -2
- package/esm/lmvz-button-group.entry.js +2 -1
- package/esm/lmvz-button_2.entry.js +3 -2
- package/esm/lmvz-checkbox.entry.js +38 -4
- package/esm/lmvz-components.js +1 -1
- package/esm/lmvz-datepicker.entry.js +10 -3
- package/esm/lmvz-header_2.entry.js +4 -3
- package/esm/lmvz-input.entry.js +240 -0
- package/esm/lmvz-menuitem.entry.js +3 -2
- package/esm/lmvz-modal.entry.js +2 -1
- package/esm/{lmvz-input_2.entry.js → lmvz-popover.entry.js} +23 -226
- package/esm/lmvz-radio.entry.js +61 -3
- package/esm/lmvz-select.entry.js +423 -16
- package/esm/lmvz-snackbar.entry.js +1 -1
- package/esm/lmvz-spinner.entry.js +1 -1
- package/esm/lmvz-tab.entry.js +1 -1
- package/esm/lmvz-tabs.entry.js +4 -3
- package/esm/lmvz-toggle.entry.js +7 -3
- package/esm/loader.js +1 -1
- package/esm/stencil.util-D2-5rsN3.js +15 -0
- package/hydrate/index.js +625 -68
- package/hydrate/index.mjs +625 -68
- package/lmvz-components/lmvz-components.esm.js +1 -1
- package/lmvz-components/{p-544e3ccb.entry.js → p-0f65d001.entry.js} +1 -1
- package/lmvz-components/p-137b1fe1.entry.js +1 -0
- package/lmvz-components/p-26dd9684.entry.js +1 -0
- package/lmvz-components/p-36f44108.entry.js +1 -0
- package/lmvz-components/p-398b5cf4.entry.js +1 -0
- package/lmvz-components/p-3a396fc8.entry.js +1 -0
- package/lmvz-components/p-40716828.entry.js +1 -0
- package/lmvz-components/p-70f1e31a.entry.js +1 -0
- package/lmvz-components/p-71d06d1d.entry.js +1 -0
- package/lmvz-components/{p-d280d21a.entry.js → p-88661c50.entry.js} +1 -1
- package/lmvz-components/p-91eb71bb.entry.js +1 -0
- package/lmvz-components/p-BA3wizqg.js +1 -0
- package/lmvz-components/{p-GGkwaiT6.js → p-CHxiS3ja.js} +1 -1
- package/lmvz-components/{p-UhNgD4L3.js → p-CPSyM_e-.js} +1 -1
- package/lmvz-components/p-DIyiticz.js +1 -0
- package/lmvz-components/p-DZj20TV1.js +1 -0
- package/lmvz-components/p-a680a7b2.entry.js +1 -0
- package/lmvz-components/{p-d48203f9.entry.js → p-a6fe9b61.entry.js} +1 -1
- package/lmvz-components/{p-dbfbcb74.entry.js → p-a99acb02.entry.js} +1 -1
- package/lmvz-components/p-bh9cItsP.js +1 -0
- package/lmvz-components/p-f16a19fc.entry.js +1 -0
- package/lmvz-components/p-f3f0ed49.entry.js +1 -0
- package/lmvz-components/p-f516a949.entry.js +1 -0
- package/manifest.json +366 -30
- package/package.json +1 -1
- package/types/api/ds.types.d.ts +1 -0
- package/types/components/lmvz-checkbox/lmvz-checkbox.d.ts +9 -1
- package/types/components/lmvz-datepicker/lmvz-datepicker.d.ts +2 -0
- package/types/components/lmvz-input/lmvz-input.d.ts +3 -0
- package/types/components/lmvz-popover/lmvz-popover.d.ts +2 -0
- package/types/components/lmvz-radio/lmvz-radio.d.ts +12 -2
- package/types/components/lmvz-select/lmvz-select.d.ts +53 -4
- package/types/components/lmvz-toggle/lmvz-toggle.d.ts +1 -0
- package/types/components.d.ts +96 -12
- package/types/utils/aria/listbox-controller.d.ts +42 -0
- package/types/utils/radio/radio-group-controller.d.ts +3 -0
- package/components/p-CPuI0_r_.js +0 -1
- package/components/p-CWpl0WaZ.js +0 -1
- package/lmvz-components/p-63f6a596.entry.js +0 -1
- package/lmvz-components/p-8022c6dc.entry.js +0 -1
- package/lmvz-components/p-Bd9JyKJZ.js +0 -1
- package/lmvz-components/p-C3QOYC8E.js +0 -1
- package/lmvz-components/p-a611c110.entry.js +0 -1
- package/lmvz-components/p-b1bb4393.entry.js +0 -1
- package/lmvz-components/p-b50b1cb5.entry.js +0 -1
- package/lmvz-components/p-b932cf91.entry.js +0 -1
- package/lmvz-components/p-bff115d4.entry.js +0 -1
- package/lmvz-components/p-d9aede81.entry.js +0 -1
- package/lmvz-components/p-f0e28f3a.entry.js +0 -1
- package/lmvz-components/p-f853faae.entry.js +0 -1
- package/lmvz-components/p-fa2efc42.entry.js +0 -1
- package/lmvz-components/p-fe6f5bdc.entry.js +0 -1
package/hydrate/index.mjs
CHANGED
|
@@ -5864,7 +5864,7 @@ function getLmvzComponentMetaInfo(el, key) {
|
|
|
5864
5864
|
function isFocusControllerHost(el) {
|
|
5865
5865
|
return Boolean(getLmvzComponentMetaInfo(el, 'isFocusControllerHost'));
|
|
5866
5866
|
}
|
|
5867
|
-
const defaultConfig = {
|
|
5867
|
+
const defaultConfig$1 = {
|
|
5868
5868
|
orientation: 'both',
|
|
5869
5869
|
enableHomeAndEnd: false,
|
|
5870
5870
|
manageTabIndex: false,
|
|
@@ -5877,7 +5877,7 @@ class DirectionalFocusController {
|
|
|
5877
5877
|
constructor(host, config = {}) {
|
|
5878
5878
|
this.host = host;
|
|
5879
5879
|
this.config = {
|
|
5880
|
-
...defaultConfig,
|
|
5880
|
+
...defaultConfig$1,
|
|
5881
5881
|
...config,
|
|
5882
5882
|
};
|
|
5883
5883
|
}
|
|
@@ -8795,7 +8795,7 @@ class LmvzCard {
|
|
|
8795
8795
|
|
|
8796
8796
|
const checkmarkSvg = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTMuNzUgMTIuNTYyNUw4LjgzMDc5IDE3LjYyNUwyMC40Mzc1IDYuMzc1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEuNzUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K';
|
|
8797
8797
|
|
|
8798
|
-
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('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } .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, #a1a1a1); --checkbox-border-color-checked: var(--lmvz-semantic-color-border-active, #0f8acc); --checkbox-border-color-error: var(--lmvz-semantic-color-status-on-danger, #a31419); --checkbox-wrapper-bg-hover: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); --checkbox-wrapper-bg-checked: var(--lmvz-semantic-color-status-active, #f6fbfe); --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, #545454); --checkbox-error-color: var(--lmvz-semantic-color-status-on-danger, #a31419); --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-8-2, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem)); padding-inline: var(--lmvz-dimension-10-4, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); border-radius: var(--lmvz-semantic-border-radius-round, 999px); 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); cursor: pointer; 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; cursor: pointer; } label.sc-lmvz-checkbox { font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); color: var(--checkbox-label-color); transition: color var(--checkbox-duration) var(--checkbox-easing); cursor: pointer; } .helper-text.sc-lmvz-checkbox { font: var(--lmvz-typography-body-sm, 400 clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem) / 1.5 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.72rem + 0.13vw, 0.88rem) / 1.5 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; input, label, .box, .content { cursor: not-allowed; } }
|
|
8798
|
+
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('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } .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, #a1a1a1); --checkbox-border-color-checked: var(--lmvz-semantic-color-border-active, #0f8acc); --checkbox-border-color-error: var(--lmvz-semantic-color-status-on-danger, #a31419); --checkbox-wrapper-bg-hover: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); --checkbox-wrapper-bg-checked: var(--lmvz-semantic-color-status-active, #f6fbfe); --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, #545454); --checkbox-error-color: var(--lmvz-semantic-color-status-on-danger, #a31419); --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-8-2, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem)); padding-inline: var(--lmvz-dimension-10-4, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); border-radius: var(--lmvz-semantic-border-radius-round, 999px); 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; appearance: none; } .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); cursor: pointer; 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; cursor: pointer; } label.sc-lmvz-checkbox { font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); color: var(--checkbox-label-color); transition: color var(--checkbox-duration) var(--checkbox-easing); cursor: pointer; } .helper-text.sc-lmvz-checkbox { font: var(--lmvz-typography-body-sm, 400 clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem) / 1.5 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.72rem + 0.13vw, 0.88rem) / 1.5 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; input, label, .box, .content { cursor: not-allowed; } } .sc-lmvz-checkbox-h:has(:focus-visible) .pill.sc-lmvz-checkbox { outline: var(--lmvz-ds-outline, 1px solid #0e7ab4); outline-offset: var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem)); } @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; } .sc-lmvz-checkbox-h:has(:focus-visible) .pill.sc-lmvz-checkbox { outline-color: Highlight; box-shadow: none; } }`;
|
|
8799
8799
|
|
|
8800
8800
|
const CHECKMARK_SVG = toValidSvgStringWithFallback(checkmarkSvg);
|
|
8801
8801
|
let checkboxIdCounter = 0;
|
|
@@ -8824,7 +8824,14 @@ class LmvzCheckbox extends ReactiveControllerHost {
|
|
|
8824
8824
|
name;
|
|
8825
8825
|
disabled = false;
|
|
8826
8826
|
required = false;
|
|
8827
|
-
|
|
8827
|
+
nativeError = false;
|
|
8828
|
+
errorFromProp = false;
|
|
8829
|
+
get error() {
|
|
8830
|
+
return this.errorFromProp || this.nativeError;
|
|
8831
|
+
}
|
|
8832
|
+
set error(value) {
|
|
8833
|
+
this.errorFromProp = value;
|
|
8834
|
+
}
|
|
8828
8835
|
errorMessage;
|
|
8829
8836
|
helperText;
|
|
8830
8837
|
form;
|
|
@@ -8833,6 +8840,10 @@ class LmvzCheckbox extends ReactiveControllerHost {
|
|
|
8833
8840
|
handleCheckedChange(val) {
|
|
8834
8841
|
this.checkedState = val;
|
|
8835
8842
|
this.internals.setFormValue?.(val ? (this.value ?? 'on') : null);
|
|
8843
|
+
this.updateValidity();
|
|
8844
|
+
}
|
|
8845
|
+
handleRequiredChange() {
|
|
8846
|
+
this.updateValidity();
|
|
8836
8847
|
}
|
|
8837
8848
|
lmvzChange;
|
|
8838
8849
|
async focusInput() {
|
|
@@ -8844,6 +8855,9 @@ class LmvzCheckbox extends ReactiveControllerHost {
|
|
|
8844
8855
|
async reportValidity() {
|
|
8845
8856
|
return this.internals?.reportValidity() ?? true;
|
|
8846
8857
|
}
|
|
8858
|
+
async getValidationMessage() {
|
|
8859
|
+
return this.internals?.validationMessage ?? '';
|
|
8860
|
+
}
|
|
8847
8861
|
constructor(hostRef) {
|
|
8848
8862
|
super();
|
|
8849
8863
|
registerInstance(this, hostRef);
|
|
@@ -8863,10 +8877,15 @@ class LmvzCheckbox extends ReactiveControllerHost {
|
|
|
8863
8877
|
this.initialChecked = this.checked;
|
|
8864
8878
|
this.checkedState = this.checked;
|
|
8865
8879
|
this.internals.setFormValue?.(this.checked ? (this.value ?? 'on') : null);
|
|
8880
|
+
this.updateValidity();
|
|
8866
8881
|
super.componentWillLoad();
|
|
8867
8882
|
}
|
|
8883
|
+
componentDidLoad() {
|
|
8884
|
+
this.updateValidity();
|
|
8885
|
+
super.componentDidLoad();
|
|
8886
|
+
}
|
|
8868
8887
|
componentWillRender() {
|
|
8869
|
-
if (this.
|
|
8888
|
+
if (this.errorFromProp && !this.errorMessage) {
|
|
8870
8889
|
console.warn('lmvz-checkbox: error=true set without errorMessage — no visual-only error state is rendered. Provide errorMessage to communicate the error to users.');
|
|
8871
8890
|
}
|
|
8872
8891
|
super.componentWillRender();
|
|
@@ -8876,6 +8895,7 @@ class LmvzCheckbox extends ReactiveControllerHost {
|
|
|
8876
8895
|
}
|
|
8877
8896
|
formResetCallback() {
|
|
8878
8897
|
this.checked = this.initialChecked;
|
|
8898
|
+
this.updateValidity();
|
|
8879
8899
|
}
|
|
8880
8900
|
formStateRestoreCallback(state) {
|
|
8881
8901
|
this.checked = state === (this.value ?? 'on');
|
|
@@ -8888,13 +8908,27 @@ class LmvzCheckbox extends ReactiveControllerHost {
|
|
|
8888
8908
|
retargetInnerClicks() {
|
|
8889
8909
|
this.nativeInput?.click();
|
|
8890
8910
|
}
|
|
8911
|
+
updateValidity() {
|
|
8912
|
+
if (this.required && !this.checked) {
|
|
8913
|
+
this.internals.setValidity?.({ valueMissing: true }, 'Please check this box.', this.nativeInput);
|
|
8914
|
+
return;
|
|
8915
|
+
}
|
|
8916
|
+
this.internals.setValidity?.({});
|
|
8917
|
+
this.nativeError = false;
|
|
8918
|
+
}
|
|
8919
|
+
handleInvalid() {
|
|
8920
|
+
this.nativeError = true;
|
|
8921
|
+
}
|
|
8891
8922
|
render() {
|
|
8892
|
-
return (hAsync(Host, { key: '
|
|
8923
|
+
return (hAsync(Host, { key: '089b23f8034fa089f358cc37923182c34f528cd2' }, hAsync("div", { key: '0af011ebf062332c330b49fa3076828204433ac4', class: "pill" }, hAsync("input", { key: 'a483a8c5bbe1d6da3cfab63ce32ad2e6392911ff', type: "checkbox", id: this.checkboxId, checked: this.checkedState, disabled: this.disabled, "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: 'f21d34ab625c7eef23bd2761b399e8770cd62275', class: "box", "aria-hidden": "true" }, this.checkedState && hAsync("span", { key: 'de2680ea17f34ab0124c529d88d4191c97d0a4c5', class: "indicator", innerHTML: CHECKMARK_SVG })), hAsync("span", { key: '1b2d24e43603033a5a77340164e002de326db11a', class: "content" }, hAsync("label", { key: 'b18f17abb4459b3783dc41d0031f4b26795fdcf5', htmlFor: this.checkboxId }, this.label), this.helperText && (hAsync("span", { key: 'f32591c55fcc88d130815780a9999fcb235afd88', onClick: this.retargetInnerClicks.bind(this), class: "helper-text", id: this.helperId, role: "status" }, this.helperText)))), this.errorMessage && (hAsync("span", { key: '076489f5baadab07d95fc787e9ac71bae0a6ab68', onClick: this.retargetInnerClicks.bind(this), class: "error-text", id: this.errorId, role: "alert" }, this.errorMessage))));
|
|
8893
8924
|
}
|
|
8894
8925
|
static get formAssociated() { return true; }
|
|
8895
8926
|
static get watchers() { return {
|
|
8896
8927
|
"checked": [{
|
|
8897
8928
|
"handleCheckedChange": 0
|
|
8929
|
+
}],
|
|
8930
|
+
"required": [{
|
|
8931
|
+
"handleRequiredChange": 0
|
|
8898
8932
|
}]
|
|
8899
8933
|
}; }
|
|
8900
8934
|
static get style() { return lmvzCheckboxCss(); }
|
|
@@ -8905,22 +8939,24 @@ class LmvzCheckbox extends ReactiveControllerHost {
|
|
|
8905
8939
|
"label": [1],
|
|
8906
8940
|
"checked": [1540],
|
|
8907
8941
|
"value": [1],
|
|
8908
|
-
"name": [
|
|
8942
|
+
"name": [513],
|
|
8909
8943
|
"disabled": [516],
|
|
8910
8944
|
"required": [516],
|
|
8911
|
-
"error": [
|
|
8945
|
+
"error": [6660],
|
|
8912
8946
|
"errorMessage": [1, "error-message"],
|
|
8913
8947
|
"helperText": [1, "helper-text"],
|
|
8914
8948
|
"form": [1],
|
|
8915
8949
|
"autofocus": [4],
|
|
8950
|
+
"nativeError": [32],
|
|
8916
8951
|
"checkedState": [32],
|
|
8917
8952
|
"focusInput": [64],
|
|
8918
8953
|
"checkValidity": [64],
|
|
8919
|
-
"reportValidity": [64]
|
|
8954
|
+
"reportValidity": [64],
|
|
8955
|
+
"getValidationMessage": [64]
|
|
8920
8956
|
},
|
|
8921
|
-
"$listeners$":
|
|
8957
|
+
"$listeners$": [[0, "invalid", "handleInvalid"]],
|
|
8922
8958
|
"$lazyBundleId$": "-",
|
|
8923
|
-
"$attrsToReflect$": [["checked", "checked"], ["disabled", "disabled"], ["required", "required"], ["error", "error"]]
|
|
8959
|
+
"$attrsToReflect$": [["checked", "checked"], ["name", "name"], ["disabled", "disabled"], ["required", "required"], ["error", "error"]]
|
|
8924
8960
|
}; }
|
|
8925
8961
|
}
|
|
8926
8962
|
|
|
@@ -11296,7 +11332,7 @@ function parseFromDisplay(text, locale, displayFormat) {
|
|
|
11296
11332
|
return `${String(yyyy).padStart(4, '0')}-${String(MM).padStart(2, '0')}-${String(dd).padStart(2, '0')}`;
|
|
11297
11333
|
}
|
|
11298
11334
|
|
|
11299
|
-
const lmvzDatepickerCss = () => ` @layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } }
|
|
11335
|
+
const lmvzDatepickerCss = () => ` @layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } :host { display: inline-block; width: 100%; } .datepicker-panel { display: flex; flex-direction: column; gap: var(--lmvz-component-input-gap-lg, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)); } .datepicker-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .datepicker-month-label { all: unset; font: var(--lmvz-typography-body-md-strong, 500 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); color: var(--lmvz-semantic-color-on-surface-primary, #000000); text-align: center; cursor: default; pointer-events: none; user-select: none; } .datepicker-weekday-row { display: flex; gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); width: 100%; } .datepicker-weekday { flex: 1; display: flex; align-items: center; justify-content: center; font: var(--lmvz-typography-body-sm-strong, 500 clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem) / 1.5 Router); color: var(--lmvz-semantic-color-on-surface-secondary, #545454); min-width: 0; text-align: center; } .datepicker-grid { display: flex; flex-direction: column; gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); } .datepicker-week-row { display: flex; gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); } [part~='day'] { all: unset; flex: 1; width: var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)); height: var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)); min-width: var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)); box-sizing: border-box; display: flex; align-items: center; justify-content: center; border-radius: var(--lmvz-semantic-border-radius-round, 999px); font: var(--lmvz-typography-body-md-strong, 500 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); color: var(--lmvz-semantic-color-on-surface-primary, #000000); background-color: transparent; cursor: pointer; transition: background-color 0.15s ease, color 0.15s ease; position: relative; } [part~='day--disabled'], [part~='day']:disabled { opacity: var(--lmvz-global-opacity-disabled, 40%); pointer-events: none; } [part~='day']:focus-visible { outline: var(--lmvz-ds-outline, 1px solid #0e7ab4); outline-offset: var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem)); } [part~='day']:not(:disabled):hover { background-color: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); color: var(--lmvz-semantic-color-on-surface-primary, #000000); } [part~='day--today'] { box-shadow: inset 0 0 0 1px var(--lmvz-semantic-color-border-active, #0f8acc); } [part~='day--today']:not(:disabled):hover { background-color: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); box-shadow: inset 0 0 0 1px var(--lmvz-semantic-color-border-active, #0f8acc); } [part~='day--selected'] { background-color: var(--lmvz-semantic-color-status-active-alternate, #0f8acc); color: var(--lmvz-semantic-color-status-on-active-alternate, #ffffff); box-shadow: none; } [part~='day--today'][part~='day--selected'] { background-color: var(--lmvz-semantic-color-status-active-alternate, #0f8acc); color: var(--lmvz-semantic-color-status-on-active-alternate, #ffffff); box-shadow: none; } [part~='day--selected']:not(:disabled):hover { background-color: var(--lmvz-semantic-color-status-active-alternate, #0f8acc); color: var(--lmvz-semantic-color-status-on-active-alternate, #ffffff); } [part~='day--out-of-month'] { color: var(--lmvz-semantic-color-on-surface-tertiary, #7a7a7a); } `;
|
|
11300
11336
|
|
|
11301
11337
|
const CHEVRON_LEFT = toValidSvgStringWithFallback(chevronLeftSvg);
|
|
11302
11338
|
const CHEVRON_RIGHT = toValidSvgStringWithFallback(chevronRightSvg);
|
|
@@ -11632,10 +11668,17 @@ class LmvzDatepicker {
|
|
|
11632
11668
|
}
|
|
11633
11669
|
const isInvalid = Object.values(flags).some(Boolean);
|
|
11634
11670
|
this.isInvalid = isInvalid;
|
|
11671
|
+
if (!isInvalid) {
|
|
11672
|
+
this.nativeError = false;
|
|
11673
|
+
}
|
|
11635
11674
|
const validationLabels = getValidationLabels(this.locale);
|
|
11636
11675
|
this.internals.setValidity?.(flags, isInvalid ? this.errorMessage || validationLabels.invalidDateMessage : undefined, isInvalid ? this.el : undefined);
|
|
11637
11676
|
}
|
|
11677
|
+
handleInvalid() {
|
|
11678
|
+
this.nativeError = true;
|
|
11679
|
+
}
|
|
11638
11680
|
isInvalid = false;
|
|
11681
|
+
nativeError = false;
|
|
11639
11682
|
get effectivePlaceholder() {
|
|
11640
11683
|
return this.placeholder ?? derivePatternFromLocale(this.locale).toLowerCase();
|
|
11641
11684
|
}
|
|
@@ -11733,9 +11776,9 @@ class LmvzDatepicker {
|
|
|
11733
11776
|
render() {
|
|
11734
11777
|
const validationLabels = getValidationLabels(this.locale);
|
|
11735
11778
|
const popoverLabel = this.label ? `${this.label} ${validationLabels.popoverSuffix}` : undefined;
|
|
11736
|
-
return (hAsync(Host, { key: '
|
|
11779
|
+
return (hAsync(Host, { key: 'af9d7f075bf97d7eb58c6557f43cf8a245d5f712' }, hAsync("lmvz-input", { key: 'eef4be58281b8356d443c65c5cf6451192e70f75', ref: (el) => {
|
|
11737
11780
|
this.inputEl = el;
|
|
11738
|
-
}, label: this.label ?? '', placeholder: this.effectivePlaceholder, helperText: this.helperText, errorMessage: this.errorMessage, error: this.
|
|
11781
|
+
}, label: this.label ?? '', placeholder: this.effectivePlaceholder, helperText: this.helperText, errorMessage: this.errorMessage, error: this.nativeError, disabled: this.disabled, readonly: this.readonly, required: this.required, value: this.inputText, autocomplete: "off", onLmvzInput: this.handleInputTextChange, onKeyDown: this.handleInputKeydown }, hAsync("lmvz-icon", { key: 'fc39ef14720522a8089d33321b918e5577a36cc2', slot: "after-input", icon: CALENDAR_ICON, "aria-hidden": "true" })), hAsync("lmvz-popover", { key: '0076c57da02c7c9d0fcb53584f9dc4127317d6a5', anchor: this.inputEl, open: this.open && !this.disabled, autoFocus: false, size: "md", label: popoverLabel, onLmvzOpen: this.handlePopoverOpen, onLmvzClose: this.handlePopoverClose }, hAsync("div", { key: '4c1e716e52a5d9ed75155dded3c2c39649e1e844', part: "panel", class: "datepicker-panel" }, this.renderHeader(), this.renderGrid()))));
|
|
11739
11782
|
}
|
|
11740
11783
|
static get delegatesFocus() { return true; }
|
|
11741
11784
|
static get formAssociated() { return true; }
|
|
@@ -11786,10 +11829,11 @@ class LmvzDatepicker {
|
|
|
11786
11829
|
"inputText": [32],
|
|
11787
11830
|
"hasUnparseableInput": [32],
|
|
11788
11831
|
"isInvalid": [32],
|
|
11832
|
+
"nativeError": [32],
|
|
11789
11833
|
"checkValidity": [64],
|
|
11790
11834
|
"reportValidity": [64]
|
|
11791
11835
|
},
|
|
11792
|
-
"$listeners$": [[0, "keydown", "handleKeydown"], [0, "focusin", "handleInputFocus"], [0, "click", "handleInputFocus"]],
|
|
11836
|
+
"$listeners$": [[0, "keydown", "handleKeydown"], [0, "focusin", "handleInputFocus"], [0, "click", "handleInputFocus"], [0, "invalid", "handleInvalid"]],
|
|
11793
11837
|
"$lazyBundleId$": "-",
|
|
11794
11838
|
"$attrsToReflect$": [["disabled", "disabled"], ["readonly", "readonly"], ["required", "required"], ["name", "name"], ["open", "open"]]
|
|
11795
11839
|
}; }
|
|
@@ -12016,7 +12060,7 @@ const hasLazyBuild = (stencilEl) => {
|
|
|
12016
12060
|
return stencilEl.componentOnReady !== undefined;
|
|
12017
12061
|
};
|
|
12018
12062
|
|
|
12019
|
-
const lmvzInputCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } .sc-lmvz-input-h { display: block; font-family: var(--lmvz-global-font-family-default, Router); --input-radius: var(--lmvz-component-input-radius-default, 999px); --input-bg: var(--lmvz-semantic-color-surface-input-primary, #ffffff); --input-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); --input-border-color-hover: var(--lmvz-semantic-color-border-hover, #a1a1a1); --input-border-color-focus: var(--lmvz-semantic-color-border-active, #0f8acc); --input-border-width: var(--lmvz-semantic-border-width-default, 1px); --input-height: var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)); --input-padding-x: var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)); --input-gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --input-font-size: var(--lmvz-component-body-md-font-size, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)); --label-color: var(--lmvz-semantic-color-on-surface-input-secondary, #545454); --input-text-color: var(--lmvz-semantic-color-on-surface-input-primary, #000000); --helper-text-color: var(--lmvz-semantic-color-on-surface-input-secondary, #545454); --error-text-color: var(--lmvz-semantic-color-status-on-danger, #a31419); --label-minimized-bg: var(--input-bg); --label-minimized-padding-x: 4px; --input-disabled-opacity: var(--lmvz-component-input-disabled-opacity, 40%); } [size='sm'].sc-lmvz-input-h { --input-height: var(--lmvz-component-input-size-sm, clamp(2rem, 1.94rem + 0.26vw, 2.25rem)); --input-padding-x: var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); --input-gap: var(--lmvz-component-input-gap-sm, clamp(0.38rem, 0.31rem + 0.26vw, 0.63rem)); --input-font-size: var(--lmvz-component-body-sm-font-size, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); } [size='md'].sc-lmvz-input-h { --input-height: var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)); --input-padding-x: var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)); --input-gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --input-font-size: var(--lmvz-component-body-md-font-size, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)); } [size='lg'].sc-lmvz-input-h { --input-height: var(--lmvz-component-input-size-lg, clamp(2.75rem, 2.69rem + 0.26vw, 3rem)); --input-padding-x: var(--lmvz-component-input-padding-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem)); --input-gap: var(--lmvz-component-input-gap-lg, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)); --input-font-size: var(--lmvz-component-body-lg-font-size, clamp(1rem, 0.97rem + 0.13vw, 1.13rem)); } .input-container.sc-lmvz-input { display: flex; flex-direction: column; position: relative; width: 100%; } .input-wrapper.sc-lmvz-input { background-color: var(--input-bg); border: var(--input-border-width) solid var(--input-border-color); border-radius: var(--input-radius); display: flex; align-items: center; height: var(--input-height); padding: 0 var(--input-padding-x); position: relative; transition: border-color 0.2s ease; gap: var(--input-gap); } [disabled].sc-lmvz-input-h .input-wrapper.sc-lmvz-input { opacity: var(--input-disabled-opacity); cursor: not-allowed; pointer-events: none; } .
|
|
12063
|
+
const lmvzInputCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } .sc-lmvz-input-h { display: block; font-family: var(--lmvz-global-font-family-default, Router); --input-radius: var(--lmvz-component-input-radius-default, 999px); --input-bg: var(--lmvz-semantic-color-surface-input-primary, #ffffff); --input-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); --input-border-color-hover: var(--lmvz-semantic-color-border-hover, #a1a1a1); --input-border-color-focus: var(--lmvz-semantic-color-border-active, #0f8acc); --input-border-width: var(--lmvz-semantic-border-width-default, 1px); --input-height: var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)); --input-padding-x: var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)); --input-gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --input-font-size: var(--lmvz-component-body-md-font-size, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)); --label-color: var(--lmvz-semantic-color-on-surface-input-secondary, #545454); --input-text-color: var(--lmvz-semantic-color-on-surface-input-primary, #000000); --helper-text-color: var(--lmvz-semantic-color-on-surface-input-secondary, #545454); --error-text-color: var(--lmvz-semantic-color-status-on-danger, #a31419); --label-minimized-bg: var(--input-bg); --label-minimized-padding-x: 4px; --input-disabled-opacity: var(--lmvz-component-input-disabled-opacity, 40%); } [size='sm'].sc-lmvz-input-h { --input-height: var(--lmvz-component-input-size-sm, clamp(2rem, 1.94rem + 0.26vw, 2.25rem)); --input-padding-x: var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); --input-gap: var(--lmvz-component-input-gap-sm, clamp(0.38rem, 0.31rem + 0.26vw, 0.63rem)); --input-font-size: var(--lmvz-component-body-sm-font-size, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); } [size='md'].sc-lmvz-input-h { --input-height: var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)); --input-padding-x: var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)); --input-gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --input-font-size: var(--lmvz-component-body-md-font-size, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)); } [size='lg'].sc-lmvz-input-h { --input-height: var(--lmvz-component-input-size-lg, clamp(2.75rem, 2.69rem + 0.26vw, 3rem)); --input-padding-x: var(--lmvz-component-input-padding-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem)); --input-gap: var(--lmvz-component-input-gap-lg, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)); --input-font-size: var(--lmvz-component-body-lg-font-size, clamp(1rem, 0.97rem + 0.13vw, 1.13rem)); } .input-container.sc-lmvz-input { display: flex; flex-direction: column; position: relative; width: 100%; } .input-wrapper.sc-lmvz-input { background-color: var(--input-bg); border: var(--input-border-width) solid var(--input-border-color); border-radius: var(--input-radius); display: flex; align-items: center; height: var(--input-height); padding: 0 var(--input-padding-x); position: relative; transition: border-color 0.2s ease; gap: var(--input-gap); } [disabled].sc-lmvz-input-h .input-wrapper.sc-lmvz-input { opacity: var(--input-disabled-opacity); cursor: not-allowed; pointer-events: none; } .sc-lmvz-input-h:has(:focus-visible) .input-wrapper.sc-lmvz-input { border-color: var(--input-border-color-focus); outline: var(--lmvz-ds-outline, 1px solid #0e7ab4); outline-offset: var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem)); } [error].sc-lmvz-input-h .input-wrapper.sc-lmvz-input { border-color: var(--error-text-color); } .sc-lmvz-input-h:not([disabled]) .input-wrapper.sc-lmvz-input:hover { border-color: var(--input-border-color-hover); } .label-input-group.sc-lmvz-input { position: relative; flex-grow: 1; display: flex; align-items: center; height: 100%; } label.sc-lmvz-input { position: absolute; left: 0; top: 50%; transform: translateY(-50%); color: var(--label-color); font-size: var(--input-font-size); font-weight: 400; pointer-events: none; transition: all 0.2s ease-out; background-color: transparent; padding: 0; margin: 0; line-height: 1.5; white-space: nowrap; } label.floating.sc-lmvz-input { top: 0.5em; transform: translateY(-100%); transform-origin: left top; font-size: var(--lmvz-component-body-2xs-font-size, clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem)); background-color: var(--label-minimized-bg); padding: 0 var(--label-minimized-padding-x); left: -2px; color: var(--input-text-color); font-weight: 400; } .required-indicator.sc-lmvz-input { color: var(--error-text-color); margin-left: 2px; } input.sc-lmvz-input { border: none; background: transparent; width: 100%; height: 100%; color: var(--input-text-color); font-family: inherit; font-size: var(--input-font-size); outline: none; padding: 0; margin: 0; font-weight: 400; } input.sc-lmvz-input::placeholder { color: var(--label-color); } div.sc-lmvz-input:empty { display: none; } [role='status'].sc-lmvz-input { padding-top: 8px; padding-left: var(--input-padding-x); font-size: 12px; color: var(--helper-text-color); font-weight: 400; } [role='alert'].sc-lmvz-input { padding-top: 8px; padding-left: var(--input-padding-x); font-size: 12px; color: var(--error-text-color); font-weight: 400; } .sc-lmvz-input-s > lmvz-button { --lmvz-button-padding: var(--lmvz-dimension-6-4, clamp(0.25rem, 0.22rem + 0.13vw, 0.38rem)); --lmvz-button-min-height-override: var(--lmvz-component-input-size-sm, clamp(2rem, 1.94rem + 0.26vw, 2.25rem)); }`;
|
|
12020
12064
|
|
|
12021
12065
|
let inputIdCounter = 0;
|
|
12022
12066
|
class LmvzInput extends ReactiveControllerHost {
|
|
@@ -12026,6 +12070,7 @@ class LmvzInput extends ReactiveControllerHost {
|
|
|
12026
12070
|
}
|
|
12027
12071
|
lmvzInput;
|
|
12028
12072
|
internals;
|
|
12073
|
+
inputValidityActive = false;
|
|
12029
12074
|
nativeInputElement;
|
|
12030
12075
|
inputId = `lmvz-input-${inputIdCounter++}`;
|
|
12031
12076
|
initialValue = '';
|
|
@@ -12082,7 +12127,7 @@ class LmvzInput extends ReactiveControllerHost {
|
|
|
12082
12127
|
async setValue(newValue) {
|
|
12083
12128
|
const input = this.nativeInputElement;
|
|
12084
12129
|
const val = newValue ?? '';
|
|
12085
|
-
if (input) {
|
|
12130
|
+
if (input && input.value !== val) {
|
|
12086
12131
|
input.value = val;
|
|
12087
12132
|
}
|
|
12088
12133
|
this.value = val;
|
|
@@ -12104,6 +12149,9 @@ class LmvzInput extends ReactiveControllerHost {
|
|
|
12104
12149
|
async reportValidity() {
|
|
12105
12150
|
return this.nativeInputElement?.reportValidity?.() ?? false;
|
|
12106
12151
|
}
|
|
12152
|
+
async getValidationMessage() {
|
|
12153
|
+
return this.nativeInputElement?.validationMessage ?? '';
|
|
12154
|
+
}
|
|
12107
12155
|
async getInputElement() {
|
|
12108
12156
|
if (!this.nativeInputElement) {
|
|
12109
12157
|
await new Promise((resolve) => componentOnReady(this.el, resolve));
|
|
@@ -12171,8 +12219,12 @@ class LmvzInput extends ReactiveControllerHost {
|
|
|
12171
12219
|
this.internals.setFormValue?.(this.value ?? '');
|
|
12172
12220
|
}
|
|
12173
12221
|
formResetCallback() {
|
|
12222
|
+
this.inputValidityActive = false;
|
|
12174
12223
|
this.internals.setValidity({});
|
|
12175
12224
|
this.setValue(this.initialValue);
|
|
12225
|
+
if (this.nativeInputElement?.checkValidity?.()) {
|
|
12226
|
+
this.nativeError = false;
|
|
12227
|
+
}
|
|
12176
12228
|
}
|
|
12177
12229
|
formStateRestoreCallback(state) {
|
|
12178
12230
|
this.setValue(state);
|
|
@@ -12186,35 +12238,45 @@ class LmvzInput extends ReactiveControllerHost {
|
|
|
12186
12238
|
this.setValue(newValue);
|
|
12187
12239
|
}
|
|
12188
12240
|
handleDisabledChange(disabled) {
|
|
12189
|
-
if (
|
|
12241
|
+
if (!this.nativeInputElement)
|
|
12242
|
+
return;
|
|
12243
|
+
if (disabled) {
|
|
12190
12244
|
this.nativeInputElement.blur();
|
|
12191
12245
|
}
|
|
12246
|
+
else {
|
|
12247
|
+
this.inputValidityActive = false;
|
|
12248
|
+
}
|
|
12192
12249
|
}
|
|
12193
12250
|
handleInput = (event) => {
|
|
12194
12251
|
const input = event.target;
|
|
12195
12252
|
this.setValue(input.value);
|
|
12253
|
+
if (!this.inputValidityActive)
|
|
12254
|
+
return;
|
|
12255
|
+
this.updateNativeError('input');
|
|
12196
12256
|
};
|
|
12197
12257
|
handleChange = (event) => {
|
|
12198
|
-
const input = event.target ?? this.nativeInputElement;
|
|
12199
|
-
this.updateNativeError(input);
|
|
12200
12258
|
};
|
|
12201
12259
|
handleFocus = () => { };
|
|
12202
|
-
|
|
12203
|
-
|
|
12204
|
-
|
|
12260
|
+
handleInvalid = () => this.updateNativeError('invalid');
|
|
12261
|
+
handleBlur = () => {
|
|
12262
|
+
this.inputValidityActive = true;
|
|
12263
|
+
this.updateNativeError('blur');
|
|
12205
12264
|
};
|
|
12206
|
-
updateNativeError(
|
|
12207
|
-
const input =
|
|
12265
|
+
updateNativeError(sourceEvent) {
|
|
12266
|
+
const input = this.nativeInputElement;
|
|
12208
12267
|
if (!input)
|
|
12209
12268
|
return;
|
|
12210
|
-
|
|
12269
|
+
const newState = sourceEvent === 'invalid' ? true : !(input.checkValidity?.() ?? true);
|
|
12270
|
+
if (this.nativeError === newState)
|
|
12271
|
+
return;
|
|
12272
|
+
this.nativeError = newState;
|
|
12211
12273
|
}
|
|
12212
12274
|
render() {
|
|
12213
12275
|
const hasValue = Boolean(this.value);
|
|
12214
12276
|
const shouldFloatLabel = hasValue || Boolean(this.placeholder);
|
|
12215
|
-
return (hAsync("div", { key: '
|
|
12277
|
+
return (hAsync("div", { key: '626697f00e9ba3ad46e6304d06b04df0f27bb2c2', class: classNames('input-container', {
|
|
12216
12278
|
'interaction-filled': hasValue,
|
|
12217
|
-
}) }, hAsync("div", { key: '
|
|
12279
|
+
}) }, hAsync("div", { key: '25ec1f448b689ff80defded1323f321d95d6b197', class: "input-wrapper" }, hAsync("slot", { key: '1d5f301e0327b4cd1714f403615f94658a754466', name: "before-input" }), hAsync("div", { key: 'ef553e6e8f6b74a5bb7cddef003d3b51650c7c9d', class: "label-input-group" }, hAsync("label", { key: '17d92ff7c65598739e8a379680580561936e21dc', htmlFor: this.inputId, class: classNames({ floating: shouldFloatLabel }) }, this.label, this.required && (hAsync("span", { key: 'cd40da3c85cc6cea49d7d8d270bba317534779f5', class: "required-indicator", "aria-hidden": "true" }, ' ', "*"))), hAsync("input", { key: '3ede0644d383c2a3f702230de2aac6fbcb2c7a06', 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, onInvalid: this.handleInvalid })), hAsync("slot", { key: 'b282c5d9553b72af7fd05ed0f872af0d7b8a5689', name: "after-input" })), hAsync("div", { key: 'da6008e798cb5ee29fa7d1ba3208057c1845a217', id: this.helperId, role: "status" }, this.helperText || null), hAsync("div", { key: '5e7717a2d0dd32c53dd7ba6e170152239f3bfae9', id: this.errorId, role: "alert" }, (this.showErrorMessage && this.errorMessage) || null)));
|
|
12218
12280
|
}
|
|
12219
12281
|
static get formAssociated() { return true; }
|
|
12220
12282
|
static get watchers() { return {
|
|
@@ -12262,6 +12324,7 @@ class LmvzInput extends ReactiveControllerHost {
|
|
|
12262
12324
|
"select": [64],
|
|
12263
12325
|
"checkValidity": [64],
|
|
12264
12326
|
"reportValidity": [64],
|
|
12327
|
+
"getValidationMessage": [64],
|
|
12265
12328
|
"getInputElement": [64]
|
|
12266
12329
|
},
|
|
12267
12330
|
"$listeners$": undefined,
|
|
@@ -14109,7 +14172,7 @@ const computePosition = (reference, floating, options) => {
|
|
|
14109
14172
|
});
|
|
14110
14173
|
};
|
|
14111
14174
|
|
|
14112
|
-
const lmvzPopoverCss = () => `@layer lmvz-ds.reset,lmvz-ds.theme,lmvz-ds.components,lmvz-ds.overrides; @layer lmvz-ds.components{.lmvz-wrapper-card-sm,.lmvz-wrapper-card-md,.lmvz-wrapper-card-lg{background:var(--lmvz-semantic-color-surface-primary, #ffffff);box-shadow:var(--lmvz-ds-shadow-l3-default-strong, 0 2px 32px 0 rgba(120, 120, 128, 0.11))}.lmvz-wrapper-card-sm{padding:var(--lmvz-component-wrapper-sm-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)) var(--lmvz-component-wrapper-sm-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));border-radius:var(--lmvz-component-wrapper-sm-border-radius, 14px)}.lmvz-wrapper-card-md{padding:var(--lmvz-component-wrapper-md-padding-y, clamp(1rem, 0.88rem + 0.52vw, 1.5rem)) var(--lmvz-component-wrapper-md-padding-x, clamp(1rem, 0.88rem + 0.52vw, 1.5rem));border-radius:var(--lmvz-component-wrapper-md-border-radius, 18px)}.lmvz-wrapper-card-lg{padding:var(--lmvz-component-wrapper-lg-padding-y, clamp(2.25rem, 2.19rem + 0.26vw, 2.5rem)) var(--lmvz-component-wrapper-lg-padding-x, clamp(1.5rem, 1.14rem + 1.55vw, 3rem));border-radius:var(--lmvz-component-wrapper-lg-border-radius, 18px)}}:host{--lmvz-popover-z-index-internal:var(--lmvz-popover-z-index,
|
|
14175
|
+
const lmvzPopoverCss = () => `@layer lmvz-ds.reset,lmvz-ds.theme,lmvz-ds.components,lmvz-ds.overrides; @layer lmvz-ds.components{.lmvz-wrapper-card-sm,.lmvz-wrapper-card-md,.lmvz-wrapper-card-lg{background:var(--lmvz-semantic-color-surface-primary, #ffffff);box-shadow:var(--lmvz-ds-shadow-l3-default-strong, 0 2px 32px 0 rgba(120, 120, 128, 0.11))}.lmvz-wrapper-card-sm{padding:var(--lmvz-component-wrapper-sm-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)) var(--lmvz-component-wrapper-sm-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));border-radius:var(--lmvz-component-wrapper-sm-border-radius, 14px)}.lmvz-wrapper-card-md{padding:var(--lmvz-component-wrapper-md-padding-y, clamp(1rem, 0.88rem + 0.52vw, 1.5rem)) var(--lmvz-component-wrapper-md-padding-x, clamp(1rem, 0.88rem + 0.52vw, 1.5rem));border-radius:var(--lmvz-component-wrapper-md-border-radius, 18px)}.lmvz-wrapper-card-lg{padding:var(--lmvz-component-wrapper-lg-padding-y, clamp(2.25rem, 2.19rem + 0.26vw, 2.5rem)) var(--lmvz-component-wrapper-lg-padding-x, clamp(1.5rem, 1.14rem + 1.55vw, 3rem));border-radius:var(--lmvz-component-wrapper-lg-border-radius, 18px)}}:host{--lmvz-popover-z-index-internal:var(--lmvz-popover-z-index, 100);display:contents;.container{position:absolute;top:-9999999999px;left:-9999999999px;max-width:var(--lmvz-popover-max-width, none);max-height:var(--lmvz-popover-max-height, none);z-index:var(--lmvz-popover-z-index-internal);overflow:auto;box-sizing:border-box}}:host(:not([open])) .container{display:none}`;
|
|
14113
14176
|
|
|
14114
14177
|
class LmvzPopover {
|
|
14115
14178
|
constructor(hostRef) {
|
|
@@ -14130,6 +14193,7 @@ class LmvzPopover {
|
|
|
14130
14193
|
placement = 'bottom-start';
|
|
14131
14194
|
size = 'sm';
|
|
14132
14195
|
autoFocus = true;
|
|
14196
|
+
containerRole = 'dialog';
|
|
14133
14197
|
label;
|
|
14134
14198
|
lmvzOpen;
|
|
14135
14199
|
lmvzClose;
|
|
@@ -14150,6 +14214,7 @@ class LmvzPopover {
|
|
|
14150
14214
|
}
|
|
14151
14215
|
componentDidLoad() {
|
|
14152
14216
|
autoAssignId(this.el);
|
|
14217
|
+
this.syncContainerId();
|
|
14153
14218
|
}
|
|
14154
14219
|
handleOpenChange(isOpen) {
|
|
14155
14220
|
if (isOpen) {
|
|
@@ -14176,16 +14241,23 @@ class LmvzPopover {
|
|
|
14176
14241
|
this.removeCloseHandlers();
|
|
14177
14242
|
this.extEventController.abort();
|
|
14178
14243
|
}
|
|
14244
|
+
syncContainerId() {
|
|
14245
|
+
const hostId = this.el.getAttribute('id');
|
|
14246
|
+
if (!hostId || !this.containerEl)
|
|
14247
|
+
return;
|
|
14248
|
+
this.containerEl.id = hostId;
|
|
14249
|
+
}
|
|
14179
14250
|
setupAnchorEl() {
|
|
14180
14251
|
const { anchorEl } = this;
|
|
14181
14252
|
if (!anchorEl) {
|
|
14182
14253
|
console.warn('no anchor element set for', this);
|
|
14183
14254
|
return;
|
|
14184
14255
|
}
|
|
14256
|
+
this.syncContainerId();
|
|
14185
14257
|
if (!anchorEl.hasAttribute('aria-haspopup')) {
|
|
14186
|
-
anchorEl.setAttribute('aria-haspopup', 'dialog');
|
|
14258
|
+
anchorEl.setAttribute('aria-haspopup', this.containerRole === 'dialog' ? 'dialog' : this.containerRole);
|
|
14187
14259
|
}
|
|
14188
|
-
anchorEl.setAttribute('aria-controls', this.el.getAttribute('id'));
|
|
14260
|
+
anchorEl.setAttribute('aria-controls', this.containerEl?.id || this.el.getAttribute('id'));
|
|
14189
14261
|
if (!anchorEl.hasAttribute('aria-expanded')) {
|
|
14190
14262
|
anchorEl.setAttribute('aria-expanded', this.open ? 'true' : 'false');
|
|
14191
14263
|
}
|
|
@@ -14213,10 +14285,11 @@ class LmvzPopover {
|
|
|
14213
14285
|
await waitFrame();
|
|
14214
14286
|
await this.updatePosition();
|
|
14215
14287
|
autoAssignId(this.el);
|
|
14288
|
+
this.syncContainerId();
|
|
14216
14289
|
this.applyAnchorAriaOpen();
|
|
14217
14290
|
this.lmvzOpen.emit();
|
|
14218
14291
|
await waitFrame();
|
|
14219
|
-
if (this.autoFocus) {
|
|
14292
|
+
if (this.autoFocus && this.containerRole === 'dialog') {
|
|
14220
14293
|
this.focusFirst();
|
|
14221
14294
|
}
|
|
14222
14295
|
}
|
|
@@ -14291,7 +14364,7 @@ class LmvzPopover {
|
|
|
14291
14364
|
this.closureController?.abort();
|
|
14292
14365
|
}
|
|
14293
14366
|
render() {
|
|
14294
|
-
return (hAsync(Host, { key: '
|
|
14367
|
+
return (hAsync(Host, { key: '8dadcc766deebc03ea744fd1002078b382bfd48d' }, hAsync("div", { key: 'd332714964212db6f5446afb1b8f38ff031a87b9', role: this.containerRole, part: "container", class: `container lmvz-wrapper-card-${this.size}`, "aria-label": this.label || undefined, ref: (el) => (this.containerEl = el) }, hAsync("slot", { key: '0fa1d214c8c48942751cbd4759ebc992eacc8f72', ref: (el) => (this.slotEl = el) }))));
|
|
14295
14368
|
}
|
|
14296
14369
|
static get watchers() { return {
|
|
14297
14370
|
"open": [{
|
|
@@ -14311,6 +14384,7 @@ class LmvzPopover {
|
|
|
14311
14384
|
"placement": [1],
|
|
14312
14385
|
"size": [1],
|
|
14313
14386
|
"autoFocus": [4, "auto-focus"],
|
|
14387
|
+
"containerRole": [1, "container-role"],
|
|
14314
14388
|
"label": [1],
|
|
14315
14389
|
"anchorEl": [32],
|
|
14316
14390
|
"show": [64],
|
|
@@ -14385,6 +14459,7 @@ class RadioGroup {
|
|
|
14385
14459
|
if (wasEmpty) {
|
|
14386
14460
|
document.addEventListener('focusin', this._focusinHandler, true);
|
|
14387
14461
|
}
|
|
14462
|
+
this.refreshValidity();
|
|
14388
14463
|
}
|
|
14389
14464
|
}
|
|
14390
14465
|
unregister(host) {
|
|
@@ -14395,10 +14470,19 @@ class RadioGroup {
|
|
|
14395
14470
|
if (this.hosts.length === 0) {
|
|
14396
14471
|
document.removeEventListener('focusin', this._focusinHandler, true);
|
|
14397
14472
|
}
|
|
14473
|
+
this.refreshValidity();
|
|
14398
14474
|
}
|
|
14399
14475
|
get sortedEnabled() {
|
|
14400
14476
|
return this.hosts.filter((h) => !h.disabled);
|
|
14401
14477
|
}
|
|
14478
|
+
isAnyChecked() {
|
|
14479
|
+
return this.hosts.some((host) => host.checked);
|
|
14480
|
+
}
|
|
14481
|
+
refreshValidity() {
|
|
14482
|
+
for (const host of this.hosts) {
|
|
14483
|
+
host.updateValidity();
|
|
14484
|
+
}
|
|
14485
|
+
}
|
|
14402
14486
|
setFocused(host) {
|
|
14403
14487
|
this._focusedHost = host;
|
|
14404
14488
|
this.updateTabindex();
|
|
@@ -14414,6 +14498,7 @@ class RadioGroup {
|
|
|
14414
14498
|
host.checked = host === selectedHost;
|
|
14415
14499
|
}
|
|
14416
14500
|
this.updateTabindex();
|
|
14501
|
+
this.refreshValidity();
|
|
14417
14502
|
}
|
|
14418
14503
|
updateTabindex() {
|
|
14419
14504
|
const enabled = this.sortedEnabled;
|
|
@@ -14475,6 +14560,12 @@ class RadioGroupController {
|
|
|
14475
14560
|
select(selectedHost) {
|
|
14476
14561
|
this.group?.select(selectedHost);
|
|
14477
14562
|
}
|
|
14563
|
+
isAnyChecked() {
|
|
14564
|
+
return this.group?.isAnyChecked() ?? false;
|
|
14565
|
+
}
|
|
14566
|
+
refreshValidity() {
|
|
14567
|
+
this.group?.refreshValidity();
|
|
14568
|
+
}
|
|
14478
14569
|
setFocused(host) {
|
|
14479
14570
|
this.group?.setFocused(host);
|
|
14480
14571
|
}
|
|
@@ -14517,7 +14608,7 @@ class RadioGroupController {
|
|
|
14517
14608
|
|
|
14518
14609
|
const lmvzRadioCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } .sc-lmvz-radio-h { display: inline-block; --radio-circle-size: var(--lmvz-global-s18, 18px); --radio-dot-size: 0.5rem; --radio-bg: var(--lmvz-semantic-color-surface-input-primary, #ffffff); --radio-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); --radio-border-color-hover: var(--lmvz-semantic-color-border-hover, #a1a1a1); --radio-border-color-checked: var(--lmvz-semantic-color-border-active, #0f8acc); --radio-border-color-error: var(--lmvz-semantic-color-status-on-danger, #a31419); --radio-dot-color: var(--lmvz-semantic-color-border-active, #0f8acc); --radio-wrapper-bg-hover: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); --radio-wrapper-bg-active: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0); --radio-label-color: var(--lmvz-semantic-color-on-surface-primary, #000000); --radio-label-color-checked: var(--lmvz-semantic-color-status-on-active, #0e7ab4); --radio-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #545454); --radio-easing: var(--lmvz-global-easing-default, ease); --radio-duration: 0.2s; display: flex; align-items: center; gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); padding-block: var(--lmvz-dimension-8-2, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem)); padding-inline: var(--lmvz-dimension-12-8, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); border-radius: var(--lmvz-semantic-border-radius-round, 999px); overflow: clip; cursor: pointer; background-color: transparent; position: relative; transition: background-color var(--radio-duration) var(--radio-easing); } input.sc-lmvz-radio { position: absolute; inset-block-start: var(--lmvz-dimension-8-2, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem)); inset-inline-start: var(--lmvz-dimension-10-4, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); opacity: 0; width: var(--radio-circle-size); height: var(--radio-circle-size); margin: 0; cursor: pointer; z-index: 1; } .circle.sc-lmvz-radio { width: var(--radio-circle-size); height: var(--radio-circle-size); border-radius: 50%; border: var(--lmvz-semantic-border-width-default, 1px) solid var(--radio-border-color); background-color: var(--radio-bg); pointer-events: none; flex-shrink: 0; display: flex; align-items: center; justify-content: center; box-sizing: border-box; transition: border-color var(--radio-duration) var(--radio-easing); } .dot.sc-lmvz-radio { width: var(--radio-dot-size); height: var(--radio-dot-size); border-radius: 50%; background-color: var(--radio-dot-color); } .content.sc-lmvz-radio { display: flex; flex-direction: column; overflow-wrap: break-word; min-width: 0; } label.sc-lmvz-radio { font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); color: var(--radio-label-color); cursor: pointer; transition: color var(--radio-duration) var(--radio-easing); } .helper-text.sc-lmvz-radio { display: block; font: var(--lmvz-typography-body-sm, 400 clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem) / 1.5 Router); color: var(--radio-helper-color); margin-block-start: 2px; } .helper-text.sc-lmvz-radio:empty { display: none; } @media (hover: hover) { .sc-lmvz-radio-h:hover .circle.sc-lmvz-radio { border-color: var(--radio-border-color-hover); } .sc-lmvz-radio-h:hover { background-color: var(--radio-wrapper-bg-hover); } } .sc-lmvz-radio-h:active { background-color: var(--radio-wrapper-bg-active); } [checked].sc-lmvz-radio-h .circle.sc-lmvz-radio { border-color: var(--radio-border-color-checked); } [checked].sc-lmvz-radio-h label.sc-lmvz-radio { color: var(--radio-label-color-checked); } [error].sc-lmvz-radio-h .circle.sc-lmvz-radio { border-color: var(--radio-border-color-error); } [error].sc-lmvz-radio-h .helper-text.sc-lmvz-radio { color: var(--lmvz-semantic-color-status-on-danger, #a31419); } [disabled].sc-lmvz-radio-h { opacity: var(--lmvz-component-input-disabled-opacity, 40%); pointer-events: none; cursor: not-allowed; } @media (forced-colors: active) { .circle.sc-lmvz-radio { forced-color-adjust: auto; border-color: ButtonText; background-color: Field; } [checked].sc-lmvz-radio-h .circle.sc-lmvz-radio { border-color: Highlight; } .dot.sc-lmvz-radio { background-color: ButtonText; } [checked].sc-lmvz-radio-h .dot.sc-lmvz-radio { background-color: HighlightText; } }`;
|
|
14519
14610
|
|
|
14520
|
-
const focusWithinCss$1 = () => `.sc-lmvz-radio-h:focus-
|
|
14611
|
+
const focusWithinCss$1 = () => `.sc-lmvz-radio-h:has(:focus-visible){outline:var(--lmvz-ds-outline, 1px solid #0e7ab4);outline-offset:var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem))}@media (forced-colors: active){.sc-lmvz-radio-h:has(:focus-visible){outline-color:Highlight;box-shadow:none}}`;
|
|
14521
14612
|
|
|
14522
14613
|
let radioIdCounter = 0;
|
|
14523
14614
|
class LmvzRadio extends ReactiveControllerHost {
|
|
@@ -14539,7 +14630,14 @@ class LmvzRadio extends ReactiveControllerHost {
|
|
|
14539
14630
|
name;
|
|
14540
14631
|
disabled = false;
|
|
14541
14632
|
required = false;
|
|
14542
|
-
|
|
14633
|
+
nativeError = false;
|
|
14634
|
+
errorFromProp = false;
|
|
14635
|
+
get error() {
|
|
14636
|
+
return this.errorFromProp || this.nativeError;
|
|
14637
|
+
}
|
|
14638
|
+
set error(value) {
|
|
14639
|
+
this.errorFromProp = value;
|
|
14640
|
+
}
|
|
14543
14641
|
helperText;
|
|
14544
14642
|
form;
|
|
14545
14643
|
autofocus = false;
|
|
@@ -14547,6 +14645,7 @@ class LmvzRadio extends ReactiveControllerHost {
|
|
|
14547
14645
|
_handlingFormReset = false;
|
|
14548
14646
|
handleCheckedChange(newVal, oldVal) {
|
|
14549
14647
|
this.internals.setFormValue?.(newVal ? this.value : null);
|
|
14648
|
+
this.updateValidity();
|
|
14550
14649
|
if (!newVal && oldVal && !this._handlingNativeChange && !this._handlingFormReset) {
|
|
14551
14650
|
this.lmvzChange.emit(false);
|
|
14552
14651
|
}
|
|
@@ -14554,6 +14653,9 @@ class LmvzRadio extends ReactiveControllerHost {
|
|
|
14554
14653
|
this.lmvzChange.emit(true);
|
|
14555
14654
|
}
|
|
14556
14655
|
}
|
|
14656
|
+
handleRequiredChange() {
|
|
14657
|
+
this.updateValidity();
|
|
14658
|
+
}
|
|
14557
14659
|
handleValueChange(newVal) {
|
|
14558
14660
|
if (this.checked) {
|
|
14559
14661
|
this.internals.setFormValue?.(newVal);
|
|
@@ -14575,6 +14677,9 @@ class LmvzRadio extends ReactiveControllerHost {
|
|
|
14575
14677
|
async reportValidity() {
|
|
14576
14678
|
return this.internals?.reportValidity() ?? true;
|
|
14577
14679
|
}
|
|
14680
|
+
async getValidationMessage() {
|
|
14681
|
+
return this.internals?.validationMessage ?? '';
|
|
14682
|
+
}
|
|
14578
14683
|
constructor(hostRef) {
|
|
14579
14684
|
super();
|
|
14580
14685
|
registerInstance(this, hostRef);
|
|
@@ -14596,8 +14701,13 @@ class LmvzRadio extends ReactiveControllerHost {
|
|
|
14596
14701
|
componentWillLoad() {
|
|
14597
14702
|
this.initialChecked = this.checked;
|
|
14598
14703
|
this.internals.setFormValue?.(this.checked ? this.value : null);
|
|
14704
|
+
this.updateValidity();
|
|
14599
14705
|
super.componentWillLoad();
|
|
14600
14706
|
}
|
|
14707
|
+
componentDidLoad() {
|
|
14708
|
+
this.updateValidity();
|
|
14709
|
+
super.componentDidLoad();
|
|
14710
|
+
}
|
|
14601
14711
|
formAssociatedCallback() {
|
|
14602
14712
|
this.internals.setFormValue?.(this.checked ? this.value : null);
|
|
14603
14713
|
}
|
|
@@ -14609,6 +14719,8 @@ class LmvzRadio extends ReactiveControllerHost {
|
|
|
14609
14719
|
finally {
|
|
14610
14720
|
this._handlingFormReset = false;
|
|
14611
14721
|
}
|
|
14722
|
+
this.updateValidity();
|
|
14723
|
+
this.radioGroupController.refreshValidity();
|
|
14612
14724
|
}
|
|
14613
14725
|
formStateRestoreCallback(state) {
|
|
14614
14726
|
if (typeof state !== 'string')
|
|
@@ -14621,6 +14733,20 @@ class LmvzRadio extends ReactiveControllerHost {
|
|
|
14621
14733
|
this._handlingFormReset = false;
|
|
14622
14734
|
}
|
|
14623
14735
|
}
|
|
14736
|
+
isAnyInGroupChecked() {
|
|
14737
|
+
return this.radioGroupController.isAnyChecked();
|
|
14738
|
+
}
|
|
14739
|
+
updateValidity() {
|
|
14740
|
+
if (this.required && !this.isAnyInGroupChecked()) {
|
|
14741
|
+
this.internals.setValidity?.({ valueMissing: true }, 'Please select an option.', this.nativeInput);
|
|
14742
|
+
return;
|
|
14743
|
+
}
|
|
14744
|
+
this.internals.setValidity?.({});
|
|
14745
|
+
this.nativeError = false;
|
|
14746
|
+
}
|
|
14747
|
+
handleInvalid() {
|
|
14748
|
+
this.nativeError = true;
|
|
14749
|
+
}
|
|
14624
14750
|
handleChange = (event) => {
|
|
14625
14751
|
this._handlingNativeChange = true;
|
|
14626
14752
|
try {
|
|
@@ -14663,14 +14789,20 @@ class LmvzRadio extends ReactiveControllerHost {
|
|
|
14663
14789
|
return;
|
|
14664
14790
|
this.radioGroupController.setFocused(target);
|
|
14665
14791
|
}
|
|
14792
|
+
retargetInnerClicks() {
|
|
14793
|
+
this.nativeInput?.click();
|
|
14794
|
+
}
|
|
14666
14795
|
render() {
|
|
14667
|
-
return (hAsync(Host, { key: '
|
|
14796
|
+
return (hAsync(Host, { key: 'f1fdc1167c4e59c2524e1e545c3382ca32853788' }, hAsync("input", { key: 'c1b711444475ed401766cc5827eeaec0c46b62cf', type: "radio", id: this.radioId, value: this.value, checked: this.checked, disabled: this.disabled, autoFocus: this.autofocus, "aria-required": this.required ? 'true' : 'false', "aria-invalid": this.error ? 'true' : undefined, "aria-describedby": this.helperId, ref: (el) => (this.nativeInput = el), onChange: this.handleChange }), hAsync("span", { key: 'b25e623269df05bdf8159e72da4df2e0bfb5d7bc', class: "circle", "aria-hidden": "true" }, this.checked && hAsync("span", { key: '93d12890c7ba0abe203c63953ea1115aee37d7a0', class: "dot" })), hAsync("span", { key: '44dcfdc4e7ee3820624b0d02a438139f45bb8733', class: "content" }, hAsync("label", { key: 'd0547cd5e79642b298da155c9937715224b52cae', htmlFor: this.radioId }, this.label), hAsync("span", { key: 'a9df5dd8a775a2f7422d5bac296869f88553e33f', onClick: this.retargetInnerClicks.bind(this), "aria-live": "polite", class: "helper-text", id: this.helperId }, this.helperText))));
|
|
14668
14797
|
}
|
|
14669
14798
|
static get formAssociated() { return true; }
|
|
14670
14799
|
static get watchers() { return {
|
|
14671
14800
|
"checked": [{
|
|
14672
14801
|
"handleCheckedChange": 0
|
|
14673
14802
|
}],
|
|
14803
|
+
"required": [{
|
|
14804
|
+
"handleRequiredChange": 0
|
|
14805
|
+
}],
|
|
14674
14806
|
"value": [{
|
|
14675
14807
|
"handleValueChange": 0
|
|
14676
14808
|
}],
|
|
@@ -14686,24 +14818,181 @@ class LmvzRadio extends ReactiveControllerHost {
|
|
|
14686
14818
|
"label": [1],
|
|
14687
14819
|
"checked": [1540],
|
|
14688
14820
|
"value": [1],
|
|
14689
|
-
"name": [
|
|
14821
|
+
"name": [513],
|
|
14690
14822
|
"disabled": [516],
|
|
14691
14823
|
"required": [516],
|
|
14692
|
-
"error": [
|
|
14824
|
+
"error": [6660],
|
|
14693
14825
|
"helperText": [1, "helper-text"],
|
|
14694
14826
|
"form": [513],
|
|
14695
14827
|
"autofocus": [4],
|
|
14828
|
+
"nativeError": [32],
|
|
14696
14829
|
"focusInput": [64],
|
|
14697
14830
|
"checkValidity": [64],
|
|
14698
|
-
"reportValidity": [64]
|
|
14831
|
+
"reportValidity": [64],
|
|
14832
|
+
"getValidationMessage": [64]
|
|
14699
14833
|
},
|
|
14700
|
-
"$listeners$": [[0, "keydown", "handleKeydown"]],
|
|
14834
|
+
"$listeners$": [[0, "invalid", "handleInvalid"], [0, "keydown", "handleKeydown"]],
|
|
14701
14835
|
"$lazyBundleId$": "-",
|
|
14702
|
-
"$attrsToReflect$": [["checked", "checked"], ["disabled", "disabled"], ["required", "required"], ["error", "error"], ["form", "form"]]
|
|
14836
|
+
"$attrsToReflect$": [["checked", "checked"], ["name", "name"], ["disabled", "disabled"], ["required", "required"], ["error", "error"], ["form", "form"]]
|
|
14703
14837
|
}; }
|
|
14704
14838
|
}
|
|
14705
14839
|
|
|
14706
|
-
const
|
|
14840
|
+
const defaultConfig = {
|
|
14841
|
+
wrap: true,
|
|
14842
|
+
typeaheadTimeoutMs: 500,
|
|
14843
|
+
};
|
|
14844
|
+
class ListboxController {
|
|
14845
|
+
options = [];
|
|
14846
|
+
_activeId;
|
|
14847
|
+
_selectedId;
|
|
14848
|
+
config;
|
|
14849
|
+
typeaheadBuffer = '';
|
|
14850
|
+
typeaheadTimer;
|
|
14851
|
+
constructor(config = {}) {
|
|
14852
|
+
this.config = { ...defaultConfig, ...config };
|
|
14853
|
+
}
|
|
14854
|
+
hostDisconnected() {
|
|
14855
|
+
this.clearTypeaheadTimer();
|
|
14856
|
+
}
|
|
14857
|
+
get activeId() {
|
|
14858
|
+
return this._activeId;
|
|
14859
|
+
}
|
|
14860
|
+
get activeDescendantId() {
|
|
14861
|
+
return this._activeId;
|
|
14862
|
+
}
|
|
14863
|
+
get selectedId() {
|
|
14864
|
+
return this._selectedId;
|
|
14865
|
+
}
|
|
14866
|
+
setOptions(options) {
|
|
14867
|
+
this.options = options;
|
|
14868
|
+
if (this._activeId && this.findEnabledIndex(this._activeId) !== -1)
|
|
14869
|
+
return;
|
|
14870
|
+
const fallback = (this._selectedId && this.findEnabledIndex(this._selectedId) !== -1 ? this._selectedId : undefined) ?? this.firstEnabledOption()?.id;
|
|
14871
|
+
this.setActiveId(fallback);
|
|
14872
|
+
}
|
|
14873
|
+
setActiveId(id) {
|
|
14874
|
+
if (id !== undefined && !this.isEnabledId(id))
|
|
14875
|
+
return;
|
|
14876
|
+
if (id === this._activeId)
|
|
14877
|
+
return;
|
|
14878
|
+
this._activeId = id;
|
|
14879
|
+
this.config.onActiveChange?.(id);
|
|
14880
|
+
}
|
|
14881
|
+
setSelectedId(id) {
|
|
14882
|
+
this._selectedId = id;
|
|
14883
|
+
}
|
|
14884
|
+
selectOption(id) {
|
|
14885
|
+
if (!this.isEnabledId(id))
|
|
14886
|
+
return;
|
|
14887
|
+
this._selectedId = id;
|
|
14888
|
+
this.config.onSelect?.(id);
|
|
14889
|
+
}
|
|
14890
|
+
selectActive() {
|
|
14891
|
+
if (this._activeId)
|
|
14892
|
+
this.selectOption(this._activeId);
|
|
14893
|
+
}
|
|
14894
|
+
handleKeydown(event) {
|
|
14895
|
+
switch (event.key) {
|
|
14896
|
+
case 'ArrowDown':
|
|
14897
|
+
event.preventDefault();
|
|
14898
|
+
this.moveActive('next');
|
|
14899
|
+
return true;
|
|
14900
|
+
case 'ArrowUp':
|
|
14901
|
+
event.preventDefault();
|
|
14902
|
+
this.moveActive('previous');
|
|
14903
|
+
return true;
|
|
14904
|
+
case 'Home':
|
|
14905
|
+
event.preventDefault();
|
|
14906
|
+
this.setActiveId(this.firstEnabledOption()?.id);
|
|
14907
|
+
return true;
|
|
14908
|
+
case 'End':
|
|
14909
|
+
event.preventDefault();
|
|
14910
|
+
this.setActiveId(this.lastEnabledOption()?.id);
|
|
14911
|
+
return true;
|
|
14912
|
+
case 'Enter':
|
|
14913
|
+
case ' ':
|
|
14914
|
+
event.preventDefault();
|
|
14915
|
+
this.selectActive();
|
|
14916
|
+
return true;
|
|
14917
|
+
case 'Escape':
|
|
14918
|
+
event.preventDefault();
|
|
14919
|
+
this.config.onClose?.();
|
|
14920
|
+
return true;
|
|
14921
|
+
default:
|
|
14922
|
+
return this.handleTypeahead(event);
|
|
14923
|
+
}
|
|
14924
|
+
}
|
|
14925
|
+
clearTypeahead() {
|
|
14926
|
+
this.typeaheadBuffer = '';
|
|
14927
|
+
this.clearTypeaheadTimer();
|
|
14928
|
+
}
|
|
14929
|
+
moveActive(direction) {
|
|
14930
|
+
const enabledOptions = this.enabledOptions();
|
|
14931
|
+
if (!enabledOptions.length)
|
|
14932
|
+
return;
|
|
14933
|
+
const currentIndex = this._activeId ? enabledOptions.findIndex((option) => option.id === this._activeId) : -1;
|
|
14934
|
+
if (currentIndex === -1) {
|
|
14935
|
+
this.setActiveId((direction === 'next' ? enabledOptions[0] : enabledOptions[enabledOptions.length - 1])?.id);
|
|
14936
|
+
return;
|
|
14937
|
+
}
|
|
14938
|
+
const step = direction === 'next' ? 1 : -1;
|
|
14939
|
+
const rawIndex = currentIndex + step;
|
|
14940
|
+
if (rawIndex < 0 || rawIndex >= enabledOptions.length) {
|
|
14941
|
+
if (!this.config.wrap)
|
|
14942
|
+
return;
|
|
14943
|
+
const wrappedIndex = (rawIndex + enabledOptions.length) % enabledOptions.length;
|
|
14944
|
+
this.setActiveId(enabledOptions[wrappedIndex]?.id);
|
|
14945
|
+
return;
|
|
14946
|
+
}
|
|
14947
|
+
this.setActiveId(enabledOptions[rawIndex]?.id);
|
|
14948
|
+
}
|
|
14949
|
+
handleTypeahead(event) {
|
|
14950
|
+
if (event.key.length !== 1 || event.ctrlKey || event.metaKey || event.altKey)
|
|
14951
|
+
return false;
|
|
14952
|
+
event.preventDefault();
|
|
14953
|
+
this.typeaheadBuffer += event.key.toLowerCase();
|
|
14954
|
+
this.restartTypeaheadTimer();
|
|
14955
|
+
const enabledOptions = this.enabledOptions();
|
|
14956
|
+
if (!enabledOptions.length)
|
|
14957
|
+
return true;
|
|
14958
|
+
const currentIndex = this._activeId ? enabledOptions.findIndex((option) => option.id === this._activeId) : -1;
|
|
14959
|
+
const orderedFromCurrent = [...enabledOptions.slice(currentIndex + 1), ...enabledOptions.slice(0, currentIndex + 1)];
|
|
14960
|
+
const match = orderedFromCurrent.find((option) => option.label.toLowerCase().startsWith(this.typeaheadBuffer));
|
|
14961
|
+
if (match)
|
|
14962
|
+
this.setActiveId(match.id);
|
|
14963
|
+
return true;
|
|
14964
|
+
}
|
|
14965
|
+
restartTypeaheadTimer() {
|
|
14966
|
+
this.clearTypeaheadTimer();
|
|
14967
|
+
this.typeaheadTimer = setTimeout(() => {
|
|
14968
|
+
this.typeaheadBuffer = '';
|
|
14969
|
+
}, this.config.typeaheadTimeoutMs);
|
|
14970
|
+
}
|
|
14971
|
+
clearTypeaheadTimer() {
|
|
14972
|
+
if (this.typeaheadTimer !== undefined) {
|
|
14973
|
+
clearTimeout(this.typeaheadTimer);
|
|
14974
|
+
this.typeaheadTimer = undefined;
|
|
14975
|
+
}
|
|
14976
|
+
}
|
|
14977
|
+
enabledOptions() {
|
|
14978
|
+
return this.options.filter((option) => !option.disabled);
|
|
14979
|
+
}
|
|
14980
|
+
firstEnabledOption() {
|
|
14981
|
+
return this.enabledOptions()[0];
|
|
14982
|
+
}
|
|
14983
|
+
lastEnabledOption() {
|
|
14984
|
+
const enabledOptions = this.enabledOptions();
|
|
14985
|
+
return enabledOptions[enabledOptions.length - 1];
|
|
14986
|
+
}
|
|
14987
|
+
isEnabledId(id) {
|
|
14988
|
+
return this.findEnabledIndex(id) !== -1;
|
|
14989
|
+
}
|
|
14990
|
+
findEnabledIndex(id) {
|
|
14991
|
+
return this.enabledOptions().findIndex((option) => option.id === id);
|
|
14992
|
+
}
|
|
14993
|
+
}
|
|
14994
|
+
|
|
14995
|
+
const lmvzSelectCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } .sc-lmvz-select-h { display: block; font-family: var(--lmvz-global-font-family-default, Router); --lmvz-internal-select-floating-label-top-offset: 0.375rem; --lmvz-select-radius: var(--lmvz-component-input-radius-default, 999px); --lmvz-select-bg: var(--lmvz-semantic-color-surface-input-primary, #ffffff); --lmvz-select-border-color: var(--lmvz-semantic-color-border-alternate, #c7c7c7); --lmvz-select-border-color-hover: var(--lmvz-semantic-color-border-hover, #a1a1a1); --lmvz-select-border-width: var(--lmvz-semantic-border-width-default, 1px); --lmvz-select-text-color: var(--lmvz-semantic-color-on-surface-input-primary, #000000); --lmvz-select-label-color: var(--lmvz-semantic-color-on-surface-input-primary, #000000); --lmvz-select-padding-x: var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)); --lmvz-select-gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-select-height: var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)); --lmvz-select-label-font-size: var(--lmvz-component-body-xs-font-size, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem)); --lmvz-select-label-top-offset: calc(var(--lmvz-internal-select-floating-label-top-offset) * -1); --lmvz-select-label-minimized-padding-x: 4px; --lmvz-select-disabled-opacity: var(--lmvz-component-input-disabled-opacity, 40%); --lmvz-select-helper-color: var(--lmvz-semantic-color-on-surface-input-secondary, #545454); --lmvz-select-focus-color: var(--lmvz-semantic-color-status-on-active, #0e7ab4); --lmvz-select-error-color: var(--lmvz-semantic-color-status-on-danger, #a31419); padding-top: var(--lmvz-internal-select-floating-label-top-offset); } .select-wrapper.sc-lmvz-select { position: relative; height: var(--lmvz-select-height); } label.sc-lmvz-select { position: absolute; top: 50%; left: var(--lmvz-select-padding-x); font-size: var(--lmvz-select-label-font-size); color: var(--lmvz-select-label-color); line-height: normal; white-space: nowrap; pointer-events: none; z-index: 2; transform: translateY(-50%); transform-origin: left top; transition: top 0.2s ease-out, transform 0.2s ease-out, opacity 0.2s ease-out, padding 0.2s ease-out; } label.assistive-label.sc-lmvz-select { opacity: 0; padding: 0; } label.floating-label.sc-lmvz-select { top: var(--lmvz-select-label-top-offset); transform: translateY(0) scale(0.85); left: calc(var(--lmvz-select-padding-x) - 2px); background-color: var(--lmvz-select-bg); padding: 0 var(--lmvz-select-label-minimized-padding-x); opacity: 1; font-weight: 500; } label.sc-lmvz-select > span[aria-hidden='true'].sc-lmvz-select, .select-trigger.sc-lmvz-select > span.sc-lmvz-select:first-child > span[aria-hidden='true'].sc-lmvz-select { color: var(--lmvz-select-error-color); margin-left: 2px; display: inline-block; line-height: 0; vertical-align: middle; } .select-trigger.sc-lmvz-select { display: flex; align-items: center; gap: var(--lmvz-select-gap); height: 100%; width: 100%; padding: 0 var(--lmvz-select-padding-x); border-radius: var(--lmvz-select-radius); background-color: var(--lmvz-select-bg); border: var(--lmvz-select-border-width) solid var(--lmvz-select-border-color); box-sizing: border-box; cursor: pointer; position: relative; z-index: 1; transition: border-color 0.15s ease; } .sc-lmvz-select-h:not([disabled] .select-wrapper.sc-lmvz-select:hover .select-trigger.sc-lmvz-select, [highlighted].sc-lmvz-select-h .select-wrapper.sc-lmvz-select:hover .select-trigger.sc-lmvz-select, [error]).sc-lmvz-select-h .select-wrapper.sc-lmvz-select:hover .select-trigger.sc-lmvz-select { border-color: var(--lmvz-select-border-color-hover); } [error].sc-lmvz-select-h .select-trigger.sc-lmvz-select { border-color: var(--lmvz-select-error-color); } [highlighted].sc-lmvz-select-h .select-trigger.sc-lmvz-select { background-color: var(--lmvz-semantic-color-status-active-alternate, #0f8acc); border-color: var(--lmvz-semantic-color-border-active, #0f8acc); color: var(--lmvz-semantic-color-status-on-active-alternate, #ffffff); } [highlighted].sc-lmvz-select-h .select-trigger.sc-lmvz-select > span.sc-lmvz-select:first-child { color: var(--lmvz-semantic-color-status-on-active-alternate, #ffffff); } [highlighted].sc-lmvz-select-h label.floating-label.sc-lmvz-select { background-color: var(--lmvz-semantic-color-status-active-alternate, #0f8acc); color: var(--lmvz-semantic-color-status-on-active-alternate, #ffffff); } .sc-lmvz-select-h:has(:focus-visible) .select-trigger.sc-lmvz-select { outline: var(--lmvz-ds-outline, 1px solid #0e7ab4); outline-offset: var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem)); } .select-trigger.sc-lmvz-select > span.sc-lmvz-select:first-child { flex: 1 0 0; font: var(--lmvz-typography-body-md-strong, 500 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); color: var(--lmvz-select-text-color); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: left; } .sc-lmvz-select-h:not([highlighted]) .select-wrapper.has-value.sc-lmvz-select .select-trigger.sc-lmvz-select > span.sc-lmvz-select:first-child { color: var(--lmvz-semantic-color-int-on-secondary-active, #000000); } .select-trigger.sc-lmvz-select > span.sc-lmvz-select:last-child { flex-shrink: 0; display: flex; align-items: center; justify-content: center; } .select-trigger.sc-lmvz-select svg.sc-lmvz-select { width: var(--lmvz-component-icon-size-2xs, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem)); height: var(--lmvz-component-icon-size-2xs, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem)); flex-shrink: 0; } .lmvz-select-native-options.sc-lmvz-select { display: none; } [disabled].sc-lmvz-select-h .select-wrapper.sc-lmvz-select { opacity: var(--lmvz-select-disabled-opacity); pointer-events: none; cursor: not-allowed; } [role='status'].sc-lmvz-select { padding-top: var(--lmvz-dimension-8-6, clamp(0.38rem, 0.34rem + 0.13vw, 0.5rem)); padding-left: var(--lmvz-select-padding-x); font-size: var(--lmvz-select-label-font-size); color: var(--lmvz-select-helper-color); line-height: normal; } [role='alert'].sc-lmvz-select { padding-top: var(--lmvz-dimension-8-6, clamp(0.38rem, 0.34rem + 0.13vw, 0.5rem)); padding-left: var(--lmvz-select-padding-x); font-size: var(--lmvz-component-body-sm-font-size, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); color: var(--lmvz-select-error-color); line-height: normal; } [size='small'].sc-lmvz-select-h { --lmvz-select-height: var(--lmvz-component-input-size-sm, clamp(2rem, 1.94rem + 0.26vw, 2.25rem)); --lmvz-select-padding-x: var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); --lmvz-select-gap: var(--lmvz-component-input-gap-sm, clamp(0.38rem, 0.31rem + 0.26vw, 0.63rem)); --lmvz-select-label-font-size: var(--lmvz-component-body-2xs-font-size, clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem)); } [size='small'].sc-lmvz-select-h .select-trigger.sc-lmvz-select > span.sc-lmvz-select:first-child { font-size: var(--lmvz-component-body-sm-font-size, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); } [size='small'].sc-lmvz-select-h .select-trigger.sc-lmvz-select svg.sc-lmvz-select { width: var(--lmvz-component-icon-size-4xs, clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem)); height: var(--lmvz-component-icon-size-4xs, clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem)); } [size='large'].sc-lmvz-select-h { --lmvz-select-height: var(--lmvz-component-input-size-lg, clamp(2.75rem, 2.69rem + 0.26vw, 3rem)); --lmvz-select-padding-x: var(--lmvz-component-input-padding-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem)); --lmvz-select-gap: var(--lmvz-component-input-gap-lg, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)); --lmvz-select-label-font-size: var(--lmvz-component-body-sm-font-size, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); } [size='large'].sc-lmvz-select-h .select-trigger.sc-lmvz-select > span.sc-lmvz-select:first-child { font-size: var(--lmvz-component-body-lg-font-size, clamp(1rem, 0.97rem + 0.13vw, 1.13rem)); } [size='large'].sc-lmvz-select-h .select-trigger.sc-lmvz-select svg.sc-lmvz-select { width: var(--lmvz-component-icon-size-xs, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); height: var(--lmvz-component-icon-size-xs, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); } .lmvz-select-option.sc-lmvz-select { --lmvz-select-option-background: var(--lmvz-semantic-color-int-tertiary, #ffffff); --lmvz-select-option-color: var(--lmvz-semantic-color-int-on-tertiary, #000000); display: flex; align-items: center; gap: var(--lmvz-select-gap); padding: var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)); border-radius: var(--lmvz-semantic-border-radius-md, 6px); background-color: var(--lmvz-select-option-background); color: var(--lmvz-select-option-color); cursor: pointer; font: var(--lmvz-typography-body-md-strong, 500 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); transition: background-color 0.15s ease, color 0.15s ease; } .lmvz-select-option.sc-lmvz-select:not([aria-disabled='true']):hover { --lmvz-select-option-background: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); --lmvz-select-option-color: var(--lmvz-semantic-color-int-on-tertiary-hover, #000000); } .lmvz-select-option.sc-lmvz-select:not([aria-disabled='true']):active { --lmvz-select-option-background: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0); --lmvz-select-option-color: var(--lmvz-semantic-color-int-on-tertiary-active, #000000); } .lmvz-select-option.sc-lmvz-select:focus-visible { outline: var(--lmvz-ds-outline, 1px solid #0e7ab4); outline-offset: var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem)); position: relative; z-index: 1; } .lmvz-select-option[data-active='true'].sc-lmvz-select:not([aria-disabled='true']) { --lmvz-select-option-background: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); --lmvz-select-option-color: var(--lmvz-semantic-color-int-on-tertiary-hover, #000000); } .lmvz-select-option[aria-selected='true'].sc-lmvz-select { --lmvz-select-option-background: var(--lmvz-semantic-color-status-active-alternate, #0f8acc); --lmvz-select-option-color: var(--lmvz-semantic-color-status-on-active-alternate, #ffffff); } .lmvz-select-option[aria-disabled='true'].sc-lmvz-select { cursor: not-allowed; pointer-events: none; opacity: var(--lmvz-component-input-disabled-opacity, 40%); }`;
|
|
14707
14996
|
|
|
14708
14997
|
let selectIdCounter = 0;
|
|
14709
14998
|
class LmvzSelect extends ReactiveControllerHost {
|
|
@@ -14711,79 +15000,343 @@ class LmvzSelect extends ReactiveControllerHost {
|
|
|
14711
15000
|
get validationEl() {
|
|
14712
15001
|
return this.el;
|
|
14713
15002
|
}
|
|
15003
|
+
internals;
|
|
14714
15004
|
selectId = `lmvz-select-${selectIdCounter++}`;
|
|
14715
|
-
|
|
15005
|
+
triggerId = `${this.selectId}-trigger`;
|
|
15006
|
+
popoverId = `${this.selectId}-listbox`;
|
|
15007
|
+
triggerEl;
|
|
15008
|
+
optionsSourceEl;
|
|
15009
|
+
optionsMutationObserver;
|
|
15010
|
+
initialValue;
|
|
15011
|
+
initialValueCaptured = false;
|
|
15012
|
+
flatOptions = [];
|
|
15013
|
+
optionsById = new Map();
|
|
15014
|
+
listboxController = new ListboxController({
|
|
15015
|
+
onActiveChange: (id) => {
|
|
15016
|
+
this.activeId = id;
|
|
15017
|
+
},
|
|
15018
|
+
onSelect: (id) => this.handleOptionSelect(id),
|
|
15019
|
+
onClose: () => this.closePopover(),
|
|
15020
|
+
});
|
|
15021
|
+
get helperId() {
|
|
15022
|
+
return this.helperText ? `${this.selectId}-helper` : undefined;
|
|
15023
|
+
}
|
|
15024
|
+
get showErrorMessage() {
|
|
15025
|
+
return this.error && Boolean(this.errorMessage);
|
|
15026
|
+
}
|
|
15027
|
+
get errorId() {
|
|
15028
|
+
return `${this.selectId}-error`;
|
|
15029
|
+
}
|
|
15030
|
+
get describedBy() {
|
|
15031
|
+
const ids = [];
|
|
15032
|
+
if (this.helperId)
|
|
15033
|
+
ids.push(this.helperId);
|
|
15034
|
+
if (this.showErrorMessage)
|
|
15035
|
+
ids.push(this.errorId);
|
|
15036
|
+
return ids.length > 0 ? ids.join(' ') : undefined;
|
|
15037
|
+
}
|
|
14716
15038
|
constructor(hostRef) {
|
|
14717
15039
|
super();
|
|
14718
15040
|
registerInstance(this, hostRef);
|
|
14719
15041
|
this.lmvzChange = createEvent(this, "lmvzChange", 7);
|
|
15042
|
+
if (hostRef.$hostElement$["s-ei"]) {
|
|
15043
|
+
this.internals = hostRef.$hostElement$["s-ei"];
|
|
15044
|
+
}
|
|
15045
|
+
else {
|
|
15046
|
+
this.internals = hostRef.$hostElement$.attachInternals();
|
|
15047
|
+
hostRef.$hostElement$["s-ei"] = this.internals;
|
|
15048
|
+
}
|
|
14720
15049
|
this.addController(new AriaValidationController(this));
|
|
15050
|
+
this.addController(this.listboxController);
|
|
14721
15051
|
}
|
|
14722
15052
|
lmvzChange;
|
|
14723
15053
|
value;
|
|
14724
15054
|
label;
|
|
14725
15055
|
helperText;
|
|
15056
|
+
nativeError = false;
|
|
15057
|
+
errorFromProp = false;
|
|
15058
|
+
get error() {
|
|
15059
|
+
return this.errorFromProp || this.nativeError;
|
|
15060
|
+
}
|
|
15061
|
+
set error(value) {
|
|
15062
|
+
this.errorFromProp = value;
|
|
15063
|
+
}
|
|
15064
|
+
errorMessage;
|
|
14726
15065
|
disabled = false;
|
|
14727
15066
|
required = false;
|
|
14728
15067
|
name;
|
|
14729
15068
|
size = 'default';
|
|
14730
15069
|
highlighted = false;
|
|
14731
15070
|
selectedLabel = '';
|
|
15071
|
+
selectedId;
|
|
15072
|
+
activeId;
|
|
15073
|
+
isOpen = false;
|
|
15074
|
+
optionGroups = [];
|
|
14732
15075
|
get hasValue() {
|
|
14733
15076
|
return Boolean(this.value);
|
|
14734
15077
|
}
|
|
15078
|
+
componentWillLoad() {
|
|
15079
|
+
this.updateValidity();
|
|
15080
|
+
super.componentWillLoad();
|
|
15081
|
+
}
|
|
14735
15082
|
componentDidLoad() {
|
|
14736
|
-
this.
|
|
15083
|
+
this.handleSlotChange();
|
|
15084
|
+
this.observeSlottedOptionMutations();
|
|
15085
|
+
this.updateValidity();
|
|
14737
15086
|
super.componentDidLoad();
|
|
14738
15087
|
}
|
|
15088
|
+
disconnectedCallback() {
|
|
15089
|
+
this.optionsMutationObserver?.disconnect();
|
|
15090
|
+
super.disconnectedCallback();
|
|
15091
|
+
}
|
|
15092
|
+
observeSlottedOptionMutations() {
|
|
15093
|
+
if (typeof MutationObserver === 'undefined')
|
|
15094
|
+
return;
|
|
15095
|
+
this.optionsMutationObserver?.disconnect();
|
|
15096
|
+
this.optionsMutationObserver = new MutationObserver(this.handleSlotChange);
|
|
15097
|
+
this.optionsMutationObserver.observe(this.el, {
|
|
15098
|
+
attributes: true,
|
|
15099
|
+
attributeFilter: ['disabled', 'selected', 'value', 'label'],
|
|
15100
|
+
characterData: true,
|
|
15101
|
+
childList: true,
|
|
15102
|
+
subtree: true,
|
|
15103
|
+
});
|
|
15104
|
+
}
|
|
15105
|
+
async focusTrigger() {
|
|
15106
|
+
this.triggerEl?.focus();
|
|
15107
|
+
}
|
|
15108
|
+
async blurTrigger() {
|
|
15109
|
+
this.triggerEl?.blur();
|
|
15110
|
+
}
|
|
15111
|
+
async checkValidity() {
|
|
15112
|
+
return this.internals.checkValidity?.() ?? true;
|
|
15113
|
+
}
|
|
15114
|
+
async reportValidity() {
|
|
15115
|
+
return this.internals.reportValidity?.() ?? true;
|
|
15116
|
+
}
|
|
15117
|
+
async getValidationMessage() {
|
|
15118
|
+
return this.internals.validationMessage ?? '';
|
|
15119
|
+
}
|
|
15120
|
+
formAssociatedCallback(form) {
|
|
15121
|
+
if (!form)
|
|
15122
|
+
return;
|
|
15123
|
+
this.internals.setFormValue?.(this.value ?? '');
|
|
15124
|
+
}
|
|
15125
|
+
formResetCallback() {
|
|
15126
|
+
this.internals.setValidity?.({});
|
|
15127
|
+
this.value = this.initialValue;
|
|
15128
|
+
this.updateValidity();
|
|
15129
|
+
}
|
|
15130
|
+
formStateRestoreCallback(state) {
|
|
15131
|
+
this.value = state;
|
|
15132
|
+
}
|
|
14739
15133
|
handleValueChange(newValue) {
|
|
14740
|
-
|
|
14741
|
-
|
|
15134
|
+
this.applySelectionFromValue();
|
|
15135
|
+
if (this.selectedId && !this.isOpen) {
|
|
15136
|
+
this.listboxController.setActiveId(this.selectedId);
|
|
14742
15137
|
}
|
|
14743
|
-
this.
|
|
15138
|
+
this.internals.setFormValue?.(newValue ?? '');
|
|
15139
|
+
this.updateValidity();
|
|
15140
|
+
}
|
|
15141
|
+
handleRequiredChange() {
|
|
15142
|
+
this.updateValidity();
|
|
14744
15143
|
}
|
|
14745
|
-
|
|
14746
|
-
if (!
|
|
15144
|
+
handleDisabledChange(disabled) {
|
|
15145
|
+
if (!disabled)
|
|
14747
15146
|
return;
|
|
14748
|
-
|
|
14749
|
-
this.
|
|
15147
|
+
this.closePopover();
|
|
15148
|
+
this.triggerEl?.blur();
|
|
14750
15149
|
}
|
|
14751
|
-
|
|
14752
|
-
const
|
|
14753
|
-
|
|
14754
|
-
|
|
14755
|
-
this.
|
|
15150
|
+
handleSlotChange = () => {
|
|
15151
|
+
const container = this.optionsSourceEl;
|
|
15152
|
+
if (!container)
|
|
15153
|
+
return;
|
|
15154
|
+
const { flat, groups } = parseOptionElements(container, this.selectId);
|
|
15155
|
+
this.flatOptions = flat;
|
|
15156
|
+
this.optionsById = new Map(flat.map((option) => [option.id, option]));
|
|
15157
|
+
this.optionGroups = groups;
|
|
15158
|
+
if (!this.value) {
|
|
15159
|
+
const preselected = flat.find((option) => option.selected && !option.disabled);
|
|
15160
|
+
if (preselected) {
|
|
15161
|
+
this.value = preselected.value;
|
|
15162
|
+
}
|
|
15163
|
+
}
|
|
15164
|
+
this.applySelectionFromValue();
|
|
15165
|
+
this.listboxController.setOptions(flat.map(({ id, label, disabled }) => ({ id, label, disabled })));
|
|
15166
|
+
if (!this.initialValueCaptured) {
|
|
15167
|
+
this.initialValue = this.value;
|
|
15168
|
+
this.initialValueCaptured = true;
|
|
15169
|
+
}
|
|
15170
|
+
};
|
|
15171
|
+
applySelectionFromValue() {
|
|
15172
|
+
const match = this.value ? this.flatOptions.find((option) => option.value === this.value) : undefined;
|
|
15173
|
+
this.selectedId = match?.id;
|
|
15174
|
+
this.selectedLabel = match?.label ?? '';
|
|
15175
|
+
this.listboxController.setSelectedId(match?.id);
|
|
15176
|
+
}
|
|
15177
|
+
updateValidity() {
|
|
15178
|
+
if (this.required && !this.value) {
|
|
15179
|
+
this.internals.setValidity?.({ valueMissing: true }, 'Please select a value.', this.triggerEl);
|
|
15180
|
+
return;
|
|
15181
|
+
}
|
|
15182
|
+
this.internals.setValidity?.({});
|
|
15183
|
+
this.nativeError = false;
|
|
15184
|
+
}
|
|
15185
|
+
handleInvalid() {
|
|
15186
|
+
this.nativeError = true;
|
|
15187
|
+
}
|
|
15188
|
+
handleOptionSelect(id) {
|
|
15189
|
+
const option = this.optionsById.get(id);
|
|
15190
|
+
if (!option)
|
|
15191
|
+
return;
|
|
15192
|
+
const isNewValue = option.value !== this.value;
|
|
15193
|
+
this.value = option.value;
|
|
15194
|
+
if (isNewValue) {
|
|
15195
|
+
this.lmvzChange.emit(option.value);
|
|
15196
|
+
}
|
|
15197
|
+
this.closePopover();
|
|
15198
|
+
}
|
|
15199
|
+
handleOptionClick = (option) => {
|
|
15200
|
+
if (option.disabled || this.disabled)
|
|
15201
|
+
return;
|
|
15202
|
+
this.listboxController.selectOption(option.id);
|
|
15203
|
+
};
|
|
15204
|
+
handleLabelClick = () => {
|
|
15205
|
+
if (this.disabled)
|
|
15206
|
+
return;
|
|
15207
|
+
this.triggerEl?.focus();
|
|
15208
|
+
this.openPopover();
|
|
15209
|
+
};
|
|
15210
|
+
handleTriggerClick = () => {
|
|
15211
|
+
if (this.disabled)
|
|
15212
|
+
return;
|
|
15213
|
+
if (this.isOpen) {
|
|
15214
|
+
this.closePopover();
|
|
15215
|
+
}
|
|
15216
|
+
else {
|
|
15217
|
+
this.openPopover();
|
|
15218
|
+
}
|
|
15219
|
+
};
|
|
15220
|
+
handleTriggerKeydown = (event) => {
|
|
15221
|
+
if (this.disabled)
|
|
15222
|
+
return;
|
|
15223
|
+
if (!this.isOpen) {
|
|
15224
|
+
if (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter' || event.key === ' ') {
|
|
15225
|
+
event.preventDefault();
|
|
15226
|
+
this.openPopover();
|
|
15227
|
+
}
|
|
15228
|
+
return;
|
|
15229
|
+
}
|
|
15230
|
+
this.listboxController.handleKeydown(event);
|
|
14756
15231
|
};
|
|
15232
|
+
handleTriggerBlur = () => {
|
|
15233
|
+
this.closePopover();
|
|
15234
|
+
};
|
|
15235
|
+
handlePopoverClose = () => {
|
|
15236
|
+
this.isOpen = false;
|
|
15237
|
+
this.listboxController.clearTypeahead();
|
|
15238
|
+
};
|
|
15239
|
+
openPopover() {
|
|
15240
|
+
if (this.isOpen || this.disabled)
|
|
15241
|
+
return;
|
|
15242
|
+
this.isOpen = true;
|
|
15243
|
+
}
|
|
15244
|
+
closePopover() {
|
|
15245
|
+
if (!this.isOpen)
|
|
15246
|
+
return;
|
|
15247
|
+
this.isOpen = false;
|
|
15248
|
+
this.listboxController.clearTypeahead();
|
|
15249
|
+
}
|
|
15250
|
+
renderOptionGroups() {
|
|
15251
|
+
return this.optionGroups.map((group, groupIndex) => group.label ? (hAsync("div", { role: "group", "aria-label": group.label, key: `lmvz-select-group-${groupIndex}` }, group.options.map((option) => this.renderOption(option)))) : (group.options.map((option) => this.renderOption(option))));
|
|
15252
|
+
}
|
|
15253
|
+
renderOption(option) {
|
|
15254
|
+
return (hAsync("div", { id: option.id, key: option.id, role: "option", class: "lmvz-select-option", "aria-selected": option.id === this.selectedId ? 'true' : 'false', "aria-disabled": option.disabled ? 'true' : undefined, "data-active": option.id === this.activeId ? 'true' : undefined, onMouseDown: (event) => event.preventDefault(), onClick: () => this.handleOptionClick(option) }, option.label));
|
|
15255
|
+
}
|
|
14757
15256
|
render() {
|
|
14758
15257
|
const hasValue = this.hasValue;
|
|
14759
15258
|
const shouldShowLabel = hasValue;
|
|
14760
|
-
return (hAsync(Host, { key: '
|
|
15259
|
+
return (hAsync(Host, { key: '0bcc303a802db20a6be6558b8add53d0fa398493', "data-highlighted": String(this.highlighted) }, hAsync("div", { key: 'e248f8277b4786b34dfd064cb9c7b70302cf018a', class: hasValue ? 'select-wrapper has-value' : 'select-wrapper' }, hAsync("label", { key: '1c97c830d5782cadad98fb895d70c438031d3457', htmlFor: this.triggerId, class: shouldShowLabel ? 'floating-label' : 'assistive-label', onMouseDown: (event) => event.preventDefault(), onClick: this.handleLabelClick }, this.label, this.required && shouldShowLabel && hAsync("span", { key: '16157962846bffc111f5c672852f7b23e9ed2b73', "aria-hidden": "true" }, " *")), hAsync("div", { key: 'bc5e3e6b335723cfd9872ff955a1e8d664d4eeb8', id: this.triggerId, ref: (el) => (this.triggerEl = el), class: "select-trigger", role: "combobox", tabIndex: this.disabled ? -1 : 0, "aria-haspopup": "listbox", "aria-expanded": String(this.isOpen), "aria-controls": this.popoverId, "aria-activedescendant": this.isOpen ? this.activeId : undefined, "aria-label": hasValue ? `${this.label}, ${this.selectedLabel}` : this.label, "aria-disabled": this.disabled ? 'true' : undefined, "aria-required": this.required ? 'true' : 'false', "aria-invalid": this.error ? 'true' : 'false', "aria-errormessage": this.showErrorMessage ? this.errorId : undefined, "aria-describedby": this.describedBy, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeydown, onBlur: this.handleTriggerBlur }, hAsync("span", { key: '620c6108f679c8e5563c0e21d7b89d71434c01a2' }, hasValue ? this.selectedLabel : this.label, this.required && !hasValue && hAsync("span", { key: 'a2183941c7843bae3e9989f8e8b26be28fbbf6d7', "aria-hidden": "true" }, " *")), hAsync("span", { key: 'b57e14bda44dc0de5a35623a5cb203b7f570c802', "aria-hidden": "true" }, hAsync("svg", { key: '71ac319e398f07f7e65fe1f73f6d2a7c08b631a8', width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, hAsync("path", { key: '80b4a978471251ee8d2cce2d74a48fad750db125', d: "M20.3334 8.66663L12.0001 17L3.66675 8.66663", stroke: "currentColor", "stroke-width": "1.75", "stroke-linecap": "round", "stroke-linejoin": "round" })))), hAsync("lmvz-popover", { key: '15528c9a3f1404c385f4eb865cf78ef5891dcb32', id: this.popoverId, anchor: this.triggerId, open: this.isOpen, containerRole: "listbox", autoFocus: false, label: this.label, onLmvzClose: this.handlePopoverClose, size: "sm" }, this.renderOptionGroups()), hAsync("div", { key: 'f1b833973497e6dfd2013522e067382c73baa7a1', class: "lmvz-select-native-options", hidden: true, "aria-hidden": "true", ref: (el) => (this.optionsSourceEl = el) }, hAsync("slot", { key: '670bf62c50cbdd965342279b99e303614771ffa1', onSlotchange: this.handleSlotChange }))), this.helperText && (hAsync("div", { key: '849e35da09bff25896b08f275c265baa0ee12960', id: this.helperId, role: "status" }, this.helperText)), this.showErrorMessage && (hAsync("div", { key: 'd01c2dca8767aa815d08d895f308c42150cc3263', id: this.errorId, role: "alert" }, this.errorMessage))));
|
|
14761
15260
|
}
|
|
15261
|
+
static get formAssociated() { return true; }
|
|
14762
15262
|
static get watchers() { return {
|
|
14763
15263
|
"value": [{
|
|
14764
15264
|
"handleValueChange": 0
|
|
15265
|
+
}],
|
|
15266
|
+
"required": [{
|
|
15267
|
+
"handleRequiredChange": 0
|
|
15268
|
+
}],
|
|
15269
|
+
"disabled": [{
|
|
15270
|
+
"handleDisabledChange": 0
|
|
14765
15271
|
}]
|
|
14766
15272
|
}; }
|
|
14767
15273
|
static get style() { return lmvzSelectCss(); }
|
|
14768
15274
|
static get cmpMeta() { return {
|
|
14769
|
-
"$flags$":
|
|
15275
|
+
"$flags$": 838,
|
|
14770
15276
|
"$tagName$": "lmvz-select",
|
|
14771
15277
|
"$members$": {
|
|
14772
15278
|
"value": [1025],
|
|
14773
15279
|
"label": [1],
|
|
14774
15280
|
"helperText": [1, "helper-text"],
|
|
15281
|
+
"error": [6660],
|
|
15282
|
+
"errorMessage": [1, "error-message"],
|
|
14775
15283
|
"disabled": [516],
|
|
14776
15284
|
"required": [516],
|
|
14777
|
-
"name": [
|
|
15285
|
+
"name": [513],
|
|
14778
15286
|
"size": [513],
|
|
14779
15287
|
"highlighted": [516],
|
|
14780
|
-
"
|
|
15288
|
+
"nativeError": [32],
|
|
15289
|
+
"selectedLabel": [32],
|
|
15290
|
+
"selectedId": [32],
|
|
15291
|
+
"activeId": [32],
|
|
15292
|
+
"isOpen": [32],
|
|
15293
|
+
"optionGroups": [32],
|
|
15294
|
+
"focusTrigger": [64],
|
|
15295
|
+
"blurTrigger": [64],
|
|
15296
|
+
"checkValidity": [64],
|
|
15297
|
+
"reportValidity": [64],
|
|
15298
|
+
"getValidationMessage": [64]
|
|
14781
15299
|
},
|
|
14782
|
-
"$listeners$":
|
|
15300
|
+
"$listeners$": [[0, "invalid", "handleInvalid"]],
|
|
14783
15301
|
"$lazyBundleId$": "-",
|
|
14784
|
-
"$attrsToReflect$": [["disabled", "disabled"], ["required", "required"], ["size", "size"], ["highlighted", "highlighted"]]
|
|
15302
|
+
"$attrsToReflect$": [["error", "error"], ["disabled", "disabled"], ["required", "required"], ["name", "name"], ["size", "size"], ["highlighted", "highlighted"]]
|
|
14785
15303
|
}; }
|
|
14786
15304
|
}
|
|
15305
|
+
function parseOptionElements(container, idPrefix) {
|
|
15306
|
+
const flat = [];
|
|
15307
|
+
const groups = [];
|
|
15308
|
+
let looseGroup;
|
|
15309
|
+
let optionIndex = 0;
|
|
15310
|
+
const toOptionData = (optionEl, disabledOverride = false) => {
|
|
15311
|
+
const option = optionEl;
|
|
15312
|
+
const data = {
|
|
15313
|
+
id: `${idPrefix}-option-${optionIndex++}`,
|
|
15314
|
+
value: option.value,
|
|
15315
|
+
label: (option.textContent ?? '').trim(),
|
|
15316
|
+
disabled: disabledOverride || option.disabled,
|
|
15317
|
+
selected: option.selected,
|
|
15318
|
+
};
|
|
15319
|
+
flat.push(data);
|
|
15320
|
+
return data;
|
|
15321
|
+
};
|
|
15322
|
+
Array.from(container.children).forEach((child) => {
|
|
15323
|
+
if (child.tagName === 'OPTGROUP') {
|
|
15324
|
+
looseGroup = undefined;
|
|
15325
|
+
const optgroup = child;
|
|
15326
|
+
const options = Array.from(optgroup.querySelectorAll('option')).map((option) => toOptionData(option, optgroup.disabled));
|
|
15327
|
+
groups.push({ label: optgroup.label || undefined, options });
|
|
15328
|
+
return;
|
|
15329
|
+
}
|
|
15330
|
+
if (child.tagName === 'OPTION') {
|
|
15331
|
+
if (!looseGroup) {
|
|
15332
|
+
looseGroup = { label: undefined, options: [] };
|
|
15333
|
+
groups.push(looseGroup);
|
|
15334
|
+
}
|
|
15335
|
+
looseGroup.options.push(toOptionData(child));
|
|
15336
|
+
}
|
|
15337
|
+
});
|
|
15338
|
+
return { flat, groups };
|
|
15339
|
+
}
|
|
14787
15340
|
|
|
14788
15341
|
const alertSvg = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzM0Nl8zODApIj4KPHBhdGggZD0iTTEyIDUuMjVWMTMuMTI1TTIyLjUgMTJDMjIuNSAxNy43OTkgMTcuNzk5IDIyLjUgMTIgMjIuNUM2LjIwMTAxIDIyLjUgMS41IDE3Ljc5OSAxLjUgMTJDMS41IDYuMjAxMDEgNi4yMDEwMSAxLjUgMTIgMS41QzE3Ljc5OSAxLjUgMjIuNSA2LjIwMTAxIDIyLjUgMTJaTTEzLjEyNSAxNi44NzVDMTMuMTI1IDE3LjQ5NjMgMTIuNjIxMyAxOCAxMiAxOEMxMS4zNzg3IDE4IDEwLjg3NSAxNy40OTYzIDEwLjg3NSAxNi44NzVDMTAuODc1IDE2LjI1MzcgMTEuMzc4NyAxNS43NSAxMiAxNS43NUMxMi42MjEzIDE1Ljc1IDEzLjEyNSAxNi4yNTM3IDEzLjEyNSAxNi44NzVaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEuNzUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzM0Nl8zODAiPgo8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==';
|
|
14789
15342
|
|
|
@@ -14849,7 +15402,7 @@ class LmvzSnackbar {
|
|
|
14849
15402
|
this.el.dispatchEvent(new CustomEvent('lmvzAction', { bubbles: false, composed: false }));
|
|
14850
15403
|
};
|
|
14851
15404
|
render() {
|
|
14852
|
-
return (hAsync(Host, { key: '
|
|
15405
|
+
return (hAsync(Host, { key: 'f58c7657bf5511c72930dfc54ace4af1ff7f3554', class: this.animationClass }, hAsync("lmvz-icon", { key: '8632b42b9b246bf58480fb17ca336ce5f0883845', icon: STATUS_SVG[this.status], size: "md", weight: "bold" }), hAsync("span", { key: '4ca56d2cdf29415c6d21cc50399dc28aebb8de99', class: "message" }, this.message), this.actionLabel && (hAsync("lmvz-button", { key: 'd09043056b968421143aa180f464effcd7b781fe', variant: "tertiary", scale: "small", onLmvzActivation: this.handleActionClick }, this.actionLabel))));
|
|
14853
15406
|
}
|
|
14854
15407
|
static get watchers() { return {
|
|
14855
15408
|
"status": [{
|
|
@@ -14886,7 +15439,7 @@ class LmvzSpinner {
|
|
|
14886
15439
|
ariaLabel;
|
|
14887
15440
|
render() {
|
|
14888
15441
|
const hasLabel = !!this.ariaLabel?.trim();
|
|
14889
|
-
return (hAsync(Host, { key: '
|
|
15442
|
+
return (hAsync(Host, { key: 'cf60fcf652f377a66596cc51138bb73f7465a4e7', role: hasLabel ? 'status' : undefined, "aria-label": hasLabel ? this.ariaLabel : undefined, "aria-hidden": hasLabel ? undefined : 'true' }, hAsync("svg", { key: '121ab46a591242fbc0f1c3540e8f2a7b72c9582a', part: "indicator", viewBox: "0 0 16 16", "aria-hidden": "true" }, hAsync("circle", { key: 'fe649394c9bd6e7a06113e9a50b595bb890a6fac', pathLength: "100", cx: "8", cy: "8", r: "6" }))));
|
|
14890
15443
|
}
|
|
14891
15444
|
static get style() { return lmvzSpinnerCss(); }
|
|
14892
15445
|
static get cmpMeta() { return {
|
|
@@ -14922,7 +15475,7 @@ class LmvzTab {
|
|
|
14922
15475
|
this.el.dispatchEvent(new CustomEvent('lmvzTabReady', { bubbles: true, composed: false }));
|
|
14923
15476
|
}
|
|
14924
15477
|
render() {
|
|
14925
|
-
return (hAsync(Host, { key: '
|
|
15478
|
+
return (hAsync(Host, { key: '4380fe35cacb11bc7114664c126504e8f4fb09a0' }, hAsync("button", { key: 'ac77443cbba5c94f864820088f60c0bac23d0775', part: "button", role: "tab", disabled: this.disabled, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, tabIndex: 0 }, hAsync("slot", { key: '9988497505ca3effa6c41011ac408a5d25629ca1', name: "media", ref: (el) => (this.mediaSlotEl = el), onSlotchange: this.handleMediaSlotChange }), hAsync("span", { key: '70566c46fba36b8717aa82917e45abd39cd7a2ea', class: "label" }, hAsync("slot", { key: 'a595738c387ee2f4f77f6ccdfdfb0589751ce999' })), hAsync("span", { key: '933758dc965d1151ca6a96367ea40290189384ad', "aria-hidden": "true", part: "indicator", class: "indicator" }))));
|
|
14926
15479
|
}
|
|
14927
15480
|
static get delegatesFocus() { return true; }
|
|
14928
15481
|
static get style() { return lmvzTabCss(); }
|
|
@@ -15179,7 +15732,7 @@ class LmvzTabs extends ReactiveControllerHost {
|
|
|
15179
15732
|
this.selectTab(value);
|
|
15180
15733
|
};
|
|
15181
15734
|
render() {
|
|
15182
|
-
return (hAsync(Host, { key: '
|
|
15735
|
+
return (hAsync(Host, { key: '33205038c047420618800be3ef755e1d13a0127c', onClick: this.handleTabClick, onKeydown: this.handleKeydown }, hAsync("div", { key: 'e803f772c5b187326fc80cfa2d3b9d74f6ee1df8', role: "tablist", "aria-orientation": this.orientation, class: "tablist" }, hAsync("slot", { key: '6871a7b6b26c6251ceb544c03b245450aa53373d', ref: (el) => (this.tabSlotEl = el) })), hAsync("div", { key: '17721962da2ecf107a5b878dea996812c61be998', part: "panels-container", class: "panels-container" }, hAsync("slot", { key: '485de66efc7812ecb2368a6b01b0d8ab63971497', name: "panels", ref: (el) => (this.panelSlotEl = el) }))));
|
|
15183
15736
|
}
|
|
15184
15737
|
static get watchers() { return {
|
|
15185
15738
|
"value": [{
|
|
@@ -15210,7 +15763,7 @@ class LmvzTabs extends ReactiveControllerHost {
|
|
|
15210
15763
|
|
|
15211
15764
|
const lmvzToggleCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } .sc-lmvz-toggle-h { display: inline-flex; align-items: center; gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); padding-block: var(--lmvz-dimension-8-2, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem)); padding-inline: var(--lmvz-dimension-10-4, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); border-radius: var(--lmvz-semantic-border-radius-round, 999px); cursor: pointer; background-color: transparent; user-select: none; } .sc-lmvz-toggle-h:not([disabled]):hover { background-color: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); } [checked].sc-lmvz-toggle-h { background-color: var(--lmvz-semantic-color-status-active, #f6fbfe); } [disabled][checked].sc-lmvz-toggle-h { background-color: var(--lmvz-semantic-color-status-active, #f6fbfe); } [disabled].sc-lmvz-toggle-h { cursor: not-allowed; opacity: var(--lmvz-component-input-disabled-opacity, 40%); pointer-events: none; } .track.sc-lmvz-toggle { position: relative; flex-shrink: 0; width: var(--lmvz-global-s32, 32px); height: var(--lmvz-global-s20, 20px); border-radius: var(--lmvz-semantic-border-radius-round, 999px); background-color: var(--lmvz-semantic-color-surface-input-primary, #ffffff); border: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-border-default, #e0e0e0); } .sc-lmvz-toggle-h:not([disabled]):hover .track.sc-lmvz-toggle { border-color: var(--lmvz-semantic-color-border-hover, #a1a1a1); } [checked].sc-lmvz-toggle-h .track.sc-lmvz-toggle { border-color: var(--lmvz-semantic-color-border-active, #0f8acc); } input.sc-lmvz-toggle { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; margin: 0; cursor: inherit; } .thumb.sc-lmvz-toggle { position: absolute; width: var(--lmvz-global-s13, 13px); height: var(--lmvz-global-s13, 13px); border-radius: 50%; background-color: var(--lmvz-semantic-color-on-surface-input-secondary, #545454); top: 50%; transform: translateY(-50%); left: var(--lmvz-global-s4, 4px); transition: left 0.2s ease, background-color 0.2s ease; pointer-events: none; } [checked].sc-lmvz-toggle-h .thumb.sc-lmvz-toggle { left: calc(var(--lmvz-global-s4, 4px) + var(--lmvz-global-s11, 11px)); background-color: var(--lmvz-semantic-color-status-on-active, #0e7ab4); } label.sc-lmvz-toggle { font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); color: var(--lmvz-semantic-color-on-surface-primary, #000000); cursor: pointer; }`;
|
|
15212
15765
|
|
|
15213
|
-
const focusWithinCss = () => `.sc-lmvz-toggle-h:focus-
|
|
15766
|
+
const focusWithinCss = () => `.sc-lmvz-toggle-h:has(:focus-visible){outline:var(--lmvz-ds-outline, 1px solid #0e7ab4);outline-offset:var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem))}@media (forced-colors: active){.sc-lmvz-toggle-h:has(:focus-visible){outline-color:Highlight;box-shadow:none}}`;
|
|
15214
15767
|
|
|
15215
15768
|
let toggleIdCounter = 0;
|
|
15216
15769
|
class LmvzToggle extends ReactiveControllerHost {
|
|
@@ -15272,6 +15825,9 @@ class LmvzToggle extends ReactiveControllerHost {
|
|
|
15272
15825
|
async reportValidity() {
|
|
15273
15826
|
return this.nativeInputElement?.reportValidity?.() ?? false;
|
|
15274
15827
|
}
|
|
15828
|
+
async getValidationMessage() {
|
|
15829
|
+
return this.nativeInputElement?.validationMessage ?? '';
|
|
15830
|
+
}
|
|
15275
15831
|
async getInputElement() {
|
|
15276
15832
|
if (!this.nativeInputElement) {
|
|
15277
15833
|
await new Promise((resolve) => componentOnReady(this.el, resolve));
|
|
@@ -15284,7 +15840,7 @@ class LmvzToggle extends ReactiveControllerHost {
|
|
|
15284
15840
|
this.lmvzChange.emit(newChecked);
|
|
15285
15841
|
};
|
|
15286
15842
|
render() {
|
|
15287
|
-
return (hAsync(Host, { key: '
|
|
15843
|
+
return (hAsync(Host, { key: 'a0e0272a8457ee6b07a102aa10e5a7c0292a55d9' }, hAsync("span", { key: '5d14029bee4b66f5ed2ee1eb189a1d80a68abe3e', class: "track" }, hAsync("input", { key: '926b1ca6065750717577ece30e8e78b9004ec0e8', 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: 'bdee06bab6acba72d019134828f7415d7b347c49', class: "thumb", "aria-hidden": "true" })), hAsync("label", { key: 'b8eaa9305352f7146bf95bb517766310517d60e6', htmlFor: this.toggleId }, this.label)));
|
|
15288
15844
|
}
|
|
15289
15845
|
static get formAssociated() { return true; }
|
|
15290
15846
|
static get watchers() { return {
|
|
@@ -15311,6 +15867,7 @@ class LmvzToggle extends ReactiveControllerHost {
|
|
|
15311
15867
|
"blurToggle": [64],
|
|
15312
15868
|
"checkValidity": [64],
|
|
15313
15869
|
"reportValidity": [64],
|
|
15870
|
+
"getValidationMessage": [64],
|
|
15314
15871
|
"getInputElement": [64]
|
|
15315
15872
|
},
|
|
15316
15873
|
"$listeners$": undefined,
|