@aurodesignsystem-dev/auro-formkit 0.0.0-pr1595.3 → 0.0.0-pr1595.5

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 (50) hide show
  1. package/components/checkbox/demo/api.md +2 -2
  2. package/components/checkbox/demo/customize.min.js +3 -3
  3. package/components/checkbox/demo/getting-started.min.js +3 -3
  4. package/components/checkbox/demo/index.min.js +3 -3
  5. package/components/checkbox/dist/auro-checkbox.d.ts +2 -2
  6. package/components/checkbox/dist/index.js +3 -3
  7. package/components/checkbox/dist/registered.js +3 -3
  8. package/components/combobox/demo/api.md +1 -1
  9. package/components/combobox/demo/customize.min.js +68 -8
  10. package/components/combobox/demo/getting-started.min.js +68 -8
  11. package/components/combobox/demo/index.min.js +68 -8
  12. package/components/combobox/dist/auro-combobox.d.ts +1 -1
  13. package/components/combobox/dist/index.js +68 -8
  14. package/components/combobox/dist/registered.js +68 -8
  15. package/components/counter/demo/customize.min.js +66 -6
  16. package/components/counter/demo/index.min.js +66 -6
  17. package/components/counter/dist/index.js +66 -6
  18. package/components/counter/dist/registered.js +66 -6
  19. package/components/datepicker/demo/customize.min.js +67 -7
  20. package/components/datepicker/demo/index.min.js +67 -7
  21. package/components/datepicker/dist/index.js +67 -7
  22. package/components/datepicker/dist/registered.js +67 -7
  23. package/components/dropdown/demo/customize.min.js +65 -5
  24. package/components/dropdown/demo/getting-started.min.js +66 -6
  25. package/components/dropdown/demo/index.min.js +65 -5
  26. package/components/dropdown/dist/index.js +65 -5
  27. package/components/dropdown/dist/registered.js +65 -5
  28. package/components/form/demo/customize.min.js +274 -34
  29. package/components/form/demo/getting-started.min.js +274 -34
  30. package/components/form/demo/index.min.js +274 -34
  31. package/components/form/demo/registerDemoDeps.min.js +274 -34
  32. package/components/input/demo/customize.min.js +1 -1
  33. package/components/input/demo/getting-started.min.js +1 -1
  34. package/components/input/demo/index.min.js +1 -1
  35. package/components/input/dist/index.js +1 -1
  36. package/components/input/dist/registered.js +1 -1
  37. package/components/radio/demo/api.md +2 -2
  38. package/components/radio/demo/customize.min.js +3 -3
  39. package/components/radio/demo/getting-started.min.js +3 -3
  40. package/components/radio/demo/index.min.js +3 -3
  41. package/components/radio/dist/auro-radio.d.ts +2 -2
  42. package/components/radio/dist/index.js +3 -3
  43. package/components/radio/dist/registered.js +3 -3
  44. package/components/select/demo/customize.min.js +66 -6
  45. package/components/select/demo/getting-started.min.js +66 -6
  46. package/components/select/demo/index.min.js +66 -6
  47. package/components/select/dist/index.js +66 -6
  48. package/components/select/dist/registered.js +66 -6
  49. package/custom-elements.json +573 -568
  50. package/package.json +2 -2
@@ -3269,15 +3269,57 @@ class AuroFloatingUI {
3269
3269
  document.body.style.top = `-${this._savedScrollY}px`;
3270
3270
  document.body.style.width = "100%";
3271
3271
 
3272
- // Move `bib` by the amount the viewport is shifted to stay aligned in fullscreen.
3273
- if (element?.bib && window?.visualViewport?.offsetTop) {
3274
- element.bib.style.transform = `translateY(${window?.visualViewport?.offsetTop}px)`;
3272
+ // Keep the bib aligned with the visual viewport as the VKB opens.
3273
+ // A one-shot offsetTop check at lock time is stale by the time the user
3274
+ // taps an input mid-drawer — iOS then pans visualViewport upward and the
3275
+ // bib drifts off-screen. Listen continuously so the transform tracks the pan.
3276
+ // RAF-throttled to avoid a style recalc on every scroll tick during the
3277
+ // keyboard animation; the pending frame is canceled on unlock so it cannot
3278
+ // reapply a translate after bibTransform has been restored.
3279
+ if (window.visualViewport) {
3280
+ this._viewportRafId = undefined;
3281
+ this._viewportHandler = () => {
3282
+ if (this._viewportRafId !== undefined) {
3283
+ return;
3284
+ }
3285
+ this._viewportRafId = requestAnimationFrame(() => {
3286
+ this._viewportRafId = undefined;
3287
+ if (element?.bib) {
3288
+ element.bib.style.transform = `translateY(${window.visualViewport.offsetTop}px)`;
3289
+ }
3290
+ });
3291
+ };
3292
+ window.visualViewport.addEventListener(
3293
+ "resize",
3294
+ this._viewportHandler,
3295
+ );
3296
+ window.visualViewport.addEventListener(
3297
+ "scroll",
3298
+ this._viewportHandler,
3299
+ );
3300
+ this._viewportHandler();
3275
3301
  }
3276
3302
 
3277
3303
  this.lockTouchScroll(true);
3278
3304
  }
3279
3305
  } else {
3280
3306
  if (this._scrollLocked) {
3307
+ if (this._viewportHandler && window.visualViewport) {
3308
+ window.visualViewport.removeEventListener(
3309
+ "resize",
3310
+ this._viewportHandler,
3311
+ );
3312
+ window.visualViewport.removeEventListener(
3313
+ "scroll",
3314
+ this._viewportHandler,
3315
+ );
3316
+ this._viewportHandler = undefined;
3317
+ }
3318
+ if (this._viewportRafId !== undefined) {
3319
+ cancelAnimationFrame(this._viewportRafId);
3320
+ this._viewportRafId = undefined;
3321
+ }
3322
+
3281
3323
  document.documentElement.style.scrollbarGutter =
3282
3324
  this._savedScrollStyles?.rootScrollbarGutter ?? "";
3283
3325
  document.documentElement.style.overflow =
@@ -3369,7 +3411,7 @@ class AuroFloatingUI {
3369
3411
  bibContent.style.width = "";
3370
3412
  bibContent.style.height = "";
3371
3413
  bibContent.style.maxWidth = "";
3372
- bibContent.style.maxHeight = `${window?.visualViewport?.height}px`;
3414
+ bibContent.style.maxHeight = "";
3373
3415
  this.configureTrial = 0;
3374
3416
  } else if (this.configureTrial < MAX_CONFIGURATION_COUNT) {
3375
3417
  this.configureTrial += 1;
@@ -3666,6 +3708,24 @@ class AuroFloatingUI {
3666
3708
  if (!this.showing) {
3667
3709
  if (!element.modal) {
3668
3710
  this.setupHideHandlers();
3711
+ } else {
3712
+ if (this.keyDownHandler) {
3713
+ document.removeEventListener("keydown", this.keyDownHandler);
3714
+ }
3715
+ this.keyDownHandler = (evt) => {
3716
+ if (evt.key === "Escape" && element.isPopoverVisible) {
3717
+ // Intercept at keydown so CloseWatcher never sees the keystroke.
3718
+ // Canceling `cancel` alone is insufficient — a second Esc with no
3719
+ // intervening user activation triggers the anti-trap and fires `close`
3720
+ // directly, bypassing any `cancel` preventDefault (AB#1613688).
3721
+ // stopImmediatePropagation is intentional: it prevents other document
3722
+ // keydown handlers (e.g. consumer code, auro-dialog) from also acting
3723
+ // on Escape while the modal owns the key.
3724
+ evt.preventDefault();
3725
+ evt.stopImmediatePropagation();
3726
+ }
3727
+ };
3728
+ document.addEventListener("keydown", this.keyDownHandler);
3669
3729
  }
3670
3730
  this.showing = true;
3671
3731
  element.isPopoverVisible = true;
@@ -4939,7 +4999,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4939
4999
  }
4940
5000
  };
4941
5001
 
4942
- var formkitVersion$2 = '202608300058';
5002
+ var formkitVersion$2 = '202608300227';
4943
5003
 
4944
5004
  /**
4945
5005
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -18801,7 +18861,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
18801
18861
  }
18802
18862
  };
18803
18863
 
18804
- var formkitVersion$1 = '202608300058';
18864
+ var formkitVersion$1 = '202608300227';
18805
18865
 
18806
18866
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18807
18867
  // See LICENSE in the project root for license information.
@@ -19993,7 +20053,7 @@ class AuroBibtemplate extends LitElement {
19993
20053
  }
19994
20054
  }
19995
20055
 
19996
- var formkitVersion = '202608300058';
20056
+ var formkitVersion = '202608300227';
19997
20057
 
19998
20058
  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}`;
19999
20059
 
@@ -20400,7 +20460,7 @@ function getOptionLabel(option) {
20400
20460
  * @slot helpText - Defines the content of the helpText.
20401
20461
  * @slot displayValue - Allows custom HTML content to display the selected value when the combobox is not focused. Only works with `snowflake` and `emphasized` layouts.
20402
20462
  * @csspart helpText - The help text and error message content container.
20403
- * @event auroCombobox-valueSet - (Deprecated) Notifies that the component has a new value set.
20463
+ * @event auroCombobox-valueSet - Notifies that the component has a new value set. **DEPRECATED** - Use the `input` event instead.
20404
20464
  * @event input - Notifies that the component has a new value set.
20405
20465
  * @event inputValue - Notifies that the components internal HTML5 input value has changed.
20406
20466
  * @event auroFormElement-validated - Notifies that the component value(s) have been validated.
@@ -3269,15 +3269,57 @@ class AuroFloatingUI {
3269
3269
  document.body.style.top = `-${this._savedScrollY}px`;
3270
3270
  document.body.style.width = "100%";
3271
3271
 
3272
- // Move `bib` by the amount the viewport is shifted to stay aligned in fullscreen.
3273
- if (element?.bib && window?.visualViewport?.offsetTop) {
3274
- element.bib.style.transform = `translateY(${window?.visualViewport?.offsetTop}px)`;
3272
+ // Keep the bib aligned with the visual viewport as the VKB opens.
3273
+ // A one-shot offsetTop check at lock time is stale by the time the user
3274
+ // taps an input mid-drawer — iOS then pans visualViewport upward and the
3275
+ // bib drifts off-screen. Listen continuously so the transform tracks the pan.
3276
+ // RAF-throttled to avoid a style recalc on every scroll tick during the
3277
+ // keyboard animation; the pending frame is canceled on unlock so it cannot
3278
+ // reapply a translate after bibTransform has been restored.
3279
+ if (window.visualViewport) {
3280
+ this._viewportRafId = undefined;
3281
+ this._viewportHandler = () => {
3282
+ if (this._viewportRafId !== undefined) {
3283
+ return;
3284
+ }
3285
+ this._viewportRafId = requestAnimationFrame(() => {
3286
+ this._viewportRafId = undefined;
3287
+ if (element?.bib) {
3288
+ element.bib.style.transform = `translateY(${window.visualViewport.offsetTop}px)`;
3289
+ }
3290
+ });
3291
+ };
3292
+ window.visualViewport.addEventListener(
3293
+ "resize",
3294
+ this._viewportHandler,
3295
+ );
3296
+ window.visualViewport.addEventListener(
3297
+ "scroll",
3298
+ this._viewportHandler,
3299
+ );
3300
+ this._viewportHandler();
3275
3301
  }
3276
3302
 
3277
3303
  this.lockTouchScroll(true);
3278
3304
  }
3279
3305
  } else {
3280
3306
  if (this._scrollLocked) {
3307
+ if (this._viewportHandler && window.visualViewport) {
3308
+ window.visualViewport.removeEventListener(
3309
+ "resize",
3310
+ this._viewportHandler,
3311
+ );
3312
+ window.visualViewport.removeEventListener(
3313
+ "scroll",
3314
+ this._viewportHandler,
3315
+ );
3316
+ this._viewportHandler = undefined;
3317
+ }
3318
+ if (this._viewportRafId !== undefined) {
3319
+ cancelAnimationFrame(this._viewportRafId);
3320
+ this._viewportRafId = undefined;
3321
+ }
3322
+
3281
3323
  document.documentElement.style.scrollbarGutter =
3282
3324
  this._savedScrollStyles?.rootScrollbarGutter ?? "";
3283
3325
  document.documentElement.style.overflow =
@@ -3369,7 +3411,7 @@ class AuroFloatingUI {
3369
3411
  bibContent.style.width = "";
3370
3412
  bibContent.style.height = "";
3371
3413
  bibContent.style.maxWidth = "";
3372
- bibContent.style.maxHeight = `${window?.visualViewport?.height}px`;
3414
+ bibContent.style.maxHeight = "";
3373
3415
  this.configureTrial = 0;
3374
3416
  } else if (this.configureTrial < MAX_CONFIGURATION_COUNT) {
3375
3417
  this.configureTrial += 1;
@@ -3666,6 +3708,24 @@ class AuroFloatingUI {
3666
3708
  if (!this.showing) {
3667
3709
  if (!element.modal) {
3668
3710
  this.setupHideHandlers();
3711
+ } else {
3712
+ if (this.keyDownHandler) {
3713
+ document.removeEventListener("keydown", this.keyDownHandler);
3714
+ }
3715
+ this.keyDownHandler = (evt) => {
3716
+ if (evt.key === "Escape" && element.isPopoverVisible) {
3717
+ // Intercept at keydown so CloseWatcher never sees the keystroke.
3718
+ // Canceling `cancel` alone is insufficient — a second Esc with no
3719
+ // intervening user activation triggers the anti-trap and fires `close`
3720
+ // directly, bypassing any `cancel` preventDefault (AB#1613688).
3721
+ // stopImmediatePropagation is intentional: it prevents other document
3722
+ // keydown handlers (e.g. consumer code, auro-dialog) from also acting
3723
+ // on Escape while the modal owns the key.
3724
+ evt.preventDefault();
3725
+ evt.stopImmediatePropagation();
3726
+ }
3727
+ };
3728
+ document.addEventListener("keydown", this.keyDownHandler);
3669
3729
  }
3670
3730
  this.showing = true;
3671
3731
  element.isPopoverVisible = true;
@@ -4939,7 +4999,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4939
4999
  }
4940
5000
  };
4941
5001
 
4942
- var formkitVersion$2 = '202608300058';
5002
+ var formkitVersion$2 = '202608300227';
4943
5003
 
4944
5004
  /**
4945
5005
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -18801,7 +18861,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
18801
18861
  }
18802
18862
  };
18803
18863
 
18804
- var formkitVersion$1 = '202608300058';
18864
+ var formkitVersion$1 = '202608300227';
18805
18865
 
18806
18866
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18807
18867
  // See LICENSE in the project root for license information.
@@ -19993,7 +20053,7 @@ class AuroBibtemplate extends LitElement {
19993
20053
  }
19994
20054
  }
19995
20055
 
19996
- var formkitVersion = '202608300058';
20056
+ var formkitVersion = '202608300227';
19997
20057
 
19998
20058
  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}`;
19999
20059
 
@@ -20400,7 +20460,7 @@ function getOptionLabel(option) {
20400
20460
  * @slot helpText - Defines the content of the helpText.
20401
20461
  * @slot displayValue - Allows custom HTML content to display the selected value when the combobox is not focused. Only works with `snowflake` and `emphasized` layouts.
20402
20462
  * @csspart helpText - The help text and error message content container.
20403
- * @event auroCombobox-valueSet - (Deprecated) Notifies that the component has a new value set.
20463
+ * @event auroCombobox-valueSet - Notifies that the component has a new value set. **DEPRECATED** - Use the `input` event instead.
20404
20464
  * @event input - Notifies that the component has a new value set.
20405
20465
  * @event inputValue - Notifies that the components internal HTML5 input value has changed.
20406
20466
  * @event auroFormElement-validated - Notifies that the component value(s) have been validated.
@@ -1127,7 +1127,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
1127
1127
  }
1128
1128
  };
1129
1129
 
1130
- var formkitVersion$1 = '202608300058';
1130
+ var formkitVersion$1 = '202608300227';
1131
1131
 
1132
1132
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1133
1133
  // See LICENSE in the project root for license information.
@@ -3669,15 +3669,57 @@ class AuroFloatingUI {
3669
3669
  document.body.style.top = `-${this._savedScrollY}px`;
3670
3670
  document.body.style.width = "100%";
3671
3671
 
3672
- // Move `bib` by the amount the viewport is shifted to stay aligned in fullscreen.
3673
- if (element?.bib && window?.visualViewport?.offsetTop) {
3674
- element.bib.style.transform = `translateY(${window?.visualViewport?.offsetTop}px)`;
3672
+ // Keep the bib aligned with the visual viewport as the VKB opens.
3673
+ // A one-shot offsetTop check at lock time is stale by the time the user
3674
+ // taps an input mid-drawer — iOS then pans visualViewport upward and the
3675
+ // bib drifts off-screen. Listen continuously so the transform tracks the pan.
3676
+ // RAF-throttled to avoid a style recalc on every scroll tick during the
3677
+ // keyboard animation; the pending frame is canceled on unlock so it cannot
3678
+ // reapply a translate after bibTransform has been restored.
3679
+ if (window.visualViewport) {
3680
+ this._viewportRafId = undefined;
3681
+ this._viewportHandler = () => {
3682
+ if (this._viewportRafId !== undefined) {
3683
+ return;
3684
+ }
3685
+ this._viewportRafId = requestAnimationFrame(() => {
3686
+ this._viewportRafId = undefined;
3687
+ if (element?.bib) {
3688
+ element.bib.style.transform = `translateY(${window.visualViewport.offsetTop}px)`;
3689
+ }
3690
+ });
3691
+ };
3692
+ window.visualViewport.addEventListener(
3693
+ "resize",
3694
+ this._viewportHandler,
3695
+ );
3696
+ window.visualViewport.addEventListener(
3697
+ "scroll",
3698
+ this._viewportHandler,
3699
+ );
3700
+ this._viewportHandler();
3675
3701
  }
3676
3702
 
3677
3703
  this.lockTouchScroll(true);
3678
3704
  }
3679
3705
  } else {
3680
3706
  if (this._scrollLocked) {
3707
+ if (this._viewportHandler && window.visualViewport) {
3708
+ window.visualViewport.removeEventListener(
3709
+ "resize",
3710
+ this._viewportHandler,
3711
+ );
3712
+ window.visualViewport.removeEventListener(
3713
+ "scroll",
3714
+ this._viewportHandler,
3715
+ );
3716
+ this._viewportHandler = undefined;
3717
+ }
3718
+ if (this._viewportRafId !== undefined) {
3719
+ cancelAnimationFrame(this._viewportRafId);
3720
+ this._viewportRafId = undefined;
3721
+ }
3722
+
3681
3723
  document.documentElement.style.scrollbarGutter =
3682
3724
  this._savedScrollStyles?.rootScrollbarGutter ?? "";
3683
3725
  document.documentElement.style.overflow =
@@ -3769,7 +3811,7 @@ class AuroFloatingUI {
3769
3811
  bibContent.style.width = "";
3770
3812
  bibContent.style.height = "";
3771
3813
  bibContent.style.maxWidth = "";
3772
- bibContent.style.maxHeight = `${window?.visualViewport?.height}px`;
3814
+ bibContent.style.maxHeight = "";
3773
3815
  this.configureTrial = 0;
3774
3816
  } else if (this.configureTrial < MAX_CONFIGURATION_COUNT) {
3775
3817
  this.configureTrial += 1;
@@ -4066,6 +4108,24 @@ class AuroFloatingUI {
4066
4108
  if (!this.showing) {
4067
4109
  if (!element.modal) {
4068
4110
  this.setupHideHandlers();
4111
+ } else {
4112
+ if (this.keyDownHandler) {
4113
+ document.removeEventListener("keydown", this.keyDownHandler);
4114
+ }
4115
+ this.keyDownHandler = (evt) => {
4116
+ if (evt.key === "Escape" && element.isPopoverVisible) {
4117
+ // Intercept at keydown so CloseWatcher never sees the keystroke.
4118
+ // Canceling `cancel` alone is insufficient — a second Esc with no
4119
+ // intervening user activation triggers the anti-trap and fires `close`
4120
+ // directly, bypassing any `cancel` preventDefault (AB#1613688).
4121
+ // stopImmediatePropagation is intentional: it prevents other document
4122
+ // keydown handlers (e.g. consumer code, auro-dialog) from also acting
4123
+ // on Escape while the modal owns the key.
4124
+ evt.preventDefault();
4125
+ evt.stopImmediatePropagation();
4126
+ }
4127
+ };
4128
+ document.addEventListener("keydown", this.keyDownHandler);
4069
4129
  }
4070
4130
  this.showing = true;
4071
4131
  element.isPopoverVisible = true;
@@ -5339,7 +5399,7 @@ class AuroHelpText extends i$2 {
5339
5399
  }
5340
5400
  }
5341
5401
 
5342
- var formkitVersion = '202608300058';
5402
+ var formkitVersion = '202608300227';
5343
5403
 
5344
5404
  /**
5345
5405
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -1127,7 +1127,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
1127
1127
  }
1128
1128
  };
1129
1129
 
1130
- var formkitVersion$1 = '202608300058';
1130
+ var formkitVersion$1 = '202608300227';
1131
1131
 
1132
1132
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1133
1133
  // See LICENSE in the project root for license information.
@@ -3669,15 +3669,57 @@ class AuroFloatingUI {
3669
3669
  document.body.style.top = `-${this._savedScrollY}px`;
3670
3670
  document.body.style.width = "100%";
3671
3671
 
3672
- // Move `bib` by the amount the viewport is shifted to stay aligned in fullscreen.
3673
- if (element?.bib && window?.visualViewport?.offsetTop) {
3674
- element.bib.style.transform = `translateY(${window?.visualViewport?.offsetTop}px)`;
3672
+ // Keep the bib aligned with the visual viewport as the VKB opens.
3673
+ // A one-shot offsetTop check at lock time is stale by the time the user
3674
+ // taps an input mid-drawer — iOS then pans visualViewport upward and the
3675
+ // bib drifts off-screen. Listen continuously so the transform tracks the pan.
3676
+ // RAF-throttled to avoid a style recalc on every scroll tick during the
3677
+ // keyboard animation; the pending frame is canceled on unlock so it cannot
3678
+ // reapply a translate after bibTransform has been restored.
3679
+ if (window.visualViewport) {
3680
+ this._viewportRafId = undefined;
3681
+ this._viewportHandler = () => {
3682
+ if (this._viewportRafId !== undefined) {
3683
+ return;
3684
+ }
3685
+ this._viewportRafId = requestAnimationFrame(() => {
3686
+ this._viewportRafId = undefined;
3687
+ if (element?.bib) {
3688
+ element.bib.style.transform = `translateY(${window.visualViewport.offsetTop}px)`;
3689
+ }
3690
+ });
3691
+ };
3692
+ window.visualViewport.addEventListener(
3693
+ "resize",
3694
+ this._viewportHandler,
3695
+ );
3696
+ window.visualViewport.addEventListener(
3697
+ "scroll",
3698
+ this._viewportHandler,
3699
+ );
3700
+ this._viewportHandler();
3675
3701
  }
3676
3702
 
3677
3703
  this.lockTouchScroll(true);
3678
3704
  }
3679
3705
  } else {
3680
3706
  if (this._scrollLocked) {
3707
+ if (this._viewportHandler && window.visualViewport) {
3708
+ window.visualViewport.removeEventListener(
3709
+ "resize",
3710
+ this._viewportHandler,
3711
+ );
3712
+ window.visualViewport.removeEventListener(
3713
+ "scroll",
3714
+ this._viewportHandler,
3715
+ );
3716
+ this._viewportHandler = undefined;
3717
+ }
3718
+ if (this._viewportRafId !== undefined) {
3719
+ cancelAnimationFrame(this._viewportRafId);
3720
+ this._viewportRafId = undefined;
3721
+ }
3722
+
3681
3723
  document.documentElement.style.scrollbarGutter =
3682
3724
  this._savedScrollStyles?.rootScrollbarGutter ?? "";
3683
3725
  document.documentElement.style.overflow =
@@ -3769,7 +3811,7 @@ class AuroFloatingUI {
3769
3811
  bibContent.style.width = "";
3770
3812
  bibContent.style.height = "";
3771
3813
  bibContent.style.maxWidth = "";
3772
- bibContent.style.maxHeight = `${window?.visualViewport?.height}px`;
3814
+ bibContent.style.maxHeight = "";
3773
3815
  this.configureTrial = 0;
3774
3816
  } else if (this.configureTrial < MAX_CONFIGURATION_COUNT) {
3775
3817
  this.configureTrial += 1;
@@ -4066,6 +4108,24 @@ class AuroFloatingUI {
4066
4108
  if (!this.showing) {
4067
4109
  if (!element.modal) {
4068
4110
  this.setupHideHandlers();
4111
+ } else {
4112
+ if (this.keyDownHandler) {
4113
+ document.removeEventListener("keydown", this.keyDownHandler);
4114
+ }
4115
+ this.keyDownHandler = (evt) => {
4116
+ if (evt.key === "Escape" && element.isPopoverVisible) {
4117
+ // Intercept at keydown so CloseWatcher never sees the keystroke.
4118
+ // Canceling `cancel` alone is insufficient — a second Esc with no
4119
+ // intervening user activation triggers the anti-trap and fires `close`
4120
+ // directly, bypassing any `cancel` preventDefault (AB#1613688).
4121
+ // stopImmediatePropagation is intentional: it prevents other document
4122
+ // keydown handlers (e.g. consumer code, auro-dialog) from also acting
4123
+ // on Escape while the modal owns the key.
4124
+ evt.preventDefault();
4125
+ evt.stopImmediatePropagation();
4126
+ }
4127
+ };
4128
+ document.addEventListener("keydown", this.keyDownHandler);
4069
4129
  }
4070
4130
  this.showing = true;
4071
4131
  element.isPopoverVisible = true;
@@ -5339,7 +5399,7 @@ class AuroHelpText extends i$2 {
5339
5399
  }
5340
5400
  }
5341
5401
 
5342
- var formkitVersion = '202608300058';
5402
+ var formkitVersion = '202608300227';
5343
5403
 
5344
5404
  /**
5345
5405
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -1077,7 +1077,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
1077
1077
  }
1078
1078
  };
1079
1079
 
1080
- var formkitVersion$1 = '202608300058';
1080
+ var formkitVersion$1 = '202608300227';
1081
1081
 
1082
1082
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1083
1083
  // See LICENSE in the project root for license information.
@@ -3601,15 +3601,57 @@ class AuroFloatingUI {
3601
3601
  document.body.style.top = `-${this._savedScrollY}px`;
3602
3602
  document.body.style.width = "100%";
3603
3603
 
3604
- // Move `bib` by the amount the viewport is shifted to stay aligned in fullscreen.
3605
- if (element?.bib && window?.visualViewport?.offsetTop) {
3606
- element.bib.style.transform = `translateY(${window?.visualViewport?.offsetTop}px)`;
3604
+ // Keep the bib aligned with the visual viewport as the VKB opens.
3605
+ // A one-shot offsetTop check at lock time is stale by the time the user
3606
+ // taps an input mid-drawer — iOS then pans visualViewport upward and the
3607
+ // bib drifts off-screen. Listen continuously so the transform tracks the pan.
3608
+ // RAF-throttled to avoid a style recalc on every scroll tick during the
3609
+ // keyboard animation; the pending frame is canceled on unlock so it cannot
3610
+ // reapply a translate after bibTransform has been restored.
3611
+ if (window.visualViewport) {
3612
+ this._viewportRafId = undefined;
3613
+ this._viewportHandler = () => {
3614
+ if (this._viewportRafId !== undefined) {
3615
+ return;
3616
+ }
3617
+ this._viewportRafId = requestAnimationFrame(() => {
3618
+ this._viewportRafId = undefined;
3619
+ if (element?.bib) {
3620
+ element.bib.style.transform = `translateY(${window.visualViewport.offsetTop}px)`;
3621
+ }
3622
+ });
3623
+ };
3624
+ window.visualViewport.addEventListener(
3625
+ "resize",
3626
+ this._viewportHandler,
3627
+ );
3628
+ window.visualViewport.addEventListener(
3629
+ "scroll",
3630
+ this._viewportHandler,
3631
+ );
3632
+ this._viewportHandler();
3607
3633
  }
3608
3634
 
3609
3635
  this.lockTouchScroll(true);
3610
3636
  }
3611
3637
  } else {
3612
3638
  if (this._scrollLocked) {
3639
+ if (this._viewportHandler && window.visualViewport) {
3640
+ window.visualViewport.removeEventListener(
3641
+ "resize",
3642
+ this._viewportHandler,
3643
+ );
3644
+ window.visualViewport.removeEventListener(
3645
+ "scroll",
3646
+ this._viewportHandler,
3647
+ );
3648
+ this._viewportHandler = undefined;
3649
+ }
3650
+ if (this._viewportRafId !== undefined) {
3651
+ cancelAnimationFrame(this._viewportRafId);
3652
+ this._viewportRafId = undefined;
3653
+ }
3654
+
3613
3655
  document.documentElement.style.scrollbarGutter =
3614
3656
  this._savedScrollStyles?.rootScrollbarGutter ?? "";
3615
3657
  document.documentElement.style.overflow =
@@ -3701,7 +3743,7 @@ class AuroFloatingUI {
3701
3743
  bibContent.style.width = "";
3702
3744
  bibContent.style.height = "";
3703
3745
  bibContent.style.maxWidth = "";
3704
- bibContent.style.maxHeight = `${window?.visualViewport?.height}px`;
3746
+ bibContent.style.maxHeight = "";
3705
3747
  this.configureTrial = 0;
3706
3748
  } else if (this.configureTrial < MAX_CONFIGURATION_COUNT) {
3707
3749
  this.configureTrial += 1;
@@ -3998,6 +4040,24 @@ class AuroFloatingUI {
3998
4040
  if (!this.showing) {
3999
4041
  if (!element.modal) {
4000
4042
  this.setupHideHandlers();
4043
+ } else {
4044
+ if (this.keyDownHandler) {
4045
+ document.removeEventListener("keydown", this.keyDownHandler);
4046
+ }
4047
+ this.keyDownHandler = (evt) => {
4048
+ if (evt.key === "Escape" && element.isPopoverVisible) {
4049
+ // Intercept at keydown so CloseWatcher never sees the keystroke.
4050
+ // Canceling `cancel` alone is insufficient — a second Esc with no
4051
+ // intervening user activation triggers the anti-trap and fires `close`
4052
+ // directly, bypassing any `cancel` preventDefault (AB#1613688).
4053
+ // stopImmediatePropagation is intentional: it prevents other document
4054
+ // keydown handlers (e.g. consumer code, auro-dialog) from also acting
4055
+ // on Escape while the modal owns the key.
4056
+ evt.preventDefault();
4057
+ evt.stopImmediatePropagation();
4058
+ }
4059
+ };
4060
+ document.addEventListener("keydown", this.keyDownHandler);
4001
4061
  }
4002
4062
  this.showing = true;
4003
4063
  element.isPopoverVisible = true;
@@ -5271,7 +5331,7 @@ class AuroHelpText extends LitElement {
5271
5331
  }
5272
5332
  }
5273
5333
 
5274
- var formkitVersion = '202608300058';
5334
+ var formkitVersion = '202608300227';
5275
5335
 
5276
5336
  /**
5277
5337
  * AuroElement is the shared base class for layout-aware Auro form components.