@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
@@ -4904,7 +4904,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4904
4904
  }
4905
4905
  };
4906
4906
 
4907
- var formkitVersion$2 = '202607160738';
4907
+ var formkitVersion$2 = '202607160755';
4908
4908
 
4909
4909
  let AuroElement$2 = class AuroElement extends LitElement {
4910
4910
  static get properties() {
@@ -5044,6 +5044,15 @@ class AuroDropdown extends AuroElement$2 {
5044
5044
  this.matchWidth = false;
5045
5045
  this.noHideOnThisFocusLoss = false;
5046
5046
 
5047
+ /**
5048
+ * When true, the dropdown skips its generic focus restoration on close.
5049
+ * Set by consumers (e.g. combobox) that manage their own focus routing
5050
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
5051
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
5052
+ * @private
5053
+ */
5054
+ this.noFocusRestoreOnClose = false;
5055
+
5047
5056
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
5048
5057
 
5049
5058
  // Layout Config
@@ -5217,25 +5226,22 @@ class AuroDropdown extends AuroElement$2 {
5217
5226
  // getFocusableElements can't find it. Query assigned nodes directly.
5218
5227
  const slot = this.trigger.querySelector('slot[name="trigger"]');
5219
5228
  if (slot) {
5220
- const assigned = slot.assignedElements({ flatten: true });
5229
+ const assigned = slot.assignedElements();
5221
5230
  for (const el of assigned) {
5222
5231
  if (el.hasAttribute('disabled')) {
5223
5232
  continue;
5224
5233
  }
5225
-
5226
- // Try focusing a focusable descendant first (handles non-focusable wrappers).
5234
+ // Try finding a focusable descendant first (handles non-focusable
5235
+ // wrappers like <div> containing a <button>). If none found, try
5236
+ // focusing the element directly (works for custom elements like
5237
+ // auro-input that have delegatesFocus or a custom focus() method).
5227
5238
  const descendants = getFocusableElements(el);
5228
5239
  if (descendants.length > 0) {
5229
5240
  descendants[0].focus();
5230
5241
  return;
5231
5242
  }
5232
-
5233
- // Otherwise, try focusing the assigned element itself. Only stop if focus moved.
5234
- const prevActive = document.activeElement;
5235
5243
  el.focus();
5236
- if (document.activeElement !== prevActive) {
5237
- return;
5238
- }
5244
+ return;
5239
5245
  }
5240
5246
  }
5241
5247
  // Fallback: try DOM children (non-slotted content)
@@ -5695,7 +5701,7 @@ class AuroDropdown extends AuroElement$2 {
5695
5701
  }
5696
5702
 
5697
5703
  const eventType = event.detail.eventType || "unknown";
5698
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noHideOnThisFocusLoss) {
5704
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
5699
5705
  this.focusTrigger();
5700
5706
  }
5701
5707
 
@@ -5703,9 +5709,9 @@ class AuroDropdown extends AuroElement$2 {
5703
5709
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
5704
5710
  // — restoring to the trigger would trap the user on this dropdown, forcing
5705
5711
  // an extra Tab to move on. Escape and outside-click still restore.
5706
- // When noHideOnThisFocusLoss is true, the consumer (e.g. combobox) manages
5712
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
5707
5713
  // its own focus restoration — skip the generic trigger focus to avoid races.
5708
- if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noHideOnThisFocusLoss) {
5714
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
5709
5715
  // wait til the bib gets fully closed and rendered
5710
5716
  setTimeout(() => {
5711
5717
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -18571,7 +18577,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
18571
18577
  }
18572
18578
  };
18573
18579
 
18574
- var formkitVersion$1 = '202607160738';
18580
+ var formkitVersion$1 = '202607160755';
18575
18581
 
18576
18582
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18577
18583
  // See LICENSE in the project root for license information.
@@ -18865,15 +18871,11 @@ class AuroInput extends BaseInput {
18865
18871
  // Check for any element (including custom elements like <auro-icon>
18866
18872
  // that render via shadow DOM with no text content).
18867
18873
  const lightDomContent = this.querySelector('[slot="displayValue"]:not(slot)');
18868
- const nextHasDisplayValueContent = Boolean(lightDomContent && (
18874
+ this.hasDisplayValueContent = Boolean(lightDomContent && (
18869
18875
  lightDomContent.textContent.trim().length > 0 ||
18870
18876
  lightDomContent.children.length > 0 ||
18871
18877
  lightDomContent.shadowRoot !== null
18872
18878
  ));
18873
- if (nextHasDisplayValueContent !== this.hasDisplayValueContent) {
18874
- this.hasDisplayValueContent = nextHasDisplayValueContent;
18875
- this.requestUpdate();
18876
- }
18877
18879
  return;
18878
18880
  }
18879
18881
  const nodes = slot.assignedNodes({ flatten: true });
@@ -19723,7 +19725,7 @@ class AuroBibtemplate extends LitElement {
19723
19725
  }
19724
19726
  }
19725
19727
 
19726
- var formkitVersion = '202607160738';
19728
+ var formkitVersion = '202607160755';
19727
19729
 
19728
19730
  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}`;
19729
19731
 
@@ -20780,30 +20782,13 @@ class AuroCombobox extends AuroElement {
20780
20782
  // human-readable label (e.g. "Seattle, WA"). For consumers where
20781
20783
  // value ≠ label, this produces a brief flash of the raw value until
20782
20784
  // the option elements load and updateTriggerTextDisplay re-runs with
20783
- // the correct label.
20784
-
20785
- // Avoid adding synthetic content when a consumer already provides
20786
- // displayValue content via the forwarded slot.
20787
- const forwarderSlot = this.input.querySelector('slot[name="displayValue"][slot="displayValue"]');
20788
- const hasSlottedDisplayValue = Boolean(forwarderSlot?.assignedNodes({ flatten: true }).some((node) => {
20789
- if (node.nodeType === Node.TEXT_NODE) {
20790
- return node.textContent.trim().length > 0;
20791
- }
20792
- if (node.nodeType === Node.ELEMENT_NODE) {
20793
- return node.textContent.trim().length > 0 ||
20794
- node.children.length > 0 ||
20795
- node.shadowRoot !== null;
20796
- }
20797
- return false;
20798
- }));
20799
-
20800
- if (!hasSlottedDisplayValue) {
20801
- const syntheticDV = document.createElement('span');
20802
- syntheticDV.setAttribute('slot', 'displayValue');
20803
- syntheticDV.textContent = this.value;
20804
- this.input.appendChild(syntheticDV);
20805
- }
20806
-
20785
+ // the correct label. This is intentionally preferred over a blank
20786
+ // state — the displayValueInTrigger.remove() cleanup above ensures
20787
+ // this placeholder is replaced once the real option is available.
20788
+ const syntheticDV = document.createElement('span');
20789
+ syntheticDV.setAttribute('slot', 'displayValue');
20790
+ syntheticDV.textContent = this.value;
20791
+ this.input.appendChild(syntheticDV);
20807
20792
  if (typeof this.input.checkDisplayValueSlotChange === 'function') {
20808
20793
  this.input.checkDisplayValueSlotChange();
20809
20794
  this.input.requestUpdate();
@@ -20979,6 +20964,10 @@ class AuroCombobox extends AuroElement {
20979
20964
  // from combobox's light DOM and won't be detected by dropdown's contains() check.
20980
20965
  this.dropdown.noHideOnThisFocusLoss = true;
20981
20966
 
20967
+ // Suppress the dropdown's generic focus restoration on close — the combobox
20968
+ // manages its own focus via setClearBtnFocus / setInputFocus / keyboard strategy.
20969
+ this.dropdown.noFocusRestoreOnClose = true;
20970
+
20982
20971
  // Listen for the ID to be added to the dropdown so we can capture it and use it for accessibility.
20983
20972
  this.dropdown.addEventListener('auroDropdown-idAdded', (event) => {
20984
20973
  this.dropdownId = event.detail.id;
@@ -4904,7 +4904,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4904
4904
  }
4905
4905
  };
4906
4906
 
4907
- var formkitVersion$2 = '202607160738';
4907
+ var formkitVersion$2 = '202607160755';
4908
4908
 
4909
4909
  let AuroElement$2 = class AuroElement extends LitElement {
4910
4910
  static get properties() {
@@ -5044,6 +5044,15 @@ class AuroDropdown extends AuroElement$2 {
5044
5044
  this.matchWidth = false;
5045
5045
  this.noHideOnThisFocusLoss = false;
5046
5046
 
5047
+ /**
5048
+ * When true, the dropdown skips its generic focus restoration on close.
5049
+ * Set by consumers (e.g. combobox) that manage their own focus routing
5050
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
5051
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
5052
+ * @private
5053
+ */
5054
+ this.noFocusRestoreOnClose = false;
5055
+
5047
5056
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
5048
5057
 
5049
5058
  // Layout Config
@@ -5217,25 +5226,22 @@ class AuroDropdown extends AuroElement$2 {
5217
5226
  // getFocusableElements can't find it. Query assigned nodes directly.
5218
5227
  const slot = this.trigger.querySelector('slot[name="trigger"]');
5219
5228
  if (slot) {
5220
- const assigned = slot.assignedElements({ flatten: true });
5229
+ const assigned = slot.assignedElements();
5221
5230
  for (const el of assigned) {
5222
5231
  if (el.hasAttribute('disabled')) {
5223
5232
  continue;
5224
5233
  }
5225
-
5226
- // Try focusing a focusable descendant first (handles non-focusable wrappers).
5234
+ // Try finding a focusable descendant first (handles non-focusable
5235
+ // wrappers like <div> containing a <button>). If none found, try
5236
+ // focusing the element directly (works for custom elements like
5237
+ // auro-input that have delegatesFocus or a custom focus() method).
5227
5238
  const descendants = getFocusableElements(el);
5228
5239
  if (descendants.length > 0) {
5229
5240
  descendants[0].focus();
5230
5241
  return;
5231
5242
  }
5232
-
5233
- // Otherwise, try focusing the assigned element itself. Only stop if focus moved.
5234
- const prevActive = document.activeElement;
5235
5243
  el.focus();
5236
- if (document.activeElement !== prevActive) {
5237
- return;
5238
- }
5244
+ return;
5239
5245
  }
5240
5246
  }
5241
5247
  // Fallback: try DOM children (non-slotted content)
@@ -5695,7 +5701,7 @@ class AuroDropdown extends AuroElement$2 {
5695
5701
  }
5696
5702
 
5697
5703
  const eventType = event.detail.eventType || "unknown";
5698
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noHideOnThisFocusLoss) {
5704
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
5699
5705
  this.focusTrigger();
5700
5706
  }
5701
5707
 
@@ -5703,9 +5709,9 @@ class AuroDropdown extends AuroElement$2 {
5703
5709
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
5704
5710
  // — restoring to the trigger would trap the user on this dropdown, forcing
5705
5711
  // an extra Tab to move on. Escape and outside-click still restore.
5706
- // When noHideOnThisFocusLoss is true, the consumer (e.g. combobox) manages
5712
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
5707
5713
  // its own focus restoration — skip the generic trigger focus to avoid races.
5708
- if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noHideOnThisFocusLoss) {
5714
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
5709
5715
  // wait til the bib gets fully closed and rendered
5710
5716
  setTimeout(() => {
5711
5717
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -18571,7 +18577,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
18571
18577
  }
18572
18578
  };
18573
18579
 
18574
- var formkitVersion$1 = '202607160738';
18580
+ var formkitVersion$1 = '202607160755';
18575
18581
 
18576
18582
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18577
18583
  // See LICENSE in the project root for license information.
@@ -18865,15 +18871,11 @@ class AuroInput extends BaseInput {
18865
18871
  // Check for any element (including custom elements like <auro-icon>
18866
18872
  // that render via shadow DOM with no text content).
18867
18873
  const lightDomContent = this.querySelector('[slot="displayValue"]:not(slot)');
18868
- const nextHasDisplayValueContent = Boolean(lightDomContent && (
18874
+ this.hasDisplayValueContent = Boolean(lightDomContent && (
18869
18875
  lightDomContent.textContent.trim().length > 0 ||
18870
18876
  lightDomContent.children.length > 0 ||
18871
18877
  lightDomContent.shadowRoot !== null
18872
18878
  ));
18873
- if (nextHasDisplayValueContent !== this.hasDisplayValueContent) {
18874
- this.hasDisplayValueContent = nextHasDisplayValueContent;
18875
- this.requestUpdate();
18876
- }
18877
18879
  return;
18878
18880
  }
18879
18881
  const nodes = slot.assignedNodes({ flatten: true });
@@ -19723,7 +19725,7 @@ class AuroBibtemplate extends LitElement {
19723
19725
  }
19724
19726
  }
19725
19727
 
19726
- var formkitVersion = '202607160738';
19728
+ var formkitVersion = '202607160755';
19727
19729
 
19728
19730
  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}`;
19729
19731
 
@@ -20780,30 +20782,13 @@ class AuroCombobox extends AuroElement {
20780
20782
  // human-readable label (e.g. "Seattle, WA"). For consumers where
20781
20783
  // value ≠ label, this produces a brief flash of the raw value until
20782
20784
  // the option elements load and updateTriggerTextDisplay re-runs with
20783
- // the correct label.
20784
-
20785
- // Avoid adding synthetic content when a consumer already provides
20786
- // displayValue content via the forwarded slot.
20787
- const forwarderSlot = this.input.querySelector('slot[name="displayValue"][slot="displayValue"]');
20788
- const hasSlottedDisplayValue = Boolean(forwarderSlot?.assignedNodes({ flatten: true }).some((node) => {
20789
- if (node.nodeType === Node.TEXT_NODE) {
20790
- return node.textContent.trim().length > 0;
20791
- }
20792
- if (node.nodeType === Node.ELEMENT_NODE) {
20793
- return node.textContent.trim().length > 0 ||
20794
- node.children.length > 0 ||
20795
- node.shadowRoot !== null;
20796
- }
20797
- return false;
20798
- }));
20799
-
20800
- if (!hasSlottedDisplayValue) {
20801
- const syntheticDV = document.createElement('span');
20802
- syntheticDV.setAttribute('slot', 'displayValue');
20803
- syntheticDV.textContent = this.value;
20804
- this.input.appendChild(syntheticDV);
20805
- }
20806
-
20785
+ // the correct label. This is intentionally preferred over a blank
20786
+ // state — the displayValueInTrigger.remove() cleanup above ensures
20787
+ // this placeholder is replaced once the real option is available.
20788
+ const syntheticDV = document.createElement('span');
20789
+ syntheticDV.setAttribute('slot', 'displayValue');
20790
+ syntheticDV.textContent = this.value;
20791
+ this.input.appendChild(syntheticDV);
20807
20792
  if (typeof this.input.checkDisplayValueSlotChange === 'function') {
20808
20793
  this.input.checkDisplayValueSlotChange();
20809
20794
  this.input.requestUpdate();
@@ -20979,6 +20964,10 @@ class AuroCombobox extends AuroElement {
20979
20964
  // from combobox's light DOM and won't be detected by dropdown's contains() check.
20980
20965
  this.dropdown.noHideOnThisFocusLoss = true;
20981
20966
 
20967
+ // Suppress the dropdown's generic focus restoration on close — the combobox
20968
+ // manages its own focus via setClearBtnFocus / setInputFocus / keyboard strategy.
20969
+ this.dropdown.noFocusRestoreOnClose = true;
20970
+
20982
20971
  // Listen for the ID to be added to the dropdown so we can capture it and use it for accessibility.
20983
20972
  this.dropdown.addEventListener('auroDropdown-idAdded', (event) => {
20984
20973
  this.dropdownId = event.detail.id;
@@ -1114,7 +1114,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
1114
1114
  }
1115
1115
  };
1116
1116
 
1117
- var formkitVersion$1 = '202607160738';
1117
+ var formkitVersion$1 = '202607160755';
1118
1118
 
1119
1119
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1120
1120
  // See LICENSE in the project root for license information.
@@ -5280,7 +5280,7 @@ class AuroHelpText extends i$2 {
5280
5280
  }
5281
5281
  }
5282
5282
 
5283
- var formkitVersion = '202607160738';
5283
+ var formkitVersion = '202607160755';
5284
5284
 
5285
5285
  let AuroElement$1 = class AuroElement extends i$2 {
5286
5286
  static get properties() {
@@ -5420,6 +5420,15 @@ class AuroDropdown extends AuroElement$1 {
5420
5420
  this.matchWidth = false;
5421
5421
  this.noHideOnThisFocusLoss = false;
5422
5422
 
5423
+ /**
5424
+ * When true, the dropdown skips its generic focus restoration on close.
5425
+ * Set by consumers (e.g. combobox) that manage their own focus routing
5426
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
5427
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
5428
+ * @private
5429
+ */
5430
+ this.noFocusRestoreOnClose = false;
5431
+
5423
5432
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
5424
5433
 
5425
5434
  // Layout Config
@@ -5593,25 +5602,22 @@ class AuroDropdown extends AuroElement$1 {
5593
5602
  // getFocusableElements can't find it. Query assigned nodes directly.
5594
5603
  const slot = this.trigger.querySelector('slot[name="trigger"]');
5595
5604
  if (slot) {
5596
- const assigned = slot.assignedElements({ flatten: true });
5605
+ const assigned = slot.assignedElements();
5597
5606
  for (const el of assigned) {
5598
5607
  if (el.hasAttribute('disabled')) {
5599
5608
  continue;
5600
5609
  }
5601
-
5602
- // Try focusing a focusable descendant first (handles non-focusable wrappers).
5610
+ // Try finding a focusable descendant first (handles non-focusable
5611
+ // wrappers like <div> containing a <button>). If none found, try
5612
+ // focusing the element directly (works for custom elements like
5613
+ // auro-input that have delegatesFocus or a custom focus() method).
5603
5614
  const descendants = getFocusableElements(el);
5604
5615
  if (descendants.length > 0) {
5605
5616
  descendants[0].focus();
5606
5617
  return;
5607
5618
  }
5608
-
5609
- // Otherwise, try focusing the assigned element itself. Only stop if focus moved.
5610
- const prevActive = document.activeElement;
5611
5619
  el.focus();
5612
- if (document.activeElement !== prevActive) {
5613
- return;
5614
- }
5620
+ return;
5615
5621
  }
5616
5622
  }
5617
5623
  // Fallback: try DOM children (non-slotted content)
@@ -6071,7 +6077,7 @@ class AuroDropdown extends AuroElement$1 {
6071
6077
  }
6072
6078
 
6073
6079
  const eventType = event.detail.eventType || "unknown";
6074
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noHideOnThisFocusLoss) {
6080
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
6075
6081
  this.focusTrigger();
6076
6082
  }
6077
6083
 
@@ -6079,9 +6085,9 @@ class AuroDropdown extends AuroElement$1 {
6079
6085
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
6080
6086
  // — restoring to the trigger would trap the user on this dropdown, forcing
6081
6087
  // an extra Tab to move on. Escape and outside-click still restore.
6082
- // When noHideOnThisFocusLoss is true, the consumer (e.g. combobox) manages
6088
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
6083
6089
  // its own focus restoration — skip the generic trigger focus to avoid races.
6084
- if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noHideOnThisFocusLoss) {
6090
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
6085
6091
  // wait til the bib gets fully closed and rendered
6086
6092
  setTimeout(() => {
6087
6093
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -1114,7 +1114,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
1114
1114
  }
1115
1115
  };
1116
1116
 
1117
- var formkitVersion$1 = '202607160738';
1117
+ var formkitVersion$1 = '202607160755';
1118
1118
 
1119
1119
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1120
1120
  // See LICENSE in the project root for license information.
@@ -5280,7 +5280,7 @@ class AuroHelpText extends i$2 {
5280
5280
  }
5281
5281
  }
5282
5282
 
5283
- var formkitVersion = '202607160738';
5283
+ var formkitVersion = '202607160755';
5284
5284
 
5285
5285
  let AuroElement$1 = class AuroElement extends i$2 {
5286
5286
  static get properties() {
@@ -5420,6 +5420,15 @@ class AuroDropdown extends AuroElement$1 {
5420
5420
  this.matchWidth = false;
5421
5421
  this.noHideOnThisFocusLoss = false;
5422
5422
 
5423
+ /**
5424
+ * When true, the dropdown skips its generic focus restoration on close.
5425
+ * Set by consumers (e.g. combobox) that manage their own focus routing
5426
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
5427
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
5428
+ * @private
5429
+ */
5430
+ this.noFocusRestoreOnClose = false;
5431
+
5423
5432
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
5424
5433
 
5425
5434
  // Layout Config
@@ -5593,25 +5602,22 @@ class AuroDropdown extends AuroElement$1 {
5593
5602
  // getFocusableElements can't find it. Query assigned nodes directly.
5594
5603
  const slot = this.trigger.querySelector('slot[name="trigger"]');
5595
5604
  if (slot) {
5596
- const assigned = slot.assignedElements({ flatten: true });
5605
+ const assigned = slot.assignedElements();
5597
5606
  for (const el of assigned) {
5598
5607
  if (el.hasAttribute('disabled')) {
5599
5608
  continue;
5600
5609
  }
5601
-
5602
- // Try focusing a focusable descendant first (handles non-focusable wrappers).
5610
+ // Try finding a focusable descendant first (handles non-focusable
5611
+ // wrappers like <div> containing a <button>). If none found, try
5612
+ // focusing the element directly (works for custom elements like
5613
+ // auro-input that have delegatesFocus or a custom focus() method).
5603
5614
  const descendants = getFocusableElements(el);
5604
5615
  if (descendants.length > 0) {
5605
5616
  descendants[0].focus();
5606
5617
  return;
5607
5618
  }
5608
-
5609
- // Otherwise, try focusing the assigned element itself. Only stop if focus moved.
5610
- const prevActive = document.activeElement;
5611
5619
  el.focus();
5612
- if (document.activeElement !== prevActive) {
5613
- return;
5614
- }
5620
+ return;
5615
5621
  }
5616
5622
  }
5617
5623
  // Fallback: try DOM children (non-slotted content)
@@ -6071,7 +6077,7 @@ class AuroDropdown extends AuroElement$1 {
6071
6077
  }
6072
6078
 
6073
6079
  const eventType = event.detail.eventType || "unknown";
6074
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noHideOnThisFocusLoss) {
6080
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
6075
6081
  this.focusTrigger();
6076
6082
  }
6077
6083
 
@@ -6079,9 +6085,9 @@ class AuroDropdown extends AuroElement$1 {
6079
6085
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
6080
6086
  // — restoring to the trigger would trap the user on this dropdown, forcing
6081
6087
  // an extra Tab to move on. Escape and outside-click still restore.
6082
- // When noHideOnThisFocusLoss is true, the consumer (e.g. combobox) manages
6088
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
6083
6089
  // its own focus restoration — skip the generic trigger focus to avoid races.
6084
- if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noHideOnThisFocusLoss) {
6090
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
6085
6091
  // wait til the bib gets fully closed and rendered
6086
6092
  setTimeout(() => {
6087
6093
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -1064,7 +1064,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
1064
1064
  }
1065
1065
  };
1066
1066
 
1067
- var formkitVersion$1 = '202607160738';
1067
+ var formkitVersion$1 = '202607160755';
1068
1068
 
1069
1069
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1070
1070
  // See LICENSE in the project root for license information.
@@ -5212,7 +5212,7 @@ class AuroHelpText extends LitElement {
5212
5212
  }
5213
5213
  }
5214
5214
 
5215
- var formkitVersion = '202607160738';
5215
+ var formkitVersion = '202607160755';
5216
5216
 
5217
5217
  let AuroElement$1 = class AuroElement extends LitElement {
5218
5218
  static get properties() {
@@ -5352,6 +5352,15 @@ class AuroDropdown extends AuroElement$1 {
5352
5352
  this.matchWidth = false;
5353
5353
  this.noHideOnThisFocusLoss = false;
5354
5354
 
5355
+ /**
5356
+ * When true, the dropdown skips its generic focus restoration on close.
5357
+ * Set by consumers (e.g. combobox) that manage their own focus routing
5358
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
5359
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
5360
+ * @private
5361
+ */
5362
+ this.noFocusRestoreOnClose = false;
5363
+
5355
5364
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
5356
5365
 
5357
5366
  // Layout Config
@@ -5525,25 +5534,22 @@ class AuroDropdown extends AuroElement$1 {
5525
5534
  // getFocusableElements can't find it. Query assigned nodes directly.
5526
5535
  const slot = this.trigger.querySelector('slot[name="trigger"]');
5527
5536
  if (slot) {
5528
- const assigned = slot.assignedElements({ flatten: true });
5537
+ const assigned = slot.assignedElements();
5529
5538
  for (const el of assigned) {
5530
5539
  if (el.hasAttribute('disabled')) {
5531
5540
  continue;
5532
5541
  }
5533
-
5534
- // Try focusing a focusable descendant first (handles non-focusable wrappers).
5542
+ // Try finding a focusable descendant first (handles non-focusable
5543
+ // wrappers like <div> containing a <button>). If none found, try
5544
+ // focusing the element directly (works for custom elements like
5545
+ // auro-input that have delegatesFocus or a custom focus() method).
5535
5546
  const descendants = getFocusableElements(el);
5536
5547
  if (descendants.length > 0) {
5537
5548
  descendants[0].focus();
5538
5549
  return;
5539
5550
  }
5540
-
5541
- // Otherwise, try focusing the assigned element itself. Only stop if focus moved.
5542
- const prevActive = document.activeElement;
5543
5551
  el.focus();
5544
- if (document.activeElement !== prevActive) {
5545
- return;
5546
- }
5552
+ return;
5547
5553
  }
5548
5554
  }
5549
5555
  // Fallback: try DOM children (non-slotted content)
@@ -6003,7 +6009,7 @@ class AuroDropdown extends AuroElement$1 {
6003
6009
  }
6004
6010
 
6005
6011
  const eventType = event.detail.eventType || "unknown";
6006
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noHideOnThisFocusLoss) {
6012
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
6007
6013
  this.focusTrigger();
6008
6014
  }
6009
6015
 
@@ -6011,9 +6017,9 @@ class AuroDropdown extends AuroElement$1 {
6011
6017
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
6012
6018
  // — restoring to the trigger would trap the user on this dropdown, forcing
6013
6019
  // an extra Tab to move on. Escape and outside-click still restore.
6014
- // When noHideOnThisFocusLoss is true, the consumer (e.g. combobox) manages
6020
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
6015
6021
  // its own focus restoration — skip the generic trigger focus to avoid races.
6016
- if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noHideOnThisFocusLoss) {
6022
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
6017
6023
  // wait til the bib gets fully closed and rendered
6018
6024
  setTimeout(() => {
6019
6025
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).