@aurodesignsystem-dev/auro-formkit 0.0.0-pr1377.0 → 0.0.0-pr1377.2

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 (37) hide show
  1. package/components/checkbox/demo/api.min.js +1 -1
  2. package/components/checkbox/demo/index.min.js +1 -1
  3. package/components/checkbox/dist/index.js +1 -1
  4. package/components/checkbox/dist/registered.js +1 -1
  5. package/components/combobox/demo/api.min.js +59 -16
  6. package/components/combobox/demo/index.min.js +59 -16
  7. package/components/combobox/dist/auro-combobox.d.ts +1 -0
  8. package/components/combobox/dist/index.js +59 -16
  9. package/components/combobox/dist/registered.js +59 -16
  10. package/components/counter/demo/api.min.js +26 -13
  11. package/components/counter/demo/index.min.js +26 -13
  12. package/components/counter/dist/index.js +26 -13
  13. package/components/counter/dist/registered.js +26 -13
  14. package/components/datepicker/demo/api.min.js +27 -14
  15. package/components/datepicker/demo/index.min.js +27 -14
  16. package/components/datepicker/dist/index.js +27 -14
  17. package/components/datepicker/dist/registered.js +27 -14
  18. package/components/dropdown/demo/api.min.js +25 -12
  19. package/components/dropdown/demo/index.min.js +25 -12
  20. package/components/dropdown/dist/index.js +25 -12
  21. package/components/dropdown/dist/registered.js +25 -12
  22. package/components/form/demo/api.min.js +143 -60
  23. package/components/form/demo/index.min.js +143 -60
  24. package/components/input/demo/api.min.js +1 -1
  25. package/components/input/demo/index.min.js +1 -1
  26. package/components/input/dist/index.js +1 -1
  27. package/components/input/dist/registered.js +1 -1
  28. package/components/radio/demo/api.min.js +1 -1
  29. package/components/radio/demo/index.min.js +1 -1
  30. package/components/radio/dist/index.js +1 -1
  31. package/components/radio/dist/registered.js +1 -1
  32. package/components/select/demo/api.min.js +28 -14
  33. package/components/select/demo/index.min.js +28 -14
  34. package/components/select/dist/index.js +28 -14
  35. package/components/select/dist/registered.js +28 -14
  36. package/custom-elements.json +2 -2
  37. package/package.json +2 -2
@@ -1687,7 +1687,7 @@ class AuroHelpText extends i$2 {
1687
1687
  }
1688
1688
  }
1689
1689
 
1690
- var formkitVersion = '202603172102';
1690
+ var formkitVersion = '202603181736';
1691
1691
 
1692
1692
  // Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1693
1693
  // See LICENSE in the project root for license information.
@@ -1679,7 +1679,7 @@ class AuroHelpText extends i$2 {
1679
1679
  }
1680
1680
  }
1681
1681
 
1682
- var formkitVersion = '202603172102';
1682
+ var formkitVersion = '202603181736';
1683
1683
 
1684
1684
  // Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1685
1685
  // See LICENSE in the project root for license information.
@@ -1632,7 +1632,7 @@ class AuroHelpText extends LitElement {
1632
1632
  }
1633
1633
  }
1634
1634
 
1635
- var formkitVersion = '202603172102';
1635
+ var formkitVersion = '202603181736';
1636
1636
 
1637
1637
  // Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1638
1638
  // See LICENSE in the project root for license information.
@@ -1632,7 +1632,7 @@ class AuroHelpText extends LitElement {
1632
1632
  }
1633
1633
  }
1634
1634
 
1635
- var formkitVersion = '202603172102';
1635
+ var formkitVersion = '202603181736';
1636
1636
 
1637
1637
  // Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1638
1638
  // See LICENSE in the project root for license information.
@@ -1342,6 +1342,17 @@ const comboboxKeyboardStrategy = {
1342
1342
  // since Safari does not propagate :focus-within through shadow DOM.
1343
1343
  const clearBtnHasFocus = clearBtn && clearBtn.shadowRoot && clearBtn.shadowRoot.activeElement !== null;
1344
1344
 
1345
+ if (evt.shiftKey) {
1346
+ // Shift+Tab from clear button: move focus back to the input
1347
+ if (clearBtnHasFocus) {
1348
+ ctx.activeInput.focus();
1349
+ return;
1350
+ }
1351
+ // Shift+Tab from input (or no clear button): close without selecting
1352
+ component.hideBib();
1353
+ return;
1354
+ }
1355
+
1345
1356
  // Tab from input: if clear button exists and doesn't have focus, focus it
1346
1357
  if (clearBtn && !clearBtnHasFocus && ctx.activeInput.value) {
1347
1358
  // Force clear button container visible to work around Safari not
@@ -1379,8 +1390,8 @@ const comboboxKeyboardStrategy = {
1379
1390
  return;
1380
1391
  }
1381
1392
 
1382
- // Non-fullscreen: select + close
1383
- if (component.menu.optionActive && component.menu.optionActive.value) {
1393
+ // Non-fullscreen: select + close (Shift+Tab closes without selecting)
1394
+ if (!evt.shiftKey && component.menu.optionActive && component.menu.optionActive.value) {
1384
1395
  component.menu.value = component.menu.optionActive.value;
1385
1396
  }
1386
1397
  component.hideBib();
@@ -3639,19 +3650,32 @@ class AuroFloatingUI {
3639
3650
  * @param {String} eventType - The event type that triggered the hiding action.
3640
3651
  */
3641
3652
  hideBib(eventType = "unknown") {
3642
- if (!this.element.disabled && !this.element.noToggle) {
3643
- this.lockScroll(false);
3644
- this.element.triggerChevron?.removeAttribute("data-expanded");
3653
+ if (this.element.disabled) {
3654
+ return;
3655
+ }
3645
3656
 
3646
- if (this.element.isPopoverVisible) {
3647
- this.element.isPopoverVisible = false;
3648
- }
3649
- if (this.showing) {
3650
- this.cleanupHideHandlers();
3651
- this.showing = false;
3652
- this.dispatchEventDropdownToggle(eventType);
3653
- }
3657
+ // noToggle dropdowns should not close when the trigger is clicked (the
3658
+ // "toggle" behavior), but they CAN still close via other interactions like
3659
+ // Escape key or focus loss.
3660
+ if (this.element.noToggle && eventType === "click") {
3661
+ return;
3654
3662
  }
3663
+
3664
+ this.lockScroll(false);
3665
+ this.element.triggerChevron?.removeAttribute("data-expanded");
3666
+
3667
+ if (this.element.isPopoverVisible) {
3668
+ this.element.isPopoverVisible = false;
3669
+ }
3670
+ if (this.showing) {
3671
+ this.cleanupHideHandlers();
3672
+ this.showing = false;
3673
+ this.dispatchEventDropdownToggle(eventType);
3674
+ }
3675
+
3676
+ // Only clear the global reference if the bib was actually hidden.
3677
+ // Clearing it when hideBib is blocked (e.g. noToggle + click) corrupts
3678
+ // the singleton state so other dropdowns can't detect this one is still open.
3655
3679
  document.expandedAuroFloater = null;
3656
3680
  }
3657
3681
 
@@ -4984,7 +5008,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$4 {
4984
5008
  }
4985
5009
  };
4986
5010
 
4987
- var formkitVersion$2 = '202603172102';
5011
+ var formkitVersion$2 = '202603181736';
4988
5012
 
4989
5013
  let AuroElement$2 = class AuroElement extends i$4 {
4990
5014
  static get properties() {
@@ -12739,7 +12763,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$4 {
12739
12763
  }
12740
12764
  };
12741
12765
 
12742
- var formkitVersion$1 = '202603172102';
12766
+ var formkitVersion$1 = '202603181736';
12743
12767
 
12744
12768
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12745
12769
  // See LICENSE in the project root for license information.
@@ -13778,7 +13802,7 @@ class AuroBibtemplate extends i$4 {
13778
13802
  }
13779
13803
  }
13780
13804
 
13781
- var formkitVersion = '202603172102';
13805
+ var formkitVersion = '202603181736';
13782
13806
 
13783
13807
  var styleCss$3 = i$7`.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}`;
13784
13808
 
@@ -14165,6 +14189,7 @@ class AuroCombobox extends AuroElement {
14165
14189
  this.value = undefined;
14166
14190
  this.typedValue = undefined;
14167
14191
  this.behavior = "suggestion";
14192
+ this.clearBtnFocused = false;
14168
14193
 
14169
14194
  // Defaults that effect the overall layout of the combobox
14170
14195
  this.checkmark = false;
@@ -14815,6 +14840,9 @@ class AuroCombobox extends AuroElement {
14815
14840
  if (this.dropdownOpen) {
14816
14841
  const expandedDelay = 150;
14817
14842
  this._expandedTimeout = setTimeout(() => {
14843
+ if (!this.value) {
14844
+ this.updateActiveOption(0);
14845
+ }
14818
14846
  this.triggerExpandedState = true;
14819
14847
  }, expandedDelay);
14820
14848
  } else {
@@ -15121,6 +15149,21 @@ class AuroCombobox extends AuroElement {
15121
15149
  this.validate();
15122
15150
  }
15123
15151
  });
15152
+
15153
+ /**
15154
+ * Track focus on the clear button within the input.
15155
+ * This is used to prevent unwanted interactions when the clear button is focused.
15156
+ *
15157
+ * Use event delegation on the shadow root so the listener works regardless
15158
+ * of when .clearBtn is rendered (it only exists after a value is set).
15159
+ */
15160
+ this.input.shadowRoot.addEventListener('focusin', (event) => {
15161
+ if (event.target.closest('.clearBtn')) {
15162
+ this.clearBtnFocused = true;
15163
+ } else {
15164
+ this.clearBtnFocused = false;
15165
+ }
15166
+ });
15124
15167
  }
15125
15168
 
15126
15169
  /**
@@ -1265,6 +1265,17 @@ const comboboxKeyboardStrategy = {
1265
1265
  // since Safari does not propagate :focus-within through shadow DOM.
1266
1266
  const clearBtnHasFocus = clearBtn && clearBtn.shadowRoot && clearBtn.shadowRoot.activeElement !== null;
1267
1267
 
1268
+ if (evt.shiftKey) {
1269
+ // Shift+Tab from clear button: move focus back to the input
1270
+ if (clearBtnHasFocus) {
1271
+ ctx.activeInput.focus();
1272
+ return;
1273
+ }
1274
+ // Shift+Tab from input (or no clear button): close without selecting
1275
+ component.hideBib();
1276
+ return;
1277
+ }
1278
+
1268
1279
  // Tab from input: if clear button exists and doesn't have focus, focus it
1269
1280
  if (clearBtn && !clearBtnHasFocus && ctx.activeInput.value) {
1270
1281
  // Force clear button container visible to work around Safari not
@@ -1302,8 +1313,8 @@ const comboboxKeyboardStrategy = {
1302
1313
  return;
1303
1314
  }
1304
1315
 
1305
- // Non-fullscreen: select + close
1306
- if (component.menu.optionActive && component.menu.optionActive.value) {
1316
+ // Non-fullscreen: select + close (Shift+Tab closes without selecting)
1317
+ if (!evt.shiftKey && component.menu.optionActive && component.menu.optionActive.value) {
1307
1318
  component.menu.value = component.menu.optionActive.value;
1308
1319
  }
1309
1320
  component.hideBib();
@@ -3562,19 +3573,32 @@ class AuroFloatingUI {
3562
3573
  * @param {String} eventType - The event type that triggered the hiding action.
3563
3574
  */
3564
3575
  hideBib(eventType = "unknown") {
3565
- if (!this.element.disabled && !this.element.noToggle) {
3566
- this.lockScroll(false);
3567
- this.element.triggerChevron?.removeAttribute("data-expanded");
3576
+ if (this.element.disabled) {
3577
+ return;
3578
+ }
3568
3579
 
3569
- if (this.element.isPopoverVisible) {
3570
- this.element.isPopoverVisible = false;
3571
- }
3572
- if (this.showing) {
3573
- this.cleanupHideHandlers();
3574
- this.showing = false;
3575
- this.dispatchEventDropdownToggle(eventType);
3576
- }
3580
+ // noToggle dropdowns should not close when the trigger is clicked (the
3581
+ // "toggle" behavior), but they CAN still close via other interactions like
3582
+ // Escape key or focus loss.
3583
+ if (this.element.noToggle && eventType === "click") {
3584
+ return;
3577
3585
  }
3586
+
3587
+ this.lockScroll(false);
3588
+ this.element.triggerChevron?.removeAttribute("data-expanded");
3589
+
3590
+ if (this.element.isPopoverVisible) {
3591
+ this.element.isPopoverVisible = false;
3592
+ }
3593
+ if (this.showing) {
3594
+ this.cleanupHideHandlers();
3595
+ this.showing = false;
3596
+ this.dispatchEventDropdownToggle(eventType);
3597
+ }
3598
+
3599
+ // Only clear the global reference if the bib was actually hidden.
3600
+ // Clearing it when hideBib is blocked (e.g. noToggle + click) corrupts
3601
+ // the singleton state so other dropdowns can't detect this one is still open.
3578
3602
  document.expandedAuroFloater = null;
3579
3603
  }
3580
3604
 
@@ -4907,7 +4931,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$4 {
4907
4931
  }
4908
4932
  };
4909
4933
 
4910
- var formkitVersion$2 = '202603172102';
4934
+ var formkitVersion$2 = '202603181736';
4911
4935
 
4912
4936
  let AuroElement$2 = class AuroElement extends i$4 {
4913
4937
  static get properties() {
@@ -12662,7 +12686,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$4 {
12662
12686
  }
12663
12687
  };
12664
12688
 
12665
- var formkitVersion$1 = '202603172102';
12689
+ var formkitVersion$1 = '202603181736';
12666
12690
 
12667
12691
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12668
12692
  // See LICENSE in the project root for license information.
@@ -13701,7 +13725,7 @@ class AuroBibtemplate extends i$4 {
13701
13725
  }
13702
13726
  }
13703
13727
 
13704
- var formkitVersion = '202603172102';
13728
+ var formkitVersion = '202603181736';
13705
13729
 
13706
13730
  var styleCss$3 = i$7`.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}`;
13707
13731
 
@@ -14088,6 +14112,7 @@ class AuroCombobox extends AuroElement {
14088
14112
  this.value = undefined;
14089
14113
  this.typedValue = undefined;
14090
14114
  this.behavior = "suggestion";
14115
+ this.clearBtnFocused = false;
14091
14116
 
14092
14117
  // Defaults that effect the overall layout of the combobox
14093
14118
  this.checkmark = false;
@@ -14738,6 +14763,9 @@ class AuroCombobox extends AuroElement {
14738
14763
  if (this.dropdownOpen) {
14739
14764
  const expandedDelay = 150;
14740
14765
  this._expandedTimeout = setTimeout(() => {
14766
+ if (!this.value) {
14767
+ this.updateActiveOption(0);
14768
+ }
14741
14769
  this.triggerExpandedState = true;
14742
14770
  }, expandedDelay);
14743
14771
  } else {
@@ -15044,6 +15072,21 @@ class AuroCombobox extends AuroElement {
15044
15072
  this.validate();
15045
15073
  }
15046
15074
  });
15075
+
15076
+ /**
15077
+ * Track focus on the clear button within the input.
15078
+ * This is used to prevent unwanted interactions when the clear button is focused.
15079
+ *
15080
+ * Use event delegation on the shadow root so the listener works regardless
15081
+ * of when .clearBtn is rendered (it only exists after a value is set).
15082
+ */
15083
+ this.input.shadowRoot.addEventListener('focusin', (event) => {
15084
+ if (event.target.closest('.clearBtn')) {
15085
+ this.clearBtnFocused = true;
15086
+ } else {
15087
+ this.clearBtnFocused = false;
15088
+ }
15089
+ });
15047
15090
  }
15048
15091
 
15049
15092
  /**
@@ -339,6 +339,7 @@ export class AuroCombobox extends AuroElement {
339
339
  value: any;
340
340
  typedValue: any;
341
341
  behavior: string;
342
+ clearBtnFocused: boolean;
342
343
  checkmark: boolean;
343
344
  dvInputOnly: boolean;
344
345
  fullscreenBreakpoint: string;
@@ -1222,6 +1222,17 @@ const comboboxKeyboardStrategy = {
1222
1222
  // since Safari does not propagate :focus-within through shadow DOM.
1223
1223
  const clearBtnHasFocus = clearBtn && clearBtn.shadowRoot && clearBtn.shadowRoot.activeElement !== null;
1224
1224
 
1225
+ if (evt.shiftKey) {
1226
+ // Shift+Tab from clear button: move focus back to the input
1227
+ if (clearBtnHasFocus) {
1228
+ ctx.activeInput.focus();
1229
+ return;
1230
+ }
1231
+ // Shift+Tab from input (or no clear button): close without selecting
1232
+ component.hideBib();
1233
+ return;
1234
+ }
1235
+
1225
1236
  // Tab from input: if clear button exists and doesn't have focus, focus it
1226
1237
  if (clearBtn && !clearBtnHasFocus && ctx.activeInput.value) {
1227
1238
  // Force clear button container visible to work around Safari not
@@ -1259,8 +1270,8 @@ const comboboxKeyboardStrategy = {
1259
1270
  return;
1260
1271
  }
1261
1272
 
1262
- // Non-fullscreen: select + close
1263
- if (component.menu.optionActive && component.menu.optionActive.value) {
1273
+ // Non-fullscreen: select + close (Shift+Tab closes without selecting)
1274
+ if (!evt.shiftKey && component.menu.optionActive && component.menu.optionActive.value) {
1264
1275
  component.menu.value = component.menu.optionActive.value;
1265
1276
  }
1266
1277
  component.hideBib();
@@ -3495,19 +3506,32 @@ class AuroFloatingUI {
3495
3506
  * @param {String} eventType - The event type that triggered the hiding action.
3496
3507
  */
3497
3508
  hideBib(eventType = "unknown") {
3498
- if (!this.element.disabled && !this.element.noToggle) {
3499
- this.lockScroll(false);
3500
- this.element.triggerChevron?.removeAttribute("data-expanded");
3509
+ if (this.element.disabled) {
3510
+ return;
3511
+ }
3501
3512
 
3502
- if (this.element.isPopoverVisible) {
3503
- this.element.isPopoverVisible = false;
3504
- }
3505
- if (this.showing) {
3506
- this.cleanupHideHandlers();
3507
- this.showing = false;
3508
- this.dispatchEventDropdownToggle(eventType);
3509
- }
3513
+ // noToggle dropdowns should not close when the trigger is clicked (the
3514
+ // "toggle" behavior), but they CAN still close via other interactions like
3515
+ // Escape key or focus loss.
3516
+ if (this.element.noToggle && eventType === "click") {
3517
+ return;
3510
3518
  }
3519
+
3520
+ this.lockScroll(false);
3521
+ this.element.triggerChevron?.removeAttribute("data-expanded");
3522
+
3523
+ if (this.element.isPopoverVisible) {
3524
+ this.element.isPopoverVisible = false;
3525
+ }
3526
+ if (this.showing) {
3527
+ this.cleanupHideHandlers();
3528
+ this.showing = false;
3529
+ this.dispatchEventDropdownToggle(eventType);
3530
+ }
3531
+
3532
+ // Only clear the global reference if the bib was actually hidden.
3533
+ // Clearing it when hideBib is blocked (e.g. noToggle + click) corrupts
3534
+ // the singleton state so other dropdowns can't detect this one is still open.
3511
3535
  document.expandedAuroFloater = null;
3512
3536
  }
3513
3537
 
@@ -4840,7 +4864,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4840
4864
  }
4841
4865
  };
4842
4866
 
4843
- var formkitVersion$2 = '202603172102';
4867
+ var formkitVersion$2 = '202603181736';
4844
4868
 
4845
4869
  let AuroElement$2 = class AuroElement extends LitElement {
4846
4870
  static get properties() {
@@ -12588,7 +12612,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
12588
12612
  }
12589
12613
  };
12590
12614
 
12591
- var formkitVersion$1 = '202603172102';
12615
+ var formkitVersion$1 = '202603181736';
12592
12616
 
12593
12617
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12594
12618
  // See LICENSE in the project root for license information.
@@ -13627,7 +13651,7 @@ class AuroBibtemplate extends LitElement {
13627
13651
  }
13628
13652
  }
13629
13653
 
13630
- var formkitVersion = '202603172102';
13654
+ var formkitVersion = '202603181736';
13631
13655
 
13632
13656
  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}`;
13633
13657
 
@@ -14014,6 +14038,7 @@ class AuroCombobox extends AuroElement {
14014
14038
  this.value = undefined;
14015
14039
  this.typedValue = undefined;
14016
14040
  this.behavior = "suggestion";
14041
+ this.clearBtnFocused = false;
14017
14042
 
14018
14043
  // Defaults that effect the overall layout of the combobox
14019
14044
  this.checkmark = false;
@@ -14664,6 +14689,9 @@ class AuroCombobox extends AuroElement {
14664
14689
  if (this.dropdownOpen) {
14665
14690
  const expandedDelay = 150;
14666
14691
  this._expandedTimeout = setTimeout(() => {
14692
+ if (!this.value) {
14693
+ this.updateActiveOption(0);
14694
+ }
14667
14695
  this.triggerExpandedState = true;
14668
14696
  }, expandedDelay);
14669
14697
  } else {
@@ -14970,6 +14998,21 @@ class AuroCombobox extends AuroElement {
14970
14998
  this.validate();
14971
14999
  }
14972
15000
  });
15001
+
15002
+ /**
15003
+ * Track focus on the clear button within the input.
15004
+ * This is used to prevent unwanted interactions when the clear button is focused.
15005
+ *
15006
+ * Use event delegation on the shadow root so the listener works regardless
15007
+ * of when .clearBtn is rendered (it only exists after a value is set).
15008
+ */
15009
+ this.input.shadowRoot.addEventListener('focusin', (event) => {
15010
+ if (event.target.closest('.clearBtn')) {
15011
+ this.clearBtnFocused = true;
15012
+ } else {
15013
+ this.clearBtnFocused = false;
15014
+ }
15015
+ });
14973
15016
  }
14974
15017
 
14975
15018
  /**
@@ -1222,6 +1222,17 @@ const comboboxKeyboardStrategy = {
1222
1222
  // since Safari does not propagate :focus-within through shadow DOM.
1223
1223
  const clearBtnHasFocus = clearBtn && clearBtn.shadowRoot && clearBtn.shadowRoot.activeElement !== null;
1224
1224
 
1225
+ if (evt.shiftKey) {
1226
+ // Shift+Tab from clear button: move focus back to the input
1227
+ if (clearBtnHasFocus) {
1228
+ ctx.activeInput.focus();
1229
+ return;
1230
+ }
1231
+ // Shift+Tab from input (or no clear button): close without selecting
1232
+ component.hideBib();
1233
+ return;
1234
+ }
1235
+
1225
1236
  // Tab from input: if clear button exists and doesn't have focus, focus it
1226
1237
  if (clearBtn && !clearBtnHasFocus && ctx.activeInput.value) {
1227
1238
  // Force clear button container visible to work around Safari not
@@ -1259,8 +1270,8 @@ const comboboxKeyboardStrategy = {
1259
1270
  return;
1260
1271
  }
1261
1272
 
1262
- // Non-fullscreen: select + close
1263
- if (component.menu.optionActive && component.menu.optionActive.value) {
1273
+ // Non-fullscreen: select + close (Shift+Tab closes without selecting)
1274
+ if (!evt.shiftKey && component.menu.optionActive && component.menu.optionActive.value) {
1264
1275
  component.menu.value = component.menu.optionActive.value;
1265
1276
  }
1266
1277
  component.hideBib();
@@ -3495,19 +3506,32 @@ class AuroFloatingUI {
3495
3506
  * @param {String} eventType - The event type that triggered the hiding action.
3496
3507
  */
3497
3508
  hideBib(eventType = "unknown") {
3498
- if (!this.element.disabled && !this.element.noToggle) {
3499
- this.lockScroll(false);
3500
- this.element.triggerChevron?.removeAttribute("data-expanded");
3509
+ if (this.element.disabled) {
3510
+ return;
3511
+ }
3501
3512
 
3502
- if (this.element.isPopoverVisible) {
3503
- this.element.isPopoverVisible = false;
3504
- }
3505
- if (this.showing) {
3506
- this.cleanupHideHandlers();
3507
- this.showing = false;
3508
- this.dispatchEventDropdownToggle(eventType);
3509
- }
3513
+ // noToggle dropdowns should not close when the trigger is clicked (the
3514
+ // "toggle" behavior), but they CAN still close via other interactions like
3515
+ // Escape key or focus loss.
3516
+ if (this.element.noToggle && eventType === "click") {
3517
+ return;
3510
3518
  }
3519
+
3520
+ this.lockScroll(false);
3521
+ this.element.triggerChevron?.removeAttribute("data-expanded");
3522
+
3523
+ if (this.element.isPopoverVisible) {
3524
+ this.element.isPopoverVisible = false;
3525
+ }
3526
+ if (this.showing) {
3527
+ this.cleanupHideHandlers();
3528
+ this.showing = false;
3529
+ this.dispatchEventDropdownToggle(eventType);
3530
+ }
3531
+
3532
+ // Only clear the global reference if the bib was actually hidden.
3533
+ // Clearing it when hideBib is blocked (e.g. noToggle + click) corrupts
3534
+ // the singleton state so other dropdowns can't detect this one is still open.
3511
3535
  document.expandedAuroFloater = null;
3512
3536
  }
3513
3537
 
@@ -4840,7 +4864,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4840
4864
  }
4841
4865
  };
4842
4866
 
4843
- var formkitVersion$2 = '202603172102';
4867
+ var formkitVersion$2 = '202603181736';
4844
4868
 
4845
4869
  let AuroElement$2 = class AuroElement extends LitElement {
4846
4870
  static get properties() {
@@ -12588,7 +12612,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
12588
12612
  }
12589
12613
  };
12590
12614
 
12591
- var formkitVersion$1 = '202603172102';
12615
+ var formkitVersion$1 = '202603181736';
12592
12616
 
12593
12617
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12594
12618
  // See LICENSE in the project root for license information.
@@ -13627,7 +13651,7 @@ class AuroBibtemplate extends LitElement {
13627
13651
  }
13628
13652
  }
13629
13653
 
13630
- var formkitVersion = '202603172102';
13654
+ var formkitVersion = '202603181736';
13631
13655
 
13632
13656
  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}`;
13633
13657
 
@@ -14014,6 +14038,7 @@ class AuroCombobox extends AuroElement {
14014
14038
  this.value = undefined;
14015
14039
  this.typedValue = undefined;
14016
14040
  this.behavior = "suggestion";
14041
+ this.clearBtnFocused = false;
14017
14042
 
14018
14043
  // Defaults that effect the overall layout of the combobox
14019
14044
  this.checkmark = false;
@@ -14664,6 +14689,9 @@ class AuroCombobox extends AuroElement {
14664
14689
  if (this.dropdownOpen) {
14665
14690
  const expandedDelay = 150;
14666
14691
  this._expandedTimeout = setTimeout(() => {
14692
+ if (!this.value) {
14693
+ this.updateActiveOption(0);
14694
+ }
14667
14695
  this.triggerExpandedState = true;
14668
14696
  }, expandedDelay);
14669
14697
  } else {
@@ -14970,6 +14998,21 @@ class AuroCombobox extends AuroElement {
14970
14998
  this.validate();
14971
14999
  }
14972
15000
  });
15001
+
15002
+ /**
15003
+ * Track focus on the clear button within the input.
15004
+ * This is used to prevent unwanted interactions when the clear button is focused.
15005
+ *
15006
+ * Use event delegation on the shadow root so the listener works regardless
15007
+ * of when .clearBtn is rendered (it only exists after a value is set).
15008
+ */
15009
+ this.input.shadowRoot.addEventListener('focusin', (event) => {
15010
+ if (event.target.closest('.clearBtn')) {
15011
+ this.clearBtnFocused = true;
15012
+ } else {
15013
+ this.clearBtnFocused = false;
15014
+ }
15015
+ });
14973
15016
  }
14974
15017
 
14975
15018
  /**
@@ -1470,7 +1470,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
1470
1470
  }
1471
1471
  };
1472
1472
 
1473
- var formkitVersion$1 = '202603172102';
1473
+ var formkitVersion$1 = '202603181736';
1474
1474
 
1475
1475
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1476
1476
  // See LICENSE in the project root for license information.
@@ -4118,19 +4118,32 @@ class AuroFloatingUI {
4118
4118
  * @param {String} eventType - The event type that triggered the hiding action.
4119
4119
  */
4120
4120
  hideBib(eventType = "unknown") {
4121
- if (!this.element.disabled && !this.element.noToggle) {
4122
- this.lockScroll(false);
4123
- this.element.triggerChevron?.removeAttribute("data-expanded");
4121
+ if (this.element.disabled) {
4122
+ return;
4123
+ }
4124
4124
 
4125
- if (this.element.isPopoverVisible) {
4126
- this.element.isPopoverVisible = false;
4127
- }
4128
- if (this.showing) {
4129
- this.cleanupHideHandlers();
4130
- this.showing = false;
4131
- this.dispatchEventDropdownToggle(eventType);
4132
- }
4125
+ // noToggle dropdowns should not close when the trigger is clicked (the
4126
+ // "toggle" behavior), but they CAN still close via other interactions like
4127
+ // Escape key or focus loss.
4128
+ if (this.element.noToggle && eventType === "click") {
4129
+ return;
4133
4130
  }
4131
+
4132
+ this.lockScroll(false);
4133
+ this.element.triggerChevron?.removeAttribute("data-expanded");
4134
+
4135
+ if (this.element.isPopoverVisible) {
4136
+ this.element.isPopoverVisible = false;
4137
+ }
4138
+ if (this.showing) {
4139
+ this.cleanupHideHandlers();
4140
+ this.showing = false;
4141
+ this.dispatchEventDropdownToggle(eventType);
4142
+ }
4143
+
4144
+ // Only clear the global reference if the bib was actually hidden.
4145
+ // Clearing it when hideBib is blocked (e.g. noToggle + click) corrupts
4146
+ // the singleton state so other dropdowns can't detect this one is still open.
4134
4147
  document.expandedAuroFloater = null;
4135
4148
  }
4136
4149
 
@@ -5463,7 +5476,7 @@ class AuroHelpText extends i$2 {
5463
5476
  }
5464
5477
  }
5465
5478
 
5466
- var formkitVersion = '202603172102';
5479
+ var formkitVersion = '202603181736';
5467
5480
 
5468
5481
  let AuroElement$1 = class AuroElement extends i$2 {
5469
5482
  static get properties() {