@aurodesignsystem-dev/auro-formkit 0.0.0-pr1554.13 → 0.0.0-pr1554.14

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 (45) 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 +33 -44
  7. package/components/combobox/demo/getting-started.min.js +33 -44
  8. package/components/combobox/demo/index.min.js +33 -44
  9. package/components/combobox/dist/index.js +33 -44
  10. package/components/combobox/dist/registered.js +33 -44
  11. package/components/counter/demo/customize.min.js +20 -14
  12. package/components/counter/demo/index.min.js +20 -14
  13. package/components/counter/dist/index.js +20 -14
  14. package/components/counter/dist/registered.js +20 -14
  15. package/components/datepicker/demo/customize.min.js +22 -20
  16. package/components/datepicker/demo/index.min.js +22 -20
  17. package/components/datepicker/dist/index.js +22 -20
  18. package/components/datepicker/dist/registered.js +22 -20
  19. package/components/dropdown/demo/customize.min.js +19 -13
  20. package/components/dropdown/demo/getting-started.min.js +19 -13
  21. package/components/dropdown/demo/index.min.js +19 -13
  22. package/components/dropdown/dist/auro-dropdown.d.ts +8 -0
  23. package/components/dropdown/dist/index.js +19 -13
  24. package/components/dropdown/dist/registered.js +19 -13
  25. package/components/form/demo/customize.min.js +99 -100
  26. package/components/form/demo/getting-started.min.js +99 -100
  27. package/components/form/demo/index.min.js +99 -100
  28. package/components/form/demo/registerDemoDeps.min.js +99 -100
  29. package/components/input/demo/customize.min.js +2 -6
  30. package/components/input/demo/getting-started.min.js +2 -6
  31. package/components/input/demo/index.min.js +2 -6
  32. package/components/input/dist/index.js +2 -6
  33. package/components/input/dist/registered.js +2 -6
  34. package/components/radio/demo/customize.min.js +1 -1
  35. package/components/radio/demo/getting-started.min.js +1 -1
  36. package/components/radio/demo/index.min.js +1 -1
  37. package/components/radio/dist/index.js +1 -1
  38. package/components/radio/dist/registered.js +1 -1
  39. package/components/select/demo/customize.min.js +20 -14
  40. package/components/select/demo/getting-started.min.js +20 -14
  41. package/components/select/demo/index.min.js +20 -14
  42. package/components/select/dist/index.js +20 -14
  43. package/components/select/dist/registered.js +20 -14
  44. package/custom-elements.json +10 -0
  45. package/package.json +1 -1
@@ -1275,7 +1275,7 @@ class AuroHelpText extends i$2 {
1275
1275
  }
1276
1276
  }
1277
1277
 
1278
- var formkitVersion = '202607160738';
1278
+ var formkitVersion = '202607160755';
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 = '202607160738';
1278
+ var formkitVersion = '202607160755';
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 = '202607160738';
1278
+ var formkitVersion = '202607160755';
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 = '202607160738';
1231
+ var formkitVersion = '202607160755';
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 = '202607160738';
1231
+ var formkitVersion = '202607160755';
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.
@@ -4971,7 +4971,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4971
4971
  }
4972
4972
  };
4973
4973
 
4974
- var formkitVersion$2 = '202607160738';
4974
+ var formkitVersion$2 = '202607160755';
4975
4975
 
4976
4976
  let AuroElement$2 = class AuroElement extends i$3 {
4977
4977
  static get properties() {
@@ -5111,6 +5111,15 @@ class AuroDropdown extends AuroElement$2 {
5111
5111
  this.matchWidth = false;
5112
5112
  this.noHideOnThisFocusLoss = false;
5113
5113
 
5114
+ /**
5115
+ * When true, the dropdown skips its generic focus restoration on close.
5116
+ * Set by consumers (e.g. combobox) that manage their own focus routing
5117
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
5118
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
5119
+ * @private
5120
+ */
5121
+ this.noFocusRestoreOnClose = false;
5122
+
5114
5123
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
5115
5124
 
5116
5125
  // Layout Config
@@ -5284,25 +5293,22 @@ class AuroDropdown extends AuroElement$2 {
5284
5293
  // getFocusableElements can't find it. Query assigned nodes directly.
5285
5294
  const slot = this.trigger.querySelector('slot[name="trigger"]');
5286
5295
  if (slot) {
5287
- const assigned = slot.assignedElements({ flatten: true });
5296
+ const assigned = slot.assignedElements();
5288
5297
  for (const el of assigned) {
5289
5298
  if (el.hasAttribute('disabled')) {
5290
5299
  continue;
5291
5300
  }
5292
-
5293
- // Try focusing a focusable descendant first (handles non-focusable wrappers).
5301
+ // Try finding a focusable descendant first (handles non-focusable
5302
+ // wrappers like <div> containing a <button>). If none found, try
5303
+ // focusing the element directly (works for custom elements like
5304
+ // auro-input that have delegatesFocus or a custom focus() method).
5294
5305
  const descendants = getFocusableElements(el);
5295
5306
  if (descendants.length > 0) {
5296
5307
  descendants[0].focus();
5297
5308
  return;
5298
5309
  }
5299
-
5300
- // Otherwise, try focusing the assigned element itself. Only stop if focus moved.
5301
- const prevActive = document.activeElement;
5302
5310
  el.focus();
5303
- if (document.activeElement !== prevActive) {
5304
- return;
5305
- }
5311
+ return;
5306
5312
  }
5307
5313
  }
5308
5314
  // Fallback: try DOM children (non-slotted content)
@@ -5762,7 +5768,7 @@ class AuroDropdown extends AuroElement$2 {
5762
5768
  }
5763
5769
 
5764
5770
  const eventType = event.detail.eventType || "unknown";
5765
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noHideOnThisFocusLoss) {
5771
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
5766
5772
  this.focusTrigger();
5767
5773
  }
5768
5774
 
@@ -5770,9 +5776,9 @@ class AuroDropdown extends AuroElement$2 {
5770
5776
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
5771
5777
  // — restoring to the trigger would trap the user on this dropdown, forcing
5772
5778
  // an extra Tab to move on. Escape and outside-click still restore.
5773
- // When noHideOnThisFocusLoss is true, the consumer (e.g. combobox) manages
5779
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
5774
5780
  // its own focus restoration — skip the generic trigger focus to avoid races.
5775
- if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noHideOnThisFocusLoss) {
5781
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
5776
5782
  // wait til the bib gets fully closed and rendered
5777
5783
  setTimeout(() => {
5778
5784
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -18645,7 +18651,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18645
18651
  }
18646
18652
  };
18647
18653
 
18648
- var formkitVersion$1 = '202607160738';
18654
+ var formkitVersion$1 = '202607160755';
18649
18655
 
18650
18656
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18651
18657
  // See LICENSE in the project root for license information.
@@ -18939,15 +18945,11 @@ class AuroInput extends BaseInput {
18939
18945
  // Check for any element (including custom elements like <auro-icon>
18940
18946
  // that render via shadow DOM with no text content).
18941
18947
  const lightDomContent = this.querySelector('[slot="displayValue"]:not(slot)');
18942
- const nextHasDisplayValueContent = Boolean(lightDomContent && (
18948
+ this.hasDisplayValueContent = Boolean(lightDomContent && (
18943
18949
  lightDomContent.textContent.trim().length > 0 ||
18944
18950
  lightDomContent.children.length > 0 ||
18945
18951
  lightDomContent.shadowRoot !== null
18946
18952
  ));
18947
- if (nextHasDisplayValueContent !== this.hasDisplayValueContent) {
18948
- this.hasDisplayValueContent = nextHasDisplayValueContent;
18949
- this.requestUpdate();
18950
- }
18951
18953
  return;
18952
18954
  }
18953
18955
  const nodes = slot.assignedNodes({ flatten: true });
@@ -19797,7 +19799,7 @@ class AuroBibtemplate extends i$3 {
19797
19799
  }
19798
19800
  }
19799
19801
 
19800
- var formkitVersion = '202607160738';
19802
+ var formkitVersion = '202607160755';
19801
19803
 
19802
19804
  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}`;
19803
19805
 
@@ -20854,30 +20856,13 @@ class AuroCombobox extends AuroElement {
20854
20856
  // human-readable label (e.g. "Seattle, WA"). For consumers where
20855
20857
  // value ≠ label, this produces a brief flash of the raw value until
20856
20858
  // the option elements load and updateTriggerTextDisplay re-runs with
20857
- // the correct label.
20858
-
20859
- // Avoid adding synthetic content when a consumer already provides
20860
- // displayValue content via the forwarded slot.
20861
- const forwarderSlot = this.input.querySelector('slot[name="displayValue"][slot="displayValue"]');
20862
- const hasSlottedDisplayValue = Boolean(forwarderSlot?.assignedNodes({ flatten: true }).some((node) => {
20863
- if (node.nodeType === Node.TEXT_NODE) {
20864
- return node.textContent.trim().length > 0;
20865
- }
20866
- if (node.nodeType === Node.ELEMENT_NODE) {
20867
- return node.textContent.trim().length > 0 ||
20868
- node.children.length > 0 ||
20869
- node.shadowRoot !== null;
20870
- }
20871
- return false;
20872
- }));
20873
-
20874
- if (!hasSlottedDisplayValue) {
20875
- const syntheticDV = document.createElement('span');
20876
- syntheticDV.setAttribute('slot', 'displayValue');
20877
- syntheticDV.textContent = this.value;
20878
- this.input.appendChild(syntheticDV);
20879
- }
20880
-
20859
+ // the correct label. This is intentionally preferred over a blank
20860
+ // state — the displayValueInTrigger.remove() cleanup above ensures
20861
+ // this placeholder is replaced once the real option is available.
20862
+ const syntheticDV = document.createElement('span');
20863
+ syntheticDV.setAttribute('slot', 'displayValue');
20864
+ syntheticDV.textContent = this.value;
20865
+ this.input.appendChild(syntheticDV);
20881
20866
  if (typeof this.input.checkDisplayValueSlotChange === 'function') {
20882
20867
  this.input.checkDisplayValueSlotChange();
20883
20868
  this.input.requestUpdate();
@@ -21053,6 +21038,10 @@ class AuroCombobox extends AuroElement {
21053
21038
  // from combobox's light DOM and won't be detected by dropdown's contains() check.
21054
21039
  this.dropdown.noHideOnThisFocusLoss = true;
21055
21040
 
21041
+ // Suppress the dropdown's generic focus restoration on close — the combobox
21042
+ // manages its own focus via setClearBtnFocus / setInputFocus / keyboard strategy.
21043
+ this.dropdown.noFocusRestoreOnClose = true;
21044
+
21056
21045
  // Listen for the ID to be added to the dropdown so we can capture it and use it for accessibility.
21057
21046
  this.dropdown.addEventListener('auroDropdown-idAdded', (event) => {
21058
21047
  this.dropdownId = event.detail.id;
@@ -4971,7 +4971,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4971
4971
  }
4972
4972
  };
4973
4973
 
4974
- var formkitVersion$2 = '202607160738';
4974
+ var formkitVersion$2 = '202607160755';
4975
4975
 
4976
4976
  let AuroElement$2 = class AuroElement extends i$3 {
4977
4977
  static get properties() {
@@ -5111,6 +5111,15 @@ class AuroDropdown extends AuroElement$2 {
5111
5111
  this.matchWidth = false;
5112
5112
  this.noHideOnThisFocusLoss = false;
5113
5113
 
5114
+ /**
5115
+ * When true, the dropdown skips its generic focus restoration on close.
5116
+ * Set by consumers (e.g. combobox) that manage their own focus routing
5117
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
5118
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
5119
+ * @private
5120
+ */
5121
+ this.noFocusRestoreOnClose = false;
5122
+
5114
5123
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
5115
5124
 
5116
5125
  // Layout Config
@@ -5284,25 +5293,22 @@ class AuroDropdown extends AuroElement$2 {
5284
5293
  // getFocusableElements can't find it. Query assigned nodes directly.
5285
5294
  const slot = this.trigger.querySelector('slot[name="trigger"]');
5286
5295
  if (slot) {
5287
- const assigned = slot.assignedElements({ flatten: true });
5296
+ const assigned = slot.assignedElements();
5288
5297
  for (const el of assigned) {
5289
5298
  if (el.hasAttribute('disabled')) {
5290
5299
  continue;
5291
5300
  }
5292
-
5293
- // Try focusing a focusable descendant first (handles non-focusable wrappers).
5301
+ // Try finding a focusable descendant first (handles non-focusable
5302
+ // wrappers like <div> containing a <button>). If none found, try
5303
+ // focusing the element directly (works for custom elements like
5304
+ // auro-input that have delegatesFocus or a custom focus() method).
5294
5305
  const descendants = getFocusableElements(el);
5295
5306
  if (descendants.length > 0) {
5296
5307
  descendants[0].focus();
5297
5308
  return;
5298
5309
  }
5299
-
5300
- // Otherwise, try focusing the assigned element itself. Only stop if focus moved.
5301
- const prevActive = document.activeElement;
5302
5310
  el.focus();
5303
- if (document.activeElement !== prevActive) {
5304
- return;
5305
- }
5311
+ return;
5306
5312
  }
5307
5313
  }
5308
5314
  // Fallback: try DOM children (non-slotted content)
@@ -5762,7 +5768,7 @@ class AuroDropdown extends AuroElement$2 {
5762
5768
  }
5763
5769
 
5764
5770
  const eventType = event.detail.eventType || "unknown";
5765
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noHideOnThisFocusLoss) {
5771
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
5766
5772
  this.focusTrigger();
5767
5773
  }
5768
5774
 
@@ -5770,9 +5776,9 @@ class AuroDropdown extends AuroElement$2 {
5770
5776
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
5771
5777
  // — restoring to the trigger would trap the user on this dropdown, forcing
5772
5778
  // an extra Tab to move on. Escape and outside-click still restore.
5773
- // When noHideOnThisFocusLoss is true, the consumer (e.g. combobox) manages
5779
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
5774
5780
  // its own focus restoration — skip the generic trigger focus to avoid races.
5775
- if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noHideOnThisFocusLoss) {
5781
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
5776
5782
  // wait til the bib gets fully closed and rendered
5777
5783
  setTimeout(() => {
5778
5784
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -18645,7 +18651,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18645
18651
  }
18646
18652
  };
18647
18653
 
18648
- var formkitVersion$1 = '202607160738';
18654
+ var formkitVersion$1 = '202607160755';
18649
18655
 
18650
18656
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18651
18657
  // See LICENSE in the project root for license information.
@@ -18939,15 +18945,11 @@ class AuroInput extends BaseInput {
18939
18945
  // Check for any element (including custom elements like <auro-icon>
18940
18946
  // that render via shadow DOM with no text content).
18941
18947
  const lightDomContent = this.querySelector('[slot="displayValue"]:not(slot)');
18942
- const nextHasDisplayValueContent = Boolean(lightDomContent && (
18948
+ this.hasDisplayValueContent = Boolean(lightDomContent && (
18943
18949
  lightDomContent.textContent.trim().length > 0 ||
18944
18950
  lightDomContent.children.length > 0 ||
18945
18951
  lightDomContent.shadowRoot !== null
18946
18952
  ));
18947
- if (nextHasDisplayValueContent !== this.hasDisplayValueContent) {
18948
- this.hasDisplayValueContent = nextHasDisplayValueContent;
18949
- this.requestUpdate();
18950
- }
18951
18953
  return;
18952
18954
  }
18953
18955
  const nodes = slot.assignedNodes({ flatten: true });
@@ -19797,7 +19799,7 @@ class AuroBibtemplate extends i$3 {
19797
19799
  }
19798
19800
  }
19799
19801
 
19800
- var formkitVersion = '202607160738';
19802
+ var formkitVersion = '202607160755';
19801
19803
 
19802
19804
  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}`;
19803
19805
 
@@ -20854,30 +20856,13 @@ class AuroCombobox extends AuroElement {
20854
20856
  // human-readable label (e.g. "Seattle, WA"). For consumers where
20855
20857
  // value ≠ label, this produces a brief flash of the raw value until
20856
20858
  // the option elements load and updateTriggerTextDisplay re-runs with
20857
- // the correct label.
20858
-
20859
- // Avoid adding synthetic content when a consumer already provides
20860
- // displayValue content via the forwarded slot.
20861
- const forwarderSlot = this.input.querySelector('slot[name="displayValue"][slot="displayValue"]');
20862
- const hasSlottedDisplayValue = Boolean(forwarderSlot?.assignedNodes({ flatten: true }).some((node) => {
20863
- if (node.nodeType === Node.TEXT_NODE) {
20864
- return node.textContent.trim().length > 0;
20865
- }
20866
- if (node.nodeType === Node.ELEMENT_NODE) {
20867
- return node.textContent.trim().length > 0 ||
20868
- node.children.length > 0 ||
20869
- node.shadowRoot !== null;
20870
- }
20871
- return false;
20872
- }));
20873
-
20874
- if (!hasSlottedDisplayValue) {
20875
- const syntheticDV = document.createElement('span');
20876
- syntheticDV.setAttribute('slot', 'displayValue');
20877
- syntheticDV.textContent = this.value;
20878
- this.input.appendChild(syntheticDV);
20879
- }
20880
-
20859
+ // the correct label. This is intentionally preferred over a blank
20860
+ // state — the displayValueInTrigger.remove() cleanup above ensures
20861
+ // this placeholder is replaced once the real option is available.
20862
+ const syntheticDV = document.createElement('span');
20863
+ syntheticDV.setAttribute('slot', 'displayValue');
20864
+ syntheticDV.textContent = this.value;
20865
+ this.input.appendChild(syntheticDV);
20881
20866
  if (typeof this.input.checkDisplayValueSlotChange === 'function') {
20882
20867
  this.input.checkDisplayValueSlotChange();
20883
20868
  this.input.requestUpdate();
@@ -21053,6 +21038,10 @@ class AuroCombobox extends AuroElement {
21053
21038
  // from combobox's light DOM and won't be detected by dropdown's contains() check.
21054
21039
  this.dropdown.noHideOnThisFocusLoss = true;
21055
21040
 
21041
+ // Suppress the dropdown's generic focus restoration on close — the combobox
21042
+ // manages its own focus via setClearBtnFocus / setInputFocus / keyboard strategy.
21043
+ this.dropdown.noFocusRestoreOnClose = true;
21044
+
21056
21045
  // Listen for the ID to be added to the dropdown so we can capture it and use it for accessibility.
21057
21046
  this.dropdown.addEventListener('auroDropdown-idAdded', (event) => {
21058
21047
  this.dropdownId = event.detail.id;
@@ -4986,7 +4986,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4986
4986
  }
4987
4987
  };
4988
4988
 
4989
- var formkitVersion$2 = '202607160738';
4989
+ var formkitVersion$2 = '202607160755';
4990
4990
 
4991
4991
  let AuroElement$2 = class AuroElement extends i$3 {
4992
4992
  static get properties() {
@@ -5126,6 +5126,15 @@ class AuroDropdown extends AuroElement$2 {
5126
5126
  this.matchWidth = false;
5127
5127
  this.noHideOnThisFocusLoss = false;
5128
5128
 
5129
+ /**
5130
+ * When true, the dropdown skips its generic focus restoration on close.
5131
+ * Set by consumers (e.g. combobox) that manage their own focus routing
5132
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
5133
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
5134
+ * @private
5135
+ */
5136
+ this.noFocusRestoreOnClose = false;
5137
+
5129
5138
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
5130
5139
 
5131
5140
  // Layout Config
@@ -5299,25 +5308,22 @@ class AuroDropdown extends AuroElement$2 {
5299
5308
  // getFocusableElements can't find it. Query assigned nodes directly.
5300
5309
  const slot = this.trigger.querySelector('slot[name="trigger"]');
5301
5310
  if (slot) {
5302
- const assigned = slot.assignedElements({ flatten: true });
5311
+ const assigned = slot.assignedElements();
5303
5312
  for (const el of assigned) {
5304
5313
  if (el.hasAttribute('disabled')) {
5305
5314
  continue;
5306
5315
  }
5307
-
5308
- // Try focusing a focusable descendant first (handles non-focusable wrappers).
5316
+ // Try finding a focusable descendant first (handles non-focusable
5317
+ // wrappers like <div> containing a <button>). If none found, try
5318
+ // focusing the element directly (works for custom elements like
5319
+ // auro-input that have delegatesFocus or a custom focus() method).
5309
5320
  const descendants = getFocusableElements(el);
5310
5321
  if (descendants.length > 0) {
5311
5322
  descendants[0].focus();
5312
5323
  return;
5313
5324
  }
5314
-
5315
- // Otherwise, try focusing the assigned element itself. Only stop if focus moved.
5316
- const prevActive = document.activeElement;
5317
5325
  el.focus();
5318
- if (document.activeElement !== prevActive) {
5319
- return;
5320
- }
5326
+ return;
5321
5327
  }
5322
5328
  }
5323
5329
  // Fallback: try DOM children (non-slotted content)
@@ -5777,7 +5783,7 @@ class AuroDropdown extends AuroElement$2 {
5777
5783
  }
5778
5784
 
5779
5785
  const eventType = event.detail.eventType || "unknown";
5780
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noHideOnThisFocusLoss) {
5786
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
5781
5787
  this.focusTrigger();
5782
5788
  }
5783
5789
 
@@ -5785,9 +5791,9 @@ class AuroDropdown extends AuroElement$2 {
5785
5791
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
5786
5792
  // — restoring to the trigger would trap the user on this dropdown, forcing
5787
5793
  // an extra Tab to move on. Escape and outside-click still restore.
5788
- // When noHideOnThisFocusLoss is true, the consumer (e.g. combobox) manages
5794
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
5789
5795
  // its own focus restoration — skip the generic trigger focus to avoid races.
5790
- if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noHideOnThisFocusLoss) {
5796
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
5791
5797
  // wait til the bib gets fully closed and rendered
5792
5798
  setTimeout(() => {
5793
5799
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -18660,7 +18666,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18660
18666
  }
18661
18667
  };
18662
18668
 
18663
- var formkitVersion$1 = '202607160738';
18669
+ var formkitVersion$1 = '202607160755';
18664
18670
 
18665
18671
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18666
18672
  // See LICENSE in the project root for license information.
@@ -18954,15 +18960,11 @@ class AuroInput extends BaseInput {
18954
18960
  // Check for any element (including custom elements like <auro-icon>
18955
18961
  // that render via shadow DOM with no text content).
18956
18962
  const lightDomContent = this.querySelector('[slot="displayValue"]:not(slot)');
18957
- const nextHasDisplayValueContent = Boolean(lightDomContent && (
18963
+ this.hasDisplayValueContent = Boolean(lightDomContent && (
18958
18964
  lightDomContent.textContent.trim().length > 0 ||
18959
18965
  lightDomContent.children.length > 0 ||
18960
18966
  lightDomContent.shadowRoot !== null
18961
18967
  ));
18962
- if (nextHasDisplayValueContent !== this.hasDisplayValueContent) {
18963
- this.hasDisplayValueContent = nextHasDisplayValueContent;
18964
- this.requestUpdate();
18965
- }
18966
18968
  return;
18967
18969
  }
18968
18970
  const nodes = slot.assignedNodes({ flatten: true });
@@ -19812,7 +19814,7 @@ class AuroBibtemplate extends i$3 {
19812
19814
  }
19813
19815
  }
19814
19816
 
19815
- var formkitVersion = '202607160738';
19817
+ var formkitVersion = '202607160755';
19816
19818
 
19817
19819
  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}`;
19818
19820
 
@@ -20869,30 +20871,13 @@ class AuroCombobox extends AuroElement {
20869
20871
  // human-readable label (e.g. "Seattle, WA"). For consumers where
20870
20872
  // value ≠ label, this produces a brief flash of the raw value until
20871
20873
  // the option elements load and updateTriggerTextDisplay re-runs with
20872
- // the correct label.
20873
-
20874
- // Avoid adding synthetic content when a consumer already provides
20875
- // displayValue content via the forwarded slot.
20876
- const forwarderSlot = this.input.querySelector('slot[name="displayValue"][slot="displayValue"]');
20877
- const hasSlottedDisplayValue = Boolean(forwarderSlot?.assignedNodes({ flatten: true }).some((node) => {
20878
- if (node.nodeType === Node.TEXT_NODE) {
20879
- return node.textContent.trim().length > 0;
20880
- }
20881
- if (node.nodeType === Node.ELEMENT_NODE) {
20882
- return node.textContent.trim().length > 0 ||
20883
- node.children.length > 0 ||
20884
- node.shadowRoot !== null;
20885
- }
20886
- return false;
20887
- }));
20888
-
20889
- if (!hasSlottedDisplayValue) {
20890
- const syntheticDV = document.createElement('span');
20891
- syntheticDV.setAttribute('slot', 'displayValue');
20892
- syntheticDV.textContent = this.value;
20893
- this.input.appendChild(syntheticDV);
20894
- }
20895
-
20874
+ // the correct label. This is intentionally preferred over a blank
20875
+ // state — the displayValueInTrigger.remove() cleanup above ensures
20876
+ // this placeholder is replaced once the real option is available.
20877
+ const syntheticDV = document.createElement('span');
20878
+ syntheticDV.setAttribute('slot', 'displayValue');
20879
+ syntheticDV.textContent = this.value;
20880
+ this.input.appendChild(syntheticDV);
20896
20881
  if (typeof this.input.checkDisplayValueSlotChange === 'function') {
20897
20882
  this.input.checkDisplayValueSlotChange();
20898
20883
  this.input.requestUpdate();
@@ -21068,6 +21053,10 @@ class AuroCombobox extends AuroElement {
21068
21053
  // from combobox's light DOM and won't be detected by dropdown's contains() check.
21069
21054
  this.dropdown.noHideOnThisFocusLoss = true;
21070
21055
 
21056
+ // Suppress the dropdown's generic focus restoration on close — the combobox
21057
+ // manages its own focus via setClearBtnFocus / setInputFocus / keyboard strategy.
21058
+ this.dropdown.noFocusRestoreOnClose = true;
21059
+
21071
21060
  // Listen for the ID to be added to the dropdown so we can capture it and use it for accessibility.
21072
21061
  this.dropdown.addEventListener('auroDropdown-idAdded', (event) => {
21073
21062
  this.dropdownId = event.detail.id;