@aurodesignsystem-dev/auro-formkit 0.0.0-pr1604.1 → 0.0.0-pr1605.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 (52) 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 +153 -5
  7. package/components/combobox/demo/getting-started.min.js +153 -5
  8. package/components/combobox/demo/index.min.js +153 -5
  9. package/components/combobox/dist/auro-combobox.d.ts +22 -0
  10. package/components/combobox/dist/index.js +137 -5
  11. package/components/combobox/dist/registered.js +137 -5
  12. package/components/counter/demo/customize.min.js +339 -23
  13. package/components/counter/demo/getting-started.min.js +339 -23
  14. package/components/counter/demo/index.min.js +339 -23
  15. package/components/counter/dist/counterGroupKeyboardStrategy.d.ts +1 -0
  16. package/components/counter/dist/index.js +339 -23
  17. package/components/counter/dist/registered.js +339 -23
  18. package/components/datepicker/demo/customize.min.js +94 -5
  19. package/components/datepicker/demo/getting-started.min.js +94 -5
  20. package/components/datepicker/demo/index.min.js +94 -5
  21. package/components/datepicker/dist/auro-datepicker.d.ts +7 -0
  22. package/components/datepicker/dist/index.js +94 -5
  23. package/components/datepicker/dist/registered.js +94 -5
  24. package/components/dropdown/demo/customize.min.js +44 -2
  25. package/components/dropdown/demo/getting-started.min.js +45 -3
  26. package/components/dropdown/demo/index.min.js +44 -2
  27. package/components/dropdown/dist/index.js +44 -2
  28. package/components/dropdown/dist/registered.js +44 -2
  29. package/components/form/demo/customize.min.js +634 -39
  30. package/components/form/demo/getting-started.min.js +634 -39
  31. package/components/form/demo/index.min.js +634 -39
  32. package/components/form/demo/registerDemoDeps.min.js +634 -39
  33. package/components/input/demo/customize.min.js +1 -1
  34. package/components/input/demo/getting-started.min.js +1 -1
  35. package/components/input/demo/index.min.js +1 -1
  36. package/components/input/dist/index.js +1 -1
  37. package/components/input/dist/registered.js +1 -1
  38. package/components/menu/demo/index.min.js +16 -0
  39. package/components/menu/dist/index.js +16 -0
  40. package/components/menu/dist/registered.js +16 -0
  41. package/components/radio/demo/customize.min.js +1 -1
  42. package/components/radio/demo/getting-started.min.js +1 -1
  43. package/components/radio/demo/index.min.js +1 -1
  44. package/components/radio/dist/index.js +1 -1
  45. package/components/radio/dist/registered.js +1 -1
  46. package/components/select/demo/customize.min.js +61 -3
  47. package/components/select/demo/getting-started.min.js +61 -3
  48. package/components/select/demo/index.min.js +61 -3
  49. package/components/select/dist/index.js +45 -3
  50. package/components/select/dist/registered.js +45 -3
  51. package/custom-elements.json +1521 -1491
  52. package/package.json +3 -3
@@ -13521,7 +13521,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13521
13521
  }
13522
13522
  };
13523
13523
 
13524
- var formkitVersion$8 = '202609012101';
13524
+ var formkitVersion$8 = '202609022200';
13525
13525
 
13526
13526
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13527
13527
  // See LICENSE in the project root for license information.
@@ -28084,7 +28084,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
28084
28084
  }
28085
28085
  };
28086
28086
 
28087
- var formkitVersion$2$1 = '202609012101';
28087
+ var formkitVersion$2$1 = '202609022200';
28088
28088
 
28089
28089
  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}
28090
28090
  `,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}}
@@ -31865,6 +31865,48 @@ const computePosition$4 = (reference, floating, options) => {
31865
31865
  });
31866
31866
  };
31867
31867
 
31868
+ /**
31869
+ * Generates a v4 UUID with a three-tier fallback for insecure contexts.
31870
+ *
31871
+ * Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
31872
+ * Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
31873
+ * modern browsers regardless of secure-context status.
31874
+ * Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
31875
+ * but sufficient for element IDs where collision risk is negligible.
31876
+ *
31877
+ * See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
31878
+ */
31879
+ function generateUUID$3() {
31880
+ let uuid;
31881
+
31882
+ if (
31883
+ typeof crypto !== "undefined" &&
31884
+ typeof crypto.randomUUID === "function"
31885
+ ) {
31886
+ uuid = crypto.randomUUID();
31887
+ } else if (
31888
+ typeof crypto !== "undefined" &&
31889
+ typeof crypto.getRandomValues === "function"
31890
+ ) {
31891
+ const bytes = new Uint8Array(16);
31892
+ crypto.getRandomValues(bytes);
31893
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
31894
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
31895
+ const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
31896
+ uuid = `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
31897
+ } else {
31898
+ let d = new Date().getTime();
31899
+ uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
31900
+ const r = (d % 16) | 0;
31901
+ d = (d - r) / 16 || new Date().getTime();
31902
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
31903
+ });
31904
+ }
31905
+
31906
+ // CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
31907
+ return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
31908
+ }
31909
+
31868
31910
  /* eslint-disable line-comment-position, no-inline-comments */
31869
31911
 
31870
31912
 
@@ -32883,7 +32925,7 @@ let AuroFloatingUI$3 = class AuroFloatingUI {
32883
32925
 
32884
32926
  this.id = element.getAttribute("id");
32885
32927
  if (!this.id) {
32886
- this.id = window.crypto.randomUUID();
32928
+ this.id = generateUUID$3();
32887
32929
  element.setAttribute("id", this.id);
32888
32930
  }
32889
32931
 
@@ -33928,7 +33970,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
33928
33970
  }
33929
33971
  };
33930
33972
 
33931
- var formkitVersion$1$3 = '202609012101';
33973
+ var formkitVersion$1$3 = '202609022200';
33932
33974
 
33933
33975
  /**
33934
33976
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -47790,7 +47832,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
47790
47832
  }
47791
47833
  };
47792
47834
 
47793
- var formkitVersion$7 = '202609012101';
47835
+ var formkitVersion$7 = '202609022200';
47794
47836
 
47795
47837
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
47796
47838
  // See LICENSE in the project root for license information.
@@ -49407,6 +49449,14 @@ class AuroDatePicker extends AuroElement$5 {
49407
49449
  */
49408
49450
  this.hasFocus = false;
49409
49451
 
49452
+ /**
49453
+ * Tracks whether the current open cycle promoted the fullscreen bib via
49454
+ * showModal(). Used by the close handler to decide whether native <dialog>
49455
+ * focus restoration will fire (see the auroDropdown-toggled handler).
49456
+ * @private
49457
+ */
49458
+ this._bibOpenedAsModal = false;
49459
+
49410
49460
  /**
49411
49461
  * @private
49412
49462
  */
@@ -50462,6 +50512,15 @@ class AuroDatePicker extends AuroElement$5 {
50462
50512
  // a top-layer popover where :focus-within on the dropdown host returns false).
50463
50513
  this.dropdown.noHideOnThisFocusLoss = true;
50464
50514
 
50515
+ // Suppress the dropdown's generic focus restoration on close — the
50516
+ // datepicker manages its own focus in the auroDropdown-toggled handler
50517
+ // below (respecting hasFocus / _restoreFocusOnClose, and deferring to the
50518
+ // fullscreen dialog's native restoration on touch devices). Without this,
50519
+ // the dropdown's setTimeout(focusTrigger) fires a second, gesture-decoupled
50520
+ // programmatic focus on close, which on iOS Safari swallows the user's next
50521
+ // tap and forces a second tap to reopen the calendar (AB#1634252).
50522
+ this.dropdown.noFocusRestoreOnClose = true;
50523
+
50465
50524
  // Pass label text to the dropdown bib for accessible dialog naming.
50466
50525
  // Without this, the fullscreen <dialog> has no accessible name and
50467
50526
  // screen readers announce it as just "dialog" with no context.
@@ -50533,6 +50592,16 @@ class AuroDatePicker extends AuroElement$5 {
50533
50592
  bibEl.close();
50534
50593
  bibEl.open(true);
50535
50594
 
50595
+ // Record that this open cycle actually promoted the dialog via
50596
+ // showModal(). The close handler relies on this — not the broader
50597
+ // isBibFullscreen flag — to decide whether native <dialog> focus
50598
+ // restoration will occur, because isBibFullscreen is set
50599
+ // synchronously in showBib() while this open(true) runs a
50600
+ // microtask later. If the bib is closed before this resolves,
50601
+ // showModal() never fires and there is no native restoration to
50602
+ // defer to.
50603
+ this._bibOpenedAsModal = true;
50604
+
50536
50605
  doubleRaf$3(() => {
50537
50606
  this.focusActiveCellWhenReady();
50538
50607
  });
@@ -50564,7 +50633,27 @@ class AuroDatePicker extends AuroElement$5 {
50564
50633
  this.dropdown.trigger.inert = false;
50565
50634
  const shouldRestoreFocus = this.hasFocus || this._restoreFocusOnClose;
50566
50635
  this._restoreFocusOnClose = false;
50567
- if (shouldRestoreFocus) {
50636
+ // On coarse-pointer (touch) devices closing the fullscreen modal, rely
50637
+ // on the <dialog>'s native focus restoration instead of forcing focus
50638
+ // back onto the input. showModal() returns focus to the trigger anchor
50639
+ // as part of the closing gesture, so a11y focus is preserved. Re-running
50640
+ // .focus() here is a gesture-decoupled programmatic focus that iOS
50641
+ // Safari penalizes: it swallows the user's next tap, so reopening the
50642
+ // calendar takes two taps instead of one (AB#1634252). Fine-pointer
50643
+ // (desktop) layouts keep the explicit restore for keyboard/SR
50644
+ // correctness, and non-fullscreen bibs (no showModal, no native
50645
+ // restoration) always restore explicitly.
50646
+ //
50647
+ // Gate on `_bibOpenedAsModal` — set only after the actual showModal()
50648
+ // promotion (open(true)) — rather than `isBibFullscreen`, which is true
50649
+ // as soon as the fullscreen layout is chosen but before the modal is
50650
+ // promoted. If the bib is closed before that async promotion runs, no
50651
+ // native restoration will occur, so we must still restore explicitly.
50652
+ const bibWasModal = this._bibOpenedAsModal;
50653
+ this._bibOpenedAsModal = false;
50654
+ const useNativeFocusRestoration =
50655
+ bibWasModal && window.matchMedia('(pointer: coarse)').matches;
50656
+ if (shouldRestoreFocus && !useNativeFocusRestoration) {
50568
50657
  requestAnimationFrame(() => {
50569
50658
  if (!this.dropdown.isPopoverVisible) {
50570
50659
  this.inputList[0].focus();
@@ -52896,7 +52985,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
52896
52985
  }
52897
52986
  };
52898
52987
 
52899
- var formkitVersion$1$2 = '202609012101';
52988
+ var formkitVersion$1$2 = '202609022200';
52900
52989
 
52901
52990
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
52902
52991
  // See LICENSE in the project root for license information.
@@ -55133,6 +55222,48 @@ const computePosition$3 = (reference, floating, options) => {
55133
55222
  });
55134
55223
  };
55135
55224
 
55225
+ /**
55226
+ * Generates a v4 UUID with a three-tier fallback for insecure contexts.
55227
+ *
55228
+ * Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
55229
+ * Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
55230
+ * modern browsers regardless of secure-context status.
55231
+ * Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
55232
+ * but sufficient for element IDs where collision risk is negligible.
55233
+ *
55234
+ * See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
55235
+ */
55236
+ function generateUUID$2() {
55237
+ let uuid;
55238
+
55239
+ if (
55240
+ typeof crypto !== "undefined" &&
55241
+ typeof crypto.randomUUID === "function"
55242
+ ) {
55243
+ uuid = crypto.randomUUID();
55244
+ } else if (
55245
+ typeof crypto !== "undefined" &&
55246
+ typeof crypto.getRandomValues === "function"
55247
+ ) {
55248
+ const bytes = new Uint8Array(16);
55249
+ crypto.getRandomValues(bytes);
55250
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
55251
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
55252
+ const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
55253
+ uuid = `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
55254
+ } else {
55255
+ let d = new Date().getTime();
55256
+ uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
55257
+ const r = (d % 16) | 0;
55258
+ d = (d - r) / 16 || new Date().getTime();
55259
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
55260
+ });
55261
+ }
55262
+
55263
+ // CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
55264
+ return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
55265
+ }
55266
+
55136
55267
  /* eslint-disable line-comment-position, no-inline-comments */
55137
55268
 
55138
55269
 
@@ -56151,7 +56282,7 @@ let AuroFloatingUI$2 = class AuroFloatingUI {
56151
56282
 
56152
56283
  this.id = element.getAttribute("id");
56153
56284
  if (!this.id) {
56154
- this.id = window.crypto.randomUUID();
56285
+ this.id = generateUUID$2();
56155
56286
  element.setAttribute("id", this.id);
56156
56287
  }
56157
56288
 
@@ -56235,7 +56366,7 @@ let AuroFloatingUI$2 = class AuroFloatingUI {
56235
56366
  };
56236
56367
 
56237
56368
  // Selectors for focusable elements
56238
- const FOCUSABLE_SELECTORS$3 = [
56369
+ const FOCUSABLE_SELECTORS$1$1 = [
56239
56370
  "a[href]",
56240
56371
  "button:not([disabled])",
56241
56372
  "textarea:not([disabled])",
@@ -56249,7 +56380,7 @@ const FOCUSABLE_SELECTORS$3 = [
56249
56380
  ];
56250
56381
 
56251
56382
  // List of custom components that are known to be focusable
56252
- const FOCUSABLE_COMPONENTS$3 = [
56383
+ const FOCUSABLE_COMPONENTS$1$1 = [
56253
56384
  "auro-checkbox",
56254
56385
  "auro-radio",
56255
56386
  "auro-dropdown",
@@ -56271,12 +56402,12 @@ const FOCUSABLE_COMPONENTS$3 = [
56271
56402
  * @param {HTMLElement} element The element to check for focusability.
56272
56403
  * @returns {boolean} True if the element is a focusable custom component, false otherwise.
56273
56404
  */
56274
- function isFocusableComponent$3(element) {
56405
+ function isFocusableComponent$1$1(element) {
56275
56406
  const componentName = element.tagName.toLowerCase();
56276
56407
 
56277
56408
  // Guard Clause: Element is a focusable component
56278
56409
  if (
56279
- !FOCUSABLE_COMPONENTS$3.some(
56410
+ !FOCUSABLE_COMPONENTS$1$1.some(
56280
56411
  (name) => element.hasAttribute(name) || componentName === name,
56281
56412
  )
56282
56413
  )
@@ -56300,7 +56431,7 @@ function isFocusableComponent$3(element) {
56300
56431
  * @param {HTMLElement} element The element whose tabindex to read.
56301
56432
  * @returns {?number} The numeric tabindex or null if missing/invalid.
56302
56433
  */
56303
- function getNumericTabIndex$3(element) {
56434
+ function getNumericTabIndex$1$1(element) {
56304
56435
  const raw = element.getAttribute("tabindex");
56305
56436
  if (raw == null) return null;
56306
56437
 
@@ -56316,7 +56447,7 @@ function getNumericTabIndex$3(element) {
56316
56447
  * @param {HTMLElement} container The container to search within
56317
56448
  * @returns {Array<HTMLElement>} An array of focusable elements within the container.
56318
56449
  */
56319
- function getFocusableElements$3(container) {
56450
+ function getFocusableElements$1$1(container) {
56320
56451
  // Get elements in DOM order by walking the tree
56321
56452
  const orderedFocusableElements = [];
56322
56453
 
@@ -56325,7 +56456,7 @@ function getFocusableElements$3(container) {
56325
56456
  // Check if current element is focusable
56326
56457
  if (root.nodeType === Node.ELEMENT_NODE) {
56327
56458
  // Check if this is a custom component that is focusable
56328
- const isComponentFocusable = isFocusableComponent$3(root);
56459
+ const isComponentFocusable = isFocusableComponent$1$1(root);
56329
56460
 
56330
56461
  if (isComponentFocusable) {
56331
56462
  // Add the component itself as a focusable element and don't traverse its shadow DOM
@@ -56334,7 +56465,7 @@ function getFocusableElements$3(container) {
56334
56465
  }
56335
56466
 
56336
56467
  // Check if the element itself matches any selector
56337
- for (const selector of FOCUSABLE_SELECTORS$3) {
56468
+ for (const selector of FOCUSABLE_SELECTORS$1$1) {
56338
56469
  if (root.matches?.(selector)) {
56339
56470
  orderedFocusableElements.push(root);
56340
56471
  break; // Once we know it's focusable, no need to check other selectors
@@ -56388,20 +56519,20 @@ function getFocusableElements$3(container) {
56388
56519
 
56389
56520
  // First extract elements with valid positive tabindex
56390
56521
  const elementsWithTabindex = uniqueElements.filter((el) => {
56391
- const tabindex = getNumericTabIndex$3(el);
56522
+ const tabindex = getNumericTabIndex$1$1(el);
56392
56523
  return tabindex !== null && tabindex > 0;
56393
56524
  });
56394
56525
 
56395
56526
  // Sort these elements by their tabindex value
56396
56527
  elementsWithTabindex.sort((a, b) => {
56397
- const aIndex = getNumericTabIndex$3(a) ?? 0;
56398
- const bIndex = getNumericTabIndex$3(b) ?? 0;
56528
+ const aIndex = getNumericTabIndex$1$1(a) ?? 0;
56529
+ const bIndex = getNumericTabIndex$1$1(b) ?? 0;
56399
56530
  return aIndex - bIndex;
56400
56531
  });
56401
56532
 
56402
56533
  // Elements without tabindex (preserving their original order)
56403
56534
  const elementsWithoutTabindex = uniqueElements.filter((el) => {
56404
- const tabindex = getNumericTabIndex$3(el);
56535
+ const tabindex = getNumericTabIndex$1$1(el);
56405
56536
 
56406
56537
  // Elements without tabindex or with tabindex of 0 stay in DOM order
56407
56538
  return tabindex === null || tabindex === 0;
@@ -57196,7 +57327,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
57196
57327
  }
57197
57328
  };
57198
57329
 
57199
- var formkitVersion$6 = '202609012101';
57330
+ var formkitVersion$6 = '202609022200';
57200
57331
 
57201
57332
  /**
57202
57333
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -57496,7 +57627,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57496
57627
  */
57497
57628
  focus() {
57498
57629
  if (this.isPopoverVisible && this.bibContent) {
57499
- const focusables = getFocusableElements$3(this.bibContent);
57630
+ const focusables = getFocusableElements$1$1(this.bibContent);
57500
57631
  if (focusables.length > 0) {
57501
57632
  focusables[0].focus();
57502
57633
  }
@@ -57528,7 +57659,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57528
57659
  // wrappers like <div> containing a <button>). If none found, try
57529
57660
  // focusing the element directly (works for custom elements like
57530
57661
  // auro-input that have delegatesFocus or a custom focus() method).
57531
- const descendants = getFocusableElements$3(el);
57662
+ const descendants = getFocusableElements$1$1(el);
57532
57663
  if (descendants.length > 0) {
57533
57664
  descendants[0].focus();
57534
57665
  return;
@@ -57540,7 +57671,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57540
57671
  }
57541
57672
  }
57542
57673
  // Fallback: try DOM children (non-slotted content)
57543
- const focusables = getFocusableElements$3(this.trigger);
57674
+ const focusables = getFocusableElements$1$1(this.trigger);
57544
57675
  if (focusables.length > 0) {
57545
57676
  focusables[0].focus();
57546
57677
  }
@@ -58219,7 +58350,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
58219
58350
  }
58220
58351
 
58221
58352
  // Collect focusable elements from the bib content.
58222
- const focusables = getFocusableElements$3(this.bibContent);
58353
+ const focusables = getFocusableElements$1$1(this.bibContent);
58223
58354
 
58224
58355
  // Fallback: try from slotted content directly
58225
58356
  if (!focusables.length) {
@@ -58228,7 +58359,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
58228
58359
 
58229
58360
  for (const node of assignedNodes) {
58230
58361
  if (node.nodeType === Node.ELEMENT_NODE) {
58231
- focusables.push(...getFocusableElements$3(node));
58362
+ focusables.push(...getFocusableElements$1$1(node));
58232
58363
  }
58233
58364
  }
58234
58365
  }
@@ -58288,7 +58419,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
58288
58419
 
58289
58420
  // Move initial focus into the bib content, matching FocusTrap behavior
58290
58421
  requestAnimationFrame(() => {
58291
- const focusables = getFocusableElements$3(this.bibContent);
58422
+ const focusables = getFocusableElements$1$1(this.bibContent);
58292
58423
  if (focusables.length) {
58293
58424
  focusables[0].focus();
58294
58425
  }
@@ -58301,7 +58432,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
58301
58432
  // popover asynchronously — a synchronous focus() would target
58302
58433
  // zero-dimension elements and be silently ignored.
58303
58434
  requestAnimationFrame(() => {
58304
- const focusables = getFocusableElements$3(this.bibContent);
58435
+ const focusables = getFocusableElements$1$1(this.bibContent);
58305
58436
  if (focusables.length) {
58306
58437
  focusables[0].focus();
58307
58438
  }
@@ -58519,7 +58650,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
58519
58650
  if (triggerContentNodes) {
58520
58651
 
58521
58652
  // See if any of them are focusable elements
58522
- this.triggerContentFocusable = triggerContentNodes.some((node) => getFocusableElements$3(node).length > 0);
58653
+ this.triggerContentFocusable = triggerContentNodes.some((node) => getFocusableElements$1$1(node).length > 0);
58523
58654
 
58524
58655
  // If any of them are focusable elements
58525
58656
  if (this.triggerContentFocusable) {
@@ -59281,9 +59412,241 @@ let AuroElement$4 = class AuroElement extends i$3 {
59281
59412
  }
59282
59413
  };
59283
59414
 
59415
+ // Selectors for focusable elements
59416
+ const FOCUSABLE_SELECTORS$3 = [
59417
+ "a[href]",
59418
+ "button:not([disabled])",
59419
+ "textarea:not([disabled])",
59420
+ "input:not([disabled])",
59421
+ "select:not([disabled])",
59422
+ '[role="tab"]:not([disabled])',
59423
+ '[role="link"]:not([disabled])',
59424
+ '[role="button"]:not([disabled])',
59425
+ '[tabindex]:not([tabindex="-1"])',
59426
+ '[contenteditable]:not([contenteditable="false"])',
59427
+ ];
59428
+
59429
+ // List of custom components that are known to be focusable
59430
+ const FOCUSABLE_COMPONENTS$3 = [
59431
+ "auro-checkbox",
59432
+ "auro-radio",
59433
+ "auro-dropdown",
59434
+ "auro-button",
59435
+ "auro-combobox",
59436
+ "auro-input",
59437
+ "auro-counter",
59438
+ // 'auro-menu', // Auro menu is not focusable by default, it uses a different interaction model
59439
+ "auro-select",
59440
+ "auro-datepicker",
59441
+ "auro-hyperlink",
59442
+ "auro-accordion",
59443
+ ];
59444
+
59445
+ /**
59446
+ * Determines if a given element is a custom focusable component.
59447
+ * Returns true if the element matches a known focusable component and is not disabled.
59448
+ *
59449
+ * @param {HTMLElement} element The element to check for focusability.
59450
+ * @returns {boolean} True if the element is a focusable custom component, false otherwise.
59451
+ */
59452
+ function isFocusableComponent$3(element) {
59453
+ const componentName = element.tagName.toLowerCase();
59454
+
59455
+ // Guard Clause: Element is a focusable component
59456
+ if (
59457
+ !FOCUSABLE_COMPONENTS$3.some(
59458
+ (name) => element.hasAttribute(name) || componentName === name,
59459
+ )
59460
+ )
59461
+ return false;
59462
+
59463
+ // Guard Clause: Element is not disabled
59464
+ if (element.hasAttribute("disabled")) return false;
59465
+
59466
+ // Guard Clause: The element is a hyperlink and has no href attribute
59467
+ if (componentName.match("hyperlink") && !element.hasAttribute("href"))
59468
+ return false;
59469
+
59470
+ // If all guard clauses pass, the element is a focusable component
59471
+ return true;
59472
+ }
59473
+
59474
+ /**
59475
+ * Safely get a numeric tabindex for an element.
59476
+ * Returns a number if the tabindex is a valid integer, otherwise null.
59477
+ *
59478
+ * @param {HTMLElement} element The element whose tabindex to read.
59479
+ * @returns {?number} The numeric tabindex or null if missing/invalid.
59480
+ */
59481
+ function getNumericTabIndex$3(element) {
59482
+ const raw = element.getAttribute("tabindex");
59483
+ if (raw == null) return null;
59484
+
59485
+ const value = Number.parseInt(raw, 10);
59486
+ return Number.isNaN(value) ? null : value;
59487
+ }
59488
+
59489
+ /**
59490
+ * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
59491
+ * Returns a unique, ordered array of elements that can receive focus.
59492
+ * Also sorts elements with tabindex first, preserving their order.
59493
+ *
59494
+ * @param {HTMLElement} container The container to search within
59495
+ * @returns {Array<HTMLElement>} An array of focusable elements within the container.
59496
+ */
59497
+ function getFocusableElements$3(container) {
59498
+ // Get elements in DOM order by walking the tree
59499
+ const orderedFocusableElements = [];
59500
+
59501
+ // Define a recursive function to collect focusable elements in DOM order
59502
+ const collectFocusableElements = (root) => {
59503
+ // Check if current element is focusable
59504
+ if (root.nodeType === Node.ELEMENT_NODE) {
59505
+ // Check if this is a custom component that is focusable
59506
+ const isComponentFocusable = isFocusableComponent$3(root);
59507
+
59508
+ if (isComponentFocusable) {
59509
+ // Add the component itself as a focusable element and don't traverse its shadow DOM
59510
+ orderedFocusableElements.push(root);
59511
+ return; // Skip traversing inside this component
59512
+ }
59513
+
59514
+ // Check if the element itself matches any selector
59515
+ for (const selector of FOCUSABLE_SELECTORS$3) {
59516
+ if (root.matches?.(selector)) {
59517
+ orderedFocusableElements.push(root);
59518
+ break; // Once we know it's focusable, no need to check other selectors
59519
+ }
59520
+ }
59521
+
59522
+ // Process shadow DOM only for non-Auro components
59523
+ if (root.shadowRoot) {
59524
+ // Process shadow DOM children in order
59525
+ if (root.shadowRoot.children) {
59526
+ Array.from(root.shadowRoot.children).forEach((child) => {
59527
+ collectFocusableElements(child);
59528
+ });
59529
+ }
59530
+ }
59531
+
59532
+ // Process slots and their assigned nodes in order
59533
+ if (root.tagName === "SLOT") {
59534
+ const assignedNodes = root.assignedNodes({ flatten: true });
59535
+ for (const node of assignedNodes) {
59536
+ collectFocusableElements(node);
59537
+ }
59538
+ } else {
59539
+ // Process light DOM children in order
59540
+ if (root.children) {
59541
+ Array.from(root.children).forEach((child) => {
59542
+ collectFocusableElements(child);
59543
+ });
59544
+ }
59545
+ }
59546
+ }
59547
+ };
59548
+
59549
+ // Start the traversal from the container
59550
+ collectFocusableElements(container);
59551
+
59552
+ // Remove duplicates that might have been collected through different paths
59553
+ // while preserving order
59554
+ const uniqueElements = [];
59555
+ const seen = new Set();
59556
+
59557
+ for (const element of orderedFocusableElements) {
59558
+ if (!seen.has(element)) {
59559
+ seen.add(element);
59560
+ uniqueElements.push(element);
59561
+ }
59562
+ }
59563
+
59564
+ // Move tab-indexed elements to the front while preserving their order
59565
+ // This ensures that elements with tabindex are prioritized in the focus order
59566
+
59567
+ // First extract elements with valid positive tabindex
59568
+ const elementsWithTabindex = uniqueElements.filter((el) => {
59569
+ const tabindex = getNumericTabIndex$3(el);
59570
+ return tabindex !== null && tabindex > 0;
59571
+ });
59572
+
59573
+ // Sort these elements by their tabindex value
59574
+ elementsWithTabindex.sort((a, b) => {
59575
+ const aIndex = getNumericTabIndex$3(a) ?? 0;
59576
+ const bIndex = getNumericTabIndex$3(b) ?? 0;
59577
+ return aIndex - bIndex;
59578
+ });
59579
+
59580
+ // Elements without tabindex (preserving their original order)
59581
+ const elementsWithoutTabindex = uniqueElements.filter((el) => {
59582
+ const tabindex = getNumericTabIndex$3(el);
59583
+
59584
+ // Elements without tabindex or with tabindex of 0 stay in DOM order
59585
+ return tabindex === null || tabindex === 0;
59586
+ });
59587
+
59588
+ // Combine both arrays with tabindex elements first
59589
+ const tabIndexedUniqueElements = [
59590
+ ...elementsWithTabindex,
59591
+ ...elementsWithoutTabindex,
59592
+ ];
59593
+
59594
+ return tabIndexedUniqueElements;
59595
+ }
59596
+
59284
59597
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
59285
59598
  // See LICENSE in the project root for license information.
59286
59599
 
59600
+
59601
+ /**
59602
+ * Whether `el` is currently visible enough to receive focus. Prefers the
59603
+ * browser's `checkVisibility()`; otherwise combines a display/visibility check
59604
+ * with an ancestor-hidden probe that keeps position:fixed elements visible.
59605
+ * @param {Element} el - The element to test.
59606
+ * @returns {boolean}
59607
+ */
59608
+ function isVisibleForFocus$1(el) {
59609
+ if (typeof el.checkVisibility === 'function') {
59610
+ return el.checkVisibility();
59611
+ }
59612
+ const style = el.ownerDocument.defaultView.getComputedStyle(el);
59613
+ if (style.display === 'none' || style.visibility === 'hidden') {
59614
+ return false;
59615
+ }
59616
+ return el.offsetParent !== null || style.position === 'fixed';
59617
+ }
59618
+
59619
+ /**
59620
+ * Return the tab stop that comes before the counter-group in page tab order,
59621
+ * skipping any hidden entries the walker doesn't filter itself. The group host
59622
+ * itself is not a tab stop; its focusables (the internal dropdown and the
59623
+ * counters) are, so anchor the search on the group's earliest focusable.
59624
+ * @param {Element} component - The auro-counter-group host element.
59625
+ * @returns {Element|null}
59626
+ */
59627
+ function getPreviousTabStop$1(component) {
59628
+ const tabStops = getFocusableElements$3(component.ownerDocument.body);
59629
+ const counters = component.counters || [];
59630
+ const owned = [
59631
+ component,
59632
+ component.dropdown,
59633
+ ...counters
59634
+ ].filter(Boolean);
59635
+ let groupStart = tabStops.length;
59636
+ owned.forEach((node) => {
59637
+ const index = tabStops.indexOf(node);
59638
+ if (index >= 0 && index < groupStart) {
59639
+ groupStart = index;
59640
+ }
59641
+ });
59642
+ for (let index = groupStart - 1; index >= 0; index -= 1) {
59643
+ if (isVisibleForFocus$1(tabStops[index])) {
59644
+ return tabStops[index];
59645
+ }
59646
+ }
59647
+ return null;
59648
+ }
59649
+
59287
59650
  const counterGroupKeyboardStrategy = {
59288
59651
  Escape(component, evt) {
59289
59652
  if (!component.dropdown || !component.dropdown.isPopoverVisible) {
@@ -59297,6 +59660,48 @@ const counterGroupKeyboardStrategy = {
59297
59660
 
59298
59661
  component.dropdown.hide();
59299
59662
  },
59663
+
59664
+ Tab(component, evt, ctx) {
59665
+ // Forward Tab already exits past the bib content and the focusout handler
59666
+ // closes the bib. Fullscreen relies on the dialog's native focus trapping.
59667
+ if (!ctx.isExpanded || ctx.isModal || !evt.shiftKey) {
59668
+ return;
59669
+ }
59670
+
59671
+ // The trigger precedes the bib content in the flattened tab order, so a
59672
+ // native Shift+Tab off the first counter lands back on the trigger and
59673
+ // leaves the bib open. Only intercept when focus is on the first focusable
59674
+ // in the bib; otherwise let the browser move to the previous counter.
59675
+ // `composedPath()` reports the real event origin through every shadow
59676
+ // boundary, unlike `document.activeElement`, which retargets to the first
59677
+ // slotted counter and cannot tell the counters apart.
59678
+ const focusables = getFocusableElements$3(component.dropdown.bibContent);
59679
+ if (!focusables.length) {
59680
+ return;
59681
+ }
59682
+
59683
+ const path = evt.composedPath();
59684
+ const activeIndex = focusables.findIndex((el) => path.includes(el));
59685
+ if (activeIndex !== 0) {
59686
+ return;
59687
+ }
59688
+
59689
+ const previousTabStop = getPreviousTabStop$1(component);
59690
+
59691
+ // Always suppress the native Shift+Tab. Otherwise it fires against the bib
59692
+ // as it is torn down and lands focus on the trigger (which precedes the
59693
+ // first counter), re-opening the exact loop this handler prevents. When
59694
+ // nothing precedes the group, focus falls to the body instead of the
59695
+ // trigger, which reads as exiting the group backward.
59696
+ evt.preventDefault();
59697
+ component.hideBib();
59698
+
59699
+ if (!previousTabStop) {
59700
+ return;
59701
+ }
59702
+
59703
+ doubleRaf$2(() => previousTabStop.focus());
59704
+ },
59300
59705
  };
59301
59706
 
59302
59707
  /* eslint-disable lit/no-invalid-html, lit/binding-positions, max-lines, no-underscore-dangle, arrow-parens, no-confusing-arrow, curly, dot-location, no-inline-comments, line-comment-position,
@@ -61381,7 +61786,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
61381
61786
  }
61382
61787
  };
61383
61788
 
61384
- var formkitVersion$5 = '202609012101';
61789
+ var formkitVersion$5 = '202609022200';
61385
61790
 
61386
61791
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
61387
61792
  // See LICENSE in the project root for license information.
@@ -63175,7 +63580,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
63175
63580
  }
63176
63581
  };
63177
63582
 
63178
- var formkitVersion$4 = '202609012101';
63583
+ var formkitVersion$4 = '202609022200';
63179
63584
 
63180
63585
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
63181
63586
  // See LICENSE in the project root for license information.
@@ -66539,6 +66944,48 @@ const computePosition$2 = (reference, floating, options) => {
66539
66944
  });
66540
66945
  };
66541
66946
 
66947
+ /**
66948
+ * Generates a v4 UUID with a three-tier fallback for insecure contexts.
66949
+ *
66950
+ * Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
66951
+ * Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
66952
+ * modern browsers regardless of secure-context status.
66953
+ * Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
66954
+ * but sufficient for element IDs where collision risk is negligible.
66955
+ *
66956
+ * See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
66957
+ */
66958
+ function generateUUID$1() {
66959
+ let uuid;
66960
+
66961
+ if (
66962
+ typeof crypto !== "undefined" &&
66963
+ typeof crypto.randomUUID === "function"
66964
+ ) {
66965
+ uuid = crypto.randomUUID();
66966
+ } else if (
66967
+ typeof crypto !== "undefined" &&
66968
+ typeof crypto.getRandomValues === "function"
66969
+ ) {
66970
+ const bytes = new Uint8Array(16);
66971
+ crypto.getRandomValues(bytes);
66972
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
66973
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
66974
+ const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
66975
+ uuid = `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
66976
+ } else {
66977
+ let d = new Date().getTime();
66978
+ uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
66979
+ const r = (d % 16) | 0;
66980
+ d = (d - r) / 16 || new Date().getTime();
66981
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
66982
+ });
66983
+ }
66984
+
66985
+ // CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
66986
+ return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
66987
+ }
66988
+
66542
66989
  /* eslint-disable line-comment-position, no-inline-comments */
66543
66990
 
66544
66991
 
@@ -67557,7 +68004,7 @@ let AuroFloatingUI$1 = class AuroFloatingUI {
67557
68004
 
67558
68005
  this.id = element.getAttribute("id");
67559
68006
  if (!this.id) {
67560
- this.id = window.crypto.randomUUID();
68007
+ this.id = generateUUID$1();
67561
68008
  element.setAttribute("id", this.id);
67562
68009
  }
67563
68010
 
@@ -68602,7 +69049,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
68602
69049
  }
68603
69050
  };
68604
69051
 
68605
- var formkitVersion$2 = '202609012101';
69052
+ var formkitVersion$2 = '202609022200';
68606
69053
 
68607
69054
  /**
68608
69055
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -82464,7 +82911,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
82464
82911
  }
82465
82912
  };
82466
82913
 
82467
- var formkitVersion$1$1 = '202609012101';
82914
+ var formkitVersion$1$1 = '202609022200';
82468
82915
 
82469
82916
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
82470
82917
  // See LICENSE in the project root for license information.
@@ -83656,7 +84103,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
83656
84103
  }
83657
84104
  };
83658
84105
 
83659
- var formkitVersion$3 = '202609012101';
84106
+ var formkitVersion$3 = '202609022200';
83660
84107
 
83661
84108
  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}`;
83662
84109
 
@@ -84097,6 +84544,11 @@ class AuroCombobox extends AuroElement$3 {
84097
84544
  this.behavior = "suggestion";
84098
84545
  this.clearBtnFocused = false;
84099
84546
 
84547
+ // One-shot: set when the input's clear button is activated so the
84548
+ // SPA-preselect guard in handleInputValueChange doesn't swallow the
84549
+ // genuine clear (AB#1634257).
84550
+ this._clearBtnActivated = false;
84551
+
84100
84552
  // Defaults that effect the overall layout of the combobox
84101
84553
  this.checkmark = false;
84102
84554
  this.dvInputOnly = false;
@@ -85054,6 +85506,13 @@ class AuroCombobox extends AuroElement$3 {
85054
85506
  this.bibtemplate = this.dropdown.querySelector(this.bibtemplateTag._$litStatic$);
85055
85507
  this.inputInBib = this.bibtemplate.querySelector(this.inputTag._$litStatic$);
85056
85508
 
85509
+ // Mirror the trigger's clear-button tracking onto the fullscreen bib input
85510
+ // so clearing there also fully resets the combobox (AB#1634257). See
85511
+ // trackClearBtnActivation for why this must run in the capture phase.
85512
+ if (this.inputInBib && this.inputInBib !== this.input) {
85513
+ this.trackClearBtnActivation(this.inputInBib);
85514
+ }
85515
+
85057
85516
  // Pass label text to the dropdown bib for accessible dialog naming
85058
85517
  const labelElement = this.querySelector('[slot="label"]');
85059
85518
  if (labelElement) {
@@ -85439,6 +85898,52 @@ class AuroCombobox extends AuroElement$3 {
85439
85898
  this.clearBtnFocused = false;
85440
85899
  }
85441
85900
  });
85901
+
85902
+ this.trackClearBtnActivation(this.input);
85903
+ }
85904
+
85905
+ /**
85906
+ * Flags genuine clear-button activations on an auro-input so the SPA-preselect
85907
+ * guard in handleInputValueChange doesn't swallow them.
85908
+ *
85909
+ * The auro-input clear button fires an `isProgrammatic` input event (via
85910
+ * notifyValueChanged) that is indistinguishable in shape from the
85911
+ * SPA-preselect echo that guard bails on (isProgrammatic + set value + empty
85912
+ * input). Without this one-shot flag, clicking clear would leave
85913
+ * this.value/optionSelected stale (AB#1634257).
85914
+ *
85915
+ * Delegated on the shadow root so it works regardless of when .clearBtn
85916
+ * renders (it only exists after a value is set), and covers both real clicks
85917
+ * and programmatic clearBtn.click() (which no focusin precedes). Registered in
85918
+ * the CAPTURE phase so the flag is set BEFORE the button's own @click
85919
+ * (handleClickClear) fires its synchronous input event — which is when
85920
+ * handleInputValueChange reads the flag.
85921
+ * @private
85922
+ * @param {Element} inputEl - The auro-input whose clear button to track.
85923
+ * @returns {void}
85924
+ */
85925
+ trackClearBtnActivation(inputEl) {
85926
+ if (!inputEl || !inputEl.shadowRoot) {
85927
+ return;
85928
+ }
85929
+ inputEl.shadowRoot.addEventListener('click', (event) => {
85930
+ if (event.target.closest('.clearBtn')) {
85931
+ this._clearBtnActivated = true;
85932
+
85933
+ // Bound the flag's lifetime to this synchronous clear -> input window.
85934
+ // auro-input's handleClickClear fires its input event synchronously
85935
+ // (before any macrotask runs), so handleInputValueChange consumes the
85936
+ // flag first and this reset is a harmless no-op. It only does real work
85937
+ // if that input event never arrives (e.g. auro-input throws mid-clear),
85938
+ // guaranteeing the flag can't survive to be misread as a genuine clear
85939
+ // by a later unrelated event such as an SPA-preselect echo (AB#1634257).
85940
+ // Scheduled via _scheduleTimer so disconnectedCallback cancels it if the
85941
+ // component tears down inside that window.
85942
+ this._scheduleTimer(() => {
85943
+ this._clearBtnActivated = false;
85944
+ }, 0);
85945
+ }
85946
+ }, true);
85442
85947
  }
85443
85948
 
85444
85949
  /**
@@ -85480,6 +85985,17 @@ class AuroCombobox extends AuroElement$3 {
85480
85985
  * @returns {void}
85481
85986
  */
85482
85987
  handleInputValueChange(event) {
85988
+ // Consume the one-shot clear-button flag on EVERY entry, before any branch
85989
+ // below can early-return. trackClearBtnActivation sets it in the capture
85990
+ // phase right before auro-input's clear button fires its synchronous input
85991
+ // event; reading and immediately clearing it here guarantees the flag never
85992
+ // survives a handleInputValueChange call to leak into a later event (e.g.
85993
+ // the bib branch bailing at _syncingDisplayValue, or an SPA-preselect echo)
85994
+ // where it would defeat the guard below. Held in a local so that guard can
85995
+ // still tell a genuine clear from the init-render echo (AB#1634257).
85996
+ const clearBtnActivated = this._clearBtnActivated;
85997
+ this._clearBtnActivated = false;
85998
+
85483
85999
  // When the event comes from the fullscreen bib input, sync the value to
85484
86000
  // the trigger input. Setting trigger.value triggers Lit's updated()
85485
86001
  // (async, microtask) which fires notifyValueChanged() → another 'input'
@@ -85527,7 +86043,12 @@ class AuroCombobox extends AuroElement$3 {
85527
86043
  // to the exact shape of that echo (isProgrammatic + non-empty combobox
85528
86044
  // value + empty input.value) so it doesn't affect the swap/typed paths
85529
86045
  // where value/input already track each other through the sync helpers.
85530
- if (event && event.isProgrammatic && this.value && !this.input.value) {
86046
+ // The clear button's echo has the same shape (isProgrammatic + set value +
86047
+ // empty input) but is a genuine user clear that MUST reset this.value and
86048
+ // optionSelected below. clearBtnActivated (consumed at the top of this
86049
+ // method) is true only for that genuine clear, so only the real
86050
+ // SPA-preselect echo bails (AB#1634257).
86051
+ if (event && event.isProgrammatic && this.value && !this.input.value && !clearBtnActivated) {
85531
86052
  return;
85532
86053
  }
85533
86054
 
@@ -85672,6 +86193,14 @@ class AuroCombobox extends AuroElement$3 {
85672
86193
  // retry would otherwise keep rescheduling itself indefinitely.
85673
86194
  this._pendingTimers.forEach((id) => clearTimeout(id));
85674
86195
  this._pendingTimers.clear();
86196
+
86197
+ // Cancelling the timers above drops the macrotask that would have reset
86198
+ // _clearBtnActivated, so reset it here too. Otherwise a disconnect inside
86199
+ // the clear-click -> macrotask window strands the flag `true`; instance
86200
+ // state survives reconnect, and the first matching input event (including
86201
+ // an SPA-preselect echo) would then bypass the guard in
86202
+ // handleInputValueChange and silently clear value/optionSelected (AB#1634257).
86203
+ this._clearBtnActivated = false;
85675
86204
  }
85676
86205
 
85677
86206
  firstUpdated() {
@@ -85770,6 +86299,14 @@ class AuroCombobox extends AuroElement$3 {
85770
86299
  }
85771
86300
  if (this.menu.value || this.menu.optionSelected) {
85772
86301
  this.menu.reset();
86302
+ } else {
86303
+ // The menu's selection properties are already cleared, but option
86304
+ // elements can still carry a stale `selected` attribute (e.g. the menu
86305
+ // options were rebuilt after the value was set, orphaning the DOM from
86306
+ // the now-null optionSelected). reset() is skipped above in that case,
86307
+ // so re-sync the option DOM directly to guarantee no option renders as
86308
+ // selected once the field is cleared (AB#1634259).
86309
+ this.menu.clearSelection();
85773
86310
  }
85774
86311
  } finally {
85775
86312
  this._clearing = false;
@@ -87404,6 +87941,22 @@ class AuroMenu extends AuroElement$2 {
87404
87941
  this.value = undefined;
87405
87942
  this._selectedKey = undefined;
87406
87943
  this._index = -1;
87944
+
87945
+ // Eagerly sync the option DOM to the now-empty selection. Nulling the
87946
+ // reactive properties above normally schedules updated() → updateItemsState,
87947
+ // but that only runs when a property actually changes. If an option still
87948
+ // carries a stale `selected`/`aria-selected` attribute while these
87949
+ // properties are already undefined (e.g. options were rebuilt after a value
87950
+ // was set), no re-render fires and the option keeps rendering as selected.
87951
+ // Strip that state now so no option looks selected after a clear (AB#1634259).
87952
+ // Intentionally leaves `active`/`optionActive` untouched so a highlighted
87953
+ // option remains keyboard-re-selectable after emptying the value (AB#1606433).
87954
+ this.updateItemsState(new Map([
87955
+ [
87956
+ 'optionSelected',
87957
+ true
87958
+ ]
87959
+ ]));
87407
87960
  }
87408
87961
 
87409
87962
  /**
@@ -91024,6 +91577,48 @@ const computePosition = (reference, floating, options) => {
91024
91577
  });
91025
91578
  };
91026
91579
 
91580
+ /**
91581
+ * Generates a v4 UUID with a three-tier fallback for insecure contexts.
91582
+ *
91583
+ * Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
91584
+ * Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
91585
+ * modern browsers regardless of secure-context status.
91586
+ * Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
91587
+ * but sufficient for element IDs where collision risk is negligible.
91588
+ *
91589
+ * See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
91590
+ */
91591
+ function generateUUID() {
91592
+ let uuid;
91593
+
91594
+ if (
91595
+ typeof crypto !== "undefined" &&
91596
+ typeof crypto.randomUUID === "function"
91597
+ ) {
91598
+ uuid = crypto.randomUUID();
91599
+ } else if (
91600
+ typeof crypto !== "undefined" &&
91601
+ typeof crypto.getRandomValues === "function"
91602
+ ) {
91603
+ const bytes = new Uint8Array(16);
91604
+ crypto.getRandomValues(bytes);
91605
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
91606
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
91607
+ const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
91608
+ uuid = `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
91609
+ } else {
91610
+ let d = new Date().getTime();
91611
+ uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
91612
+ const r = (d % 16) | 0;
91613
+ d = (d - r) / 16 || new Date().getTime();
91614
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
91615
+ });
91616
+ }
91617
+
91618
+ // CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
91619
+ return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
91620
+ }
91621
+
91027
91622
  /* eslint-disable line-comment-position, no-inline-comments */
91028
91623
 
91029
91624
 
@@ -92042,7 +92637,7 @@ class AuroFloatingUI {
92042
92637
 
92043
92638
  this.id = element.getAttribute("id");
92044
92639
  if (!this.id) {
92045
- this.id = window.crypto.randomUUID();
92640
+ this.id = generateUUID();
92046
92641
  element.setAttribute("id", this.id);
92047
92642
  }
92048
92643
 
@@ -93087,7 +93682,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
93087
93682
  }
93088
93683
  };
93089
93684
 
93090
- var formkitVersion$1 = '202609012101';
93685
+ var formkitVersion$1 = '202609022200';
93091
93686
 
93092
93687
  /**
93093
93688
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -95260,7 +95855,7 @@ class AuroHelpText extends i$3 {
95260
95855
  }
95261
95856
  }
95262
95857
 
95263
- var formkitVersion = '202609012101';
95858
+ var formkitVersion = '202609022200';
95264
95859
 
95265
95860
  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{max-width:100%}.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%;box-sizing:border-box;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{overflow:hidden;height:auto;text-overflow:ellipsis;white-space:nowrap}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}`;
95266
95861