@aurodesignsystem-dev/auro-formkit 0.0.0-pr1506.0 → 0.0.0-pr1507.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 +141 -122
- package/components/combobox/demo/getting-started.min.js +141 -122
- package/components/combobox/demo/index.min.js +141 -122
- package/components/combobox/dist/auro-combobox.d.ts +0 -9
- package/components/combobox/dist/index.js +139 -120
- package/components/combobox/dist/registered.js +139 -120
- 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/customize.min.js +28 -35
- package/components/datepicker/demo/index.min.js +28 -35
- package/components/datepicker/dist/index.js +28 -35
- package/components/datepicker/dist/registered.js +28 -35
- 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 +201 -195
- package/components/form/demo/getting-started.min.js +201 -195
- package/components/form/demo/index.min.js +201 -195
- package/components/form/demo/registerDemoDeps.min.js +201 -195
- package/components/input/demo/customize.min.js +26 -32
- package/components/input/demo/getting-started.min.js +26 -32
- package/components/input/demo/index.min.js +26 -32
- package/components/input/dist/index.js +26 -32
- package/components/input/dist/registered.js +26 -32
- package/components/menu/demo/index.min.js +2 -2
- package/components/menu/dist/index.js +2 -2
- package/components/menu/dist/registered.js +2 -2
- 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/customize.min.js +4 -4
- package/components/select/demo/getting-started.min.js +4 -4
- package/components/select/demo/index.min.js +4 -4
- package/components/select/dist/index.js +2 -2
- package/components/select/dist/registered.js +2 -2
- package/custom-elements.json +0 -20
- package/package.json +1 -1
|
@@ -767,8 +767,6 @@ function navigateArrow(component, direction, options = {}) {
|
|
|
767
767
|
}
|
|
768
768
|
}
|
|
769
769
|
|
|
770
|
-
/* eslint-disable no-underscore-dangle */
|
|
771
|
-
|
|
772
770
|
/**
|
|
773
771
|
* Returns the clear button element from the active input's shadow
|
|
774
772
|
* DOM, if available.
|
|
@@ -804,9 +802,11 @@ function isClearBtnFocused(ctx, clearBtn = getClearBtn(ctx)) {
|
|
|
804
802
|
* @param {Object} menu - The menu component.
|
|
805
803
|
*/
|
|
806
804
|
function reconcileMenuIndex(menu) {
|
|
805
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
807
806
|
if (menu._index < 0 && menu.optionActive && menu.items) {
|
|
808
807
|
const idx = menu.items.indexOf(menu.optionActive);
|
|
809
808
|
if (idx >= 0) {
|
|
809
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
810
810
|
menu._index = idx;
|
|
811
811
|
}
|
|
812
812
|
}
|
|
@@ -4806,7 +4806,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
|
|
|
4806
4806
|
}
|
|
4807
4807
|
};
|
|
4808
4808
|
|
|
4809
|
-
var formkitVersion$2 = '
|
|
4809
|
+
var formkitVersion$2 = '202606192121';
|
|
4810
4810
|
|
|
4811
4811
|
let AuroElement$2 = class AuroElement extends LitElement {
|
|
4812
4812
|
static get properties() {
|
|
@@ -16520,7 +16520,6 @@ class AuroInputUtilities {
|
|
|
16520
16520
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
16521
16521
|
|
|
16522
16522
|
if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
|
|
16523
|
-
console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
|
|
16524
16523
|
return undefined;
|
|
16525
16524
|
}
|
|
16526
16525
|
|
|
@@ -17331,6 +17330,10 @@ class BaseInput extends AuroElement$1 {
|
|
|
17331
17330
|
this.wrapperElement.addEventListener('click', this.handleClick);
|
|
17332
17331
|
}
|
|
17333
17332
|
|
|
17333
|
+
// add attribute for query selectors when auro-input is registered under a custom name
|
|
17334
|
+
if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
|
|
17335
|
+
this.setAttribute('auro-input', '');
|
|
17336
|
+
}
|
|
17334
17337
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
17335
17338
|
|
|
17336
17339
|
// use validity message override if declared when initializing the component
|
|
@@ -17501,14 +17504,14 @@ class BaseInput extends AuroElement$1 {
|
|
|
17501
17504
|
|
|
17502
17505
|
if (formattedValue !== this.inputElement.value) {
|
|
17503
17506
|
this.skipNextProgrammaticInputEvent = true;
|
|
17504
|
-
if (this.maskInstance && this.type
|
|
17507
|
+
if (this.maskInstance && this.type === 'credit-card') {
|
|
17505
17508
|
// Route through the mask so its _value and el.value stay in lock-step
|
|
17506
17509
|
// (set value calls updateControl which writes el.value = displayValue).
|
|
17507
17510
|
// Writing el.value directly leaves the mask thinking displayValue is
|
|
17508
|
-
// stale; _saveSelection on the next focus/click then warns.
|
|
17509
|
-
//
|
|
17510
|
-
//
|
|
17511
|
-
// flip validity from patternMismatch to tooShort.
|
|
17511
|
+
// stale; _saveSelection on the next focus/click then warns. Scoped to
|
|
17512
|
+
// credit-card so date's own formattedValue (raw ISO when calendar-invalid)
|
|
17513
|
+
// isn't re-masked through the mm/dd/yyyy mask, which would truncate it
|
|
17514
|
+
// and flip validity from patternMismatch to tooShort.
|
|
17512
17515
|
this.maskInstance.value = formattedValue || '';
|
|
17513
17516
|
} else if (formattedValue) {
|
|
17514
17517
|
this.inputElement.value = formattedValue;
|
|
@@ -17619,33 +17622,31 @@ class BaseInput extends AuroElement$1 {
|
|
|
17619
17622
|
* @returns {void}
|
|
17620
17623
|
*/
|
|
17621
17624
|
configureAutoFormatting() {
|
|
17622
|
-
//
|
|
17623
|
-
//
|
|
17624
|
-
//
|
|
17625
|
-
//
|
|
17625
|
+
// Re-entrancy guard. The patched-setter's synthetic input event (suppressed
|
|
17626
|
+
// by _configuringMask above) could otherwise trigger handleInput →
|
|
17627
|
+
// processCreditCard → configureAutoFormatting before the outer call's
|
|
17628
|
+
// set value has finished its alignCursor pass.
|
|
17626
17629
|
if (this._configuringMask) return;
|
|
17627
17630
|
this._configuringMask = true;
|
|
17628
17631
|
try {
|
|
17629
|
-
// Destroy any prior mask so IMask can attach fresh under the new format.
|
|
17630
17632
|
if (this.maskInstance) {
|
|
17631
17633
|
this.maskInstance.destroy();
|
|
17632
17634
|
}
|
|
17633
17635
|
|
|
17636
|
+
// Pass new format to util
|
|
17634
17637
|
this.util.updateFormat(this.format);
|
|
17635
17638
|
|
|
17636
17639
|
const maskOptions = this.util.getMaskOptions(this.type, this.format);
|
|
17637
17640
|
|
|
17638
17641
|
if (this.inputElement && maskOptions.mask) {
|
|
17639
|
-
// Capture the current display so it can be re-applied after IMask
|
|
17640
|
-
// attaches. The restore at the bottom goes through maskInstance.value
|
|
17641
|
-
// (not inputElement.value directly) so the mask's internal state and
|
|
17642
|
-
// the input's displayed text stay in lock-step.
|
|
17643
|
-
let existingValue = this.inputElement.value;
|
|
17644
17642
|
|
|
17645
|
-
//
|
|
17646
|
-
//
|
|
17647
|
-
//
|
|
17648
|
-
//
|
|
17643
|
+
// Stash and clear any existing value before IMask init.
|
|
17644
|
+
// IMask's constructor processes the current input value which requires
|
|
17645
|
+
// selection state — clearing first avoids that scenario entirely.
|
|
17646
|
+
// When the format changes (e.g. locale switch) and we have a valid ISO
|
|
17647
|
+
// model value, compute the display string for the NEW format instead of
|
|
17648
|
+
// re-using the old display string, which may be invalid in the new mask.
|
|
17649
|
+
let existingValue = this.inputElement.value;
|
|
17649
17650
|
if (
|
|
17650
17651
|
this.util.isFullDateFormat(this.type, this.format) &&
|
|
17651
17652
|
this.value &&
|
|
@@ -17657,18 +17658,15 @@ class BaseInput extends AuroElement$1 {
|
|
|
17657
17658
|
existingValue = maskOptions.format(this.valueObject);
|
|
17658
17659
|
}
|
|
17659
17660
|
|
|
17660
|
-
// Clear before IMask attaches so the constructor seeds an empty
|
|
17661
|
-
// internal value. Otherwise IMask reads the stale unmasked string
|
|
17662
|
-
// and emits a spurious 'accept' before the restore below runs.
|
|
17663
17661
|
this.skipNextProgrammaticInputEvent = true;
|
|
17664
17662
|
this.inputElement.value = '';
|
|
17665
17663
|
|
|
17666
17664
|
this.maskInstance = IMask(this.inputElement, maskOptions);
|
|
17667
17665
|
|
|
17668
|
-
// Mask fires 'accept' on every value change, including the restore
|
|
17669
|
-
// step below. Skip events fired during configureAutoFormatting so
|
|
17670
|
-
// we don't overwrite a value the parent just pushed.
|
|
17671
17666
|
this.maskInstance.on('accept', () => {
|
|
17667
|
+
// Suppress propagation during configureAutoFormatting's own value-restoration
|
|
17668
|
+
// (line below) — the mask emits 'accept' on every value-set, including ours,
|
|
17669
|
+
// and we don't want to overwrite a value the parent just pushed.
|
|
17672
17670
|
if (this._configuringMask) return;
|
|
17673
17671
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
17674
17672
|
if (this.type === "date") {
|
|
@@ -17676,8 +17674,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17676
17674
|
}
|
|
17677
17675
|
});
|
|
17678
17676
|
|
|
17679
|
-
// Mask fires 'complete' on the restore step below for any value that
|
|
17680
|
-
// happens to be a complete match. Same setup-suppression as 'accept'.
|
|
17681
17677
|
this.maskInstance.on('complete', () => {
|
|
17682
17678
|
if (this._configuringMask) return;
|
|
17683
17679
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
@@ -17686,9 +17682,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17686
17682
|
}
|
|
17687
17683
|
});
|
|
17688
17684
|
|
|
17689
|
-
//
|
|
17690
|
-
// the mask reformats it under the new rules and keeps its internal
|
|
17691
|
-
// _value aligned with the input's displayed text.
|
|
17685
|
+
// Restore the stashed value through IMask so it's properly masked
|
|
17692
17686
|
if (existingValue) {
|
|
17693
17687
|
this.maskInstance.value = existingValue;
|
|
17694
17688
|
}
|
|
@@ -18394,7 +18388,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
18394
18388
|
}
|
|
18395
18389
|
};
|
|
18396
18390
|
|
|
18397
|
-
var formkitVersion$1 = '
|
|
18391
|
+
var formkitVersion$1 = '202606192121';
|
|
18398
18392
|
|
|
18399
18393
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
18400
18394
|
// See LICENSE in the project root for license information.
|
|
@@ -19515,7 +19509,7 @@ class AuroBibtemplate extends LitElement {
|
|
|
19515
19509
|
}
|
|
19516
19510
|
}
|
|
19517
19511
|
|
|
19518
|
-
var formkitVersion = '
|
|
19512
|
+
var formkitVersion = '202606192121';
|
|
19519
19513
|
|
|
19520
19514
|
var styleCss$1 = css`.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}`;
|
|
19521
19515
|
|
|
@@ -20502,7 +20496,7 @@ class AuroCombobox extends AuroElement {
|
|
|
20502
20496
|
if (this.menu) {
|
|
20503
20497
|
this.menu.matchWord = normalizeFilterValue(this.input.value);
|
|
20504
20498
|
}
|
|
20505
|
-
const label = getOptionLabel(this.menu.optionSelected);
|
|
20499
|
+
const label = getOptionLabel(this.menu.optionSelected) || this.menu.currentLabel;
|
|
20506
20500
|
this.updateTriggerTextDisplay(label || this.value);
|
|
20507
20501
|
}
|
|
20508
20502
|
|
|
@@ -20516,9 +20510,40 @@ class AuroCombobox extends AuroElement {
|
|
|
20516
20510
|
// in suggestion mode, do not override input value if no selection has been made and the input currently has focus
|
|
20517
20511
|
const isInputFocusedWithNoSelection = !this.menu.value && (this.input.matches(':focus-within') || (this.inputInBib && this.inputInBib.matches(':focus-within')));
|
|
20518
20512
|
|
|
20519
|
-
|
|
20520
|
-
|
|
20521
|
-
|
|
20513
|
+
if (!this.persistInput && !(this.behavior === 'suggestion' && isInputFocusedWithNoSelection)) {
|
|
20514
|
+
const nextValue = label || this.value;
|
|
20515
|
+
// Only set the flag when there's an actual write to suppress —
|
|
20516
|
+
// syncValuesAndStates re-enters here during typing when both inputs
|
|
20517
|
+
// already match, and a no-op flag flip would make the bib branch's
|
|
20518
|
+
// bail eat legitimate user-input events.
|
|
20519
|
+
const triggerNeedsSync = this.input.value !== nextValue;
|
|
20520
|
+
const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
|
|
20521
|
+
if (triggerNeedsSync || bibNeedsSync) {
|
|
20522
|
+
this._syncingDisplayValue = true;
|
|
20523
|
+
if (triggerNeedsSync) {
|
|
20524
|
+
this.input.value = nextValue;
|
|
20525
|
+
}
|
|
20526
|
+
if (bibNeedsSync) {
|
|
20527
|
+
this.inputInBib.value = nextValue;
|
|
20528
|
+
}
|
|
20529
|
+
const pending = [];
|
|
20530
|
+
if (triggerNeedsSync) {
|
|
20531
|
+
pending.push(this.input.updateComplete);
|
|
20532
|
+
}
|
|
20533
|
+
if (bibNeedsSync) {
|
|
20534
|
+
pending.push(this.inputInBib.updateComplete);
|
|
20535
|
+
}
|
|
20536
|
+
Promise.all(pending).then(() => {
|
|
20537
|
+
// imask reasserts otherwise, and handleBlur reverts to its stale value.
|
|
20538
|
+
if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
|
|
20539
|
+
this.input.maskInstance.updateValue();
|
|
20540
|
+
}
|
|
20541
|
+
if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
|
|
20542
|
+
this.inputInBib.maskInstance.updateValue();
|
|
20543
|
+
}
|
|
20544
|
+
this._syncingDisplayValue = false;
|
|
20545
|
+
});
|
|
20546
|
+
}
|
|
20522
20547
|
}
|
|
20523
20548
|
|
|
20524
20549
|
// update the displayValue in the trigger if displayValue slot content is present
|
|
@@ -20546,52 +20571,6 @@ class AuroCombobox extends AuroElement {
|
|
|
20546
20571
|
this.requestUpdate();
|
|
20547
20572
|
}
|
|
20548
20573
|
|
|
20549
|
-
/**
|
|
20550
|
-
* Writes nextValue to the trigger input and the bib input when their current
|
|
20551
|
-
* value differs, then re-asserts imask after Lit's update flushes.
|
|
20552
|
-
* @param {string} nextValue - The value to write to both inputs.
|
|
20553
|
-
* @returns {Promise<void> | null} Promise that resolves after the inputs flush,
|
|
20554
|
-
* or null when no sync was needed (so callers can skip post-flush work).
|
|
20555
|
-
* @private
|
|
20556
|
-
*/
|
|
20557
|
-
syncInputValuesAcrossTriggerAndBib(nextValue) {
|
|
20558
|
-
// Only set the flag when there's an actual write to suppress —
|
|
20559
|
-
// syncValuesAndStates re-enters here during typing when both inputs
|
|
20560
|
-
// already match, and a no-op flag flip would make the bib branch's
|
|
20561
|
-
// bail eat legitimate user-input events.
|
|
20562
|
-
const triggerNeedsSync = this.input.value !== nextValue;
|
|
20563
|
-
const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
|
|
20564
|
-
if (!triggerNeedsSync && !bibNeedsSync) {
|
|
20565
|
-
return null;
|
|
20566
|
-
}
|
|
20567
|
-
|
|
20568
|
-
this._syncingDisplayValue = true;
|
|
20569
|
-
if (triggerNeedsSync) {
|
|
20570
|
-
this.input.value = nextValue;
|
|
20571
|
-
}
|
|
20572
|
-
if (bibNeedsSync) {
|
|
20573
|
-
this.inputInBib.value = nextValue;
|
|
20574
|
-
}
|
|
20575
|
-
|
|
20576
|
-
const pending = [];
|
|
20577
|
-
if (triggerNeedsSync) {
|
|
20578
|
-
pending.push(this.input.updateComplete);
|
|
20579
|
-
}
|
|
20580
|
-
if (bibNeedsSync) {
|
|
20581
|
-
pending.push(this.inputInBib.updateComplete);
|
|
20582
|
-
}
|
|
20583
|
-
return Promise.all(pending).then(() => {
|
|
20584
|
-
// imask reasserts otherwise, and handleBlur reverts to its stale value.
|
|
20585
|
-
if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
|
|
20586
|
-
this.input.maskInstance.updateValue();
|
|
20587
|
-
}
|
|
20588
|
-
if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
|
|
20589
|
-
this.inputInBib.maskInstance.updateValue();
|
|
20590
|
-
}
|
|
20591
|
-
this._syncingDisplayValue = false;
|
|
20592
|
-
});
|
|
20593
|
-
}
|
|
20594
|
-
|
|
20595
20574
|
/**
|
|
20596
20575
|
* Processes hidden state of all menu options and determines if there are any available options not hidden.
|
|
20597
20576
|
* @private
|
|
@@ -20619,9 +20598,9 @@ class AuroCombobox extends AuroElement {
|
|
|
20619
20598
|
this.syncValuesAndStates();
|
|
20620
20599
|
}
|
|
20621
20600
|
|
|
20622
|
-
// Re-activate when optionActive is
|
|
20623
|
-
//
|
|
20624
|
-
//
|
|
20601
|
+
// Re-activate when optionActive is no longer visible, or when _index has
|
|
20602
|
+
// been reset (e.g. by clearSelection in an async update) so that
|
|
20603
|
+
// makeSelection() can find the correct option.
|
|
20625
20604
|
if (!this.availableOptions.includes(this.menu.optionActive) || this.menu._index < 0) {
|
|
20626
20605
|
this.activateFirstEnabledAvailableOption();
|
|
20627
20606
|
}
|
|
@@ -20755,25 +20734,28 @@ class AuroCombobox extends AuroElement {
|
|
|
20755
20734
|
|
|
20756
20735
|
guardTouchPassthrough(this.menu);
|
|
20757
20736
|
|
|
20758
|
-
// showModal()
|
|
20759
|
-
//
|
|
20760
|
-
//
|
|
20761
|
-
// validation guard.
|
|
20737
|
+
// The dialog's showModal() steals focus from the trigger.
|
|
20738
|
+
// A single rAF is enough for the dialog DOM to be painted and
|
|
20739
|
+
// focusable, then doubleRaf finalizes the transition.
|
|
20762
20740
|
requestAnimationFrame(() => {
|
|
20763
20741
|
this.setInputFocus();
|
|
20764
20742
|
});
|
|
20765
|
-
|
|
20766
|
-
|
|
20767
|
-
|
|
20768
|
-
// The shared doubleRaf below parks the caret back at end-of-text
|
|
20769
|
-
// after the dropdown layout settles.
|
|
20770
|
-
|
|
20771
|
-
doubleRaf(() => {
|
|
20772
|
-
this.setInputFocus();
|
|
20773
|
-
if (this._inFullscreenTransition) {
|
|
20743
|
+
|
|
20744
|
+
doubleRaf(() => {
|
|
20745
|
+
this.setInputFocus();
|
|
20774
20746
|
this._inFullscreenTransition = false;
|
|
20775
|
-
}
|
|
20776
|
-
}
|
|
20747
|
+
});
|
|
20748
|
+
} else {
|
|
20749
|
+
// Desktop popover-open: restore the trigger caret to end-of-text.
|
|
20750
|
+
// Clicking the trigger lands on auro-input's floating <label for="…">
|
|
20751
|
+
// overlay; Chrome resets the native input's selection to [0, 0] on
|
|
20752
|
+
// label-focus before any JS runs. setInputFocus()'s non-fullscreen
|
|
20753
|
+
// branch parks the caret at end. doubleRaf lets the dropdown layout
|
|
20754
|
+
// settle first, matching the fullscreen branch timing.
|
|
20755
|
+
doubleRaf(() => {
|
|
20756
|
+
this.setInputFocus();
|
|
20757
|
+
});
|
|
20758
|
+
}
|
|
20777
20759
|
}
|
|
20778
20760
|
});
|
|
20779
20761
|
|
|
@@ -20880,9 +20862,9 @@ class AuroCombobox extends AuroElement {
|
|
|
20880
20862
|
} else {
|
|
20881
20863
|
// Safety net for the strategy-change setTimeout: a viewport-crossing
|
|
20882
20864
|
// fullscreen→floating switch can close the dialog and leave focus on
|
|
20883
|
-
// body. Every other
|
|
20884
|
-
//
|
|
20885
|
-
//
|
|
20865
|
+
// body. Every other Branch 2 callsite already has focus on the input
|
|
20866
|
+
// via the focusin → this.focus() redirect (L1448-1452), so this is a
|
|
20867
|
+
// no-op in the common case.
|
|
20886
20868
|
if (!this.input.componentHasFocus) {
|
|
20887
20869
|
this.input.focus();
|
|
20888
20870
|
}
|
|
@@ -21001,7 +20983,7 @@ class AuroCombobox extends AuroElement {
|
|
|
21001
20983
|
if (this.menu.optionSelected) {
|
|
21002
20984
|
const selected = this.menu.optionSelected;
|
|
21003
20985
|
|
|
21004
|
-
if (this.optionSelected !== selected) {
|
|
20986
|
+
if (!this.optionSelected || this.optionSelected !== selected) {
|
|
21005
20987
|
this.optionSelected = selected;
|
|
21006
20988
|
}
|
|
21007
20989
|
|
|
@@ -21014,7 +20996,7 @@ class AuroCombobox extends AuroElement {
|
|
|
21014
20996
|
}
|
|
21015
20997
|
|
|
21016
20998
|
// Update display
|
|
21017
|
-
this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected));
|
|
20999
|
+
this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected) || this.menu.value);
|
|
21018
21000
|
|
|
21019
21001
|
// Update match word for filtering
|
|
21020
21002
|
const trimmedInput = normalizeFilterValue(this.input.value);
|
|
@@ -21396,7 +21378,15 @@ class AuroCombobox extends AuroElement {
|
|
|
21396
21378
|
this.menu.value = undefined;
|
|
21397
21379
|
this.validation.reset(this);
|
|
21398
21380
|
this.touched = false;
|
|
21381
|
+
// Force validity back to the cleared state. validation.reset() calls
|
|
21382
|
+
// validate() at the end, and (post-credit-card-fix) the trigger input's
|
|
21383
|
+
// residual validity may still be copied into the combobox by the
|
|
21384
|
+
// auroInputElements loop. Explicitly clear here so reset() actually
|
|
21385
|
+
// leaves the component in a "no validity" state.
|
|
21399
21386
|
this.validity = undefined;
|
|
21387
|
+
this.errorMessage = '';
|
|
21388
|
+
this.input.validity = undefined;
|
|
21389
|
+
this.input.errorMessage = '';
|
|
21400
21390
|
}
|
|
21401
21391
|
|
|
21402
21392
|
/**
|
|
@@ -21449,23 +21439,52 @@ class AuroCombobox extends AuroElement {
|
|
|
21449
21439
|
this.input.value = this.value;
|
|
21450
21440
|
}
|
|
21451
21441
|
|
|
21452
|
-
// Sync menu.value only when an option actually matches
|
|
21453
|
-
// mode needs setMenuValue to dispatch auroMenu-selectValueFailure (the
|
|
21454
|
-
// listener at line 1206 clears combobox.value, mirroring select's
|
|
21455
|
-
// pattern). Otherwise sync the input display for freeform values.
|
|
21442
|
+
// Sync menu.value only when an option actually matches; otherwise clear it.
|
|
21456
21443
|
if (this.menu.options && this.menu.options.length > 0) {
|
|
21457
|
-
if (this.menu.options.some((opt) => opt.value === this.value)
|
|
21444
|
+
if (this.menu.options.some((opt) => opt.value === this.value)) {
|
|
21445
|
+
this.setMenuValue(this.value);
|
|
21446
|
+
} else if (this.behavior === 'filter') {
|
|
21447
|
+
// In filter mode, freeform values aren't allowed. Push the unmatched
|
|
21448
|
+
// value through setMenuValue so menu dispatches auroMenu-selectValueFailure
|
|
21449
|
+
// and the listener at line 1206 clears combobox.value (mirrors select's
|
|
21450
|
+
// pattern). Bypassing setMenuValue here would skip the failure cascade.
|
|
21458
21451
|
this.setMenuValue(this.value);
|
|
21459
21452
|
} else {
|
|
21460
21453
|
if (this.menu.value) {
|
|
21461
21454
|
this.menu.value = undefined;
|
|
21462
21455
|
}
|
|
21463
|
-
//
|
|
21464
|
-
//
|
|
21465
|
-
//
|
|
21466
|
-
|
|
21467
|
-
|
|
21468
|
-
|
|
21456
|
+
// Sync the display for programmatic freeform value changes (e.g. the
|
|
21457
|
+
// swap-values pattern). Guard with _syncingDisplayValue so that the
|
|
21458
|
+
// re-entrant input event from base-input.notifyValueChanged() is
|
|
21459
|
+
// ignored by handleInputValueChange. Skip the sync when input already
|
|
21460
|
+
// matches to avoid spurious events during the normal typing path.
|
|
21461
|
+
const nextValue = this.value || '';
|
|
21462
|
+
const triggerNeedsSync = this.input.value !== nextValue;
|
|
21463
|
+
const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
|
|
21464
|
+
if (triggerNeedsSync || bibNeedsSync) {
|
|
21465
|
+
this._syncingDisplayValue = true;
|
|
21466
|
+
if (triggerNeedsSync) {
|
|
21467
|
+
this.input.value = nextValue;
|
|
21468
|
+
}
|
|
21469
|
+
if (bibNeedsSync) {
|
|
21470
|
+
this.inputInBib.value = nextValue;
|
|
21471
|
+
}
|
|
21472
|
+
const pending = [];
|
|
21473
|
+
if (triggerNeedsSync) {
|
|
21474
|
+
pending.push(this.input.updateComplete);
|
|
21475
|
+
}
|
|
21476
|
+
if (bibNeedsSync) {
|
|
21477
|
+
pending.push(this.inputInBib.updateComplete);
|
|
21478
|
+
}
|
|
21479
|
+
Promise.all(pending).then(() => {
|
|
21480
|
+
if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
|
|
21481
|
+
this.input.maskInstance.updateValue();
|
|
21482
|
+
}
|
|
21483
|
+
if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
|
|
21484
|
+
this.inputInBib.maskInstance.updateValue();
|
|
21485
|
+
}
|
|
21486
|
+
this._syncingDisplayValue = false;
|
|
21487
|
+
// handleInputValueChange bailed on the flag — refresh the filter.
|
|
21469
21488
|
this._programmaticFilterRefresh = true;
|
|
21470
21489
|
this.handleMenuOptions();
|
|
21471
21490
|
setTimeout(() => {
|
|
@@ -1099,7 +1099,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
|
|
|
1099
1099
|
}
|
|
1100
1100
|
};
|
|
1101
1101
|
|
|
1102
|
-
var formkitVersion$1 = '
|
|
1102
|
+
var formkitVersion$1 = '202606192121';
|
|
1103
1103
|
|
|
1104
1104
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1105
1105
|
// See LICENSE in the project root for license information.
|
|
@@ -5445,7 +5445,7 @@ class AuroHelpText extends i$2 {
|
|
|
5445
5445
|
}
|
|
5446
5446
|
}
|
|
5447
5447
|
|
|
5448
|
-
var formkitVersion = '
|
|
5448
|
+
var formkitVersion = '202606192121';
|
|
5449
5449
|
|
|
5450
5450
|
let AuroElement$1 = class AuroElement extends i$2 {
|
|
5451
5451
|
static get properties() {
|
|
@@ -1099,7 +1099,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
|
|
|
1099
1099
|
}
|
|
1100
1100
|
};
|
|
1101
1101
|
|
|
1102
|
-
var formkitVersion$1 = '
|
|
1102
|
+
var formkitVersion$1 = '202606192121';
|
|
1103
1103
|
|
|
1104
1104
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1105
1105
|
// See LICENSE in the project root for license information.
|
|
@@ -5445,7 +5445,7 @@ class AuroHelpText extends i$2 {
|
|
|
5445
5445
|
}
|
|
5446
5446
|
}
|
|
5447
5447
|
|
|
5448
|
-
var formkitVersion = '
|
|
5448
|
+
var formkitVersion = '202606192121';
|
|
5449
5449
|
|
|
5450
5450
|
let AuroElement$1 = class AuroElement extends i$2 {
|
|
5451
5451
|
static get properties() {
|
|
@@ -1049,7 +1049,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
1049
1049
|
}
|
|
1050
1050
|
};
|
|
1051
1051
|
|
|
1052
|
-
var formkitVersion$1 = '
|
|
1052
|
+
var formkitVersion$1 = '202606192121';
|
|
1053
1053
|
|
|
1054
1054
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1055
1055
|
// See LICENSE in the project root for license information.
|
|
@@ -5377,7 +5377,7 @@ class AuroHelpText extends LitElement {
|
|
|
5377
5377
|
}
|
|
5378
5378
|
}
|
|
5379
5379
|
|
|
5380
|
-
var formkitVersion = '
|
|
5380
|
+
var formkitVersion = '202606192121';
|
|
5381
5381
|
|
|
5382
5382
|
let AuroElement$1 = class AuroElement extends LitElement {
|
|
5383
5383
|
static get properties() {
|
|
@@ -1049,7 +1049,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
1049
1049
|
}
|
|
1050
1050
|
};
|
|
1051
1051
|
|
|
1052
|
-
var formkitVersion$1 = '
|
|
1052
|
+
var formkitVersion$1 = '202606192121';
|
|
1053
1053
|
|
|
1054
1054
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1055
1055
|
// See LICENSE in the project root for license information.
|
|
@@ -5377,7 +5377,7 @@ class AuroHelpText extends LitElement {
|
|
|
5377
5377
|
}
|
|
5378
5378
|
}
|
|
5379
5379
|
|
|
5380
|
-
var formkitVersion = '
|
|
5380
|
+
var formkitVersion = '202606192121';
|
|
5381
5381
|
|
|
5382
5382
|
let AuroElement$1 = class AuroElement extends LitElement {
|
|
5383
5383
|
static get properties() {
|