@aurodesignsystem-dev/auro-formkit 0.0.0-pr1551.0 → 0.0.0-pr1552.0

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 (43) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +207 -46
  7. package/components/combobox/demo/getting-started.min.js +207 -46
  8. package/components/combobox/demo/index.min.js +207 -46
  9. package/components/combobox/dist/index.js +207 -46
  10. package/components/combobox/dist/registered.js +207 -46
  11. package/components/counter/demo/customize.min.js +206 -45
  12. package/components/counter/demo/index.min.js +206 -45
  13. package/components/counter/dist/index.js +206 -45
  14. package/components/counter/dist/registered.js +206 -45
  15. package/components/datepicker/demo/customize.min.js +207 -46
  16. package/components/datepicker/demo/index.min.js +207 -46
  17. package/components/datepicker/dist/index.js +207 -46
  18. package/components/datepicker/dist/registered.js +207 -46
  19. package/components/dropdown/demo/customize.min.js +205 -44
  20. package/components/dropdown/demo/getting-started.min.js +205 -44
  21. package/components/dropdown/demo/index.min.js +205 -44
  22. package/components/dropdown/dist/index.js +205 -44
  23. package/components/dropdown/dist/registered.js +205 -44
  24. package/components/form/demo/customize.min.js +829 -185
  25. package/components/form/demo/getting-started.min.js +829 -185
  26. package/components/form/demo/index.min.js +829 -185
  27. package/components/form/demo/registerDemoDeps.min.js +829 -185
  28. package/components/input/demo/customize.min.js +1 -1
  29. package/components/input/demo/getting-started.min.js +1 -1
  30. package/components/input/demo/index.min.js +1 -1
  31. package/components/input/dist/index.js +1 -1
  32. package/components/input/dist/registered.js +1 -1
  33. package/components/radio/demo/customize.min.js +1 -1
  34. package/components/radio/demo/getting-started.min.js +1 -1
  35. package/components/radio/demo/index.min.js +1 -1
  36. package/components/radio/dist/index.js +1 -1
  37. package/components/radio/dist/registered.js +1 -1
  38. package/components/select/demo/customize.min.js +206 -45
  39. package/components/select/demo/getting-started.min.js +206 -45
  40. package/components/select/demo/index.min.js +206 -45
  41. package/components/select/dist/index.js +206 -45
  42. package/components/select/dist/registered.js +206 -45
  43. package/package.json +2 -2
@@ -3312,40 +3312,12 @@ class AuroFloatingUI {
3312
3312
  return;
3313
3313
  }
3314
3314
 
3315
- // Chrome-specific: during popover top-layer promotion after a click on a
3316
- // slotted focusable, :focus-within can briefly evaluate false while the
3317
- // active element is still structurally inside the trigger/bib. Fall back
3318
- // to a shadow-piercing ancestry walk from the deep active element before
3319
- // treating this as a real focus loss.
3320
- try {
3321
- let active = document.activeElement;
3322
- while (active && active.shadowRoot && active.shadowRoot.activeElement) {
3323
- active = active.shadowRoot.activeElement;
3324
- }
3325
- const targets = [element, element.trigger, element.bib].filter(Boolean);
3326
- let node = active;
3327
- while (node) {
3328
- if (targets.includes(node)) {
3329
- return;
3330
- }
3331
- node =
3332
- node.parentElement ||
3333
- (node.getRootNode && node.getRootNode().host) ||
3334
- null;
3335
- }
3336
- } catch (e) {
3337
- // Defensive: fall through to the existing close path if traversal fails.
3338
- }
3339
-
3340
3315
  // if fullscreen bib is in fullscreen mode, do not close
3341
3316
  if (element.bib.hasAttribute("isfullscreen")) {
3342
3317
  return;
3343
3318
  }
3344
3319
 
3345
- // eventType "focusloss" distinguishes a Tab/click-driven close from an
3346
- // Escape keydown close. Consumers use this to decide whether to restore
3347
- // focus to the trigger (Escape) or let it advance naturally (Tab).
3348
- this.hideBib("focusloss");
3320
+ this.hideBib("keydown");
3349
3321
  }
3350
3322
 
3351
3323
  setupHideHandlers() {
@@ -4015,6 +3987,199 @@ function getFocusableElements(container) {
4015
3987
  return tabIndexedUniqueElements;
4016
3988
  }
4017
3989
 
3990
+ /**
3991
+ * FocusTrap manages keyboard focus within a specified container element, ensuring that focus does not leave the container when tabbing.
3992
+ * It is commonly used for modal dialogs or overlays to improve accessibility by trapping focus within interactive UI components.
3993
+ */
3994
+ class FocusTrap {
3995
+ /**
3996
+ * Creates a new FocusTrap instance for the given container element.
3997
+ * Initializes event listeners and prepares the container for focus management.
3998
+ *
3999
+ * @param {HTMLElement} container The DOM element to trap focus within.
4000
+ * @param {boolean} [controlTabOrder=false] If true enables manual control of the tab order by the FocusTrap.
4001
+ * @throws {Error} If the provided container is not a valid HTMLElement.
4002
+ */
4003
+ constructor(container, controlTabOrder = false) {
4004
+ if (!container || !(container instanceof HTMLElement)) {
4005
+ throw new Error("FocusTrap requires a valid HTMLElement.");
4006
+ }
4007
+
4008
+ this.container = container;
4009
+ this.tabDirection = "forward"; // or 'backward';
4010
+ this.controlTabOrder = controlTabOrder;
4011
+
4012
+ this._init();
4013
+ }
4014
+
4015
+ /**
4016
+ * Initializes the focus trap by setting up event listeners and attributes on the container.
4017
+ * Prepares the container for focus management, including support for shadow DOM and inert attributes.
4018
+ *
4019
+ * @private
4020
+ */
4021
+ _init() {
4022
+ // Add inert attribute to prevent focusing programmatically as well (if supported)
4023
+ if ("inert" in HTMLElement.prototype) {
4024
+ this.container.inert = false; // Ensure the container isn't inert
4025
+ this.container.setAttribute("data-focus-trap-container", true); // Mark for identification
4026
+ }
4027
+
4028
+ // Track tab direction
4029
+ this.container.addEventListener("keydown", this._onKeydown);
4030
+ }
4031
+
4032
+ /**
4033
+ * Gets an array of currently active (focused) elements in the document and shadow DOM.
4034
+ * @returns {Array<HTMLElement>} An array of focusable elements within the container.
4035
+ * @private
4036
+ */
4037
+ _getActiveElements() {
4038
+ // Get the active element(s) in the document and shadow root
4039
+ // This will include the active element in the shadow DOM if it exists
4040
+ // Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
4041
+ let { activeElement } = document;
4042
+ const actives = [activeElement];
4043
+ while (activeElement?.shadowRoot?.activeElement) {
4044
+ actives.push(activeElement.shadowRoot.activeElement);
4045
+ activeElement = activeElement.shadowRoot.activeElement;
4046
+ }
4047
+ return actives;
4048
+ }
4049
+
4050
+ /**
4051
+ * Gets the next focus index based on the current index and focusable elements.
4052
+ * @param {number} currentIndex The current index of the focused element.
4053
+ * @param {Array<HTMLElement>} focusables The array of focusable elements.
4054
+ * @returns {number|null} The next focus index or null if not determined.
4055
+ */
4056
+ _getNextFocusIndex(currentIndex, focusables, actives) {
4057
+ if (this.controlTabOrder) {
4058
+ // Calculate the new index based on the current index and tab direction
4059
+ let newFocusIndex =
4060
+ currentIndex + (this.tabDirection === "forward" ? 1 : -1);
4061
+
4062
+ // Wrap-around logic
4063
+ if (newFocusIndex < 0) newFocusIndex = focusables.length - 1;
4064
+ if (newFocusIndex >= focusables.length) newFocusIndex = 0;
4065
+
4066
+ // Early return with the new index
4067
+ return newFocusIndex;
4068
+ }
4069
+
4070
+ // Determine if we need to wrap
4071
+ const atFirst =
4072
+ actives.includes(focusables[0]) || actives.includes(this.container);
4073
+ const atLast = actives.includes(focusables[focusables.length - 1]);
4074
+
4075
+ // Only wrap if at the ends
4076
+ if (this.tabDirection === "backward" && atFirst) {
4077
+ return focusables.length - 1;
4078
+ }
4079
+
4080
+ if (this.tabDirection === "forward" && atLast) {
4081
+ return 0;
4082
+ }
4083
+
4084
+ // No wrap, so don't change focus, return early
4085
+ return null;
4086
+ }
4087
+
4088
+ /**
4089
+ * Handles the Tab key press event to manage focus within the container.
4090
+ * @param {KeyboardEvent} e The keyboard event triggered by the user.
4091
+ * @returns {void}
4092
+ */
4093
+ _handleTabKey(e) {
4094
+ // Update the focusable elements
4095
+ const focusables = this._getFocusableElements();
4096
+
4097
+ // If there are no focusable elements, exit
4098
+ if (!focusables.length) return;
4099
+
4100
+ // Set the tab direction based on the key pressed
4101
+ this.tabDirection = e.shiftKey ? "backward" : "forward";
4102
+
4103
+ // Get the active elements that are currently focused
4104
+ const actives = this._getActiveElements();
4105
+
4106
+ // If we're at either end of the focusable elements, wrap around to the other end
4107
+ let focusIndex = focusables.findIndex((el) => actives.includes(el));
4108
+
4109
+ // Fallback if we have no focused element
4110
+ if (focusIndex === -1) focusIndex = 0;
4111
+
4112
+ // Get the next focus index based on the current focus index, tab direction, and controlTabOrder setting
4113
+ // Is null if no new focus index is determined
4114
+ const newFocusIndex = this._getNextFocusIndex(
4115
+ focusIndex,
4116
+ focusables,
4117
+ actives,
4118
+ );
4119
+
4120
+ // If we have a new focus index, set focus to that element
4121
+ if (newFocusIndex !== null) {
4122
+ e.preventDefault();
4123
+ focusables[newFocusIndex].focus();
4124
+ }
4125
+ }
4126
+
4127
+ /**
4128
+ * Catches the keydown event
4129
+ * @param {KeyboardEvent} e The keyboard event triggered by user interaction.
4130
+ * @private
4131
+ */
4132
+ _onKeydown = (e) => {
4133
+ // Handle tab
4134
+ if (e.key === "Tab") this._handleTabKey(e);
4135
+ };
4136
+
4137
+ /**
4138
+ * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
4139
+ * Returns a unique, ordered array of elements that can receive focus.
4140
+ *
4141
+ * @returns {Array<HTMLElement>} An array of focusable elements within the container.
4142
+ * @private
4143
+ */
4144
+ _getFocusableElements() {
4145
+ // Use the imported utility function to get focusable elements
4146
+ const elements = getFocusableElements(this.container);
4147
+
4148
+ // Return the elements found
4149
+ return elements;
4150
+ }
4151
+
4152
+ /**
4153
+ * Moves focus to the first focusable element within the container.
4154
+ * Useful for setting initial focus when activating the focus trap.
4155
+ */
4156
+ focusFirstElement() {
4157
+ const focusables = this._getFocusableElements();
4158
+ if (focusables.length) focusables[0].focus();
4159
+ }
4160
+
4161
+ /**
4162
+ * Moves focus to the last focusable element within the container.
4163
+ * Useful for setting focus when deactivating or cycling focus in reverse.
4164
+ */
4165
+ focusLastElement() {
4166
+ const focusables = this._getFocusableElements();
4167
+ if (focusables.length) focusables[focusables.length - 1].focus();
4168
+ }
4169
+
4170
+ /**
4171
+ * Removes event listeners and attributes added by the focus trap.
4172
+ * Call this method to clean up when the focus trap is no longer needed.
4173
+ */
4174
+ disconnect() {
4175
+ if (this.container.hasAttribute("data-focus-trap-container")) {
4176
+ this.container.removeAttribute("data-focus-trap-container");
4177
+ }
4178
+
4179
+ this.container.removeEventListener("keydown", this._onKeydown);
4180
+ }
4181
+ }
4182
+
4018
4183
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
4019
4184
  // See LICENSE in the project root for license information.
4020
4185
 
@@ -4512,7 +4677,7 @@ class AuroDropdownBib extends LitElement {
4512
4677
  classes[`shape-${this.shape}`] = true;
4513
4678
 
4514
4679
  return html`
4515
- <dialog tabindex="-1" class="${classMap(classes)}" part="bibContainer" role="${ifDefined(this.dialogRole)}" aria-labelledby="${ifDefined(this.dialogLabel ? 'dialogLabel' : undefined)}">
4680
+ <dialog class="${classMap(classes)}" part="bibContainer" role="${ifDefined(this.dialogRole)}" aria-labelledby="${ifDefined(this.dialogLabel ? 'dialogLabel' : undefined)}">
4516
4681
  ${this.dialogLabel ? html`<span id="dialogLabel" class="util_displayHiddenVisually">${this.dialogLabel}</span>` : ''}
4517
4682
  <slot></slot>
4518
4683
  <span id="srAnnouncement" class="util_displayHiddenVisually" aria-live="polite" role="status"></span>
@@ -4763,7 +4928,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
4763
4928
  }
4764
4929
  };
4765
4930
 
4766
- var formkitVersion$1 = '202607100029';
4931
+ var formkitVersion$1 = '202607092329';
4767
4932
 
4768
4933
  class AuroElement extends LitElement {
4769
4934
  static get properties() {
@@ -5517,10 +5682,7 @@ class AuroDropdown extends AuroElement {
5517
5682
  }
5518
5683
 
5519
5684
 
5520
- // On Tab-driven close (eventType "focusloss"), let focus advance naturally
5521
- // — restoring to the trigger would trap the user on this dropdown, forcing
5522
- // an extra Tab to move on. Escape and outside-click still restore.
5523
- if (!this.isPopoverVisible && eventType !== "focusloss") {
5685
+ if (!this.isPopoverVisible) {
5524
5686
  // wait til the bib gets fully closed and rendered
5525
5687
  setTimeout(() => {
5526
5688
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -5750,16 +5912,15 @@ class AuroDropdown extends AuroElement {
5750
5912
  }
5751
5913
  });
5752
5914
  } else {
5753
- // Normal desktop (non-modal): move initial focus into the bib but
5754
- // don't trap Tab. Tab should exit the bib and let the floater's
5755
- // handleFocusLoss close it, matching native <select>/<details>
5756
- // behavior. Deferred one frame because Floating UI positions the
5757
- // popover asynchronously a synchronous focus() would target
5758
- // zero-dimension elements and be silently ignored.
5915
+ // Normal desktop: use FocusTrap on the bib element.
5916
+ // Defer focusFirstElement to the next frame because the popover
5917
+ // is positioned asynchronously by Floating UI — calling focus()
5918
+ // synchronously here would target elements with zero dimensions
5919
+ // and the focus call would be silently ignored.
5920
+ this.focusTrap = new FocusTrap(this.bibContent);
5759
5921
  requestAnimationFrame(() => {
5760
- const focusables = getFocusableElements(this.bibContent);
5761
- if (focusables.length) {
5762
- focusables[0].focus();
5922
+ if (this.focusTrap) {
5923
+ this.focusTrap.focusFirstElement();
5763
5924
  }
5764
5925
  });
5765
5926
  }
@@ -6806,7 +6967,7 @@ class AuroHelpText extends LitElement {
6806
6967
  }
6807
6968
  }
6808
6969
 
6809
- var formkitVersion = '202607100029';
6970
+ var formkitVersion = '202607092329';
6810
6971
 
6811
6972
  var styleCss = 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}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.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, 300);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, 300);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, 0.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, 0.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, 0.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, 0.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, 0.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, 0.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(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
6812
6973
 
@@ -3312,40 +3312,12 @@ class AuroFloatingUI {
3312
3312
  return;
3313
3313
  }
3314
3314
 
3315
- // Chrome-specific: during popover top-layer promotion after a click on a
3316
- // slotted focusable, :focus-within can briefly evaluate false while the
3317
- // active element is still structurally inside the trigger/bib. Fall back
3318
- // to a shadow-piercing ancestry walk from the deep active element before
3319
- // treating this as a real focus loss.
3320
- try {
3321
- let active = document.activeElement;
3322
- while (active && active.shadowRoot && active.shadowRoot.activeElement) {
3323
- active = active.shadowRoot.activeElement;
3324
- }
3325
- const targets = [element, element.trigger, element.bib].filter(Boolean);
3326
- let node = active;
3327
- while (node) {
3328
- if (targets.includes(node)) {
3329
- return;
3330
- }
3331
- node =
3332
- node.parentElement ||
3333
- (node.getRootNode && node.getRootNode().host) ||
3334
- null;
3335
- }
3336
- } catch (e) {
3337
- // Defensive: fall through to the existing close path if traversal fails.
3338
- }
3339
-
3340
3315
  // if fullscreen bib is in fullscreen mode, do not close
3341
3316
  if (element.bib.hasAttribute("isfullscreen")) {
3342
3317
  return;
3343
3318
  }
3344
3319
 
3345
- // eventType "focusloss" distinguishes a Tab/click-driven close from an
3346
- // Escape keydown close. Consumers use this to decide whether to restore
3347
- // focus to the trigger (Escape) or let it advance naturally (Tab).
3348
- this.hideBib("focusloss");
3320
+ this.hideBib("keydown");
3349
3321
  }
3350
3322
 
3351
3323
  setupHideHandlers() {
@@ -4015,6 +3987,199 @@ function getFocusableElements(container) {
4015
3987
  return tabIndexedUniqueElements;
4016
3988
  }
4017
3989
 
3990
+ /**
3991
+ * FocusTrap manages keyboard focus within a specified container element, ensuring that focus does not leave the container when tabbing.
3992
+ * It is commonly used for modal dialogs or overlays to improve accessibility by trapping focus within interactive UI components.
3993
+ */
3994
+ class FocusTrap {
3995
+ /**
3996
+ * Creates a new FocusTrap instance for the given container element.
3997
+ * Initializes event listeners and prepares the container for focus management.
3998
+ *
3999
+ * @param {HTMLElement} container The DOM element to trap focus within.
4000
+ * @param {boolean} [controlTabOrder=false] If true enables manual control of the tab order by the FocusTrap.
4001
+ * @throws {Error} If the provided container is not a valid HTMLElement.
4002
+ */
4003
+ constructor(container, controlTabOrder = false) {
4004
+ if (!container || !(container instanceof HTMLElement)) {
4005
+ throw new Error("FocusTrap requires a valid HTMLElement.");
4006
+ }
4007
+
4008
+ this.container = container;
4009
+ this.tabDirection = "forward"; // or 'backward';
4010
+ this.controlTabOrder = controlTabOrder;
4011
+
4012
+ this._init();
4013
+ }
4014
+
4015
+ /**
4016
+ * Initializes the focus trap by setting up event listeners and attributes on the container.
4017
+ * Prepares the container for focus management, including support for shadow DOM and inert attributes.
4018
+ *
4019
+ * @private
4020
+ */
4021
+ _init() {
4022
+ // Add inert attribute to prevent focusing programmatically as well (if supported)
4023
+ if ("inert" in HTMLElement.prototype) {
4024
+ this.container.inert = false; // Ensure the container isn't inert
4025
+ this.container.setAttribute("data-focus-trap-container", true); // Mark for identification
4026
+ }
4027
+
4028
+ // Track tab direction
4029
+ this.container.addEventListener("keydown", this._onKeydown);
4030
+ }
4031
+
4032
+ /**
4033
+ * Gets an array of currently active (focused) elements in the document and shadow DOM.
4034
+ * @returns {Array<HTMLElement>} An array of focusable elements within the container.
4035
+ * @private
4036
+ */
4037
+ _getActiveElements() {
4038
+ // Get the active element(s) in the document and shadow root
4039
+ // This will include the active element in the shadow DOM if it exists
4040
+ // Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
4041
+ let { activeElement } = document;
4042
+ const actives = [activeElement];
4043
+ while (activeElement?.shadowRoot?.activeElement) {
4044
+ actives.push(activeElement.shadowRoot.activeElement);
4045
+ activeElement = activeElement.shadowRoot.activeElement;
4046
+ }
4047
+ return actives;
4048
+ }
4049
+
4050
+ /**
4051
+ * Gets the next focus index based on the current index and focusable elements.
4052
+ * @param {number} currentIndex The current index of the focused element.
4053
+ * @param {Array<HTMLElement>} focusables The array of focusable elements.
4054
+ * @returns {number|null} The next focus index or null if not determined.
4055
+ */
4056
+ _getNextFocusIndex(currentIndex, focusables, actives) {
4057
+ if (this.controlTabOrder) {
4058
+ // Calculate the new index based on the current index and tab direction
4059
+ let newFocusIndex =
4060
+ currentIndex + (this.tabDirection === "forward" ? 1 : -1);
4061
+
4062
+ // Wrap-around logic
4063
+ if (newFocusIndex < 0) newFocusIndex = focusables.length - 1;
4064
+ if (newFocusIndex >= focusables.length) newFocusIndex = 0;
4065
+
4066
+ // Early return with the new index
4067
+ return newFocusIndex;
4068
+ }
4069
+
4070
+ // Determine if we need to wrap
4071
+ const atFirst =
4072
+ actives.includes(focusables[0]) || actives.includes(this.container);
4073
+ const atLast = actives.includes(focusables[focusables.length - 1]);
4074
+
4075
+ // Only wrap if at the ends
4076
+ if (this.tabDirection === "backward" && atFirst) {
4077
+ return focusables.length - 1;
4078
+ }
4079
+
4080
+ if (this.tabDirection === "forward" && atLast) {
4081
+ return 0;
4082
+ }
4083
+
4084
+ // No wrap, so don't change focus, return early
4085
+ return null;
4086
+ }
4087
+
4088
+ /**
4089
+ * Handles the Tab key press event to manage focus within the container.
4090
+ * @param {KeyboardEvent} e The keyboard event triggered by the user.
4091
+ * @returns {void}
4092
+ */
4093
+ _handleTabKey(e) {
4094
+ // Update the focusable elements
4095
+ const focusables = this._getFocusableElements();
4096
+
4097
+ // If there are no focusable elements, exit
4098
+ if (!focusables.length) return;
4099
+
4100
+ // Set the tab direction based on the key pressed
4101
+ this.tabDirection = e.shiftKey ? "backward" : "forward";
4102
+
4103
+ // Get the active elements that are currently focused
4104
+ const actives = this._getActiveElements();
4105
+
4106
+ // If we're at either end of the focusable elements, wrap around to the other end
4107
+ let focusIndex = focusables.findIndex((el) => actives.includes(el));
4108
+
4109
+ // Fallback if we have no focused element
4110
+ if (focusIndex === -1) focusIndex = 0;
4111
+
4112
+ // Get the next focus index based on the current focus index, tab direction, and controlTabOrder setting
4113
+ // Is null if no new focus index is determined
4114
+ const newFocusIndex = this._getNextFocusIndex(
4115
+ focusIndex,
4116
+ focusables,
4117
+ actives,
4118
+ );
4119
+
4120
+ // If we have a new focus index, set focus to that element
4121
+ if (newFocusIndex !== null) {
4122
+ e.preventDefault();
4123
+ focusables[newFocusIndex].focus();
4124
+ }
4125
+ }
4126
+
4127
+ /**
4128
+ * Catches the keydown event
4129
+ * @param {KeyboardEvent} e The keyboard event triggered by user interaction.
4130
+ * @private
4131
+ */
4132
+ _onKeydown = (e) => {
4133
+ // Handle tab
4134
+ if (e.key === "Tab") this._handleTabKey(e);
4135
+ };
4136
+
4137
+ /**
4138
+ * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
4139
+ * Returns a unique, ordered array of elements that can receive focus.
4140
+ *
4141
+ * @returns {Array<HTMLElement>} An array of focusable elements within the container.
4142
+ * @private
4143
+ */
4144
+ _getFocusableElements() {
4145
+ // Use the imported utility function to get focusable elements
4146
+ const elements = getFocusableElements(this.container);
4147
+
4148
+ // Return the elements found
4149
+ return elements;
4150
+ }
4151
+
4152
+ /**
4153
+ * Moves focus to the first focusable element within the container.
4154
+ * Useful for setting initial focus when activating the focus trap.
4155
+ */
4156
+ focusFirstElement() {
4157
+ const focusables = this._getFocusableElements();
4158
+ if (focusables.length) focusables[0].focus();
4159
+ }
4160
+
4161
+ /**
4162
+ * Moves focus to the last focusable element within the container.
4163
+ * Useful for setting focus when deactivating or cycling focus in reverse.
4164
+ */
4165
+ focusLastElement() {
4166
+ const focusables = this._getFocusableElements();
4167
+ if (focusables.length) focusables[focusables.length - 1].focus();
4168
+ }
4169
+
4170
+ /**
4171
+ * Removes event listeners and attributes added by the focus trap.
4172
+ * Call this method to clean up when the focus trap is no longer needed.
4173
+ */
4174
+ disconnect() {
4175
+ if (this.container.hasAttribute("data-focus-trap-container")) {
4176
+ this.container.removeAttribute("data-focus-trap-container");
4177
+ }
4178
+
4179
+ this.container.removeEventListener("keydown", this._onKeydown);
4180
+ }
4181
+ }
4182
+
4018
4183
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
4019
4184
  // See LICENSE in the project root for license information.
4020
4185
 
@@ -4512,7 +4677,7 @@ class AuroDropdownBib extends LitElement {
4512
4677
  classes[`shape-${this.shape}`] = true;
4513
4678
 
4514
4679
  return html`
4515
- <dialog tabindex="-1" class="${classMap(classes)}" part="bibContainer" role="${ifDefined(this.dialogRole)}" aria-labelledby="${ifDefined(this.dialogLabel ? 'dialogLabel' : undefined)}">
4680
+ <dialog class="${classMap(classes)}" part="bibContainer" role="${ifDefined(this.dialogRole)}" aria-labelledby="${ifDefined(this.dialogLabel ? 'dialogLabel' : undefined)}">
4516
4681
  ${this.dialogLabel ? html`<span id="dialogLabel" class="util_displayHiddenVisually">${this.dialogLabel}</span>` : ''}
4517
4682
  <slot></slot>
4518
4683
  <span id="srAnnouncement" class="util_displayHiddenVisually" aria-live="polite" role="status"></span>
@@ -4763,7 +4928,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
4763
4928
  }
4764
4929
  };
4765
4930
 
4766
- var formkitVersion$1 = '202607100029';
4931
+ var formkitVersion$1 = '202607092329';
4767
4932
 
4768
4933
  class AuroElement extends LitElement {
4769
4934
  static get properties() {
@@ -5517,10 +5682,7 @@ class AuroDropdown extends AuroElement {
5517
5682
  }
5518
5683
 
5519
5684
 
5520
- // On Tab-driven close (eventType "focusloss"), let focus advance naturally
5521
- // — restoring to the trigger would trap the user on this dropdown, forcing
5522
- // an extra Tab to move on. Escape and outside-click still restore.
5523
- if (!this.isPopoverVisible && eventType !== "focusloss") {
5685
+ if (!this.isPopoverVisible) {
5524
5686
  // wait til the bib gets fully closed and rendered
5525
5687
  setTimeout(() => {
5526
5688
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -5750,16 +5912,15 @@ class AuroDropdown extends AuroElement {
5750
5912
  }
5751
5913
  });
5752
5914
  } else {
5753
- // Normal desktop (non-modal): move initial focus into the bib but
5754
- // don't trap Tab. Tab should exit the bib and let the floater's
5755
- // handleFocusLoss close it, matching native <select>/<details>
5756
- // behavior. Deferred one frame because Floating UI positions the
5757
- // popover asynchronously a synchronous focus() would target
5758
- // zero-dimension elements and be silently ignored.
5915
+ // Normal desktop: use FocusTrap on the bib element.
5916
+ // Defer focusFirstElement to the next frame because the popover
5917
+ // is positioned asynchronously by Floating UI — calling focus()
5918
+ // synchronously here would target elements with zero dimensions
5919
+ // and the focus call would be silently ignored.
5920
+ this.focusTrap = new FocusTrap(this.bibContent);
5759
5921
  requestAnimationFrame(() => {
5760
- const focusables = getFocusableElements(this.bibContent);
5761
- if (focusables.length) {
5762
- focusables[0].focus();
5922
+ if (this.focusTrap) {
5923
+ this.focusTrap.focusFirstElement();
5763
5924
  }
5764
5925
  });
5765
5926
  }
@@ -6806,7 +6967,7 @@ class AuroHelpText extends LitElement {
6806
6967
  }
6807
6968
  }
6808
6969
 
6809
- var formkitVersion = '202607100029';
6970
+ var formkitVersion = '202607092329';
6810
6971
 
6811
6972
  var styleCss = 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}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.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, 300);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, 300);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, 0.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, 0.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, 0.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, 0.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, 0.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, 0.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(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
6812
6973