@aurodesignsystem-dev/auro-formkit 0.0.0-pr1505.0 → 0.0.0-pr1506.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/checkbox/demo/customize.min.js +1 -1
- package/components/checkbox/demo/getting-started.min.js +1 -1
- package/components/checkbox/demo/index.min.js +1 -1
- package/components/checkbox/dist/index.js +1 -1
- package/components/checkbox/dist/registered.js +1 -1
- package/components/combobox/demo/customize.min.js +120 -139
- package/components/combobox/demo/getting-started.min.js +120 -139
- package/components/combobox/demo/index.min.js +120 -139
- package/components/combobox/dist/auro-combobox.d.ts +9 -0
- package/components/combobox/dist/index.js +120 -139
- package/components/combobox/dist/registered.js +120 -139
- package/components/counter/demo/customize.min.js +2 -2
- package/components/counter/demo/index.min.js +2 -2
- package/components/counter/dist/index.js +2 -2
- package/components/counter/dist/registered.js +2 -2
- package/components/datepicker/demo/api.md +0 -2
- package/components/datepicker/demo/customize.md +33 -195
- package/components/datepicker/demo/customize.min.js +37 -43
- package/components/datepicker/demo/index.min.js +36 -35
- package/components/datepicker/dist/index.js +36 -35
- package/components/datepicker/dist/registered.js +36 -35
- package/components/datepicker/dist/src/auro-datepicker.d.ts +0 -2
- package/components/dropdown/demo/customize.min.js +1 -1
- package/components/dropdown/demo/getting-started.min.js +1 -1
- package/components/dropdown/demo/index.min.js +1 -1
- package/components/dropdown/dist/index.js +1 -1
- package/components/dropdown/dist/registered.js +1 -1
- package/components/form/demo/customize.min.js +325 -230
- package/components/form/demo/getting-started.min.js +325 -230
- package/components/form/demo/index.min.js +325 -230
- package/components/form/demo/registerDemoDeps.min.js +325 -230
- package/components/input/demo/customize.md +55 -56
- package/components/input/demo/customize.min.js +32 -26
- package/components/input/demo/getting-started.min.js +32 -26
- package/components/input/demo/index.md +2 -2
- package/components/input/demo/index.min.js +32 -26
- package/components/input/dist/index.js +32 -26
- package/components/input/dist/registered.js +32 -26
- package/components/radio/demo/customize.min.js +1 -1
- package/components/radio/demo/getting-started.min.js +1 -1
- package/components/radio/demo/index.min.js +1 -1
- package/components/radio/dist/index.js +1 -1
- package/components/radio/dist/registered.js +1 -1
- package/components/select/demo/api.md +1 -0
- package/components/select/demo/customize.md +71 -0
- package/components/select/demo/customize.min.js +133 -26
- package/components/select/demo/getting-started.min.js +133 -26
- package/components/select/demo/index.min.js +133 -26
- package/components/select/demo/keyboard-behavior.md +18 -0
- package/components/select/dist/auro-select.d.ts +38 -2
- package/components/select/dist/index.js +133 -26
- package/components/select/dist/registered.js +133 -26
- package/components/select/dist/selectUtils.d.ts +12 -0
- package/custom-elements.json +114 -10
- package/package.json +1 -1
|
@@ -10460,6 +10460,7 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
|
|
|
10460
10460
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
10461
10461
|
|
|
10462
10462
|
if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
|
|
10463
|
+
console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
|
|
10463
10464
|
return undefined;
|
|
10464
10465
|
}
|
|
10465
10466
|
|
|
@@ -11270,10 +11271,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
|
|
|
11270
11271
|
this.wrapperElement.addEventListener('click', this.handleClick);
|
|
11271
11272
|
}
|
|
11272
11273
|
|
|
11273
|
-
// add attribute for query selectors when auro-input is registered under a custom name
|
|
11274
|
-
if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
|
|
11275
|
-
this.setAttribute('auro-input', '');
|
|
11276
|
-
}
|
|
11277
11274
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
11278
11275
|
|
|
11279
11276
|
// use validity message override if declared when initializing the component
|
|
@@ -11444,14 +11441,14 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
|
|
|
11444
11441
|
|
|
11445
11442
|
if (formattedValue !== this.inputElement.value) {
|
|
11446
11443
|
this.skipNextProgrammaticInputEvent = true;
|
|
11447
|
-
if (this.maskInstance && this.type
|
|
11444
|
+
if (this.maskInstance && this.type !== 'date') {
|
|
11448
11445
|
// Route through the mask so its _value and el.value stay in lock-step
|
|
11449
11446
|
// (set value calls updateControl which writes el.value = displayValue).
|
|
11450
11447
|
// Writing el.value directly leaves the mask thinking displayValue is
|
|
11451
|
-
// stale; _saveSelection on the next focus/click then warns.
|
|
11452
|
-
//
|
|
11453
|
-
//
|
|
11454
|
-
//
|
|
11448
|
+
// stale; _saveSelection on the next focus/click then warns. Date is
|
|
11449
|
+
// excluded because its formattedValue can be raw ISO when the calendar
|
|
11450
|
+
// is invalid, and re-masking through mm/dd/yyyy would truncate it and
|
|
11451
|
+
// flip validity from patternMismatch to tooShort.
|
|
11455
11452
|
this.maskInstance.value = formattedValue || '';
|
|
11456
11453
|
} else if (formattedValue) {
|
|
11457
11454
|
this.inputElement.value = formattedValue;
|
|
@@ -11562,31 +11559,33 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
|
|
|
11562
11559
|
* @returns {void}
|
|
11563
11560
|
*/
|
|
11564
11561
|
configureAutoFormatting() {
|
|
11565
|
-
//
|
|
11566
|
-
//
|
|
11567
|
-
//
|
|
11568
|
-
//
|
|
11562
|
+
// _configuringMask gates two things: external re-entry into this method
|
|
11563
|
+
// while setup is mid-flight (from property changes that call back here),
|
|
11564
|
+
// and the accept/complete listeners below — both need to ignore the mask
|
|
11565
|
+
// events fired by our own value-restore step.
|
|
11569
11566
|
if (this._configuringMask) return;
|
|
11570
11567
|
this._configuringMask = true;
|
|
11571
11568
|
try {
|
|
11569
|
+
// Destroy any prior mask so IMask can attach fresh under the new format.
|
|
11572
11570
|
if (this.maskInstance) {
|
|
11573
11571
|
this.maskInstance.destroy();
|
|
11574
11572
|
}
|
|
11575
11573
|
|
|
11576
|
-
// Pass new format to util
|
|
11577
11574
|
this.util.updateFormat(this.format);
|
|
11578
11575
|
|
|
11579
11576
|
const maskOptions = this.util.getMaskOptions(this.type, this.format);
|
|
11580
11577
|
|
|
11581
11578
|
if (this.inputElement && maskOptions.mask) {
|
|
11582
|
-
|
|
11583
|
-
//
|
|
11584
|
-
//
|
|
11585
|
-
//
|
|
11586
|
-
// When the format changes (e.g. locale switch) and we have a valid ISO
|
|
11587
|
-
// model value, compute the display string for the NEW format instead of
|
|
11588
|
-
// re-using the old display string, which may be invalid in the new mask.
|
|
11579
|
+
// Capture the current display so it can be re-applied after IMask
|
|
11580
|
+
// attaches. The restore at the bottom goes through maskInstance.value
|
|
11581
|
+
// (not inputElement.value directly) so the mask's internal state and
|
|
11582
|
+
// the input's displayed text stay in lock-step.
|
|
11589
11583
|
let existingValue = this.inputElement.value;
|
|
11584
|
+
|
|
11585
|
+
// Format-change case (e.g. locale switch): existingValue is the OLD
|
|
11586
|
+
// mask's display string and may not parse under the new mask. When
|
|
11587
|
+
// we have a valid date model, rebuild the display from valueObject
|
|
11588
|
+
// (the canonical source) using the new mask's format function.
|
|
11590
11589
|
if (
|
|
11591
11590
|
this.util.isFullDateFormat(this.type, this.format) &&
|
|
11592
11591
|
this.value &&
|
|
@@ -11598,15 +11597,18 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
|
|
|
11598
11597
|
existingValue = maskOptions.format(this.valueObject);
|
|
11599
11598
|
}
|
|
11600
11599
|
|
|
11600
|
+
// Clear before IMask attaches so the constructor seeds an empty
|
|
11601
|
+
// internal value. Otherwise IMask reads the stale unmasked string
|
|
11602
|
+
// and emits a spurious 'accept' before the restore below runs.
|
|
11601
11603
|
this.skipNextProgrammaticInputEvent = true;
|
|
11602
11604
|
this.inputElement.value = '';
|
|
11603
11605
|
|
|
11604
11606
|
this.maskInstance = IMask$3(this.inputElement, maskOptions);
|
|
11605
11607
|
|
|
11608
|
+
// Mask fires 'accept' on every value change, including the restore
|
|
11609
|
+
// step below. Skip events fired during configureAutoFormatting so
|
|
11610
|
+
// we don't overwrite a value the parent just pushed.
|
|
11606
11611
|
this.maskInstance.on('accept', () => {
|
|
11607
|
-
// Suppress propagation during configureAutoFormatting's own value-restoration
|
|
11608
|
-
// (line below) — the mask emits 'accept' on every value-set, including ours,
|
|
11609
|
-
// and we don't want to overwrite a value the parent just pushed.
|
|
11610
11612
|
if (this._configuringMask) return;
|
|
11611
11613
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
11612
11614
|
if (this.type === "date") {
|
|
@@ -11614,6 +11616,8 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
|
|
|
11614
11616
|
}
|
|
11615
11617
|
});
|
|
11616
11618
|
|
|
11619
|
+
// Mask fires 'complete' on the restore step below for any value that
|
|
11620
|
+
// happens to be a complete match. Same setup-suppression as 'accept'.
|
|
11617
11621
|
this.maskInstance.on('complete', () => {
|
|
11618
11622
|
if (this._configuringMask) return;
|
|
11619
11623
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
@@ -11622,7 +11626,9 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
|
|
|
11622
11626
|
}
|
|
11623
11627
|
});
|
|
11624
11628
|
|
|
11625
|
-
//
|
|
11629
|
+
// Write existingValue through the mask (not the input directly) so
|
|
11630
|
+
// the mask reformats it under the new rules and keeps its internal
|
|
11631
|
+
// _value aligned with the input's displayed text.
|
|
11626
11632
|
if (existingValue) {
|
|
11627
11633
|
this.maskInstance.value = existingValue;
|
|
11628
11634
|
}
|
|
@@ -12328,7 +12334,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$2 {
|
|
|
12328
12334
|
}
|
|
12329
12335
|
};
|
|
12330
12336
|
|
|
12331
|
-
var formkitVersion$8 = '
|
|
12337
|
+
var formkitVersion$8 = '202606190840';
|
|
12332
12338
|
|
|
12333
12339
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
12334
12340
|
// See LICENSE in the project root for license information.
|
|
@@ -23567,6 +23573,7 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
23567
23573
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
23568
23574
|
|
|
23569
23575
|
if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
|
|
23576
|
+
console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
|
|
23570
23577
|
return undefined;
|
|
23571
23578
|
}
|
|
23572
23579
|
|
|
@@ -26447,7 +26454,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$2 {
|
|
|
26447
26454
|
}
|
|
26448
26455
|
};
|
|
26449
26456
|
|
|
26450
|
-
var formkitVersion$2$1 = '
|
|
26457
|
+
var formkitVersion$2$1 = '202606190840';
|
|
26451
26458
|
|
|
26452
26459
|
let l$1$2 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$5`${s$5(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1$2 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1$3=i$4`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
|
|
26453
26460
|
`,u$4$2=i$4`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
|
|
@@ -31958,7 +31965,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
|
|
|
31958
31965
|
}
|
|
31959
31966
|
};
|
|
31960
31967
|
|
|
31961
|
-
var formkitVersion$1$3 = '
|
|
31968
|
+
var formkitVersion$1$3 = '202606190840';
|
|
31962
31969
|
|
|
31963
31970
|
let AuroElement$2$2 = class AuroElement extends i$2 {
|
|
31964
31971
|
static get properties() {
|
|
@@ -43672,6 +43679,7 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
|
|
|
43672
43679
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
43673
43680
|
|
|
43674
43681
|
if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
|
|
43682
|
+
console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
|
|
43675
43683
|
return undefined;
|
|
43676
43684
|
}
|
|
43677
43685
|
|
|
@@ -44482,10 +44490,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
|
|
|
44482
44490
|
this.wrapperElement.addEventListener('click', this.handleClick);
|
|
44483
44491
|
}
|
|
44484
44492
|
|
|
44485
|
-
// add attribute for query selectors when auro-input is registered under a custom name
|
|
44486
|
-
if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
|
|
44487
|
-
this.setAttribute('auro-input', '');
|
|
44488
|
-
}
|
|
44489
44493
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
44490
44494
|
|
|
44491
44495
|
// use validity message override if declared when initializing the component
|
|
@@ -44656,14 +44660,14 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
|
|
|
44656
44660
|
|
|
44657
44661
|
if (formattedValue !== this.inputElement.value) {
|
|
44658
44662
|
this.skipNextProgrammaticInputEvent = true;
|
|
44659
|
-
if (this.maskInstance && this.type
|
|
44663
|
+
if (this.maskInstance && this.type !== 'date') {
|
|
44660
44664
|
// Route through the mask so its _value and el.value stay in lock-step
|
|
44661
44665
|
// (set value calls updateControl which writes el.value = displayValue).
|
|
44662
44666
|
// Writing el.value directly leaves the mask thinking displayValue is
|
|
44663
|
-
// stale; _saveSelection on the next focus/click then warns.
|
|
44664
|
-
//
|
|
44665
|
-
//
|
|
44666
|
-
//
|
|
44667
|
+
// stale; _saveSelection on the next focus/click then warns. Date is
|
|
44668
|
+
// excluded because its formattedValue can be raw ISO when the calendar
|
|
44669
|
+
// is invalid, and re-masking through mm/dd/yyyy would truncate it and
|
|
44670
|
+
// flip validity from patternMismatch to tooShort.
|
|
44667
44671
|
this.maskInstance.value = formattedValue || '';
|
|
44668
44672
|
} else if (formattedValue) {
|
|
44669
44673
|
this.inputElement.value = formattedValue;
|
|
@@ -44774,31 +44778,33 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
|
|
|
44774
44778
|
* @returns {void}
|
|
44775
44779
|
*/
|
|
44776
44780
|
configureAutoFormatting() {
|
|
44777
|
-
//
|
|
44778
|
-
//
|
|
44779
|
-
//
|
|
44780
|
-
//
|
|
44781
|
+
// _configuringMask gates two things: external re-entry into this method
|
|
44782
|
+
// while setup is mid-flight (from property changes that call back here),
|
|
44783
|
+
// and the accept/complete listeners below — both need to ignore the mask
|
|
44784
|
+
// events fired by our own value-restore step.
|
|
44781
44785
|
if (this._configuringMask) return;
|
|
44782
44786
|
this._configuringMask = true;
|
|
44783
44787
|
try {
|
|
44788
|
+
// Destroy any prior mask so IMask can attach fresh under the new format.
|
|
44784
44789
|
if (this.maskInstance) {
|
|
44785
44790
|
this.maskInstance.destroy();
|
|
44786
44791
|
}
|
|
44787
44792
|
|
|
44788
|
-
// Pass new format to util
|
|
44789
44793
|
this.util.updateFormat(this.format);
|
|
44790
44794
|
|
|
44791
44795
|
const maskOptions = this.util.getMaskOptions(this.type, this.format);
|
|
44792
44796
|
|
|
44793
44797
|
if (this.inputElement && maskOptions.mask) {
|
|
44794
|
-
|
|
44795
|
-
//
|
|
44796
|
-
//
|
|
44797
|
-
//
|
|
44798
|
-
// When the format changes (e.g. locale switch) and we have a valid ISO
|
|
44799
|
-
// model value, compute the display string for the NEW format instead of
|
|
44800
|
-
// re-using the old display string, which may be invalid in the new mask.
|
|
44798
|
+
// Capture the current display so it can be re-applied after IMask
|
|
44799
|
+
// attaches. The restore at the bottom goes through maskInstance.value
|
|
44800
|
+
// (not inputElement.value directly) so the mask's internal state and
|
|
44801
|
+
// the input's displayed text stay in lock-step.
|
|
44801
44802
|
let existingValue = this.inputElement.value;
|
|
44803
|
+
|
|
44804
|
+
// Format-change case (e.g. locale switch): existingValue is the OLD
|
|
44805
|
+
// mask's display string and may not parse under the new mask. When
|
|
44806
|
+
// we have a valid date model, rebuild the display from valueObject
|
|
44807
|
+
// (the canonical source) using the new mask's format function.
|
|
44802
44808
|
if (
|
|
44803
44809
|
this.util.isFullDateFormat(this.type, this.format) &&
|
|
44804
44810
|
this.value &&
|
|
@@ -44810,15 +44816,18 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
|
|
|
44810
44816
|
existingValue = maskOptions.format(this.valueObject);
|
|
44811
44817
|
}
|
|
44812
44818
|
|
|
44819
|
+
// Clear before IMask attaches so the constructor seeds an empty
|
|
44820
|
+
// internal value. Otherwise IMask reads the stale unmasked string
|
|
44821
|
+
// and emits a spurious 'accept' before the restore below runs.
|
|
44813
44822
|
this.skipNextProgrammaticInputEvent = true;
|
|
44814
44823
|
this.inputElement.value = '';
|
|
44815
44824
|
|
|
44816
44825
|
this.maskInstance = IMask$2(this.inputElement, maskOptions);
|
|
44817
44826
|
|
|
44827
|
+
// Mask fires 'accept' on every value change, including the restore
|
|
44828
|
+
// step below. Skip events fired during configureAutoFormatting so
|
|
44829
|
+
// we don't overwrite a value the parent just pushed.
|
|
44818
44830
|
this.maskInstance.on('accept', () => {
|
|
44819
|
-
// Suppress propagation during configureAutoFormatting's own value-restoration
|
|
44820
|
-
// (line below) — the mask emits 'accept' on every value-set, including ours,
|
|
44821
|
-
// and we don't want to overwrite a value the parent just pushed.
|
|
44822
44831
|
if (this._configuringMask) return;
|
|
44823
44832
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
44824
44833
|
if (this.type === "date") {
|
|
@@ -44826,6 +44835,8 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
|
|
|
44826
44835
|
}
|
|
44827
44836
|
});
|
|
44828
44837
|
|
|
44838
|
+
// Mask fires 'complete' on the restore step below for any value that
|
|
44839
|
+
// happens to be a complete match. Same setup-suppression as 'accept'.
|
|
44829
44840
|
this.maskInstance.on('complete', () => {
|
|
44830
44841
|
if (this._configuringMask) return;
|
|
44831
44842
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
@@ -44834,7 +44845,9 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
|
|
|
44834
44845
|
}
|
|
44835
44846
|
});
|
|
44836
44847
|
|
|
44837
|
-
//
|
|
44848
|
+
// Write existingValue through the mask (not the input directly) so
|
|
44849
|
+
// the mask reformats it under the new rules and keeps its internal
|
|
44850
|
+
// _value aligned with the input's displayed text.
|
|
44838
44851
|
if (existingValue) {
|
|
44839
44852
|
this.maskInstance.value = existingValue;
|
|
44840
44853
|
}
|
|
@@ -45540,7 +45553,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
|
|
|
45540
45553
|
}
|
|
45541
45554
|
};
|
|
45542
45555
|
|
|
45543
|
-
var formkitVersion$7 = '
|
|
45556
|
+
var formkitVersion$7 = '202606190840';
|
|
45544
45557
|
|
|
45545
45558
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
45546
45559
|
// See LICENSE in the project root for license information.
|
|
@@ -46960,8 +46973,6 @@ const datepickerKeyboardStrategy = {
|
|
|
46960
46973
|
* @slot label - Defines the label content for the entire datepicker when `layout="snowflake"`.
|
|
46961
46974
|
* @slot toLabel - Defines the label content for the second input when the `range` attribute is used.
|
|
46962
46975
|
* @slot fromLabel - Defines the label content for the first input.
|
|
46963
|
-
* @slot optionalFromLabel - Overrides the "(optional)" text rendered next to the first input's label when the datepicker is not `required`.
|
|
46964
|
-
* @slot optionalToLabel - Overrides the "(optional)" text rendered next to the second input's label when `range` is set and the datepicker is not `required`.
|
|
46965
46976
|
* @slot date_YYYY_MM_DD - Defines the content to display in the auro-calendar-cell for the specified date. The content text is colored using the success state token when the `highlight` attribute is applied to the slot.
|
|
46966
46977
|
* @slot popover_YYYY_MM_DD - Defines the content to display in the auro-calendar-cell popover for the specified date.
|
|
46967
46978
|
* @csspart dropdown - Use for customizing the style of the dropdown.
|
|
@@ -48557,9 +48568,7 @@ class AuroDatePicker extends AuroElement$5 {
|
|
|
48557
48568
|
// update the calendar
|
|
48558
48569
|
if (this.valueEndObject) {
|
|
48559
48570
|
this.calendar.dateTo = this.convertToWcValidTime(this.valueEndObject);
|
|
48560
|
-
|
|
48561
|
-
this.calendarRenderUtil.updateCentralDate(this, this.valueEndObject);
|
|
48562
|
-
}
|
|
48571
|
+
this.calendarRenderUtil.updateCentralDate(this, this.valueEndObject);
|
|
48563
48572
|
} else {
|
|
48564
48573
|
if (this.inputList[1].value !== this.valueEnd) {
|
|
48565
48574
|
this.inputList[1].value = this.valueEnd || '';
|
|
@@ -48954,7 +48963,6 @@ class AuroDatePicker extends AuroElement$5 {
|
|
|
48954
48963
|
}
|
|
48955
48964
|
<span slot="ariaLabel.clear">${this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || i18n$2(this.lang, 'clearInput')}</span>
|
|
48956
48965
|
<span slot="label"><slot name="fromLabel"></slot></span>
|
|
48957
|
-
<span slot="optionalLabel"><slot name="optionalFromLabel"> (optional)</slot></span>
|
|
48958
48966
|
</${this.inputTag}>
|
|
48959
48967
|
</div>
|
|
48960
48968
|
|
|
@@ -48999,7 +49007,6 @@ class AuroDatePicker extends AuroElement$5 {
|
|
|
48999
49007
|
}
|
|
49000
49008
|
<span slot="ariaLabel.clear">${this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || i18n$2(this.lang, 'clearInput')}</span>
|
|
49001
49009
|
<span slot="label"><slot name="toLabel"></slot></span>
|
|
49002
|
-
<span slot="optionalLabel"><slot name="optionalToLabel"> (optional)</slot></span>
|
|
49003
49010
|
</${this.inputTag}>
|
|
49004
49011
|
</div>
|
|
49005
49012
|
` : undefined}
|
|
@@ -50243,7 +50250,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
|
|
|
50243
50250
|
}
|
|
50244
50251
|
};
|
|
50245
50252
|
|
|
50246
|
-
var formkitVersion$1$2 = '
|
|
50253
|
+
var formkitVersion$1$2 = '202606190840';
|
|
50247
50254
|
|
|
50248
50255
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
50249
50256
|
// See LICENSE in the project root for license information.
|
|
@@ -54571,7 +54578,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
|
|
|
54571
54578
|
}
|
|
54572
54579
|
};
|
|
54573
54580
|
|
|
54574
|
-
var formkitVersion$6 = '
|
|
54581
|
+
var formkitVersion$6 = '202606190840';
|
|
54575
54582
|
|
|
54576
54583
|
let AuroElement$1$2 = class AuroElement extends i$2 {
|
|
54577
54584
|
static get properties() {
|
|
@@ -58503,7 +58510,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
|
|
|
58503
58510
|
}
|
|
58504
58511
|
};
|
|
58505
58512
|
|
|
58506
|
-
var formkitVersion$5 = '
|
|
58513
|
+
var formkitVersion$5 = '202606190840';
|
|
58507
58514
|
|
|
58508
58515
|
// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
|
|
58509
58516
|
// See LICENSE in the project root for license information.
|
|
@@ -60253,7 +60260,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
|
|
|
60253
60260
|
}
|
|
60254
60261
|
};
|
|
60255
60262
|
|
|
60256
|
-
var formkitVersion$4 = '
|
|
60263
|
+
var formkitVersion$4 = '202606190840';
|
|
60257
60264
|
|
|
60258
60265
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
60259
60266
|
// See LICENSE in the project root for license information.
|
|
@@ -61429,6 +61436,8 @@ function navigateArrow$1(component, direction, options = {}) {
|
|
|
61429
61436
|
}
|
|
61430
61437
|
}
|
|
61431
61438
|
|
|
61439
|
+
/* eslint-disable no-underscore-dangle */
|
|
61440
|
+
|
|
61432
61441
|
/**
|
|
61433
61442
|
* Returns the clear button element from the active input's shadow
|
|
61434
61443
|
* DOM, if available.
|
|
@@ -61464,11 +61473,9 @@ function isClearBtnFocused(ctx, clearBtn = getClearBtn(ctx)) {
|
|
|
61464
61473
|
* @param {Object} menu - The menu component.
|
|
61465
61474
|
*/
|
|
61466
61475
|
function reconcileMenuIndex(menu) {
|
|
61467
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
61468
61476
|
if (menu._index < 0 && menu.optionActive && menu.items) {
|
|
61469
61477
|
const idx = menu.items.indexOf(menu.optionActive);
|
|
61470
61478
|
if (idx >= 0) {
|
|
61471
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
61472
61479
|
menu._index = idx;
|
|
61473
61480
|
}
|
|
61474
61481
|
}
|
|
@@ -65468,7 +65475,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
|
|
|
65468
65475
|
}
|
|
65469
65476
|
};
|
|
65470
65477
|
|
|
65471
|
-
var formkitVersion$2 = '
|
|
65478
|
+
var formkitVersion$2 = '202606190840';
|
|
65472
65479
|
|
|
65473
65480
|
let AuroElement$2$1 = class AuroElement extends i$2 {
|
|
65474
65481
|
static get properties() {
|
|
@@ -77182,6 +77189,7 @@ class AuroInputUtilities {
|
|
|
77182
77189
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
77183
77190
|
|
|
77184
77191
|
if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
|
|
77192
|
+
console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
|
|
77185
77193
|
return undefined;
|
|
77186
77194
|
}
|
|
77187
77195
|
|
|
@@ -77992,10 +78000,6 @@ class BaseInput extends AuroElement$1$1 {
|
|
|
77992
78000
|
this.wrapperElement.addEventListener('click', this.handleClick);
|
|
77993
78001
|
}
|
|
77994
78002
|
|
|
77995
|
-
// add attribute for query selectors when auro-input is registered under a custom name
|
|
77996
|
-
if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
|
|
77997
|
-
this.setAttribute('auro-input', '');
|
|
77998
|
-
}
|
|
77999
78003
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
78000
78004
|
|
|
78001
78005
|
// use validity message override if declared when initializing the component
|
|
@@ -78166,14 +78170,14 @@ class BaseInput extends AuroElement$1$1 {
|
|
|
78166
78170
|
|
|
78167
78171
|
if (formattedValue !== this.inputElement.value) {
|
|
78168
78172
|
this.skipNextProgrammaticInputEvent = true;
|
|
78169
|
-
if (this.maskInstance && this.type
|
|
78173
|
+
if (this.maskInstance && this.type !== 'date') {
|
|
78170
78174
|
// Route through the mask so its _value and el.value stay in lock-step
|
|
78171
78175
|
// (set value calls updateControl which writes el.value = displayValue).
|
|
78172
78176
|
// Writing el.value directly leaves the mask thinking displayValue is
|
|
78173
|
-
// stale; _saveSelection on the next focus/click then warns.
|
|
78174
|
-
//
|
|
78175
|
-
//
|
|
78176
|
-
//
|
|
78177
|
+
// stale; _saveSelection on the next focus/click then warns. Date is
|
|
78178
|
+
// excluded because its formattedValue can be raw ISO when the calendar
|
|
78179
|
+
// is invalid, and re-masking through mm/dd/yyyy would truncate it and
|
|
78180
|
+
// flip validity from patternMismatch to tooShort.
|
|
78177
78181
|
this.maskInstance.value = formattedValue || '';
|
|
78178
78182
|
} else if (formattedValue) {
|
|
78179
78183
|
this.inputElement.value = formattedValue;
|
|
@@ -78284,31 +78288,33 @@ class BaseInput extends AuroElement$1$1 {
|
|
|
78284
78288
|
* @returns {void}
|
|
78285
78289
|
*/
|
|
78286
78290
|
configureAutoFormatting() {
|
|
78287
|
-
//
|
|
78288
|
-
//
|
|
78289
|
-
//
|
|
78290
|
-
//
|
|
78291
|
+
// _configuringMask gates two things: external re-entry into this method
|
|
78292
|
+
// while setup is mid-flight (from property changes that call back here),
|
|
78293
|
+
// and the accept/complete listeners below — both need to ignore the mask
|
|
78294
|
+
// events fired by our own value-restore step.
|
|
78291
78295
|
if (this._configuringMask) return;
|
|
78292
78296
|
this._configuringMask = true;
|
|
78293
78297
|
try {
|
|
78298
|
+
// Destroy any prior mask so IMask can attach fresh under the new format.
|
|
78294
78299
|
if (this.maskInstance) {
|
|
78295
78300
|
this.maskInstance.destroy();
|
|
78296
78301
|
}
|
|
78297
78302
|
|
|
78298
|
-
// Pass new format to util
|
|
78299
78303
|
this.util.updateFormat(this.format);
|
|
78300
78304
|
|
|
78301
78305
|
const maskOptions = this.util.getMaskOptions(this.type, this.format);
|
|
78302
78306
|
|
|
78303
78307
|
if (this.inputElement && maskOptions.mask) {
|
|
78304
|
-
|
|
78305
|
-
//
|
|
78306
|
-
//
|
|
78307
|
-
//
|
|
78308
|
-
// When the format changes (e.g. locale switch) and we have a valid ISO
|
|
78309
|
-
// model value, compute the display string for the NEW format instead of
|
|
78310
|
-
// re-using the old display string, which may be invalid in the new mask.
|
|
78308
|
+
// Capture the current display so it can be re-applied after IMask
|
|
78309
|
+
// attaches. The restore at the bottom goes through maskInstance.value
|
|
78310
|
+
// (not inputElement.value directly) so the mask's internal state and
|
|
78311
|
+
// the input's displayed text stay in lock-step.
|
|
78311
78312
|
let existingValue = this.inputElement.value;
|
|
78313
|
+
|
|
78314
|
+
// Format-change case (e.g. locale switch): existingValue is the OLD
|
|
78315
|
+
// mask's display string and may not parse under the new mask. When
|
|
78316
|
+
// we have a valid date model, rebuild the display from valueObject
|
|
78317
|
+
// (the canonical source) using the new mask's format function.
|
|
78312
78318
|
if (
|
|
78313
78319
|
this.util.isFullDateFormat(this.type, this.format) &&
|
|
78314
78320
|
this.value &&
|
|
@@ -78320,15 +78326,18 @@ class BaseInput extends AuroElement$1$1 {
|
|
|
78320
78326
|
existingValue = maskOptions.format(this.valueObject);
|
|
78321
78327
|
}
|
|
78322
78328
|
|
|
78329
|
+
// Clear before IMask attaches so the constructor seeds an empty
|
|
78330
|
+
// internal value. Otherwise IMask reads the stale unmasked string
|
|
78331
|
+
// and emits a spurious 'accept' before the restore below runs.
|
|
78323
78332
|
this.skipNextProgrammaticInputEvent = true;
|
|
78324
78333
|
this.inputElement.value = '';
|
|
78325
78334
|
|
|
78326
78335
|
this.maskInstance = IMask(this.inputElement, maskOptions);
|
|
78327
78336
|
|
|
78337
|
+
// Mask fires 'accept' on every value change, including the restore
|
|
78338
|
+
// step below. Skip events fired during configureAutoFormatting so
|
|
78339
|
+
// we don't overwrite a value the parent just pushed.
|
|
78328
78340
|
this.maskInstance.on('accept', () => {
|
|
78329
|
-
// Suppress propagation during configureAutoFormatting's own value-restoration
|
|
78330
|
-
// (line below) — the mask emits 'accept' on every value-set, including ours,
|
|
78331
|
-
// and we don't want to overwrite a value the parent just pushed.
|
|
78332
78341
|
if (this._configuringMask) return;
|
|
78333
78342
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
78334
78343
|
if (this.type === "date") {
|
|
@@ -78336,6 +78345,8 @@ class BaseInput extends AuroElement$1$1 {
|
|
|
78336
78345
|
}
|
|
78337
78346
|
});
|
|
78338
78347
|
|
|
78348
|
+
// Mask fires 'complete' on the restore step below for any value that
|
|
78349
|
+
// happens to be a complete match. Same setup-suppression as 'accept'.
|
|
78339
78350
|
this.maskInstance.on('complete', () => {
|
|
78340
78351
|
if (this._configuringMask) return;
|
|
78341
78352
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
@@ -78344,7 +78355,9 @@ class BaseInput extends AuroElement$1$1 {
|
|
|
78344
78355
|
}
|
|
78345
78356
|
});
|
|
78346
78357
|
|
|
78347
|
-
//
|
|
78358
|
+
// Write existingValue through the mask (not the input directly) so
|
|
78359
|
+
// the mask reformats it under the new rules and keeps its internal
|
|
78360
|
+
// _value aligned with the input's displayed text.
|
|
78348
78361
|
if (existingValue) {
|
|
78349
78362
|
this.maskInstance.value = existingValue;
|
|
78350
78363
|
}
|
|
@@ -79050,7 +79063,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
|
|
|
79050
79063
|
}
|
|
79051
79064
|
};
|
|
79052
79065
|
|
|
79053
|
-
var formkitVersion$1$1 = '
|
|
79066
|
+
var formkitVersion$1$1 = '202606190840';
|
|
79054
79067
|
|
|
79055
79068
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
79056
79069
|
// See LICENSE in the project root for license information.
|
|
@@ -80171,7 +80184,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
|
|
|
80171
80184
|
}
|
|
80172
80185
|
};
|
|
80173
80186
|
|
|
80174
|
-
var formkitVersion$3 = '
|
|
80187
|
+
var formkitVersion$3 = '202606190840';
|
|
80175
80188
|
|
|
80176
80189
|
var styleCss$1$3 = i$4`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
|
|
80177
80190
|
|
|
@@ -81158,7 +81171,7 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
81158
81171
|
if (this.menu) {
|
|
81159
81172
|
this.menu.matchWord = normalizeFilterValue(this.input.value);
|
|
81160
81173
|
}
|
|
81161
|
-
const label = getOptionLabel(this.menu.optionSelected)
|
|
81174
|
+
const label = getOptionLabel(this.menu.optionSelected);
|
|
81162
81175
|
this.updateTriggerTextDisplay(label || this.value);
|
|
81163
81176
|
}
|
|
81164
81177
|
|
|
@@ -81172,40 +81185,9 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
81172
81185
|
// in suggestion mode, do not override input value if no selection has been made and the input currently has focus
|
|
81173
81186
|
const isInputFocusedWithNoSelection = !this.menu.value && (this.input.matches(':focus-within') || (this.inputInBib && this.inputInBib.matches(':focus-within')));
|
|
81174
81187
|
|
|
81175
|
-
|
|
81176
|
-
|
|
81177
|
-
|
|
81178
|
-
// syncValuesAndStates re-enters here during typing when both inputs
|
|
81179
|
-
// already match, and a no-op flag flip would make the bib branch's
|
|
81180
|
-
// bail eat legitimate user-input events.
|
|
81181
|
-
const triggerNeedsSync = this.input.value !== nextValue;
|
|
81182
|
-
const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
|
|
81183
|
-
if (triggerNeedsSync || bibNeedsSync) {
|
|
81184
|
-
this._syncingDisplayValue = true;
|
|
81185
|
-
if (triggerNeedsSync) {
|
|
81186
|
-
this.input.value = nextValue;
|
|
81187
|
-
}
|
|
81188
|
-
if (bibNeedsSync) {
|
|
81189
|
-
this.inputInBib.value = nextValue;
|
|
81190
|
-
}
|
|
81191
|
-
const pending = [];
|
|
81192
|
-
if (triggerNeedsSync) {
|
|
81193
|
-
pending.push(this.input.updateComplete);
|
|
81194
|
-
}
|
|
81195
|
-
if (bibNeedsSync) {
|
|
81196
|
-
pending.push(this.inputInBib.updateComplete);
|
|
81197
|
-
}
|
|
81198
|
-
Promise.all(pending).then(() => {
|
|
81199
|
-
// imask reasserts otherwise, and handleBlur reverts to its stale value.
|
|
81200
|
-
if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
|
|
81201
|
-
this.input.maskInstance.updateValue();
|
|
81202
|
-
}
|
|
81203
|
-
if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
|
|
81204
|
-
this.inputInBib.maskInstance.updateValue();
|
|
81205
|
-
}
|
|
81206
|
-
this._syncingDisplayValue = false;
|
|
81207
|
-
});
|
|
81208
|
-
}
|
|
81188
|
+
const suppressed = this.persistInput || (this.behavior === 'suggestion' && isInputFocusedWithNoSelection);
|
|
81189
|
+
if (!suppressed) {
|
|
81190
|
+
this.syncInputValuesAcrossTriggerAndBib(label || this.value);
|
|
81209
81191
|
}
|
|
81210
81192
|
|
|
81211
81193
|
// update the displayValue in the trigger if displayValue slot content is present
|
|
@@ -81233,6 +81215,52 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
81233
81215
|
this.requestUpdate();
|
|
81234
81216
|
}
|
|
81235
81217
|
|
|
81218
|
+
/**
|
|
81219
|
+
* Writes nextValue to the trigger input and the bib input when their current
|
|
81220
|
+
* value differs, then re-asserts imask after Lit's update flushes.
|
|
81221
|
+
* @param {string} nextValue - The value to write to both inputs.
|
|
81222
|
+
* @returns {Promise<void> | null} Promise that resolves after the inputs flush,
|
|
81223
|
+
* or null when no sync was needed (so callers can skip post-flush work).
|
|
81224
|
+
* @private
|
|
81225
|
+
*/
|
|
81226
|
+
syncInputValuesAcrossTriggerAndBib(nextValue) {
|
|
81227
|
+
// Only set the flag when there's an actual write to suppress —
|
|
81228
|
+
// syncValuesAndStates re-enters here during typing when both inputs
|
|
81229
|
+
// already match, and a no-op flag flip would make the bib branch's
|
|
81230
|
+
// bail eat legitimate user-input events.
|
|
81231
|
+
const triggerNeedsSync = this.input.value !== nextValue;
|
|
81232
|
+
const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
|
|
81233
|
+
if (!triggerNeedsSync && !bibNeedsSync) {
|
|
81234
|
+
return null;
|
|
81235
|
+
}
|
|
81236
|
+
|
|
81237
|
+
this._syncingDisplayValue = true;
|
|
81238
|
+
if (triggerNeedsSync) {
|
|
81239
|
+
this.input.value = nextValue;
|
|
81240
|
+
}
|
|
81241
|
+
if (bibNeedsSync) {
|
|
81242
|
+
this.inputInBib.value = nextValue;
|
|
81243
|
+
}
|
|
81244
|
+
|
|
81245
|
+
const pending = [];
|
|
81246
|
+
if (triggerNeedsSync) {
|
|
81247
|
+
pending.push(this.input.updateComplete);
|
|
81248
|
+
}
|
|
81249
|
+
if (bibNeedsSync) {
|
|
81250
|
+
pending.push(this.inputInBib.updateComplete);
|
|
81251
|
+
}
|
|
81252
|
+
return Promise.all(pending).then(() => {
|
|
81253
|
+
// imask reasserts otherwise, and handleBlur reverts to its stale value.
|
|
81254
|
+
if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
|
|
81255
|
+
this.input.maskInstance.updateValue();
|
|
81256
|
+
}
|
|
81257
|
+
if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
|
|
81258
|
+
this.inputInBib.maskInstance.updateValue();
|
|
81259
|
+
}
|
|
81260
|
+
this._syncingDisplayValue = false;
|
|
81261
|
+
});
|
|
81262
|
+
}
|
|
81263
|
+
|
|
81236
81264
|
/**
|
|
81237
81265
|
* Processes hidden state of all menu options and determines if there are any available options not hidden.
|
|
81238
81266
|
* @private
|
|
@@ -81260,9 +81288,9 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
81260
81288
|
this.syncValuesAndStates();
|
|
81261
81289
|
}
|
|
81262
81290
|
|
|
81263
|
-
// Re-activate when optionActive is
|
|
81264
|
-
// been reset (e.g. by clearSelection in an async update)
|
|
81265
|
-
// makeSelection() can find the correct option.
|
|
81291
|
+
// Re-activate when optionActive is not in the current scrollable viewport,
|
|
81292
|
+
// or when _index has been reset (e.g. by clearSelection in an async update)
|
|
81293
|
+
// so that makeSelection() can find the correct option.
|
|
81266
81294
|
if (!this.availableOptions.includes(this.menu.optionActive) || this.menu._index < 0) {
|
|
81267
81295
|
this.activateFirstEnabledAvailableOption();
|
|
81268
81296
|
}
|
|
@@ -81396,28 +81424,25 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
81396
81424
|
|
|
81397
81425
|
guardTouchPassthrough$1(this.menu);
|
|
81398
81426
|
|
|
81399
|
-
//
|
|
81400
|
-
//
|
|
81401
|
-
//
|
|
81427
|
+
// showModal() takes focus away from the trigger. Early focus once
|
|
81428
|
+
// the dialog has painted; the shared doubleRaf below is the fallback
|
|
81429
|
+
// for when the dialog needs an extra frame and also clears the
|
|
81430
|
+
// validation guard.
|
|
81402
81431
|
requestAnimationFrame(() => {
|
|
81403
81432
|
this.setInputFocus();
|
|
81404
81433
|
});
|
|
81405
|
-
|
|
81406
|
-
doubleRaf$1(() => {
|
|
81407
|
-
this.setInputFocus();
|
|
81408
|
-
this._inFullscreenTransition = false;
|
|
81409
|
-
});
|
|
81410
|
-
} else {
|
|
81411
|
-
// Desktop popover-open: restore the trigger caret to end-of-text.
|
|
81412
|
-
// Clicking the trigger lands on auro-input's floating <label for="…">
|
|
81413
|
-
// overlay; Chrome resets the native input's selection to [0, 0] on
|
|
81414
|
-
// label-focus before any JS runs. setInputFocus()'s non-fullscreen
|
|
81415
|
-
// branch parks the caret at end. doubleRaf lets the dropdown layout
|
|
81416
|
-
// settle first, matching the fullscreen branch timing.
|
|
81417
|
-
doubleRaf$1(() => {
|
|
81418
|
-
this.setInputFocus();
|
|
81419
|
-
});
|
|
81420
81434
|
}
|
|
81435
|
+
// else (desktop popover-open): Chrome resets the trigger caret to
|
|
81436
|
+
// [0, 0] when its floating <label for="…"> overlay receives focus.
|
|
81437
|
+
// The shared doubleRaf below parks the caret back at end-of-text
|
|
81438
|
+
// after the dropdown layout settles.
|
|
81439
|
+
|
|
81440
|
+
doubleRaf$1(() => {
|
|
81441
|
+
this.setInputFocus();
|
|
81442
|
+
if (this._inFullscreenTransition) {
|
|
81443
|
+
this._inFullscreenTransition = false;
|
|
81444
|
+
}
|
|
81445
|
+
});
|
|
81421
81446
|
}
|
|
81422
81447
|
});
|
|
81423
81448
|
|
|
@@ -81524,9 +81549,9 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
81524
81549
|
} else {
|
|
81525
81550
|
// Safety net for the strategy-change setTimeout: a viewport-crossing
|
|
81526
81551
|
// fullscreen→floating switch can close the dialog and leave focus on
|
|
81527
|
-
// body. Every other
|
|
81528
|
-
// via the focusin → this.focus() redirect
|
|
81529
|
-
// no-op in the common case.
|
|
81552
|
+
// body. Every other call into this branch already has focus on the
|
|
81553
|
+
// input via the combobox-level focusin → this.focus() redirect, so
|
|
81554
|
+
// this is a no-op in the common case.
|
|
81530
81555
|
if (!this.input.componentHasFocus) {
|
|
81531
81556
|
this.input.focus();
|
|
81532
81557
|
}
|
|
@@ -81645,7 +81670,7 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
81645
81670
|
if (this.menu.optionSelected) {
|
|
81646
81671
|
const selected = this.menu.optionSelected;
|
|
81647
81672
|
|
|
81648
|
-
if (
|
|
81673
|
+
if (this.optionSelected !== selected) {
|
|
81649
81674
|
this.optionSelected = selected;
|
|
81650
81675
|
}
|
|
81651
81676
|
|
|
@@ -81658,7 +81683,7 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
81658
81683
|
}
|
|
81659
81684
|
|
|
81660
81685
|
// Update display
|
|
81661
|
-
this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected)
|
|
81686
|
+
this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected));
|
|
81662
81687
|
|
|
81663
81688
|
// Update match word for filtering
|
|
81664
81689
|
const trimmedInput = normalizeFilterValue(this.input.value);
|
|
@@ -82040,15 +82065,7 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
82040
82065
|
this.menu.value = undefined;
|
|
82041
82066
|
this.validation.reset(this);
|
|
82042
82067
|
this.touched = false;
|
|
82043
|
-
// Force validity back to the cleared state. validation.reset() calls
|
|
82044
|
-
// validate() at the end, and (post-credit-card-fix) the trigger input's
|
|
82045
|
-
// residual validity may still be copied into the combobox by the
|
|
82046
|
-
// auroInputElements loop. Explicitly clear here so reset() actually
|
|
82047
|
-
// leaves the component in a "no validity" state.
|
|
82048
82068
|
this.validity = undefined;
|
|
82049
|
-
this.errorMessage = '';
|
|
82050
|
-
this.input.validity = undefined;
|
|
82051
|
-
this.input.errorMessage = '';
|
|
82052
82069
|
}
|
|
82053
82070
|
|
|
82054
82071
|
/**
|
|
@@ -82101,52 +82118,23 @@ class AuroCombobox extends AuroElement$3 {
|
|
|
82101
82118
|
this.input.value = this.value;
|
|
82102
82119
|
}
|
|
82103
82120
|
|
|
82104
|
-
// Sync menu.value only when an option actually matches
|
|
82121
|
+
// Sync menu.value only when an option actually matches, or when filter
|
|
82122
|
+
// mode needs setMenuValue to dispatch auroMenu-selectValueFailure (the
|
|
82123
|
+
// listener at line 1206 clears combobox.value, mirroring select's
|
|
82124
|
+
// pattern). Otherwise sync the input display for freeform values.
|
|
82105
82125
|
if (this.menu.options && this.menu.options.length > 0) {
|
|
82106
|
-
if (this.menu.options.some((opt) => opt.value === this.value)) {
|
|
82107
|
-
this.setMenuValue(this.value);
|
|
82108
|
-
} else if (this.behavior === 'filter') {
|
|
82109
|
-
// In filter mode, freeform values aren't allowed. Push the unmatched
|
|
82110
|
-
// value through setMenuValue so menu dispatches auroMenu-selectValueFailure
|
|
82111
|
-
// and the listener at line 1206 clears combobox.value (mirrors select's
|
|
82112
|
-
// pattern). Bypassing setMenuValue here would skip the failure cascade.
|
|
82126
|
+
if (this.menu.options.some((opt) => opt.value === this.value) || this.behavior === 'filter') {
|
|
82113
82127
|
this.setMenuValue(this.value);
|
|
82114
82128
|
} else {
|
|
82115
82129
|
if (this.menu.value) {
|
|
82116
82130
|
this.menu.value = undefined;
|
|
82117
82131
|
}
|
|
82118
|
-
//
|
|
82119
|
-
//
|
|
82120
|
-
//
|
|
82121
|
-
|
|
82122
|
-
|
|
82123
|
-
|
|
82124
|
-
const triggerNeedsSync = this.input.value !== nextValue;
|
|
82125
|
-
const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
|
|
82126
|
-
if (triggerNeedsSync || bibNeedsSync) {
|
|
82127
|
-
this._syncingDisplayValue = true;
|
|
82128
|
-
if (triggerNeedsSync) {
|
|
82129
|
-
this.input.value = nextValue;
|
|
82130
|
-
}
|
|
82131
|
-
if (bibNeedsSync) {
|
|
82132
|
-
this.inputInBib.value = nextValue;
|
|
82133
|
-
}
|
|
82134
|
-
const pending = [];
|
|
82135
|
-
if (triggerNeedsSync) {
|
|
82136
|
-
pending.push(this.input.updateComplete);
|
|
82137
|
-
}
|
|
82138
|
-
if (bibNeedsSync) {
|
|
82139
|
-
pending.push(this.inputInBib.updateComplete);
|
|
82140
|
-
}
|
|
82141
|
-
Promise.all(pending).then(() => {
|
|
82142
|
-
if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
|
|
82143
|
-
this.input.maskInstance.updateValue();
|
|
82144
|
-
}
|
|
82145
|
-
if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
|
|
82146
|
-
this.inputInBib.maskInstance.updateValue();
|
|
82147
|
-
}
|
|
82148
|
-
this._syncingDisplayValue = false;
|
|
82149
|
-
// handleInputValueChange bailed on the flag — refresh the filter.
|
|
82132
|
+
// Suggestion-mode freeform value: sync the trigger + bib to show it,
|
|
82133
|
+
// then refresh the filter once the inputs flush (handleInputValueChange
|
|
82134
|
+
// bailed on _syncingDisplayValue).
|
|
82135
|
+
const syncPromise = this.syncInputValuesAcrossTriggerAndBib(this.value || '');
|
|
82136
|
+
if (syncPromise) {
|
|
82137
|
+
syncPromise.then(() => {
|
|
82150
82138
|
this._programmaticFilterRefresh = true;
|
|
82151
82139
|
this.handleMenuOptions();
|
|
82152
82140
|
setTimeout(() => {
|
|
@@ -84935,6 +84923,21 @@ function getEnabledOptions(menu) {
|
|
|
84935
84923
|
return (menu?.options || []).filter((option) => !option.disabled);
|
|
84936
84924
|
}
|
|
84937
84925
|
|
|
84926
|
+
/**
|
|
84927
|
+
* Returns the active (selectable + visible) options for type-ahead navigation.
|
|
84928
|
+
*
|
|
84929
|
+
* Uses auro-menuoption's `isActive` getter, which excludes disabled, hidden,
|
|
84930
|
+
* and static options (e.g. `static nomatch` placeholders) so the type-ahead
|
|
84931
|
+
* cursor never lands on a non-actionable item. Same empty-safe handling as
|
|
84932
|
+
* `getEnabledOptions`.
|
|
84933
|
+
*
|
|
84934
|
+
* @param {HTMLElement | null | undefined} menu - The auro-menu element.
|
|
84935
|
+
* @returns {Array<HTMLElement>} Active options, empty array when none.
|
|
84936
|
+
*/
|
|
84937
|
+
function getActiveOptions(menu) {
|
|
84938
|
+
return (menu?.options || []).filter((option) => option.isActive);
|
|
84939
|
+
}
|
|
84940
|
+
|
|
84938
84941
|
/* eslint-disable new-cap */
|
|
84939
84942
|
|
|
84940
84943
|
const selectKeyboardStrategy = {
|
|
@@ -84967,6 +84970,14 @@ const selectKeyboardStrategy = {
|
|
|
84967
84970
|
},
|
|
84968
84971
|
|
|
84969
84972
|
Escape(component, evt, ctx) {
|
|
84973
|
+
// Always clear the type-ahead buffer — Escape is a universal cancel.
|
|
84974
|
+
// Safe to call when the buffer is empty.
|
|
84975
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
84976
|
+
if (typeof component._clearTypeaheadBuffer === 'function') {
|
|
84977
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
84978
|
+
component._clearTypeaheadBuffer();
|
|
84979
|
+
}
|
|
84980
|
+
|
|
84970
84981
|
if (!ctx.isExpanded) {
|
|
84971
84982
|
return;
|
|
84972
84983
|
}
|
|
@@ -85026,16 +85037,25 @@ const selectKeyboardStrategy = {
|
|
|
85026
85037
|
},
|
|
85027
85038
|
|
|
85028
85039
|
default(component, evt, ctx) {
|
|
85029
|
-
|
|
85040
|
+
// Space resolves to either typeahead-buffer extension or bib toggle
|
|
85041
|
+
// depending on whether a type-ahead buffer is active. Mirrors native
|
|
85042
|
+
// <select> and the WAI-ARIA APG Listbox guidance: mid-typeahead space
|
|
85043
|
+
// is a search character (e.g. "San Francisco"); otherwise it toggles.
|
|
85030
85044
|
if (evt.key === ' ') {
|
|
85031
85045
|
evt.preventDefault();
|
|
85032
85046
|
evt.stopPropagation();
|
|
85047
|
+
if (component.typeaheadBuffer && component.typeaheadBuffer.length > 0) {
|
|
85048
|
+
component.updateActiveOptionBasedOnKey(evt.key);
|
|
85049
|
+
return;
|
|
85050
|
+
}
|
|
85033
85051
|
if (ctx.isExpanded) {
|
|
85034
85052
|
component.dropdown.hide();
|
|
85035
|
-
|
|
85053
|
+
} else {
|
|
85054
|
+
component.dropdown.show();
|
|
85036
85055
|
}
|
|
85037
|
-
|
|
85056
|
+
return;
|
|
85038
85057
|
}
|
|
85058
|
+
component.updateActiveOptionBasedOnKey(evt.key);
|
|
85039
85059
|
},
|
|
85040
85060
|
};
|
|
85041
85061
|
|
|
@@ -88947,7 +88967,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
|
|
|
88947
88967
|
}
|
|
88948
88968
|
};
|
|
88949
88969
|
|
|
88950
|
-
var formkitVersion$1 = '
|
|
88970
|
+
var formkitVersion$1 = '202606190840';
|
|
88951
88971
|
|
|
88952
88972
|
class AuroElement extends i$2 {
|
|
88953
88973
|
static get properties() {
|
|
@@ -90960,7 +90980,7 @@ class AuroHelpText extends i$2 {
|
|
|
90960
90980
|
}
|
|
90961
90981
|
}
|
|
90962
90982
|
|
|
90963
|
-
var formkitVersion = '
|
|
90983
|
+
var formkitVersion = '202606190840';
|
|
90964
90984
|
|
|
90965
90985
|
var styleCss = i$4`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 300);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 300);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
|
|
90966
90986
|
|
|
@@ -91065,6 +91085,16 @@ class AuroSelect extends AuroElement$1 {
|
|
|
91065
91085
|
* @private
|
|
91066
91086
|
*/
|
|
91067
91087
|
this.hasDisplayValueContent = false;
|
|
91088
|
+
|
|
91089
|
+
/**
|
|
91090
|
+
* @private
|
|
91091
|
+
*/
|
|
91092
|
+
this.typeaheadBuffer = '';
|
|
91093
|
+
|
|
91094
|
+
/**
|
|
91095
|
+
* @private
|
|
91096
|
+
*/
|
|
91097
|
+
this._typeaheadTimeout = null;
|
|
91068
91098
|
}
|
|
91069
91099
|
|
|
91070
91100
|
/**
|
|
@@ -91077,6 +91107,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
91077
91107
|
this.fullscreenBreakpoint = 'sm';
|
|
91078
91108
|
this.onDark = false;
|
|
91079
91109
|
this.isPopoverVisible = false;
|
|
91110
|
+
this.typeaheadTimeoutMs = 500;
|
|
91080
91111
|
|
|
91081
91112
|
// Layout Config
|
|
91082
91113
|
this.layout = 'classic';
|
|
@@ -91380,6 +91411,16 @@ class AuroSelect extends AuroElement$1 {
|
|
|
91380
91411
|
attribute: false
|
|
91381
91412
|
},
|
|
91382
91413
|
|
|
91414
|
+
/**
|
|
91415
|
+
* Milliseconds of keyboard inactivity before the type-ahead buffer resets.
|
|
91416
|
+
* Increase for users who type slowly.
|
|
91417
|
+
* @default 500
|
|
91418
|
+
*/
|
|
91419
|
+
typeaheadTimeoutMs: {
|
|
91420
|
+
type: Number,
|
|
91421
|
+
reflect: true
|
|
91422
|
+
},
|
|
91423
|
+
|
|
91383
91424
|
/**
|
|
91384
91425
|
* Specifies the `validityState` this element is in.
|
|
91385
91426
|
*/
|
|
@@ -91819,6 +91860,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
91819
91860
|
this.addEventListener('blur', () => {
|
|
91820
91861
|
this.validate();
|
|
91821
91862
|
this.hasFocus = false;
|
|
91863
|
+
this._clearTypeaheadBuffer();
|
|
91822
91864
|
});
|
|
91823
91865
|
}
|
|
91824
91866
|
|
|
@@ -91832,41 +91874,89 @@ class AuroSelect extends AuroElement$1 {
|
|
|
91832
91874
|
}
|
|
91833
91875
|
}
|
|
91834
91876
|
|
|
91877
|
+
/**
|
|
91878
|
+
* Returns the lowercase, trimmed text content of a menu option.
|
|
91879
|
+
* @private
|
|
91880
|
+
* @param {HTMLElement} option - The menu option element.
|
|
91881
|
+
* @returns {string}
|
|
91882
|
+
*/
|
|
91883
|
+
_getOptionDisplayText(option) {
|
|
91884
|
+
return (option.textContent || '').trim().toLowerCase();
|
|
91885
|
+
}
|
|
91886
|
+
|
|
91887
|
+
/**
|
|
91888
|
+
* Empties the type-ahead buffer and cancels any pending reset timeout.
|
|
91889
|
+
* Called when focus leaves the component, when Escape closes the bib, and on disconnect
|
|
91890
|
+
* so a stale buffer never bridges into a fresh interaction.
|
|
91891
|
+
* @private
|
|
91892
|
+
*/
|
|
91893
|
+
_clearTypeaheadBuffer() {
|
|
91894
|
+
if (this._typeaheadTimeout) {
|
|
91895
|
+
clearTimeout(this._typeaheadTimeout);
|
|
91896
|
+
this._typeaheadTimeout = null;
|
|
91897
|
+
}
|
|
91898
|
+
this.typeaheadBuffer = '';
|
|
91899
|
+
}
|
|
91900
|
+
|
|
91835
91901
|
/**
|
|
91836
91902
|
* Updates the active option in the menu based on keyboard input.
|
|
91903
|
+
*
|
|
91904
|
+
* Implements the WAI-ARIA APG Listbox type-ahead pattern: accumulates printable
|
|
91905
|
+
* keystrokes into a buffer that resets after `typeaheadTimeoutMs` of inactivity.
|
|
91906
|
+
* A multi-character buffer matches the first option whose displayed text starts
|
|
91907
|
+
* with the buffer; repeating a single character cycles through options that start
|
|
91908
|
+
* with that character.
|
|
91837
91909
|
* @private
|
|
91838
91910
|
* @param {string} _key - The key pressed by the user.
|
|
91839
91911
|
* @returns {void}
|
|
91840
91912
|
*/
|
|
91841
91913
|
updateActiveOptionBasedOnKey(_key) {
|
|
91914
|
+
// Ignore non-printable keys (Shift, ArrowDown, Tab, etc.)
|
|
91915
|
+
if (typeof _key !== 'string' || _key.length !== 1) {
|
|
91916
|
+
return;
|
|
91917
|
+
}
|
|
91842
91918
|
|
|
91843
|
-
//
|
|
91844
|
-
|
|
91845
|
-
|
|
91846
|
-
//
|
|
91847
|
-
|
|
91919
|
+
// No selectable options to match against — clear any stale buffer/timer so
|
|
91920
|
+
// Space stays a bib toggle and the next keystroke after fresh options load
|
|
91921
|
+
// starts cleanly. `getActiveOptions` excludes disabled, hidden, and static
|
|
91922
|
+
// options (e.g. `static nomatch` placeholders). Checked BEFORE mutating
|
|
91923
|
+
// the buffer.
|
|
91924
|
+
const options = getActiveOptions(this.menu);
|
|
91925
|
+
if (!options.length) {
|
|
91926
|
+
this._clearTypeaheadBuffer();
|
|
91927
|
+
return;
|
|
91928
|
+
}
|
|
91848
91929
|
|
|
91849
|
-
|
|
91850
|
-
this.lastLetter = key;
|
|
91930
|
+
const key = _key.toLowerCase();
|
|
91851
91931
|
|
|
91852
|
-
//
|
|
91853
|
-
|
|
91854
|
-
|
|
91855
|
-
|
|
91856
|
-
|
|
91932
|
+
// Reset the buffer after a period of inactivity
|
|
91933
|
+
if (this._typeaheadTimeout) {
|
|
91934
|
+
clearTimeout(this._typeaheadTimeout);
|
|
91935
|
+
}
|
|
91936
|
+
this._typeaheadTimeout = setTimeout(() => {
|
|
91937
|
+
this._clearTypeaheadBuffer();
|
|
91938
|
+
}, this.typeaheadTimeoutMs);
|
|
91857
91939
|
|
|
91858
|
-
|
|
91859
|
-
if (letterOptions.length) {
|
|
91940
|
+
this.typeaheadBuffer += key;
|
|
91860
91941
|
|
|
91861
|
-
|
|
91862
|
-
this.dropdown.show();
|
|
91942
|
+
const isRepeatedChar = this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
|
|
91863
91943
|
|
|
91864
|
-
|
|
91865
|
-
|
|
91944
|
+
let match = null;
|
|
91945
|
+
if (isRepeatedChar) {
|
|
91946
|
+
const matches = options.filter((option) => this._getOptionDisplayText(option).startsWith(key));
|
|
91947
|
+
if (matches.length) {
|
|
91948
|
+
const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
|
|
91949
|
+
match = matches[cycleIndex];
|
|
91950
|
+
}
|
|
91951
|
+
} else {
|
|
91952
|
+
match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
|
|
91953
|
+
}
|
|
91866
91954
|
|
|
91867
|
-
|
|
91868
|
-
|
|
91869
|
-
|
|
91955
|
+
if (match) {
|
|
91956
|
+
if (!this.dropdown.isPopoverVisible) {
|
|
91957
|
+
this.dropdown.show();
|
|
91958
|
+
}
|
|
91959
|
+
this.menu.updateActiveOption(match);
|
|
91870
91960
|
}
|
|
91871
91961
|
}
|
|
91872
91962
|
|
|
@@ -91980,6 +92070,11 @@ class AuroSelect extends AuroElement$1 {
|
|
|
91980
92070
|
}
|
|
91981
92071
|
}
|
|
91982
92072
|
|
|
92073
|
+
disconnectedCallback() {
|
|
92074
|
+
super.disconnectedCallback();
|
|
92075
|
+
this._clearTypeaheadBuffer();
|
|
92076
|
+
}
|
|
92077
|
+
|
|
91983
92078
|
// lifecycle runs only after the element's DOM has been updated the first time
|
|
91984
92079
|
firstUpdated() {
|
|
91985
92080
|
// Add the tag name as an attribute if it is different than the component name
|