@aurodesignsystem-dev/auro-formkit 0.0.0-pr1524.1 → 0.0.0-pr1530.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +24 -79
  7. package/components/combobox/demo/getting-started.min.js +24 -79
  8. package/components/combobox/demo/index.min.js +24 -79
  9. package/components/combobox/dist/auro-combobox.d.ts +0 -10
  10. package/components/combobox/dist/index.js +24 -79
  11. package/components/combobox/dist/registered.js +24 -79
  12. package/components/counter/demo/customize.min.js +2 -2
  13. package/components/counter/demo/index.min.js +2 -2
  14. package/components/counter/dist/index.js +2 -2
  15. package/components/counter/dist/registered.js +2 -2
  16. package/components/datepicker/demo/accessibility.md +13 -4
  17. package/components/datepicker/demo/api.md +1 -1
  18. package/components/datepicker/demo/customize.min.js +192 -44
  19. package/components/datepicker/demo/index.min.js +192 -44
  20. package/components/datepicker/demo/voiceover.md +1 -1
  21. package/components/datepicker/dist/auro-calendar-cell.d.ts +11 -0
  22. package/components/datepicker/dist/auro-calendar.d.ts +26 -2
  23. package/components/datepicker/dist/auro-datepicker.d.ts +9 -1
  24. package/components/datepicker/dist/index.js +192 -44
  25. package/components/datepicker/dist/registered.js +192 -44
  26. package/components/dropdown/demo/customize.min.js +1 -1
  27. package/components/dropdown/demo/getting-started.min.js +1 -1
  28. package/components/dropdown/demo/index.min.js +1 -1
  29. package/components/dropdown/dist/index.js +1 -1
  30. package/components/dropdown/dist/registered.js +1 -1
  31. package/components/form/demo/customize.min.js +254 -205
  32. package/components/form/demo/getting-started.min.js +254 -205
  33. package/components/form/demo/index.min.js +254 -205
  34. package/components/form/demo/registerDemoDeps.min.js +254 -205
  35. package/components/input/demo/customize.min.js +19 -17
  36. package/components/input/demo/getting-started.min.js +19 -17
  37. package/components/input/demo/index.min.js +19 -17
  38. package/components/input/dist/index.js +19 -17
  39. package/components/input/dist/registered.js +19 -17
  40. package/components/radio/demo/customize.min.js +1 -1
  41. package/components/radio/demo/getting-started.min.js +1 -1
  42. package/components/radio/demo/index.min.js +1 -1
  43. package/components/radio/dist/index.js +1 -1
  44. package/components/radio/dist/registered.js +1 -1
  45. package/components/select/demo/customize.min.js +16 -62
  46. package/components/select/demo/getting-started.min.js +16 -62
  47. package/components/select/demo/index.min.js +16 -62
  48. package/components/select/dist/auro-select.d.ts +0 -6
  49. package/components/select/dist/index.js +16 -62
  50. package/components/select/dist/registered.js +16 -62
  51. package/custom-elements.json +38 -22
  52. package/package.json +1 -1
@@ -1275,7 +1275,7 @@ class AuroHelpText extends i$2 {
1275
1275
  }
1276
1276
  }
1277
1277
 
1278
- var formkitVersion = '202607022214';
1278
+ var formkitVersion = '202607022134';
1279
1279
 
1280
1280
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1281
1281
  // See LICENSE in the project root for license information.
@@ -1275,7 +1275,7 @@ class AuroHelpText extends i$2 {
1275
1275
  }
1276
1276
  }
1277
1277
 
1278
- var formkitVersion = '202607022214';
1278
+ var formkitVersion = '202607022134';
1279
1279
 
1280
1280
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1281
1281
  // See LICENSE in the project root for license information.
@@ -1275,7 +1275,7 @@ class AuroHelpText extends i$2 {
1275
1275
  }
1276
1276
  }
1277
1277
 
1278
- var formkitVersion = '202607022214';
1278
+ var formkitVersion = '202607022134';
1279
1279
 
1280
1280
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1281
1281
  // See LICENSE in the project root for license information.
@@ -1228,7 +1228,7 @@ class AuroHelpText extends LitElement {
1228
1228
  }
1229
1229
  }
1230
1230
 
1231
- var formkitVersion = '202607022214';
1231
+ var formkitVersion = '202607022134';
1232
1232
 
1233
1233
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1234
1234
  // See LICENSE in the project root for license information.
@@ -1228,7 +1228,7 @@ class AuroHelpText extends LitElement {
1228
1228
  }
1229
1229
  }
1230
1230
 
1231
- var formkitVersion = '202607022214';
1231
+ var formkitVersion = '202607022134';
1232
1232
 
1233
1233
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1234
1234
  // See LICENSE in the project root for license information.
@@ -4879,7 +4879,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4879
4879
  }
4880
4880
  };
4881
4881
 
4882
- var formkitVersion$2 = '202607022214';
4882
+ var formkitVersion$2 = '202607022134';
4883
4883
 
4884
4884
  let AuroElement$2 = class AuroElement extends i$3 {
4885
4885
  static get properties() {
@@ -17768,17 +17768,14 @@ class BaseInput extends AuroElement$1 {
17768
17768
  * @returns {void}
17769
17769
  */
17770
17770
  notifyValueChanged() {
17771
- // This echoes Lit's reactive value update (and handleClickClear's
17772
- // programmatic clear) — it is NOT a fresh user-input event. Mark it
17773
- // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
17774
- // it from genuine user typing and skip clobbering their own
17775
- // programmatic state during init-time renders.
17776
- const inputEvent = new Event('input', {
17771
+ let inputEvent = null;
17772
+
17773
+ inputEvent = new Event('input', {
17777
17774
  bubbles: true,
17778
17775
  composed: true,
17779
17776
  });
17780
- inputEvent.isProgrammatic = true;
17781
17777
 
17778
+ // Dispatched event to alert outside shadow DOM context of event firing.
17782
17779
  this.dispatchEvent(inputEvent);
17783
17780
  }
17784
17781
 
@@ -18491,7 +18488,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18491
18488
  }
18492
18489
  };
18493
18490
 
18494
- var formkitVersion$1 = '202607022214';
18491
+ var formkitVersion$1 = '202607022134';
18495
18492
 
18496
18493
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18497
18494
  // See LICENSE in the project root for license information.
@@ -18777,15 +18774,20 @@ class AuroInput extends BaseInput {
18777
18774
  * @returns {void}
18778
18775
  */
18779
18776
  checkDisplayValueSlotChange() {
18780
- // flatten:true resolves through auro-combobox's forwarding slot
18781
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
18782
- // directly to auro-input's light DOM alongside the forwarder still
18783
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
18784
- // discarded any siblings past the forwarder.
18785
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
18786
- const nodes = slot.assignedNodes({ flatten: true });
18777
+ let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
18778
+
18779
+ // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
18780
+ if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
18781
+ nodes = nodes[0].assignedNodes();
18782
+ }
18783
+
18784
+ let hasContent = false;
18785
+
18786
+ if (nodes.length > 0) {
18787
+ hasContent = true;
18788
+ }
18787
18789
 
18788
- this.hasDisplayValueContent = nodes.length > 0;
18790
+ this.hasDisplayValueContent = hasContent;
18789
18791
  }
18790
18792
 
18791
18793
  firstUpdated() {
@@ -19612,7 +19614,7 @@ class AuroBibtemplate extends i$3 {
19612
19614
  }
19613
19615
  }
19614
19616
 
19615
- var formkitVersion = '202607022214';
19617
+ var formkitVersion = '202607022134';
19616
19618
 
19617
19619
  var styleCss$3 = i$6`.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}`;
19618
19620
 
@@ -20711,19 +20713,9 @@ class AuroCombobox extends AuroElement {
20711
20713
  /**
20712
20714
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
20713
20715
  * @private
20714
- * @param {object} [options={}] - Optional flag bag.
20715
- * @param {boolean} [options.preferComboboxValue=false] - When true,
20716
- * handleMenuOptions matches the selected option against `this.value`
20717
- * first instead of `this.input.value`. Needed on mount and re-mount
20718
- * because under `persistInput` the consumer's typedValue prop can drift
20719
- * from the framework value (Svelte `{#key}` re-mount after a swap, or
20720
- * SPA preselect after route change) and the old input-first match would
20721
- * then pick the stale text. Only handleSlotChange passes this; typing
20722
- * and clearing paths keep the input-first match so user clears aren't
20723
- * undone.
20724
20716
  * @returns {void}
20725
20717
  */
20726
- handleMenuOptions({ preferComboboxValue = false } = {}) {
20718
+ handleMenuOptions() {
20727
20719
  this.generateOptionsArray();
20728
20720
  this.availableOptions = [];
20729
20721
  // Single source of truth for the menu's filter/highlight token per call.
@@ -20744,20 +20736,7 @@ class AuroCombobox extends AuroElement {
20744
20736
  option.setAttribute('aria-posinset', index + 1);
20745
20737
  });
20746
20738
 
20747
- // On mount/re-mount (via handleSlotChange), prefer the framework-set
20748
- // `this.value` when it matches a menu option. Covers SPA preselect and
20749
- // consumer swap patterns (e.g. Svelte `{#key}` re-mount) where
20750
- // `this.value` is authoritative but `this.input.value` may be empty or
20751
- // carry stale typed text from another field. Event-driven callers do
20752
- // not pass the flag, otherwise user clears would be undone by
20753
- // re-syncing to the previous combobox.value.
20754
- if (preferComboboxValue &&
20755
- this.value &&
20756
- this.menu.options?.some((opt) => opt.value === this.value)) {
20757
- this.setMenuValue(this.value);
20758
- this.syncValuesAndStates();
20759
- } else if (this.input.value &&
20760
- this.menu.options?.some((opt) => opt.value === this.input.value)) {
20739
+ if (this.input.value && this.menu.options && this.menu.options.some((opt) => opt.value === this.input.value)) {
20761
20740
  this.setMenuValue(this.input.value);
20762
20741
  this.syncValuesAndStates();
20763
20742
  }
@@ -21194,25 +21173,7 @@ class AuroCombobox extends AuroElement {
21194
21173
  this.optionActive = evt.detail;
21195
21174
 
21196
21175
  if (this.input) {
21197
- // setActiveDescendant runs after Lit's update finishes because the
21198
- // template's `.a11yActivedescendant` binding calls setAttribute on
21199
- // the internal <input> in auro-input.updated(), which clears the
21200
- // reflected ariaActiveDescendantElement property. Setting the ref
21201
- // synchronously here would get overwritten by that attribute write.
21202
- // Awaiting updateComplete lets the attribute write finish first,
21203
- // then the ref sticks and screen readers can cross the shadow-DOM
21204
- // boundary to the auro-menuoption in light DOM.
21205
- //
21206
- // The equality check covers the async gap: this.optionActive can
21207
- // change before the callback runs (user arrowed elsewhere, or the
21208
- // menu closed and cleared it to null), so we bail if the target
21209
- // no longer matches to avoid reinstating a stale ref.
21210
- const targetOption = this.optionActive;
21211
- this.updateComplete.then(() => {
21212
- if (this.input && this.optionActive === targetOption) {
21213
- this.input.setActiveDescendant(targetOption);
21214
- }
21215
- });
21176
+ this.input.setActiveDescendant(this.optionActive);
21216
21177
  }
21217
21178
 
21218
21179
  // In fullscreen mode the menu sits inside a nested <dialog> shadow root,
@@ -21349,18 +21310,6 @@ class AuroCombobox extends AuroElement {
21349
21310
  }
21350
21311
  }
21351
21312
 
21352
- // SPA preselect guard: on init render, auro-input's notifyValueChanged
21353
- // echoes an empty value through as an isProgrammatic input event before
21354
- // the framework-set combobox.value has propagated down to the input.
21355
- // Without this bail, the `this.value = this.input.value` below clobbers
21356
- // the framework value with '' and clear() wipes optionSelected. Scoped
21357
- // to the exact shape of that echo (isProgrammatic + non-empty combobox
21358
- // value + empty input.value) so it doesn't affect the swap/typed paths
21359
- // where value/input already track each other through the sync helpers.
21360
- if (event && event.isProgrammatic && this.value && !this.input.value) {
21361
- return;
21362
- }
21363
-
21364
21313
  this.value = this.input.value;
21365
21314
 
21366
21315
  // Ignore re-entrant input events caused by programmatic value sets.
@@ -21793,11 +21742,7 @@ class AuroCombobox extends AuroElement {
21793
21742
  }
21794
21743
  });
21795
21744
 
21796
- // Slot change (mount/re-mount): pass `preferComboboxValue` so that a
21797
- // framework-set `this.value` wins over any stale `input.value` when
21798
- // matching against the newly-available options. Fixes the display
21799
- // for SPA preselect and Svelte `{#key}` re-mount swap patterns.
21800
- this.handleMenuOptions({ preferComboboxValue: true });
21745
+ this.handleMenuOptions();
21801
21746
 
21802
21747
  break;
21803
21748
 
@@ -4879,7 +4879,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4879
4879
  }
4880
4880
  };
4881
4881
 
4882
- var formkitVersion$2 = '202607022214';
4882
+ var formkitVersion$2 = '202607022134';
4883
4883
 
4884
4884
  let AuroElement$2 = class AuroElement extends i$3 {
4885
4885
  static get properties() {
@@ -17768,17 +17768,14 @@ class BaseInput extends AuroElement$1 {
17768
17768
  * @returns {void}
17769
17769
  */
17770
17770
  notifyValueChanged() {
17771
- // This echoes Lit's reactive value update (and handleClickClear's
17772
- // programmatic clear) — it is NOT a fresh user-input event. Mark it
17773
- // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
17774
- // it from genuine user typing and skip clobbering their own
17775
- // programmatic state during init-time renders.
17776
- const inputEvent = new Event('input', {
17771
+ let inputEvent = null;
17772
+
17773
+ inputEvent = new Event('input', {
17777
17774
  bubbles: true,
17778
17775
  composed: true,
17779
17776
  });
17780
- inputEvent.isProgrammatic = true;
17781
17777
 
17778
+ // Dispatched event to alert outside shadow DOM context of event firing.
17782
17779
  this.dispatchEvent(inputEvent);
17783
17780
  }
17784
17781
 
@@ -18491,7 +18488,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18491
18488
  }
18492
18489
  };
18493
18490
 
18494
- var formkitVersion$1 = '202607022214';
18491
+ var formkitVersion$1 = '202607022134';
18495
18492
 
18496
18493
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18497
18494
  // See LICENSE in the project root for license information.
@@ -18777,15 +18774,20 @@ class AuroInput extends BaseInput {
18777
18774
  * @returns {void}
18778
18775
  */
18779
18776
  checkDisplayValueSlotChange() {
18780
- // flatten:true resolves through auro-combobox's forwarding slot
18781
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
18782
- // directly to auro-input's light DOM alongside the forwarder still
18783
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
18784
- // discarded any siblings past the forwarder.
18785
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
18786
- const nodes = slot.assignedNodes({ flatten: true });
18777
+ let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
18778
+
18779
+ // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
18780
+ if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
18781
+ nodes = nodes[0].assignedNodes();
18782
+ }
18783
+
18784
+ let hasContent = false;
18785
+
18786
+ if (nodes.length > 0) {
18787
+ hasContent = true;
18788
+ }
18787
18789
 
18788
- this.hasDisplayValueContent = nodes.length > 0;
18790
+ this.hasDisplayValueContent = hasContent;
18789
18791
  }
18790
18792
 
18791
18793
  firstUpdated() {
@@ -19612,7 +19614,7 @@ class AuroBibtemplate extends i$3 {
19612
19614
  }
19613
19615
  }
19614
19616
 
19615
- var formkitVersion = '202607022214';
19617
+ var formkitVersion = '202607022134';
19616
19618
 
19617
19619
  var styleCss$3 = i$6`.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}`;
19618
19620
 
@@ -20711,19 +20713,9 @@ class AuroCombobox extends AuroElement {
20711
20713
  /**
20712
20714
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
20713
20715
  * @private
20714
- * @param {object} [options={}] - Optional flag bag.
20715
- * @param {boolean} [options.preferComboboxValue=false] - When true,
20716
- * handleMenuOptions matches the selected option against `this.value`
20717
- * first instead of `this.input.value`. Needed on mount and re-mount
20718
- * because under `persistInput` the consumer's typedValue prop can drift
20719
- * from the framework value (Svelte `{#key}` re-mount after a swap, or
20720
- * SPA preselect after route change) and the old input-first match would
20721
- * then pick the stale text. Only handleSlotChange passes this; typing
20722
- * and clearing paths keep the input-first match so user clears aren't
20723
- * undone.
20724
20716
  * @returns {void}
20725
20717
  */
20726
- handleMenuOptions({ preferComboboxValue = false } = {}) {
20718
+ handleMenuOptions() {
20727
20719
  this.generateOptionsArray();
20728
20720
  this.availableOptions = [];
20729
20721
  // Single source of truth for the menu's filter/highlight token per call.
@@ -20744,20 +20736,7 @@ class AuroCombobox extends AuroElement {
20744
20736
  option.setAttribute('aria-posinset', index + 1);
20745
20737
  });
20746
20738
 
20747
- // On mount/re-mount (via handleSlotChange), prefer the framework-set
20748
- // `this.value` when it matches a menu option. Covers SPA preselect and
20749
- // consumer swap patterns (e.g. Svelte `{#key}` re-mount) where
20750
- // `this.value` is authoritative but `this.input.value` may be empty or
20751
- // carry stale typed text from another field. Event-driven callers do
20752
- // not pass the flag, otherwise user clears would be undone by
20753
- // re-syncing to the previous combobox.value.
20754
- if (preferComboboxValue &&
20755
- this.value &&
20756
- this.menu.options?.some((opt) => opt.value === this.value)) {
20757
- this.setMenuValue(this.value);
20758
- this.syncValuesAndStates();
20759
- } else if (this.input.value &&
20760
- this.menu.options?.some((opt) => opt.value === this.input.value)) {
20739
+ if (this.input.value && this.menu.options && this.menu.options.some((opt) => opt.value === this.input.value)) {
20761
20740
  this.setMenuValue(this.input.value);
20762
20741
  this.syncValuesAndStates();
20763
20742
  }
@@ -21194,25 +21173,7 @@ class AuroCombobox extends AuroElement {
21194
21173
  this.optionActive = evt.detail;
21195
21174
 
21196
21175
  if (this.input) {
21197
- // setActiveDescendant runs after Lit's update finishes because the
21198
- // template's `.a11yActivedescendant` binding calls setAttribute on
21199
- // the internal <input> in auro-input.updated(), which clears the
21200
- // reflected ariaActiveDescendantElement property. Setting the ref
21201
- // synchronously here would get overwritten by that attribute write.
21202
- // Awaiting updateComplete lets the attribute write finish first,
21203
- // then the ref sticks and screen readers can cross the shadow-DOM
21204
- // boundary to the auro-menuoption in light DOM.
21205
- //
21206
- // The equality check covers the async gap: this.optionActive can
21207
- // change before the callback runs (user arrowed elsewhere, or the
21208
- // menu closed and cleared it to null), so we bail if the target
21209
- // no longer matches to avoid reinstating a stale ref.
21210
- const targetOption = this.optionActive;
21211
- this.updateComplete.then(() => {
21212
- if (this.input && this.optionActive === targetOption) {
21213
- this.input.setActiveDescendant(targetOption);
21214
- }
21215
- });
21176
+ this.input.setActiveDescendant(this.optionActive);
21216
21177
  }
21217
21178
 
21218
21179
  // In fullscreen mode the menu sits inside a nested <dialog> shadow root,
@@ -21349,18 +21310,6 @@ class AuroCombobox extends AuroElement {
21349
21310
  }
21350
21311
  }
21351
21312
 
21352
- // SPA preselect guard: on init render, auro-input's notifyValueChanged
21353
- // echoes an empty value through as an isProgrammatic input event before
21354
- // the framework-set combobox.value has propagated down to the input.
21355
- // Without this bail, the `this.value = this.input.value` below clobbers
21356
- // the framework value with '' and clear() wipes optionSelected. Scoped
21357
- // to the exact shape of that echo (isProgrammatic + non-empty combobox
21358
- // value + empty input.value) so it doesn't affect the swap/typed paths
21359
- // where value/input already track each other through the sync helpers.
21360
- if (event && event.isProgrammatic && this.value && !this.input.value) {
21361
- return;
21362
- }
21363
-
21364
21313
  this.value = this.input.value;
21365
21314
 
21366
21315
  // Ignore re-entrant input events caused by programmatic value sets.
@@ -21793,11 +21742,7 @@ class AuroCombobox extends AuroElement {
21793
21742
  }
21794
21743
  });
21795
21744
 
21796
- // Slot change (mount/re-mount): pass `preferComboboxValue` so that a
21797
- // framework-set `this.value` wins over any stale `input.value` when
21798
- // matching against the newly-available options. Fixes the display
21799
- // for SPA preselect and Svelte `{#key}` re-mount swap patterns.
21800
- this.handleMenuOptions({ preferComboboxValue: true });
21745
+ this.handleMenuOptions();
21801
21746
 
21802
21747
  break;
21803
21748
 
@@ -4894,7 +4894,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4894
4894
  }
4895
4895
  };
4896
4896
 
4897
- var formkitVersion$2 = '202607022214';
4897
+ var formkitVersion$2 = '202607022134';
4898
4898
 
4899
4899
  let AuroElement$2 = class AuroElement extends i$3 {
4900
4900
  static get properties() {
@@ -17783,17 +17783,14 @@ class BaseInput extends AuroElement$1 {
17783
17783
  * @returns {void}
17784
17784
  */
17785
17785
  notifyValueChanged() {
17786
- // This echoes Lit's reactive value update (and handleClickClear's
17787
- // programmatic clear) — it is NOT a fresh user-input event. Mark it
17788
- // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
17789
- // it from genuine user typing and skip clobbering their own
17790
- // programmatic state during init-time renders.
17791
- const inputEvent = new Event('input', {
17786
+ let inputEvent = null;
17787
+
17788
+ inputEvent = new Event('input', {
17792
17789
  bubbles: true,
17793
17790
  composed: true,
17794
17791
  });
17795
- inputEvent.isProgrammatic = true;
17796
17792
 
17793
+ // Dispatched event to alert outside shadow DOM context of event firing.
17797
17794
  this.dispatchEvent(inputEvent);
17798
17795
  }
17799
17796
 
@@ -18506,7 +18503,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18506
18503
  }
18507
18504
  };
18508
18505
 
18509
- var formkitVersion$1 = '202607022214';
18506
+ var formkitVersion$1 = '202607022134';
18510
18507
 
18511
18508
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18512
18509
  // See LICENSE in the project root for license information.
@@ -18792,15 +18789,20 @@ class AuroInput extends BaseInput {
18792
18789
  * @returns {void}
18793
18790
  */
18794
18791
  checkDisplayValueSlotChange() {
18795
- // flatten:true resolves through auro-combobox's forwarding slot
18796
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
18797
- // directly to auro-input's light DOM alongside the forwarder still
18798
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
18799
- // discarded any siblings past the forwarder.
18800
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
18801
- const nodes = slot.assignedNodes({ flatten: true });
18792
+ let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
18793
+
18794
+ // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
18795
+ if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
18796
+ nodes = nodes[0].assignedNodes();
18797
+ }
18798
+
18799
+ let hasContent = false;
18800
+
18801
+ if (nodes.length > 0) {
18802
+ hasContent = true;
18803
+ }
18802
18804
 
18803
- this.hasDisplayValueContent = nodes.length > 0;
18805
+ this.hasDisplayValueContent = hasContent;
18804
18806
  }
18805
18807
 
18806
18808
  firstUpdated() {
@@ -19627,7 +19629,7 @@ class AuroBibtemplate extends i$3 {
19627
19629
  }
19628
19630
  }
19629
19631
 
19630
- var formkitVersion = '202607022214';
19632
+ var formkitVersion = '202607022134';
19631
19633
 
19632
19634
  var styleCss$3 = i$6`.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}`;
19633
19635
 
@@ -20726,19 +20728,9 @@ class AuroCombobox extends AuroElement {
20726
20728
  /**
20727
20729
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
20728
20730
  * @private
20729
- * @param {object} [options={}] - Optional flag bag.
20730
- * @param {boolean} [options.preferComboboxValue=false] - When true,
20731
- * handleMenuOptions matches the selected option against `this.value`
20732
- * first instead of `this.input.value`. Needed on mount and re-mount
20733
- * because under `persistInput` the consumer's typedValue prop can drift
20734
- * from the framework value (Svelte `{#key}` re-mount after a swap, or
20735
- * SPA preselect after route change) and the old input-first match would
20736
- * then pick the stale text. Only handleSlotChange passes this; typing
20737
- * and clearing paths keep the input-first match so user clears aren't
20738
- * undone.
20739
20731
  * @returns {void}
20740
20732
  */
20741
- handleMenuOptions({ preferComboboxValue = false } = {}) {
20733
+ handleMenuOptions() {
20742
20734
  this.generateOptionsArray();
20743
20735
  this.availableOptions = [];
20744
20736
  // Single source of truth for the menu's filter/highlight token per call.
@@ -20759,20 +20751,7 @@ class AuroCombobox extends AuroElement {
20759
20751
  option.setAttribute('aria-posinset', index + 1);
20760
20752
  });
20761
20753
 
20762
- // On mount/re-mount (via handleSlotChange), prefer the framework-set
20763
- // `this.value` when it matches a menu option. Covers SPA preselect and
20764
- // consumer swap patterns (e.g. Svelte `{#key}` re-mount) where
20765
- // `this.value` is authoritative but `this.input.value` may be empty or
20766
- // carry stale typed text from another field. Event-driven callers do
20767
- // not pass the flag, otherwise user clears would be undone by
20768
- // re-syncing to the previous combobox.value.
20769
- if (preferComboboxValue &&
20770
- this.value &&
20771
- this.menu.options?.some((opt) => opt.value === this.value)) {
20772
- this.setMenuValue(this.value);
20773
- this.syncValuesAndStates();
20774
- } else if (this.input.value &&
20775
- this.menu.options?.some((opt) => opt.value === this.input.value)) {
20754
+ if (this.input.value && this.menu.options && this.menu.options.some((opt) => opt.value === this.input.value)) {
20776
20755
  this.setMenuValue(this.input.value);
20777
20756
  this.syncValuesAndStates();
20778
20757
  }
@@ -21209,25 +21188,7 @@ class AuroCombobox extends AuroElement {
21209
21188
  this.optionActive = evt.detail;
21210
21189
 
21211
21190
  if (this.input) {
21212
- // setActiveDescendant runs after Lit's update finishes because the
21213
- // template's `.a11yActivedescendant` binding calls setAttribute on
21214
- // the internal <input> in auro-input.updated(), which clears the
21215
- // reflected ariaActiveDescendantElement property. Setting the ref
21216
- // synchronously here would get overwritten by that attribute write.
21217
- // Awaiting updateComplete lets the attribute write finish first,
21218
- // then the ref sticks and screen readers can cross the shadow-DOM
21219
- // boundary to the auro-menuoption in light DOM.
21220
- //
21221
- // The equality check covers the async gap: this.optionActive can
21222
- // change before the callback runs (user arrowed elsewhere, or the
21223
- // menu closed and cleared it to null), so we bail if the target
21224
- // no longer matches to avoid reinstating a stale ref.
21225
- const targetOption = this.optionActive;
21226
- this.updateComplete.then(() => {
21227
- if (this.input && this.optionActive === targetOption) {
21228
- this.input.setActiveDescendant(targetOption);
21229
- }
21230
- });
21191
+ this.input.setActiveDescendant(this.optionActive);
21231
21192
  }
21232
21193
 
21233
21194
  // In fullscreen mode the menu sits inside a nested <dialog> shadow root,
@@ -21364,18 +21325,6 @@ class AuroCombobox extends AuroElement {
21364
21325
  }
21365
21326
  }
21366
21327
 
21367
- // SPA preselect guard: on init render, auro-input's notifyValueChanged
21368
- // echoes an empty value through as an isProgrammatic input event before
21369
- // the framework-set combobox.value has propagated down to the input.
21370
- // Without this bail, the `this.value = this.input.value` below clobbers
21371
- // the framework value with '' and clear() wipes optionSelected. Scoped
21372
- // to the exact shape of that echo (isProgrammatic + non-empty combobox
21373
- // value + empty input.value) so it doesn't affect the swap/typed paths
21374
- // where value/input already track each other through the sync helpers.
21375
- if (event && event.isProgrammatic && this.value && !this.input.value) {
21376
- return;
21377
- }
21378
-
21379
21328
  this.value = this.input.value;
21380
21329
 
21381
21330
  // Ignore re-entrant input events caused by programmatic value sets.
@@ -21808,11 +21757,7 @@ class AuroCombobox extends AuroElement {
21808
21757
  }
21809
21758
  });
21810
21759
 
21811
- // Slot change (mount/re-mount): pass `preferComboboxValue` so that a
21812
- // framework-set `this.value` wins over any stale `input.value` when
21813
- // matching against the newly-available options. Fixes the display
21814
- // for SPA preselect and Svelte `{#key}` re-mount swap patterns.
21815
- this.handleMenuOptions({ preferComboboxValue: true });
21760
+ this.handleMenuOptions();
21816
21761
 
21817
21762
  break;
21818
21763
 
@@ -424,16 +424,6 @@ export class AuroCombobox extends AuroElement {
424
424
  /**
425
425
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
426
426
  * @private
427
- * @param {object} [options={}] - Optional flag bag.
428
- * @param {boolean} [options.preferComboboxValue=false] - When true,
429
- * handleMenuOptions matches the selected option against `this.value`
430
- * first instead of `this.input.value`. Needed on mount and re-mount
431
- * because under `persistInput` the consumer's typedValue prop can drift
432
- * from the framework value (Svelte `{#key}` re-mount after a swap, or
433
- * SPA preselect after route change) and the old input-first match would
434
- * then pick the stale text. Only handleSlotChange passes this; typing
435
- * and clearing paths keep the input-first match so user clears aren't
436
- * undone.
437
427
  * @returns {void}
438
428
  */
439
429
  private handleMenuOptions;