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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +46 -207
  7. package/components/combobox/demo/getting-started.min.js +46 -207
  8. package/components/combobox/demo/index.min.js +46 -207
  9. package/components/combobox/dist/index.js +46 -207
  10. package/components/combobox/dist/registered.js +46 -207
  11. package/components/counter/demo/customize.min.js +59 -222
  12. package/components/counter/demo/index.min.js +59 -222
  13. package/components/counter/dist/auro-counter.d.ts +0 -8
  14. package/components/counter/dist/index.js +59 -222
  15. package/components/counter/dist/registered.js +59 -222
  16. package/components/datepicker/demo/customize.min.js +46 -207
  17. package/components/datepicker/demo/index.min.js +46 -207
  18. package/components/datepicker/dist/index.js +46 -207
  19. package/components/datepicker/dist/registered.js +46 -207
  20. package/components/dropdown/demo/customize.min.js +44 -205
  21. package/components/dropdown/demo/getting-started.min.js +44 -205
  22. package/components/dropdown/demo/index.min.js +44 -205
  23. package/components/dropdown/dist/index.js +44 -205
  24. package/components/dropdown/dist/registered.js +44 -205
  25. package/components/form/demo/customize.min.js +199 -845
  26. package/components/form/demo/getting-started.min.js +199 -845
  27. package/components/form/demo/index.min.js +199 -845
  28. package/components/form/demo/registerDemoDeps.min.js +199 -845
  29. package/components/input/demo/customize.min.js +1 -1
  30. package/components/input/demo/getting-started.min.js +1 -1
  31. package/components/input/demo/index.min.js +1 -1
  32. package/components/input/dist/index.js +1 -1
  33. package/components/input/dist/registered.js +1 -1
  34. package/components/radio/demo/customize.min.js +1 -1
  35. package/components/radio/demo/getting-started.min.js +1 -1
  36. package/components/radio/demo/index.min.js +1 -1
  37. package/components/radio/dist/index.js +1 -1
  38. package/components/radio/dist/registered.js +1 -1
  39. package/components/select/demo/customize.min.js +45 -206
  40. package/components/select/demo/getting-started.min.js +45 -206
  41. package/components/select/demo/index.min.js +45 -206
  42. package/components/select/dist/index.js +45 -206
  43. package/components/select/dist/registered.js +45 -206
  44. package/custom-elements.json +1499 -1514
  45. package/package.json +2 -2
@@ -13379,7 +13379,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13379
13379
  }
13380
13380
  };
13381
13381
 
13382
- var formkitVersion$8 = '202607092329';
13382
+ var formkitVersion$8 = '202607102138';
13383
13383
 
13384
13384
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13385
13385
  // See LICENSE in the project root for license information.
@@ -27776,7 +27776,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27776
27776
  }
27777
27777
  };
27778
27778
 
27779
- var formkitVersion$2$1 = '202607092329';
27779
+ var formkitVersion$2$1 = '202607102138';
27780
27780
 
27781
27781
  let l$1$2 = 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$2`${s$3(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = 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$1$2 = 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$1$3=i$6`: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}
27782
27782
  `,u$4$2=i$6`.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}}
@@ -32053,12 +32053,40 @@ let AuroFloatingUI$3 = class AuroFloatingUI {
32053
32053
  return;
32054
32054
  }
32055
32055
 
32056
+ // Chrome-specific: during popover top-layer promotion after a click on a
32057
+ // slotted focusable, :focus-within can briefly evaluate false while the
32058
+ // active element is still structurally inside the trigger/bib. Fall back
32059
+ // to a shadow-piercing ancestry walk from the deep active element before
32060
+ // treating this as a real focus loss.
32061
+ try {
32062
+ let active = document.activeElement;
32063
+ while (active && active.shadowRoot && active.shadowRoot.activeElement) {
32064
+ active = active.shadowRoot.activeElement;
32065
+ }
32066
+ const targets = [element, element.trigger, element.bib].filter(Boolean);
32067
+ let node = active;
32068
+ while (node) {
32069
+ if (targets.includes(node)) {
32070
+ return;
32071
+ }
32072
+ node =
32073
+ node.parentElement ||
32074
+ (node.getRootNode && node.getRootNode().host) ||
32075
+ null;
32076
+ }
32077
+ } catch (e) {
32078
+ // Defensive: fall through to the existing close path if traversal fails.
32079
+ }
32080
+
32056
32081
  // if fullscreen bib is in fullscreen mode, do not close
32057
32082
  if (element.bib.hasAttribute("isfullscreen")) {
32058
32083
  return;
32059
32084
  }
32060
32085
 
32061
- this.hideBib("keydown");
32086
+ // eventType "focusloss" distinguishes a Tab/click-driven close from an
32087
+ // Escape keydown close. Consumers use this to decide whether to restore
32088
+ // focus to the trigger (Escape) or let it advance naturally (Tab).
32089
+ this.hideBib("focusloss");
32062
32090
  }
32063
32091
 
32064
32092
  setupHideHandlers() {
@@ -32728,199 +32756,6 @@ function getFocusableElements$4(container) {
32728
32756
  return tabIndexedUniqueElements;
32729
32757
  }
32730
32758
 
32731
- /**
32732
- * FocusTrap manages keyboard focus within a specified container element, ensuring that focus does not leave the container when tabbing.
32733
- * It is commonly used for modal dialogs or overlays to improve accessibility by trapping focus within interactive UI components.
32734
- */
32735
- let FocusTrap$3 = class FocusTrap {
32736
- /**
32737
- * Creates a new FocusTrap instance for the given container element.
32738
- * Initializes event listeners and prepares the container for focus management.
32739
- *
32740
- * @param {HTMLElement} container The DOM element to trap focus within.
32741
- * @param {boolean} [controlTabOrder=false] If true enables manual control of the tab order by the FocusTrap.
32742
- * @throws {Error} If the provided container is not a valid HTMLElement.
32743
- */
32744
- constructor(container, controlTabOrder = false) {
32745
- if (!container || !(container instanceof HTMLElement)) {
32746
- throw new Error("FocusTrap requires a valid HTMLElement.");
32747
- }
32748
-
32749
- this.container = container;
32750
- this.tabDirection = "forward"; // or 'backward';
32751
- this.controlTabOrder = controlTabOrder;
32752
-
32753
- this._init();
32754
- }
32755
-
32756
- /**
32757
- * Initializes the focus trap by setting up event listeners and attributes on the container.
32758
- * Prepares the container for focus management, including support for shadow DOM and inert attributes.
32759
- *
32760
- * @private
32761
- */
32762
- _init() {
32763
- // Add inert attribute to prevent focusing programmatically as well (if supported)
32764
- if ("inert" in HTMLElement.prototype) {
32765
- this.container.inert = false; // Ensure the container isn't inert
32766
- this.container.setAttribute("data-focus-trap-container", true); // Mark for identification
32767
- }
32768
-
32769
- // Track tab direction
32770
- this.container.addEventListener("keydown", this._onKeydown);
32771
- }
32772
-
32773
- /**
32774
- * Gets an array of currently active (focused) elements in the document and shadow DOM.
32775
- * @returns {Array<HTMLElement>} An array of focusable elements within the container.
32776
- * @private
32777
- */
32778
- _getActiveElements() {
32779
- // Get the active element(s) in the document and shadow root
32780
- // This will include the active element in the shadow DOM if it exists
32781
- // Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
32782
- let { activeElement } = document;
32783
- const actives = [activeElement];
32784
- while (activeElement?.shadowRoot?.activeElement) {
32785
- actives.push(activeElement.shadowRoot.activeElement);
32786
- activeElement = activeElement.shadowRoot.activeElement;
32787
- }
32788
- return actives;
32789
- }
32790
-
32791
- /**
32792
- * Gets the next focus index based on the current index and focusable elements.
32793
- * @param {number} currentIndex The current index of the focused element.
32794
- * @param {Array<HTMLElement>} focusables The array of focusable elements.
32795
- * @returns {number|null} The next focus index or null if not determined.
32796
- */
32797
- _getNextFocusIndex(currentIndex, focusables, actives) {
32798
- if (this.controlTabOrder) {
32799
- // Calculate the new index based on the current index and tab direction
32800
- let newFocusIndex =
32801
- currentIndex + (this.tabDirection === "forward" ? 1 : -1);
32802
-
32803
- // Wrap-around logic
32804
- if (newFocusIndex < 0) newFocusIndex = focusables.length - 1;
32805
- if (newFocusIndex >= focusables.length) newFocusIndex = 0;
32806
-
32807
- // Early return with the new index
32808
- return newFocusIndex;
32809
- }
32810
-
32811
- // Determine if we need to wrap
32812
- const atFirst =
32813
- actives.includes(focusables[0]) || actives.includes(this.container);
32814
- const atLast = actives.includes(focusables[focusables.length - 1]);
32815
-
32816
- // Only wrap if at the ends
32817
- if (this.tabDirection === "backward" && atFirst) {
32818
- return focusables.length - 1;
32819
- }
32820
-
32821
- if (this.tabDirection === "forward" && atLast) {
32822
- return 0;
32823
- }
32824
-
32825
- // No wrap, so don't change focus, return early
32826
- return null;
32827
- }
32828
-
32829
- /**
32830
- * Handles the Tab key press event to manage focus within the container.
32831
- * @param {KeyboardEvent} e The keyboard event triggered by the user.
32832
- * @returns {void}
32833
- */
32834
- _handleTabKey(e) {
32835
- // Update the focusable elements
32836
- const focusables = this._getFocusableElements();
32837
-
32838
- // If there are no focusable elements, exit
32839
- if (!focusables.length) return;
32840
-
32841
- // Set the tab direction based on the key pressed
32842
- this.tabDirection = e.shiftKey ? "backward" : "forward";
32843
-
32844
- // Get the active elements that are currently focused
32845
- const actives = this._getActiveElements();
32846
-
32847
- // If we're at either end of the focusable elements, wrap around to the other end
32848
- let focusIndex = focusables.findIndex((el) => actives.includes(el));
32849
-
32850
- // Fallback if we have no focused element
32851
- if (focusIndex === -1) focusIndex = 0;
32852
-
32853
- // Get the next focus index based on the current focus index, tab direction, and controlTabOrder setting
32854
- // Is null if no new focus index is determined
32855
- const newFocusIndex = this._getNextFocusIndex(
32856
- focusIndex,
32857
- focusables,
32858
- actives,
32859
- );
32860
-
32861
- // If we have a new focus index, set focus to that element
32862
- if (newFocusIndex !== null) {
32863
- e.preventDefault();
32864
- focusables[newFocusIndex].focus();
32865
- }
32866
- }
32867
-
32868
- /**
32869
- * Catches the keydown event
32870
- * @param {KeyboardEvent} e The keyboard event triggered by user interaction.
32871
- * @private
32872
- */
32873
- _onKeydown = (e) => {
32874
- // Handle tab
32875
- if (e.key === "Tab") this._handleTabKey(e);
32876
- };
32877
-
32878
- /**
32879
- * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
32880
- * Returns a unique, ordered array of elements that can receive focus.
32881
- *
32882
- * @returns {Array<HTMLElement>} An array of focusable elements within the container.
32883
- * @private
32884
- */
32885
- _getFocusableElements() {
32886
- // Use the imported utility function to get focusable elements
32887
- const elements = getFocusableElements$4(this.container);
32888
-
32889
- // Return the elements found
32890
- return elements;
32891
- }
32892
-
32893
- /**
32894
- * Moves focus to the first focusable element within the container.
32895
- * Useful for setting initial focus when activating the focus trap.
32896
- */
32897
- focusFirstElement() {
32898
- const focusables = this._getFocusableElements();
32899
- if (focusables.length) focusables[0].focus();
32900
- }
32901
-
32902
- /**
32903
- * Moves focus to the last focusable element within the container.
32904
- * Useful for setting focus when deactivating or cycling focus in reverse.
32905
- */
32906
- focusLastElement() {
32907
- const focusables = this._getFocusableElements();
32908
- if (focusables.length) focusables[focusables.length - 1].focus();
32909
- }
32910
-
32911
- /**
32912
- * Removes event listeners and attributes added by the focus trap.
32913
- * Call this method to clean up when the focus trap is no longer needed.
32914
- */
32915
- disconnect() {
32916
- if (this.container.hasAttribute("data-focus-trap-container")) {
32917
- this.container.removeAttribute("data-focus-trap-container");
32918
- }
32919
-
32920
- this.container.removeEventListener("keydown", this._onKeydown);
32921
- }
32922
- };
32923
-
32924
32759
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
32925
32760
  // See LICENSE in the project root for license information.
32926
32761
 
@@ -33418,7 +33253,7 @@ let AuroDropdownBib$3 = class AuroDropdownBib extends i$3 {
33418
33253
  classes[`shape-${this.shape}`] = true;
33419
33254
 
33420
33255
  return u$c`
33421
- <dialog class="${e$2(classes)}" part="bibContainer" role="${o$4(this.dialogRole)}" aria-labelledby="${o$4(this.dialogLabel ? 'dialogLabel' : undefined)}">
33256
+ <dialog tabindex="-1" class="${e$2(classes)}" part="bibContainer" role="${o$4(this.dialogRole)}" aria-labelledby="${o$4(this.dialogLabel ? 'dialogLabel' : undefined)}">
33422
33257
  ${this.dialogLabel ? u$c`<span id="dialogLabel" class="util_displayHiddenVisually">${this.dialogLabel}</span>` : ''}
33423
33258
  <slot></slot>
33424
33259
  <span id="srAnnouncement" class="util_displayHiddenVisually" aria-live="polite" role="status"></span>
@@ -33669,7 +33504,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
33669
33504
  }
33670
33505
  };
33671
33506
 
33672
- var formkitVersion$1$3 = '202607092329';
33507
+ var formkitVersion$1$3 = '202607102138';
33673
33508
 
33674
33509
  let AuroElement$2$2 = class AuroElement extends i$3 {
33675
33510
  static get properties() {
@@ -34423,7 +34258,10 @@ let AuroDropdown$3 = class AuroDropdown extends AuroElement$2$2 {
34423
34258
  }
34424
34259
 
34425
34260
 
34426
- if (!this.isPopoverVisible) {
34261
+ // On Tab-driven close (eventType "focusloss"), let focus advance naturally
34262
+ // — restoring to the trigger would trap the user on this dropdown, forcing
34263
+ // an extra Tab to move on. Escape and outside-click still restore.
34264
+ if (!this.isPopoverVisible && eventType !== "focusloss") {
34427
34265
  // wait til the bib gets fully closed and rendered
34428
34266
  setTimeout(() => {
34429
34267
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -34653,15 +34491,16 @@ let AuroDropdown$3 = class AuroDropdown extends AuroElement$2$2 {
34653
34491
  }
34654
34492
  });
34655
34493
  } else {
34656
- // Normal desktop: use FocusTrap on the bib element.
34657
- // Defer focusFirstElement to the next frame because the popover
34658
- // is positioned asynchronously by Floating UI — calling focus()
34659
- // synchronously here would target elements with zero dimensions
34660
- // and the focus call would be silently ignored.
34661
- this.focusTrap = new FocusTrap$3(this.bibContent);
34494
+ // Normal desktop (non-modal): move initial focus into the bib but
34495
+ // don't trap Tab. Tab should exit the bib and let the floater's
34496
+ // handleFocusLoss close it, matching native <select>/<details>
34497
+ // behavior. Deferred one frame because Floating UI positions the
34498
+ // popover asynchronously a synchronous focus() would target
34499
+ // zero-dimension elements and be silently ignored.
34662
34500
  requestAnimationFrame(() => {
34663
- if (this.focusTrap) {
34664
- this.focusTrap.focusFirstElement();
34501
+ const focusables = getFocusableElements$4(this.bibContent);
34502
+ if (focusables.length) {
34503
+ focusables[0].focus();
34665
34504
  }
34666
34505
  });
34667
34506
  }
@@ -47287,7 +47126,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
47287
47126
  }
47288
47127
  };
47289
47128
 
47290
- var formkitVersion$7 = '202607092329';
47129
+ var formkitVersion$7 = '202607102138';
47291
47130
 
47292
47131
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
47293
47132
  // See LICENSE in the project root for license information.
@@ -52228,7 +52067,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
52228
52067
  }
52229
52068
  };
52230
52069
 
52231
- var formkitVersion$1$2 = '202607092329';
52070
+ var formkitVersion$1$2 = '202607102138';
52232
52071
 
52233
52072
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
52234
52073
  // See LICENSE in the project root for license information.
@@ -52569,21 +52408,6 @@ class AuroCounter extends i$3 {
52569
52408
  }
52570
52409
  }
52571
52410
 
52572
- /**
52573
- * Handles the slotchange event for the description slot.
52574
- * Updates ariaDescribedByElements on the spinbutton.
52575
- *
52576
- * @param {Event} event - The slotchange event.
52577
- * @private
52578
- */
52579
- onDescriptionSlotChange(event) {
52580
- const spinbutton = this.shadowRoot.querySelector('[role="spinbutton"]');
52581
- if (spinbutton) {
52582
- const assigned = event.target.assignedElements();
52583
- spinbutton.ariaDescribedByElements = assigned.length > 0 ? assigned : [];
52584
- }
52585
- }
52586
-
52587
52411
  updated(changedProperties) {
52588
52412
  if (changedProperties.has("value")) {
52589
52413
  this.validate();
@@ -52639,7 +52463,7 @@ class AuroCounter extends i$3 {
52639
52463
  <label class="label">
52640
52464
  <slot @slotchange="${this.onDefaultSlotChange}"></slot>
52641
52465
  </label>
52642
- <slot name="description" class="body-xs" @slotchange="${this.onDescriptionSlotChange}"></slot>
52466
+ <slot name="description" class="body-xs"></slot>
52643
52467
  </div>
52644
52468
  <div
52645
52469
  part="counterControl"
@@ -54940,12 +54764,40 @@ let AuroFloatingUI$2 = class AuroFloatingUI {
54940
54764
  return;
54941
54765
  }
54942
54766
 
54767
+ // Chrome-specific: during popover top-layer promotion after a click on a
54768
+ // slotted focusable, :focus-within can briefly evaluate false while the
54769
+ // active element is still structurally inside the trigger/bib. Fall back
54770
+ // to a shadow-piercing ancestry walk from the deep active element before
54771
+ // treating this as a real focus loss.
54772
+ try {
54773
+ let active = document.activeElement;
54774
+ while (active && active.shadowRoot && active.shadowRoot.activeElement) {
54775
+ active = active.shadowRoot.activeElement;
54776
+ }
54777
+ const targets = [element, element.trigger, element.bib].filter(Boolean);
54778
+ let node = active;
54779
+ while (node) {
54780
+ if (targets.includes(node)) {
54781
+ return;
54782
+ }
54783
+ node =
54784
+ node.parentElement ||
54785
+ (node.getRootNode && node.getRootNode().host) ||
54786
+ null;
54787
+ }
54788
+ } catch (e) {
54789
+ // Defensive: fall through to the existing close path if traversal fails.
54790
+ }
54791
+
54943
54792
  // if fullscreen bib is in fullscreen mode, do not close
54944
54793
  if (element.bib.hasAttribute("isfullscreen")) {
54945
54794
  return;
54946
54795
  }
54947
54796
 
54948
- this.hideBib("keydown");
54797
+ // eventType "focusloss" distinguishes a Tab/click-driven close from an
54798
+ // Escape keydown close. Consumers use this to decide whether to restore
54799
+ // focus to the trigger (Escape) or let it advance naturally (Tab).
54800
+ this.hideBib("focusloss");
54949
54801
  }
54950
54802
 
54951
54803
  setupHideHandlers() {
@@ -55615,199 +55467,6 @@ function getFocusableElements$3(container) {
55615
55467
  return tabIndexedUniqueElements;
55616
55468
  }
55617
55469
 
55618
- /**
55619
- * FocusTrap manages keyboard focus within a specified container element, ensuring that focus does not leave the container when tabbing.
55620
- * It is commonly used for modal dialogs or overlays to improve accessibility by trapping focus within interactive UI components.
55621
- */
55622
- let FocusTrap$2 = class FocusTrap {
55623
- /**
55624
- * Creates a new FocusTrap instance for the given container element.
55625
- * Initializes event listeners and prepares the container for focus management.
55626
- *
55627
- * @param {HTMLElement} container The DOM element to trap focus within.
55628
- * @param {boolean} [controlTabOrder=false] If true enables manual control of the tab order by the FocusTrap.
55629
- * @throws {Error} If the provided container is not a valid HTMLElement.
55630
- */
55631
- constructor(container, controlTabOrder = false) {
55632
- if (!container || !(container instanceof HTMLElement)) {
55633
- throw new Error("FocusTrap requires a valid HTMLElement.");
55634
- }
55635
-
55636
- this.container = container;
55637
- this.tabDirection = "forward"; // or 'backward';
55638
- this.controlTabOrder = controlTabOrder;
55639
-
55640
- this._init();
55641
- }
55642
-
55643
- /**
55644
- * Initializes the focus trap by setting up event listeners and attributes on the container.
55645
- * Prepares the container for focus management, including support for shadow DOM and inert attributes.
55646
- *
55647
- * @private
55648
- */
55649
- _init() {
55650
- // Add inert attribute to prevent focusing programmatically as well (if supported)
55651
- if ("inert" in HTMLElement.prototype) {
55652
- this.container.inert = false; // Ensure the container isn't inert
55653
- this.container.setAttribute("data-focus-trap-container", true); // Mark for identification
55654
- }
55655
-
55656
- // Track tab direction
55657
- this.container.addEventListener("keydown", this._onKeydown);
55658
- }
55659
-
55660
- /**
55661
- * Gets an array of currently active (focused) elements in the document and shadow DOM.
55662
- * @returns {Array<HTMLElement>} An array of focusable elements within the container.
55663
- * @private
55664
- */
55665
- _getActiveElements() {
55666
- // Get the active element(s) in the document and shadow root
55667
- // This will include the active element in the shadow DOM if it exists
55668
- // Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
55669
- let { activeElement } = document;
55670
- const actives = [activeElement];
55671
- while (activeElement?.shadowRoot?.activeElement) {
55672
- actives.push(activeElement.shadowRoot.activeElement);
55673
- activeElement = activeElement.shadowRoot.activeElement;
55674
- }
55675
- return actives;
55676
- }
55677
-
55678
- /**
55679
- * Gets the next focus index based on the current index and focusable elements.
55680
- * @param {number} currentIndex The current index of the focused element.
55681
- * @param {Array<HTMLElement>} focusables The array of focusable elements.
55682
- * @returns {number|null} The next focus index or null if not determined.
55683
- */
55684
- _getNextFocusIndex(currentIndex, focusables, actives) {
55685
- if (this.controlTabOrder) {
55686
- // Calculate the new index based on the current index and tab direction
55687
- let newFocusIndex =
55688
- currentIndex + (this.tabDirection === "forward" ? 1 : -1);
55689
-
55690
- // Wrap-around logic
55691
- if (newFocusIndex < 0) newFocusIndex = focusables.length - 1;
55692
- if (newFocusIndex >= focusables.length) newFocusIndex = 0;
55693
-
55694
- // Early return with the new index
55695
- return newFocusIndex;
55696
- }
55697
-
55698
- // Determine if we need to wrap
55699
- const atFirst =
55700
- actives.includes(focusables[0]) || actives.includes(this.container);
55701
- const atLast = actives.includes(focusables[focusables.length - 1]);
55702
-
55703
- // Only wrap if at the ends
55704
- if (this.tabDirection === "backward" && atFirst) {
55705
- return focusables.length - 1;
55706
- }
55707
-
55708
- if (this.tabDirection === "forward" && atLast) {
55709
- return 0;
55710
- }
55711
-
55712
- // No wrap, so don't change focus, return early
55713
- return null;
55714
- }
55715
-
55716
- /**
55717
- * Handles the Tab key press event to manage focus within the container.
55718
- * @param {KeyboardEvent} e The keyboard event triggered by the user.
55719
- * @returns {void}
55720
- */
55721
- _handleTabKey(e) {
55722
- // Update the focusable elements
55723
- const focusables = this._getFocusableElements();
55724
-
55725
- // If there are no focusable elements, exit
55726
- if (!focusables.length) return;
55727
-
55728
- // Set the tab direction based on the key pressed
55729
- this.tabDirection = e.shiftKey ? "backward" : "forward";
55730
-
55731
- // Get the active elements that are currently focused
55732
- const actives = this._getActiveElements();
55733
-
55734
- // If we're at either end of the focusable elements, wrap around to the other end
55735
- let focusIndex = focusables.findIndex((el) => actives.includes(el));
55736
-
55737
- // Fallback if we have no focused element
55738
- if (focusIndex === -1) focusIndex = 0;
55739
-
55740
- // Get the next focus index based on the current focus index, tab direction, and controlTabOrder setting
55741
- // Is null if no new focus index is determined
55742
- const newFocusIndex = this._getNextFocusIndex(
55743
- focusIndex,
55744
- focusables,
55745
- actives,
55746
- );
55747
-
55748
- // If we have a new focus index, set focus to that element
55749
- if (newFocusIndex !== null) {
55750
- e.preventDefault();
55751
- focusables[newFocusIndex].focus();
55752
- }
55753
- }
55754
-
55755
- /**
55756
- * Catches the keydown event
55757
- * @param {KeyboardEvent} e The keyboard event triggered by user interaction.
55758
- * @private
55759
- */
55760
- _onKeydown = (e) => {
55761
- // Handle tab
55762
- if (e.key === "Tab") this._handleTabKey(e);
55763
- };
55764
-
55765
- /**
55766
- * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
55767
- * Returns a unique, ordered array of elements that can receive focus.
55768
- *
55769
- * @returns {Array<HTMLElement>} An array of focusable elements within the container.
55770
- * @private
55771
- */
55772
- _getFocusableElements() {
55773
- // Use the imported utility function to get focusable elements
55774
- const elements = getFocusableElements$3(this.container);
55775
-
55776
- // Return the elements found
55777
- return elements;
55778
- }
55779
-
55780
- /**
55781
- * Moves focus to the first focusable element within the container.
55782
- * Useful for setting initial focus when activating the focus trap.
55783
- */
55784
- focusFirstElement() {
55785
- const focusables = this._getFocusableElements();
55786
- if (focusables.length) focusables[0].focus();
55787
- }
55788
-
55789
- /**
55790
- * Moves focus to the last focusable element within the container.
55791
- * Useful for setting focus when deactivating or cycling focus in reverse.
55792
- */
55793
- focusLastElement() {
55794
- const focusables = this._getFocusableElements();
55795
- if (focusables.length) focusables[focusables.length - 1].focus();
55796
- }
55797
-
55798
- /**
55799
- * Removes event listeners and attributes added by the focus trap.
55800
- * Call this method to clean up when the focus trap is no longer needed.
55801
- */
55802
- disconnect() {
55803
- if (this.container.hasAttribute("data-focus-trap-container")) {
55804
- this.container.removeAttribute("data-focus-trap-container");
55805
- }
55806
-
55807
- this.container.removeEventListener("keydown", this._onKeydown);
55808
- }
55809
- };
55810
-
55811
55470
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
55812
55471
  // See LICENSE in the project root for license information.
55813
55472
 
@@ -56305,7 +55964,7 @@ let AuroDropdownBib$2 = class AuroDropdownBib extends i$3 {
56305
55964
  classes[`shape-${this.shape}`] = true;
56306
55965
 
56307
55966
  return u$c`
56308
- <dialog class="${e$2(classes)}" part="bibContainer" role="${o$4(this.dialogRole)}" aria-labelledby="${o$4(this.dialogLabel ? 'dialogLabel' : undefined)}">
55967
+ <dialog tabindex="-1" class="${e$2(classes)}" part="bibContainer" role="${o$4(this.dialogRole)}" aria-labelledby="${o$4(this.dialogLabel ? 'dialogLabel' : undefined)}">
56309
55968
  ${this.dialogLabel ? u$c`<span id="dialogLabel" class="util_displayHiddenVisually">${this.dialogLabel}</span>` : ''}
56310
55969
  <slot></slot>
56311
55970
  <span id="srAnnouncement" class="util_displayHiddenVisually" aria-live="polite" role="status"></span>
@@ -56556,7 +56215,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
56556
56215
  }
56557
56216
  };
56558
56217
 
56559
- var formkitVersion$6 = '202607092329';
56218
+ var formkitVersion$6 = '202607102138';
56560
56219
 
56561
56220
  let AuroElement$1$2 = class AuroElement extends i$3 {
56562
56221
  static get properties() {
@@ -57310,7 +56969,10 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57310
56969
  }
57311
56970
 
57312
56971
 
57313
- if (!this.isPopoverVisible) {
56972
+ // On Tab-driven close (eventType "focusloss"), let focus advance naturally
56973
+ // — restoring to the trigger would trap the user on this dropdown, forcing
56974
+ // an extra Tab to move on. Escape and outside-click still restore.
56975
+ if (!this.isPopoverVisible && eventType !== "focusloss") {
57314
56976
  // wait til the bib gets fully closed and rendered
57315
56977
  setTimeout(() => {
57316
56978
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -57540,15 +57202,16 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57540
57202
  }
57541
57203
  });
57542
57204
  } else {
57543
- // Normal desktop: use FocusTrap on the bib element.
57544
- // Defer focusFirstElement to the next frame because the popover
57545
- // is positioned asynchronously by Floating UI — calling focus()
57546
- // synchronously here would target elements with zero dimensions
57547
- // and the focus call would be silently ignored.
57548
- this.focusTrap = new FocusTrap$2(this.bibContent);
57205
+ // Normal desktop (non-modal): move initial focus into the bib but
57206
+ // don't trap Tab. Tab should exit the bib and let the floater's
57207
+ // handleFocusLoss close it, matching native <select>/<details>
57208
+ // behavior. Deferred one frame because Floating UI positions the
57209
+ // popover asynchronously a synchronous focus() would target
57210
+ // zero-dimension elements and be silently ignored.
57549
57211
  requestAnimationFrame(() => {
57550
- if (this.focusTrap) {
57551
- this.focusTrap.focusFirstElement();
57212
+ const focusables = getFocusableElements$3(this.bibContent);
57213
+ if (focusables.length) {
57214
+ focusables[0].focus();
57552
57215
  }
57553
57216
  });
57554
57217
  }
@@ -59146,6 +58809,19 @@ class AuroCounterGroup extends AuroElement$4 {
59146
58809
 
59147
58810
  if (this.isDropdown) {
59148
58811
  applyKeyboardStrategy$1$2(this, counterGroupKeyboardStrategy);
58812
+
58813
+ // noHideOnThisFocusLoss=true on the dropdown prevents handleFocusLoss from
58814
+ // closing the bib when focus moves out via Tab. Close explicitly via focusout:
58815
+ // if relatedTarget is outside the counter-group's light DOM, focus has left.
58816
+ this.addEventListener('focusout', (event) => {
58817
+ if (!this.dropdown?.isPopoverVisible || this.dropdown?.isBibFullscreen) {
58818
+ return;
58819
+ }
58820
+ if (event.relatedTarget && this.contains(event.relatedTarget)) {
58821
+ return;
58822
+ }
58823
+ this.hideBib();
58824
+ });
59149
58825
  }
59150
58826
  }
59151
58827
 
@@ -60536,7 +60212,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
60536
60212
  }
60537
60213
  };
60538
60214
 
60539
- var formkitVersion$5 = '202607092329';
60215
+ var formkitVersion$5 = '202607102138';
60540
60216
 
60541
60217
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
60542
60218
  // See LICENSE in the project root for license information.
@@ -62301,7 +61977,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
62301
61977
  }
62302
61978
  };
62303
61979
 
62304
- var formkitVersion$4 = '202607092329';
61980
+ var formkitVersion$4 = '202607102138';
62305
61981
 
62306
61982
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
62307
61983
  // See LICENSE in the project root for license information.
@@ -66163,12 +65839,40 @@ let AuroFloatingUI$1 = class AuroFloatingUI {
66163
65839
  return;
66164
65840
  }
66165
65841
 
65842
+ // Chrome-specific: during popover top-layer promotion after a click on a
65843
+ // slotted focusable, :focus-within can briefly evaluate false while the
65844
+ // active element is still structurally inside the trigger/bib. Fall back
65845
+ // to a shadow-piercing ancestry walk from the deep active element before
65846
+ // treating this as a real focus loss.
65847
+ try {
65848
+ let active = document.activeElement;
65849
+ while (active && active.shadowRoot && active.shadowRoot.activeElement) {
65850
+ active = active.shadowRoot.activeElement;
65851
+ }
65852
+ const targets = [element, element.trigger, element.bib].filter(Boolean);
65853
+ let node = active;
65854
+ while (node) {
65855
+ if (targets.includes(node)) {
65856
+ return;
65857
+ }
65858
+ node =
65859
+ node.parentElement ||
65860
+ (node.getRootNode && node.getRootNode().host) ||
65861
+ null;
65862
+ }
65863
+ } catch (e) {
65864
+ // Defensive: fall through to the existing close path if traversal fails.
65865
+ }
65866
+
66166
65867
  // if fullscreen bib is in fullscreen mode, do not close
66167
65868
  if (element.bib.hasAttribute("isfullscreen")) {
66168
65869
  return;
66169
65870
  }
66170
65871
 
66171
- this.hideBib("keydown");
65872
+ // eventType "focusloss" distinguishes a Tab/click-driven close from an
65873
+ // Escape keydown close. Consumers use this to decide whether to restore
65874
+ // focus to the trigger (Escape) or let it advance naturally (Tab).
65875
+ this.hideBib("focusloss");
66172
65876
  }
66173
65877
 
66174
65878
  setupHideHandlers() {
@@ -66838,199 +66542,6 @@ function getFocusableElements$2(container) {
66838
66542
  return tabIndexedUniqueElements;
66839
66543
  }
66840
66544
 
66841
- /**
66842
- * FocusTrap manages keyboard focus within a specified container element, ensuring that focus does not leave the container when tabbing.
66843
- * It is commonly used for modal dialogs or overlays to improve accessibility by trapping focus within interactive UI components.
66844
- */
66845
- let FocusTrap$1 = class FocusTrap {
66846
- /**
66847
- * Creates a new FocusTrap instance for the given container element.
66848
- * Initializes event listeners and prepares the container for focus management.
66849
- *
66850
- * @param {HTMLElement} container The DOM element to trap focus within.
66851
- * @param {boolean} [controlTabOrder=false] If true enables manual control of the tab order by the FocusTrap.
66852
- * @throws {Error} If the provided container is not a valid HTMLElement.
66853
- */
66854
- constructor(container, controlTabOrder = false) {
66855
- if (!container || !(container instanceof HTMLElement)) {
66856
- throw new Error("FocusTrap requires a valid HTMLElement.");
66857
- }
66858
-
66859
- this.container = container;
66860
- this.tabDirection = "forward"; // or 'backward';
66861
- this.controlTabOrder = controlTabOrder;
66862
-
66863
- this._init();
66864
- }
66865
-
66866
- /**
66867
- * Initializes the focus trap by setting up event listeners and attributes on the container.
66868
- * Prepares the container for focus management, including support for shadow DOM and inert attributes.
66869
- *
66870
- * @private
66871
- */
66872
- _init() {
66873
- // Add inert attribute to prevent focusing programmatically as well (if supported)
66874
- if ("inert" in HTMLElement.prototype) {
66875
- this.container.inert = false; // Ensure the container isn't inert
66876
- this.container.setAttribute("data-focus-trap-container", true); // Mark for identification
66877
- }
66878
-
66879
- // Track tab direction
66880
- this.container.addEventListener("keydown", this._onKeydown);
66881
- }
66882
-
66883
- /**
66884
- * Gets an array of currently active (focused) elements in the document and shadow DOM.
66885
- * @returns {Array<HTMLElement>} An array of focusable elements within the container.
66886
- * @private
66887
- */
66888
- _getActiveElements() {
66889
- // Get the active element(s) in the document and shadow root
66890
- // This will include the active element in the shadow DOM if it exists
66891
- // Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
66892
- let { activeElement } = document;
66893
- const actives = [activeElement];
66894
- while (activeElement?.shadowRoot?.activeElement) {
66895
- actives.push(activeElement.shadowRoot.activeElement);
66896
- activeElement = activeElement.shadowRoot.activeElement;
66897
- }
66898
- return actives;
66899
- }
66900
-
66901
- /**
66902
- * Gets the next focus index based on the current index and focusable elements.
66903
- * @param {number} currentIndex The current index of the focused element.
66904
- * @param {Array<HTMLElement>} focusables The array of focusable elements.
66905
- * @returns {number|null} The next focus index or null if not determined.
66906
- */
66907
- _getNextFocusIndex(currentIndex, focusables, actives) {
66908
- if (this.controlTabOrder) {
66909
- // Calculate the new index based on the current index and tab direction
66910
- let newFocusIndex =
66911
- currentIndex + (this.tabDirection === "forward" ? 1 : -1);
66912
-
66913
- // Wrap-around logic
66914
- if (newFocusIndex < 0) newFocusIndex = focusables.length - 1;
66915
- if (newFocusIndex >= focusables.length) newFocusIndex = 0;
66916
-
66917
- // Early return with the new index
66918
- return newFocusIndex;
66919
- }
66920
-
66921
- // Determine if we need to wrap
66922
- const atFirst =
66923
- actives.includes(focusables[0]) || actives.includes(this.container);
66924
- const atLast = actives.includes(focusables[focusables.length - 1]);
66925
-
66926
- // Only wrap if at the ends
66927
- if (this.tabDirection === "backward" && atFirst) {
66928
- return focusables.length - 1;
66929
- }
66930
-
66931
- if (this.tabDirection === "forward" && atLast) {
66932
- return 0;
66933
- }
66934
-
66935
- // No wrap, so don't change focus, return early
66936
- return null;
66937
- }
66938
-
66939
- /**
66940
- * Handles the Tab key press event to manage focus within the container.
66941
- * @param {KeyboardEvent} e The keyboard event triggered by the user.
66942
- * @returns {void}
66943
- */
66944
- _handleTabKey(e) {
66945
- // Update the focusable elements
66946
- const focusables = this._getFocusableElements();
66947
-
66948
- // If there are no focusable elements, exit
66949
- if (!focusables.length) return;
66950
-
66951
- // Set the tab direction based on the key pressed
66952
- this.tabDirection = e.shiftKey ? "backward" : "forward";
66953
-
66954
- // Get the active elements that are currently focused
66955
- const actives = this._getActiveElements();
66956
-
66957
- // If we're at either end of the focusable elements, wrap around to the other end
66958
- let focusIndex = focusables.findIndex((el) => actives.includes(el));
66959
-
66960
- // Fallback if we have no focused element
66961
- if (focusIndex === -1) focusIndex = 0;
66962
-
66963
- // Get the next focus index based on the current focus index, tab direction, and controlTabOrder setting
66964
- // Is null if no new focus index is determined
66965
- const newFocusIndex = this._getNextFocusIndex(
66966
- focusIndex,
66967
- focusables,
66968
- actives,
66969
- );
66970
-
66971
- // If we have a new focus index, set focus to that element
66972
- if (newFocusIndex !== null) {
66973
- e.preventDefault();
66974
- focusables[newFocusIndex].focus();
66975
- }
66976
- }
66977
-
66978
- /**
66979
- * Catches the keydown event
66980
- * @param {KeyboardEvent} e The keyboard event triggered by user interaction.
66981
- * @private
66982
- */
66983
- _onKeydown = (e) => {
66984
- // Handle tab
66985
- if (e.key === "Tab") this._handleTabKey(e);
66986
- };
66987
-
66988
- /**
66989
- * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
66990
- * Returns a unique, ordered array of elements that can receive focus.
66991
- *
66992
- * @returns {Array<HTMLElement>} An array of focusable elements within the container.
66993
- * @private
66994
- */
66995
- _getFocusableElements() {
66996
- // Use the imported utility function to get focusable elements
66997
- const elements = getFocusableElements$2(this.container);
66998
-
66999
- // Return the elements found
67000
- return elements;
67001
- }
67002
-
67003
- /**
67004
- * Moves focus to the first focusable element within the container.
67005
- * Useful for setting initial focus when activating the focus trap.
67006
- */
67007
- focusFirstElement() {
67008
- const focusables = this._getFocusableElements();
67009
- if (focusables.length) focusables[0].focus();
67010
- }
67011
-
67012
- /**
67013
- * Moves focus to the last focusable element within the container.
67014
- * Useful for setting focus when deactivating or cycling focus in reverse.
67015
- */
67016
- focusLastElement() {
67017
- const focusables = this._getFocusableElements();
67018
- if (focusables.length) focusables[focusables.length - 1].focus();
67019
- }
67020
-
67021
- /**
67022
- * Removes event listeners and attributes added by the focus trap.
67023
- * Call this method to clean up when the focus trap is no longer needed.
67024
- */
67025
- disconnect() {
67026
- if (this.container.hasAttribute("data-focus-trap-container")) {
67027
- this.container.removeAttribute("data-focus-trap-container");
67028
- }
67029
-
67030
- this.container.removeEventListener("keydown", this._onKeydown);
67031
- }
67032
- };
67033
-
67034
66545
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
67035
66546
  // See LICENSE in the project root for license information.
67036
66547
 
@@ -67528,7 +67039,7 @@ let AuroDropdownBib$1 = class AuroDropdownBib extends i$3 {
67528
67039
  classes[`shape-${this.shape}`] = true;
67529
67040
 
67530
67041
  return u$c`
67531
- <dialog class="${e$2(classes)}" part="bibContainer" role="${o$4(this.dialogRole)}" aria-labelledby="${o$4(this.dialogLabel ? 'dialogLabel' : undefined)}">
67042
+ <dialog tabindex="-1" class="${e$2(classes)}" part="bibContainer" role="${o$4(this.dialogRole)}" aria-labelledby="${o$4(this.dialogLabel ? 'dialogLabel' : undefined)}">
67532
67043
  ${this.dialogLabel ? u$c`<span id="dialogLabel" class="util_displayHiddenVisually">${this.dialogLabel}</span>` : ''}
67533
67044
  <slot></slot>
67534
67045
  <span id="srAnnouncement" class="util_displayHiddenVisually" aria-live="polite" role="status"></span>
@@ -67779,7 +67290,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
67779
67290
  }
67780
67291
  };
67781
67292
 
67782
- var formkitVersion$2 = '202607092329';
67293
+ var formkitVersion$2 = '202607102138';
67783
67294
 
67784
67295
  let AuroElement$2$1 = class AuroElement extends i$3 {
67785
67296
  static get properties() {
@@ -68533,7 +68044,10 @@ let AuroDropdown$1 = class AuroDropdown extends AuroElement$2$1 {
68533
68044
  }
68534
68045
 
68535
68046
 
68536
- if (!this.isPopoverVisible) {
68047
+ // On Tab-driven close (eventType "focusloss"), let focus advance naturally
68048
+ // — restoring to the trigger would trap the user on this dropdown, forcing
68049
+ // an extra Tab to move on. Escape and outside-click still restore.
68050
+ if (!this.isPopoverVisible && eventType !== "focusloss") {
68537
68051
  // wait til the bib gets fully closed and rendered
68538
68052
  setTimeout(() => {
68539
68053
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -68763,15 +68277,16 @@ let AuroDropdown$1 = class AuroDropdown extends AuroElement$2$1 {
68763
68277
  }
68764
68278
  });
68765
68279
  } else {
68766
- // Normal desktop: use FocusTrap on the bib element.
68767
- // Defer focusFirstElement to the next frame because the popover
68768
- // is positioned asynchronously by Floating UI — calling focus()
68769
- // synchronously here would target elements with zero dimensions
68770
- // and the focus call would be silently ignored.
68771
- this.focusTrap = new FocusTrap$1(this.bibContent);
68280
+ // Normal desktop (non-modal): move initial focus into the bib but
68281
+ // don't trap Tab. Tab should exit the bib and let the floater's
68282
+ // handleFocusLoss close it, matching native <select>/<details>
68283
+ // behavior. Deferred one frame because Floating UI positions the
68284
+ // popover asynchronously a synchronous focus() would target
68285
+ // zero-dimension elements and be silently ignored.
68772
68286
  requestAnimationFrame(() => {
68773
- if (this.focusTrap) {
68774
- this.focusTrap.focusFirstElement();
68287
+ const focusables = getFocusableElements$2(this.bibContent);
68288
+ if (focusables.length) {
68289
+ focusables[0].focus();
68775
68290
  }
68776
68291
  });
68777
68292
  }
@@ -81397,7 +80912,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
81397
80912
  }
81398
80913
  };
81399
80914
 
81400
- var formkitVersion$1$1 = '202607092329';
80915
+ var formkitVersion$1$1 = '202607102138';
81401
80916
 
81402
80917
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
81403
80918
  // See LICENSE in the project root for license information.
@@ -82518,7 +82033,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
82518
82033
  }
82519
82034
  };
82520
82035
 
82521
- var formkitVersion$3 = '202607092329';
82036
+ var formkitVersion$3 = '202607102138';
82522
82037
 
82523
82038
  var styleCss$1$3 = i$6`.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}`;
82524
82039
 
@@ -89888,12 +89403,40 @@ class AuroFloatingUI {
89888
89403
  return;
89889
89404
  }
89890
89405
 
89406
+ // Chrome-specific: during popover top-layer promotion after a click on a
89407
+ // slotted focusable, :focus-within can briefly evaluate false while the
89408
+ // active element is still structurally inside the trigger/bib. Fall back
89409
+ // to a shadow-piercing ancestry walk from the deep active element before
89410
+ // treating this as a real focus loss.
89411
+ try {
89412
+ let active = document.activeElement;
89413
+ while (active && active.shadowRoot && active.shadowRoot.activeElement) {
89414
+ active = active.shadowRoot.activeElement;
89415
+ }
89416
+ const targets = [element, element.trigger, element.bib].filter(Boolean);
89417
+ let node = active;
89418
+ while (node) {
89419
+ if (targets.includes(node)) {
89420
+ return;
89421
+ }
89422
+ node =
89423
+ node.parentElement ||
89424
+ (node.getRootNode && node.getRootNode().host) ||
89425
+ null;
89426
+ }
89427
+ } catch (e) {
89428
+ // Defensive: fall through to the existing close path if traversal fails.
89429
+ }
89430
+
89891
89431
  // if fullscreen bib is in fullscreen mode, do not close
89892
89432
  if (element.bib.hasAttribute("isfullscreen")) {
89893
89433
  return;
89894
89434
  }
89895
89435
 
89896
- this.hideBib("keydown");
89436
+ // eventType "focusloss" distinguishes a Tab/click-driven close from an
89437
+ // Escape keydown close. Consumers use this to decide whether to restore
89438
+ // focus to the trigger (Escape) or let it advance naturally (Tab).
89439
+ this.hideBib("focusloss");
89897
89440
  }
89898
89441
 
89899
89442
  setupHideHandlers() {
@@ -90563,199 +90106,6 @@ function getFocusableElements(container) {
90563
90106
  return tabIndexedUniqueElements;
90564
90107
  }
90565
90108
 
90566
- /**
90567
- * FocusTrap manages keyboard focus within a specified container element, ensuring that focus does not leave the container when tabbing.
90568
- * It is commonly used for modal dialogs or overlays to improve accessibility by trapping focus within interactive UI components.
90569
- */
90570
- class FocusTrap {
90571
- /**
90572
- * Creates a new FocusTrap instance for the given container element.
90573
- * Initializes event listeners and prepares the container for focus management.
90574
- *
90575
- * @param {HTMLElement} container The DOM element to trap focus within.
90576
- * @param {boolean} [controlTabOrder=false] If true enables manual control of the tab order by the FocusTrap.
90577
- * @throws {Error} If the provided container is not a valid HTMLElement.
90578
- */
90579
- constructor(container, controlTabOrder = false) {
90580
- if (!container || !(container instanceof HTMLElement)) {
90581
- throw new Error("FocusTrap requires a valid HTMLElement.");
90582
- }
90583
-
90584
- this.container = container;
90585
- this.tabDirection = "forward"; // or 'backward';
90586
- this.controlTabOrder = controlTabOrder;
90587
-
90588
- this._init();
90589
- }
90590
-
90591
- /**
90592
- * Initializes the focus trap by setting up event listeners and attributes on the container.
90593
- * Prepares the container for focus management, including support for shadow DOM and inert attributes.
90594
- *
90595
- * @private
90596
- */
90597
- _init() {
90598
- // Add inert attribute to prevent focusing programmatically as well (if supported)
90599
- if ("inert" in HTMLElement.prototype) {
90600
- this.container.inert = false; // Ensure the container isn't inert
90601
- this.container.setAttribute("data-focus-trap-container", true); // Mark for identification
90602
- }
90603
-
90604
- // Track tab direction
90605
- this.container.addEventListener("keydown", this._onKeydown);
90606
- }
90607
-
90608
- /**
90609
- * Gets an array of currently active (focused) elements in the document and shadow DOM.
90610
- * @returns {Array<HTMLElement>} An array of focusable elements within the container.
90611
- * @private
90612
- */
90613
- _getActiveElements() {
90614
- // Get the active element(s) in the document and shadow root
90615
- // This will include the active element in the shadow DOM if it exists
90616
- // Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
90617
- let { activeElement } = document;
90618
- const actives = [activeElement];
90619
- while (activeElement?.shadowRoot?.activeElement) {
90620
- actives.push(activeElement.shadowRoot.activeElement);
90621
- activeElement = activeElement.shadowRoot.activeElement;
90622
- }
90623
- return actives;
90624
- }
90625
-
90626
- /**
90627
- * Gets the next focus index based on the current index and focusable elements.
90628
- * @param {number} currentIndex The current index of the focused element.
90629
- * @param {Array<HTMLElement>} focusables The array of focusable elements.
90630
- * @returns {number|null} The next focus index or null if not determined.
90631
- */
90632
- _getNextFocusIndex(currentIndex, focusables, actives) {
90633
- if (this.controlTabOrder) {
90634
- // Calculate the new index based on the current index and tab direction
90635
- let newFocusIndex =
90636
- currentIndex + (this.tabDirection === "forward" ? 1 : -1);
90637
-
90638
- // Wrap-around logic
90639
- if (newFocusIndex < 0) newFocusIndex = focusables.length - 1;
90640
- if (newFocusIndex >= focusables.length) newFocusIndex = 0;
90641
-
90642
- // Early return with the new index
90643
- return newFocusIndex;
90644
- }
90645
-
90646
- // Determine if we need to wrap
90647
- const atFirst =
90648
- actives.includes(focusables[0]) || actives.includes(this.container);
90649
- const atLast = actives.includes(focusables[focusables.length - 1]);
90650
-
90651
- // Only wrap if at the ends
90652
- if (this.tabDirection === "backward" && atFirst) {
90653
- return focusables.length - 1;
90654
- }
90655
-
90656
- if (this.tabDirection === "forward" && atLast) {
90657
- return 0;
90658
- }
90659
-
90660
- // No wrap, so don't change focus, return early
90661
- return null;
90662
- }
90663
-
90664
- /**
90665
- * Handles the Tab key press event to manage focus within the container.
90666
- * @param {KeyboardEvent} e The keyboard event triggered by the user.
90667
- * @returns {void}
90668
- */
90669
- _handleTabKey(e) {
90670
- // Update the focusable elements
90671
- const focusables = this._getFocusableElements();
90672
-
90673
- // If there are no focusable elements, exit
90674
- if (!focusables.length) return;
90675
-
90676
- // Set the tab direction based on the key pressed
90677
- this.tabDirection = e.shiftKey ? "backward" : "forward";
90678
-
90679
- // Get the active elements that are currently focused
90680
- const actives = this._getActiveElements();
90681
-
90682
- // If we're at either end of the focusable elements, wrap around to the other end
90683
- let focusIndex = focusables.findIndex((el) => actives.includes(el));
90684
-
90685
- // Fallback if we have no focused element
90686
- if (focusIndex === -1) focusIndex = 0;
90687
-
90688
- // Get the next focus index based on the current focus index, tab direction, and controlTabOrder setting
90689
- // Is null if no new focus index is determined
90690
- const newFocusIndex = this._getNextFocusIndex(
90691
- focusIndex,
90692
- focusables,
90693
- actives,
90694
- );
90695
-
90696
- // If we have a new focus index, set focus to that element
90697
- if (newFocusIndex !== null) {
90698
- e.preventDefault();
90699
- focusables[newFocusIndex].focus();
90700
- }
90701
- }
90702
-
90703
- /**
90704
- * Catches the keydown event
90705
- * @param {KeyboardEvent} e The keyboard event triggered by user interaction.
90706
- * @private
90707
- */
90708
- _onKeydown = (e) => {
90709
- // Handle tab
90710
- if (e.key === "Tab") this._handleTabKey(e);
90711
- };
90712
-
90713
- /**
90714
- * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
90715
- * Returns a unique, ordered array of elements that can receive focus.
90716
- *
90717
- * @returns {Array<HTMLElement>} An array of focusable elements within the container.
90718
- * @private
90719
- */
90720
- _getFocusableElements() {
90721
- // Use the imported utility function to get focusable elements
90722
- const elements = getFocusableElements(this.container);
90723
-
90724
- // Return the elements found
90725
- return elements;
90726
- }
90727
-
90728
- /**
90729
- * Moves focus to the first focusable element within the container.
90730
- * Useful for setting initial focus when activating the focus trap.
90731
- */
90732
- focusFirstElement() {
90733
- const focusables = this._getFocusableElements();
90734
- if (focusables.length) focusables[0].focus();
90735
- }
90736
-
90737
- /**
90738
- * Moves focus to the last focusable element within the container.
90739
- * Useful for setting focus when deactivating or cycling focus in reverse.
90740
- */
90741
- focusLastElement() {
90742
- const focusables = this._getFocusableElements();
90743
- if (focusables.length) focusables[focusables.length - 1].focus();
90744
- }
90745
-
90746
- /**
90747
- * Removes event listeners and attributes added by the focus trap.
90748
- * Call this method to clean up when the focus trap is no longer needed.
90749
- */
90750
- disconnect() {
90751
- if (this.container.hasAttribute("data-focus-trap-container")) {
90752
- this.container.removeAttribute("data-focus-trap-container");
90753
- }
90754
-
90755
- this.container.removeEventListener("keydown", this._onKeydown);
90756
- }
90757
- }
90758
-
90759
90109
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
90760
90110
  // See LICENSE in the project root for license information.
90761
90111
 
@@ -91253,7 +90603,7 @@ class AuroDropdownBib extends i$3 {
91253
90603
  classes[`shape-${this.shape}`] = true;
91254
90604
 
91255
90605
  return u$c`
91256
- <dialog class="${e$2(classes)}" part="bibContainer" role="${o$4(this.dialogRole)}" aria-labelledby="${o$4(this.dialogLabel ? 'dialogLabel' : undefined)}">
90606
+ <dialog tabindex="-1" class="${e$2(classes)}" part="bibContainer" role="${o$4(this.dialogRole)}" aria-labelledby="${o$4(this.dialogLabel ? 'dialogLabel' : undefined)}">
91257
90607
  ${this.dialogLabel ? u$c`<span id="dialogLabel" class="util_displayHiddenVisually">${this.dialogLabel}</span>` : ''}
91258
90608
  <slot></slot>
91259
90609
  <span id="srAnnouncement" class="util_displayHiddenVisually" aria-live="polite" role="status"></span>
@@ -91504,7 +90854,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
91504
90854
  }
91505
90855
  };
91506
90856
 
91507
- var formkitVersion$1 = '202607092329';
90857
+ var formkitVersion$1 = '202607102138';
91508
90858
 
91509
90859
  class AuroElement extends i$3 {
91510
90860
  static get properties() {
@@ -92258,7 +91608,10 @@ class AuroDropdown extends AuroElement {
92258
91608
  }
92259
91609
 
92260
91610
 
92261
- if (!this.isPopoverVisible) {
91611
+ // On Tab-driven close (eventType "focusloss"), let focus advance naturally
91612
+ // — restoring to the trigger would trap the user on this dropdown, forcing
91613
+ // an extra Tab to move on. Escape and outside-click still restore.
91614
+ if (!this.isPopoverVisible && eventType !== "focusloss") {
92262
91615
  // wait til the bib gets fully closed and rendered
92263
91616
  setTimeout(() => {
92264
91617
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -92488,15 +91841,16 @@ class AuroDropdown extends AuroElement {
92488
91841
  }
92489
91842
  });
92490
91843
  } else {
92491
- // Normal desktop: use FocusTrap on the bib element.
92492
- // Defer focusFirstElement to the next frame because the popover
92493
- // is positioned asynchronously by Floating UI — calling focus()
92494
- // synchronously here would target elements with zero dimensions
92495
- // and the focus call would be silently ignored.
92496
- this.focusTrap = new FocusTrap(this.bibContent);
91844
+ // Normal desktop (non-modal): move initial focus into the bib but
91845
+ // don't trap Tab. Tab should exit the bib and let the floater's
91846
+ // handleFocusLoss close it, matching native <select>/<details>
91847
+ // behavior. Deferred one frame because Floating UI positions the
91848
+ // popover asynchronously a synchronous focus() would target
91849
+ // zero-dimension elements and be silently ignored.
92497
91850
  requestAnimationFrame(() => {
92498
- if (this.focusTrap) {
92499
- this.focusTrap.focusFirstElement();
91851
+ const focusables = getFocusableElements(this.bibContent);
91852
+ if (focusables.length) {
91853
+ focusables[0].focus();
92500
91854
  }
92501
91855
  });
92502
91856
  }
@@ -93543,7 +92897,7 @@ class AuroHelpText extends i$3 {
93543
92897
  }
93544
92898
  }
93545
92899
 
93546
- var formkitVersion = '202607092329';
92900
+ var formkitVersion = '202607102138';
93547
92901
 
93548
92902
  var styleCss = i$6`.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}`;
93549
92903