@aurodesignsystem-dev/auro-formkit 0.0.0-pr1395.0 → 0.0.0-pr1395.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 (44) 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 +151 -40
  6. package/components/combobox/demo/index.min.js +151 -40
  7. package/components/combobox/dist/index.js +3 -3
  8. package/components/combobox/dist/registered.js +3 -3
  9. package/components/counter/demo/api.min.js +2 -2
  10. package/components/counter/demo/index.min.js +2 -2
  11. package/components/counter/dist/index.js +2 -2
  12. package/components/counter/dist/registered.js +2 -2
  13. package/components/datepicker/demo/api.min.js +74 -13
  14. package/components/datepicker/demo/index.min.js +74 -13
  15. package/components/datepicker/dist/datepickerKeyboardStrategy.d.ts +4 -0
  16. package/components/datepicker/dist/index.js +74 -13
  17. package/components/datepicker/dist/registered.js +74 -13
  18. package/components/dropdown/demo/api.min.js +1 -1
  19. package/components/dropdown/demo/index.min.js +1 -1
  20. package/components/dropdown/dist/index.js +1 -1
  21. package/components/dropdown/dist/registered.js +1 -1
  22. package/components/form/demo/api.min.js +240 -63
  23. package/components/form/demo/index.min.js +240 -63
  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/menu/demo/api.md +1 -1
  29. package/components/menu/demo/api.min.js +148 -37
  30. package/components/menu/demo/index.min.js +148 -37
  31. package/components/menu/dist/auro-menu.context.d.ts +15 -3
  32. package/components/menu/dist/auro-menu.d.ts +1 -1
  33. package/components/menu/dist/index.js +148 -37
  34. package/components/menu/dist/registered.js +148 -37
  35. package/components/radio/demo/api.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/api.min.js +158 -42
  40. package/components/select/demo/index.min.js +158 -42
  41. package/components/select/dist/index.js +10 -5
  42. package/components/select/dist/registered.js +10 -5
  43. package/custom-elements.json +1514 -1429
  44. package/package.json +11 -4
@@ -4959,7 +4959,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$4 {
4959
4959
  }
4960
4960
  };
4961
4961
 
4962
- var formkitVersion$2 = '202603241813';
4962
+ var formkitVersion$2 = '202603241855';
4963
4963
 
4964
4964
  let AuroElement$2 = class AuroElement extends i$4 {
4965
4965
  static get properties() {
@@ -12714,7 +12714,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$4 {
12714
12714
  }
12715
12715
  };
12716
12716
 
12717
- var formkitVersion$1 = '202603241813';
12717
+ var formkitVersion$1 = '202603241855';
12718
12718
 
12719
12719
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12720
12720
  // See LICENSE in the project root for license information.
@@ -13753,7 +13753,7 @@ class AuroBibtemplate extends i$4 {
13753
13753
  }
13754
13754
  }
13755
13755
 
13756
- var formkitVersion = '202603241813';
13756
+ var formkitVersion = '202603241855';
13757
13757
 
13758
13758
  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}`;
13759
13759
 
@@ -15941,10 +15941,20 @@ class AuroMenuOption extends AuroElement {
15941
15941
  subscribe: true
15942
15942
  });
15943
15943
 
15944
- // Establish the key property as early as possible
15944
+ // Establish the key property as early as possible.
15945
+ // When a framework (e.g. Svelte) inserts the element into the DOM before
15946
+ // setting its `value` property, both `getAttribute('value')` and
15947
+ // `getAttribute('key')` return null here. Setting `this.key = null`
15948
+ // would block the fallback in `updated()` that assigns key from the
15949
+ // value property (the guard checked `=== undefined`). Only assign key
15950
+ // if at least one source attribute is actually present so that the
15951
+ // `updated()` fallback can run when the value property arrives later.
15945
15952
  const valueAttr = this.getAttribute('value');
15946
15953
  const keyAttr = this.getAttribute('key');
15947
- this.key = keyAttr !== null ? keyAttr : valueAttr;
15954
+ const resolvedKey = keyAttr !== null ? keyAttr : valueAttr;
15955
+ if (resolvedKey !== null) {
15956
+ this.key = resolvedKey;
15957
+ }
15948
15958
  }
15949
15959
 
15950
15960
  firstUpdated() {
@@ -15994,8 +16004,14 @@ class AuroMenuOption extends AuroElement {
15994
16004
  this.updateTextHighlight();
15995
16005
  }
15996
16006
 
15997
- // Set the key to be the passed value if no key is provided
15998
- if (changedProperties.has('value') && this.key === undefined) {
16007
+ // Set the key to be the passed value if no key is provided.
16008
+ // Loose equality (== null) is intentional: it catches both null AND
16009
+ // undefined. When a framework (e.g. Svelte, React) inserts the element
16010
+ // before setting its value property, connectedCallback skips key
16011
+ // assignment because both attributes are null at that point. The Lit
16012
+ // property default for `key` is undefined (not null), so strict
16013
+ // === null would miss the case and the fallback would never run.
16014
+ if (changedProperties.has('value') && this.key == null) { // eslint-disable-line eqeqeq, no-eq-null
15999
16015
  this.key = this.value;
16000
16016
  }
16001
16017
  }
@@ -16364,6 +16380,9 @@ class MenuService {
16364
16380
  this._subscribers = [];
16365
16381
  this.internalUpdateInProgress = false;
16366
16382
  this.selectedOptions = [];
16383
+ this._pendingValue = null;
16384
+ this._pendingRetryScheduled = false;
16385
+ this._pendingRetryCount = 0;
16367
16386
  }
16368
16387
 
16369
16388
  /**
@@ -16403,6 +16422,9 @@ class MenuService {
16403
16422
  hostDisconnected() {
16404
16423
  this._subscribers = [];
16405
16424
  this._menuOptions = [];
16425
+ this._pendingValue = null;
16426
+ this._pendingRetryScheduled = false;
16427
+ this._pendingRetryCount = 0;
16406
16428
  }
16407
16429
 
16408
16430
  /**
@@ -16605,17 +16627,22 @@ class MenuService {
16605
16627
  * @param {string|number|Array<string|number>} value - The value(s) to select.
16606
16628
  */
16607
16629
  selectByValue(value) {
16608
- // Early exit for invalid/empty values or internal updates
16609
- if (this.internalUpdateInProgress ||
16610
- this.host.internalUpdateInProgress ||
16611
- value === undefined ||
16630
+ const isEmptyValue = value === undefined ||
16612
16631
  value === null ||
16613
16632
  (Array.isArray(value) && value.length === 0) ||
16614
- (typeof value === 'string' && value.trim() === '')) {
16633
+ (typeof value === 'string' && value.trim() === '');
16634
+
16635
+ // Early exit for invalid/empty values
16636
+ if (isEmptyValue) {
16615
16637
  return;
16616
16638
  }
16617
16639
 
16618
- this.reset();
16640
+ // If an internal update cycle is still in progress, defer value application
16641
+ // rather than dropping it.
16642
+ if (this.internalUpdateInProgress || this.host.internalUpdateInProgress) {
16643
+ this.queuePendingValue(value);
16644
+ return;
16645
+ }
16619
16646
 
16620
16647
  // Normalize values to array of strings
16621
16648
  const normalizedValues = this._getNormalizedValues(value);
@@ -16627,33 +16654,100 @@ class MenuService {
16627
16654
  validatedValues = [normalizedValues[0]];
16628
16655
  }
16629
16656
 
16657
+ if (this._menuOptions.length === 0) {
16658
+ this.queuePendingValue(value);
16659
+ return;
16660
+ }
16661
+
16630
16662
  // Find matching options by comparing available options to validated values
16631
16663
  const trackedKeys = new Set();
16632
16664
  const optionsToSelect = this._menuOptions.filter(option => {
16633
16665
  const passesFilter = validatedValues.includes(option.key);
16634
16666
  const alreadyTracked = trackedKeys.has(option.key);
16667
+ const isActive = option.isActive;
16635
16668
 
16636
16669
  trackedKeys.add(option.key);
16637
16670
 
16638
16671
  // Include the option in the options to be selected if it passes the filter check and
16639
16672
  // either hasn't been tracked yet or selectAllMatchingOptions is true
16640
- return passesFilter && (!alreadyTracked || (alreadyTracked && this.selectAllMatchingOptions));
16673
+ return isActive && passesFilter && (!alreadyTracked || (alreadyTracked && this.selectAllMatchingOptions));
16641
16674
  });
16642
16675
 
16643
- // Handle selection result
16644
- if (optionsToSelect.length && !this.optionsArraysMatch(optionsToSelect, this.selectedOptions)) {
16645
- this.selectOptions(optionsToSelect);
16646
- } else {
16647
- this.stageUpdate();
16676
+ // Handle no matches: clear existing selection, but do not dispatch an intermediate
16677
+ // undefined value that can overwrite the host value in parent components.
16678
+ if (!optionsToSelect.length) {
16679
+ const hasUnresolvedKeys = this._menuOptions.some((option) => option.isActive && option.key == null);
16680
+
16681
+ if (hasUnresolvedKeys) {
16682
+ this.queuePendingValue(value);
16683
+ return;
16684
+ }
16685
+
16686
+ this.clearPendingValue();
16687
+
16688
+ if (this.selectedOptions.length > 0) {
16689
+ this.selectedOptions = [];
16690
+ }
16691
+
16692
+ // Always notify so the host resets any stale invalid value, even when
16693
+ // selectedOptions was already empty (e.g. double-clicking set-invalid).
16694
+ this.stageUpdate({ reason: 'no-match' });
16695
+
16696
+ // Dispatch failure event if no matches found
16697
+ if (validatedValues.length) {
16698
+ this.dispatchChangeEvent('auroMenu-selectValueFailure', {
16699
+ message: 'No matching options found for the provided value(s).',
16700
+ values: validatedValues
16701
+ });
16702
+ }
16703
+
16704
+ return;
16648
16705
  }
16649
16706
 
16650
- // Dispatch failure event if no matches found
16651
- if (!optionsToSelect.length && validatedValues.length) {
16652
- this.dispatchChangeEvent('auroMenu-selectValueFailure', {
16653
- message: 'No matching options found for the provided value(s).',
16654
- values: validatedValues
16655
- });
16707
+ this.clearPendingValue();
16708
+
16709
+ if (this.optionsArraysMatch(optionsToSelect, this.selectedOptions)) {
16710
+ return;
16711
+ }
16712
+
16713
+ // Apply programmatic selection as a single transaction and emit one final state.
16714
+ this.selectedOptions = optionsToSelect;
16715
+ this.stageUpdate();
16716
+ }
16717
+
16718
+ /**
16719
+ * Queues a pending value and schedules a bounded retry.
16720
+ * @param {string|number|Array<string|number>} value - The value to retry.
16721
+ */
16722
+ queuePendingValue(value) {
16723
+ this._pendingValue = value;
16724
+
16725
+ if (this._pendingRetryScheduled || this._pendingRetryCount >= 5) {
16726
+ return;
16656
16727
  }
16728
+
16729
+ this._pendingRetryScheduled = true;
16730
+ this._pendingRetryCount += 1;
16731
+
16732
+ setTimeout(() => {
16733
+ this._pendingRetryScheduled = false;
16734
+
16735
+ if (this._pendingValue == null) {
16736
+ return;
16737
+ }
16738
+
16739
+ const pendingValue = this._pendingValue;
16740
+ this.selectByValue(pendingValue);
16741
+ }, 0);
16742
+ }
16743
+
16744
+ /**
16745
+ * Clears pending retry state.
16746
+ */
16747
+ clearPendingValue() {
16748
+ this._pendingValue = null;
16749
+ this._pendingRetryScheduled = false;
16750
+ this._pendingRetryCount = 0;
16657
16751
  }
16658
16752
 
16659
16753
  /**
@@ -16692,9 +16786,9 @@ class MenuService {
16692
16786
  /**
16693
16787
  * Stages an update to notify subscribers of state and value changes.
16694
16788
  */
16695
- stageUpdate() {
16696
- this.notifyStateChange();
16697
- this.notifyValueChange();
16789
+ stageUpdate(meta = {}) {
16790
+ this.notifyStateChange(meta);
16791
+ this.notifyValueChange(meta);
16698
16792
  }
16699
16793
 
16700
16794
  /**
@@ -16709,14 +16803,18 @@ class MenuService {
16709
16803
  /**
16710
16804
  * Notifies subscribers of a state change (selected options has changed).
16711
16805
  */
16712
- notifyStateChange() {
16713
- this.notify({ type: 'stateChange', selectedOptions: this.selectedOptions });
16806
+ notifyStateChange(meta = {}) {
16807
+ this.notify({
16808
+ type: 'stateChange',
16809
+ selectedOptions: this.selectedOptions,
16810
+ ...meta
16811
+ });
16714
16812
  }
16715
16813
 
16716
16814
  /**
16717
16815
  * Notifies subscribers of a value change (current value has changed).
16718
16816
  */
16719
- notifyValueChange() {
16817
+ notifyValueChange(meta = {}) {
16720
16818
 
16721
16819
  // Prepare details for the event
16722
16820
  const details = {
@@ -16732,10 +16830,9 @@ class MenuService {
16732
16830
 
16733
16831
  this.notify({
16734
16832
  type: 'valueChange',
16833
+ ...meta,
16735
16834
  ...details
16736
16835
  });
16737
-
16738
- this.dispatchChangeEvent('auroMenu-selectedOption', details);
16739
16836
  }
16740
16837
 
16741
16838
  /**
@@ -16763,6 +16860,10 @@ class MenuService {
16763
16860
  addMenuOption(option) {
16764
16861
  this._menuOptions.push(option);
16765
16862
  this.notify({ type: 'optionsChange', options: this._menuOptions });
16863
+
16864
+ if (this._pendingValue != null) {
16865
+ this.queuePendingValue(this._pendingValue);
16866
+ }
16766
16867
  }
16767
16868
 
16768
16869
  /**
@@ -16772,6 +16873,10 @@ class MenuService {
16772
16873
  removeMenuOption(option) {
16773
16874
  this._menuOptions = this._menuOptions.filter(opt => opt !== option);
16774
16875
  this.notify({ type: 'optionsChange', options: this._menuOptions });
16876
+
16877
+ if (this._menuOptions.length === 0) {
16878
+ this.clearPendingValue();
16879
+ }
16775
16880
  }
16776
16881
 
16777
16882
  /**
@@ -17045,7 +17150,7 @@ class AuroMenu extends AuroElement {
17045
17150
  },
17046
17151
 
17047
17152
  /**
17048
- * Available menu options
17153
+ * Available menu options.
17049
17154
  * @readonly
17050
17155
  */
17051
17156
  options: {
@@ -17112,7 +17217,7 @@ class AuroMenu extends AuroElement {
17112
17217
  /**
17113
17218
  * @readonly
17114
17219
  * @returns {Array<HTMLElement>} - Returns the array of available menu options.
17115
- * @deprecated use `options` property instead.
17220
+ * @deprecated Use `options` property instead.
17116
17221
  */
17117
17222
  get items() {
17118
17223
  return this.options;
@@ -17220,7 +17325,7 @@ class AuroMenu extends AuroElement {
17220
17325
  const newValue = event.stringValue;
17221
17326
 
17222
17327
  // Check if the option or value has actually changed
17223
- if (newValue === undefined || (this.optionSelected !== newOption || this.stringValue !== newValue)) {
17328
+ if (this.optionSelected !== newOption || this.stringValue !== newValue) {
17224
17329
  this.optionSelected = newOption;
17225
17330
  this.setInternalValue(newValue);
17226
17331
  }
@@ -17294,8 +17399,13 @@ class AuroMenu extends AuroElement {
17294
17399
  updated(changedProperties) {
17295
17400
  super.updated(changedProperties);
17296
17401
 
17297
- // Update menu service properties on host update
17298
- if (changedProperties.has('value')) {
17402
+ // Apply value selection synchronously so that static-HTML fixtures
17403
+ // resolve within a single update cycle. The refactored selectByValue
17404
+ // no longer calls reset() first, so the destructive intermediate-event
17405
+ // cascade that originally required deferral is eliminated. If option
17406
+ // keys are not yet resolved (framework mount-order race), selectByValue
17407
+ // queues a bounded retry automatically via queuePendingValue.
17408
+ if (changedProperties.has('value') && !this.internalUpdateInProgress) {
17299
17409
  this.menuService.selectByValue(this.value);
17300
17410
  }
17301
17411
 
@@ -17475,12 +17585,13 @@ class AuroMenu extends AuroElement {
17475
17585
  * @param {any} source - The source that triggers this event.
17476
17586
  * @private
17477
17587
  */
17478
- notifySelectionChange({value, stringValue, keys, options} = {}) {
17588
+ notifySelectionChange({value, stringValue, keys, options, reason} = {}) {
17479
17589
  dispatchMenuEvent(this, 'auroMenu-selectedOption', {
17480
17590
  value,
17481
17591
  stringValue,
17482
17592
  keys,
17483
- options
17593
+ options,
17594
+ reason
17484
17595
  });
17485
17596
  }
17486
17597
 
@@ -4892,7 +4892,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4892
4892
  }
4893
4893
  };
4894
4894
 
4895
- var formkitVersion$2 = '202603241813';
4895
+ var formkitVersion$2 = '202603241855';
4896
4896
 
4897
4897
  let AuroElement$2 = class AuroElement extends LitElement {
4898
4898
  static get properties() {
@@ -12640,7 +12640,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
12640
12640
  }
12641
12641
  };
12642
12642
 
12643
- var formkitVersion$1 = '202603241813';
12643
+ var formkitVersion$1 = '202603241855';
12644
12644
 
12645
12645
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12646
12646
  // See LICENSE in the project root for license information.
@@ -13679,7 +13679,7 @@ class AuroBibtemplate extends LitElement {
13679
13679
  }
13680
13680
  }
13681
13681
 
13682
- var formkitVersion = '202603241813';
13682
+ var formkitVersion = '202603241855';
13683
13683
 
13684
13684
  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}`;
13685
13685
 
@@ -4892,7 +4892,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4892
4892
  }
4893
4893
  };
4894
4894
 
4895
- var formkitVersion$2 = '202603241813';
4895
+ var formkitVersion$2 = '202603241855';
4896
4896
 
4897
4897
  let AuroElement$2 = class AuroElement extends LitElement {
4898
4898
  static get properties() {
@@ -12640,7 +12640,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
12640
12640
  }
12641
12641
  };
12642
12642
 
12643
- var formkitVersion$1 = '202603241813';
12643
+ var formkitVersion$1 = '202603241855';
12644
12644
 
12645
12645
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12646
12646
  // See LICENSE in the project root for license information.
@@ -13679,7 +13679,7 @@ class AuroBibtemplate extends LitElement {
13679
13679
  }
13680
13680
  }
13681
13681
 
13682
- var formkitVersion = '202603241813';
13682
+ var formkitVersion = '202603241855';
13683
13683
 
13684
13684
  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}`;
13685
13685
 
@@ -1470,7 +1470,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
1470
1470
  }
1471
1471
  };
1472
1472
 
1473
- var formkitVersion$1 = '202603241813';
1473
+ var formkitVersion$1 = '202603241855';
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.
@@ -5494,7 +5494,7 @@ class AuroHelpText extends i$2 {
5494
5494
  }
5495
5495
  }
5496
5496
 
5497
- var formkitVersion = '202603241813';
5497
+ var formkitVersion = '202603241855';
5498
5498
 
5499
5499
  let AuroElement$1 = class AuroElement extends i$2 {
5500
5500
  static get properties() {
@@ -1470,7 +1470,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
1470
1470
  }
1471
1471
  };
1472
1472
 
1473
- var formkitVersion$1 = '202603241813';
1473
+ var formkitVersion$1 = '202603241855';
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.
@@ -5494,7 +5494,7 @@ class AuroHelpText extends i$2 {
5494
5494
  }
5495
5495
  }
5496
5496
 
5497
- var formkitVersion = '202603241813';
5497
+ var formkitVersion = '202603241855';
5498
5498
 
5499
5499
  let AuroElement$1 = class AuroElement extends i$2 {
5500
5500
  static get properties() {
@@ -1420,7 +1420,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
1420
1420
  }
1421
1421
  };
1422
1422
 
1423
- var formkitVersion$1 = '202603241813';
1423
+ var formkitVersion$1 = '202603241855';
1424
1424
 
1425
1425
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1426
1426
  // See LICENSE in the project root for license information.
@@ -5426,7 +5426,7 @@ class AuroHelpText extends LitElement {
5426
5426
  }
5427
5427
  }
5428
5428
 
5429
- var formkitVersion = '202603241813';
5429
+ var formkitVersion = '202603241855';
5430
5430
 
5431
5431
  let AuroElement$1 = class AuroElement extends LitElement {
5432
5432
  static get properties() {
@@ -1420,7 +1420,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
1420
1420
  }
1421
1421
  };
1422
1422
 
1423
- var formkitVersion$1 = '202603241813';
1423
+ var formkitVersion$1 = '202603241855';
1424
1424
 
1425
1425
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
1426
1426
  // See LICENSE in the project root for license information.
@@ -5426,7 +5426,7 @@ class AuroHelpText extends LitElement {
5426
5426
  }
5427
5427
  }
5428
5428
 
5429
- var formkitVersion = '202603241813';
5429
+ var formkitVersion = '202603241855';
5430
5430
 
5431
5431
  let AuroElement$1 = class AuroElement extends LitElement {
5432
5432
  static get properties() {
@@ -9549,7 +9549,7 @@ class AuroBibtemplate extends i$1 {
9549
9549
  }
9550
9550
  }
9551
9551
 
9552
- var formkitVersion$2 = '202603241813';
9552
+ var formkitVersion$2 = '202603241855';
9553
9553
 
9554
9554
  let l$1 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$5`${s$5(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$4 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$3=i$3`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
9555
9555
  `,u$6=i$3`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -13607,7 +13607,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
13607
13607
  }
13608
13608
  };
13609
13609
 
13610
- var formkitVersion$1 = '202603241813';
13610
+ var formkitVersion$1 = '202603241855';
13611
13611
 
13612
13612
  let AuroElement$2 = class AuroElement extends i$1 {
13613
13613
  static get properties() {
@@ -21362,7 +21362,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
21362
21362
  }
21363
21363
  };
21364
21364
 
21365
- var formkitVersion = '202603241813';
21365
+ var formkitVersion = '202603241855';
21366
21366
 
21367
21367
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
21368
21368
  // See LICENSE in the project root for license information.
@@ -22563,6 +22563,75 @@ function restoreTriggerAfterClose(dropdown, focusTarget) {
22563
22563
  * SPDX-License-Identifier: BSD-3-Clause
22564
22564
  */class e extends i$4{constructor(i){if(super(i),this.it=A$4,i.type!==t$2.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(r){if(r===A$4||null==r)return this._t=void 0,this.it=r;if(r===E$1)return r;if("string"!=typeof r)throw Error(this.constructor.directiveName+"() called with a non-string value");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName="unsafeHTML",e.resultType=1;
22565
22565
 
22566
+ /**
22567
+ * Computes display state once per keydown event.
22568
+ * Centralizes null-safety checks and makes the shared/modal/popover branching explicit.
22569
+ *
22570
+ * @param {HTMLElement} component - The component with a dropdown reference.
22571
+ * @param {Object} [options] - Optional config.
22572
+ * @param {HTMLElement} [options.dropdown] - Explicit dropdown reference. Falls back to component.dropdown.
22573
+ * @param {Function} [options.inputResolver] - Called with (component, ctx) to resolve the active input element.
22574
+ * @returns {{isExpanded: boolean, isModal: boolean, isPopover: boolean, activeInput: HTMLElement|null}}
22575
+ * isModal and isPopover reflect the display mode (fullscreen vs not) regardless of expanded state.
22576
+ */
22577
+ function createDisplayContext(component, options = {}) {
22578
+ const dd = options.dropdown || component.dropdown;
22579
+ // isPopoverVisible reflects as the `open` attribute.
22580
+ // It reports whether the bib is open in any mode (popover or modal).
22581
+ const isExpanded = Boolean(dd && dd.isPopoverVisible);
22582
+ const isFullscreen = Boolean(dd && dd.isBibFullscreen);
22583
+
22584
+ const ctx = {
22585
+ isExpanded,
22586
+ isModal: isFullscreen,
22587
+ isPopover: !isFullscreen,
22588
+ activeInput: null,
22589
+ };
22590
+
22591
+ if (options.inputResolver) {
22592
+ const resolvedInput = options.inputResolver(component, ctx);
22593
+ // Guard against resolvers returning undefined or non-HTMLElement values.
22594
+ ctx.activeInput = resolvedInput instanceof HTMLElement ? resolvedInput : null;
22595
+ }
22596
+
22597
+ return ctx;
22598
+ }
22599
+
22600
+ /**
22601
+ * Wires up a keydown listener that dispatches to strategy[evt.key] or strategy.default.
22602
+ * Handles both sync and async handlers.
22603
+ * @param {HTMLElement} component - The component to attach the listener to.
22604
+ * @param {Object} strategy - Map of key names to handler functions.
22605
+ * @param {Object} [options] - Optional config passed to createDisplayContext.
22606
+ */
22607
+ function applyKeyboardStrategy(component, strategy, options = {}) {
22608
+ component.addEventListener('keydown', async (evt) => {
22609
+ const handler = strategy[evt.key] || strategy.default;
22610
+ if (typeof handler === 'function') {
22611
+ const ctx = createDisplayContext(component, options);
22612
+ await handler(component, evt, ctx);
22613
+ }
22614
+ });
22615
+ }
22616
+
22617
+ // Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
22618
+ // See LICENSE in the project root for license information.
22619
+
22620
+ const datepickerKeyboardStrategy = {
22621
+ Enter(component, evt, ctx) {
22622
+ if (!ctx.isExpanded) {
22623
+ evt.preventDefault();
22624
+ component.dropdown.show();
22625
+ }
22626
+ },
22627
+
22628
+ Tab(component, _evt, ctx) {
22629
+ if (ctx.isExpanded && ctx.isModal) {
22630
+ component.dropdown.hide();
22631
+ }
22632
+ },
22633
+ };
22634
+
22566
22635
  // Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
22567
22636
  // See LICENSE in the project root for license information.
22568
22637
 
@@ -23376,16 +23445,8 @@ class AuroDatePicker extends AuroElement {
23376
23445
  // Tab closes the fullscreen dialog (same pattern as select).
23377
23446
  // The dialog event bridge intercepts Tab and re-dispatches it as a
23378
23447
  // composed keydown; this listener catches the re-dispatched event.
23379
- this.addEventListener('keydown', (evt) => {
23380
- if (evt.key === 'Enter' && !this.dropdown.isPopoverVisible) {
23381
- evt.preventDefault();
23382
- this.dropdown.show();
23383
- return;
23384
- }
23385
- if (evt.key === 'Tab' && this.dropdown.isPopoverVisible && this.dropdown.isBibFullscreen) {
23386
- this.dropdown.hide();
23387
- }
23388
- });
23448
+ // Enter opens the bib when it is closed.
23449
+ applyKeyboardStrategy(this, datepickerKeyboardStrategy);
23389
23450
 
23390
23451
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
23391
23452
  if (!this.isPopoverVisible) {