@aurodesignsystem-dev/auro-formkit 0.0.0-pr1604.0 → 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 +31 -1
  52. package/package.json +3 -3
@@ -12467,7 +12467,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$2 {
12467
12467
  }
12468
12468
  };
12469
12469
 
12470
- var formkitVersion$8 = '202609011830';
12470
+ var formkitVersion$8 = '202609022200';
12471
12471
 
12472
12472
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12473
12473
  // See LICENSE in the project root for license information.
@@ -27030,7 +27030,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$2 {
27030
27030
  }
27031
27031
  };
27032
27032
 
27033
- var formkitVersion$2$1 = '202609011830';
27033
+ var formkitVersion$2$1 = '202609022200';
27034
27034
 
27035
27035
  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$5`${s$5(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$4`: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}
27036
27036
  `,u$4$2=i$4`.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}}
@@ -30811,6 +30811,48 @@ const computePosition$4 = (reference, floating, options) => {
30811
30811
  });
30812
30812
  };
30813
30813
 
30814
+ /**
30815
+ * Generates a v4 UUID with a three-tier fallback for insecure contexts.
30816
+ *
30817
+ * Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
30818
+ * Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
30819
+ * modern browsers regardless of secure-context status.
30820
+ * Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
30821
+ * but sufficient for element IDs where collision risk is negligible.
30822
+ *
30823
+ * See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
30824
+ */
30825
+ function generateUUID$3() {
30826
+ let uuid;
30827
+
30828
+ if (
30829
+ typeof crypto !== "undefined" &&
30830
+ typeof crypto.randomUUID === "function"
30831
+ ) {
30832
+ uuid = crypto.randomUUID();
30833
+ } else if (
30834
+ typeof crypto !== "undefined" &&
30835
+ typeof crypto.getRandomValues === "function"
30836
+ ) {
30837
+ const bytes = new Uint8Array(16);
30838
+ crypto.getRandomValues(bytes);
30839
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
30840
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
30841
+ const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
30842
+ 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("")}`;
30843
+ } else {
30844
+ let d = new Date().getTime();
30845
+ uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
30846
+ const r = (d % 16) | 0;
30847
+ d = (d - r) / 16 || new Date().getTime();
30848
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
30849
+ });
30850
+ }
30851
+
30852
+ // CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
30853
+ return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
30854
+ }
30855
+
30814
30856
  /* eslint-disable line-comment-position, no-inline-comments */
30815
30857
 
30816
30858
 
@@ -31829,7 +31871,7 @@ let AuroFloatingUI$3 = class AuroFloatingUI {
31829
31871
 
31830
31872
  this.id = element.getAttribute("id");
31831
31873
  if (!this.id) {
31832
- this.id = window.crypto.randomUUID();
31874
+ this.id = generateUUID$3();
31833
31875
  element.setAttribute("id", this.id);
31834
31876
  }
31835
31877
 
@@ -32874,7 +32916,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
32874
32916
  }
32875
32917
  };
32876
32918
 
32877
- var formkitVersion$1$3 = '202609011830';
32919
+ var formkitVersion$1$3 = '202609022200';
32878
32920
 
32879
32921
  /**
32880
32922
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -46736,7 +46778,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
46736
46778
  }
46737
46779
  };
46738
46780
 
46739
- var formkitVersion$7 = '202609011830';
46781
+ var formkitVersion$7 = '202609022200';
46740
46782
 
46741
46783
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46742
46784
  // See LICENSE in the project root for license information.
@@ -48353,6 +48395,14 @@ class AuroDatePicker extends AuroElement$5 {
48353
48395
  */
48354
48396
  this.hasFocus = false;
48355
48397
 
48398
+ /**
48399
+ * Tracks whether the current open cycle promoted the fullscreen bib via
48400
+ * showModal(). Used by the close handler to decide whether native <dialog>
48401
+ * focus restoration will fire (see the auroDropdown-toggled handler).
48402
+ * @private
48403
+ */
48404
+ this._bibOpenedAsModal = false;
48405
+
48356
48406
  /**
48357
48407
  * @private
48358
48408
  */
@@ -49408,6 +49458,15 @@ class AuroDatePicker extends AuroElement$5 {
49408
49458
  // a top-layer popover where :focus-within on the dropdown host returns false).
49409
49459
  this.dropdown.noHideOnThisFocusLoss = true;
49410
49460
 
49461
+ // Suppress the dropdown's generic focus restoration on close — the
49462
+ // datepicker manages its own focus in the auroDropdown-toggled handler
49463
+ // below (respecting hasFocus / _restoreFocusOnClose, and deferring to the
49464
+ // fullscreen dialog's native restoration on touch devices). Without this,
49465
+ // the dropdown's setTimeout(focusTrigger) fires a second, gesture-decoupled
49466
+ // programmatic focus on close, which on iOS Safari swallows the user's next
49467
+ // tap and forces a second tap to reopen the calendar (AB#1634252).
49468
+ this.dropdown.noFocusRestoreOnClose = true;
49469
+
49411
49470
  // Pass label text to the dropdown bib for accessible dialog naming.
49412
49471
  // Without this, the fullscreen <dialog> has no accessible name and
49413
49472
  // screen readers announce it as just "dialog" with no context.
@@ -49479,6 +49538,16 @@ class AuroDatePicker extends AuroElement$5 {
49479
49538
  bibEl.close();
49480
49539
  bibEl.open(true);
49481
49540
 
49541
+ // Record that this open cycle actually promoted the dialog via
49542
+ // showModal(). The close handler relies on this — not the broader
49543
+ // isBibFullscreen flag — to decide whether native <dialog> focus
49544
+ // restoration will occur, because isBibFullscreen is set
49545
+ // synchronously in showBib() while this open(true) runs a
49546
+ // microtask later. If the bib is closed before this resolves,
49547
+ // showModal() never fires and there is no native restoration to
49548
+ // defer to.
49549
+ this._bibOpenedAsModal = true;
49550
+
49482
49551
  doubleRaf$3(() => {
49483
49552
  this.focusActiveCellWhenReady();
49484
49553
  });
@@ -49510,7 +49579,27 @@ class AuroDatePicker extends AuroElement$5 {
49510
49579
  this.dropdown.trigger.inert = false;
49511
49580
  const shouldRestoreFocus = this.hasFocus || this._restoreFocusOnClose;
49512
49581
  this._restoreFocusOnClose = false;
49513
- if (shouldRestoreFocus) {
49582
+ // On coarse-pointer (touch) devices closing the fullscreen modal, rely
49583
+ // on the <dialog>'s native focus restoration instead of forcing focus
49584
+ // back onto the input. showModal() returns focus to the trigger anchor
49585
+ // as part of the closing gesture, so a11y focus is preserved. Re-running
49586
+ // .focus() here is a gesture-decoupled programmatic focus that iOS
49587
+ // Safari penalizes: it swallows the user's next tap, so reopening the
49588
+ // calendar takes two taps instead of one (AB#1634252). Fine-pointer
49589
+ // (desktop) layouts keep the explicit restore for keyboard/SR
49590
+ // correctness, and non-fullscreen bibs (no showModal, no native
49591
+ // restoration) always restore explicitly.
49592
+ //
49593
+ // Gate on `_bibOpenedAsModal` — set only after the actual showModal()
49594
+ // promotion (open(true)) — rather than `isBibFullscreen`, which is true
49595
+ // as soon as the fullscreen layout is chosen but before the modal is
49596
+ // promoted. If the bib is closed before that async promotion runs, no
49597
+ // native restoration will occur, so we must still restore explicitly.
49598
+ const bibWasModal = this._bibOpenedAsModal;
49599
+ this._bibOpenedAsModal = false;
49600
+ const useNativeFocusRestoration =
49601
+ bibWasModal && window.matchMedia('(pointer: coarse)').matches;
49602
+ if (shouldRestoreFocus && !useNativeFocusRestoration) {
49514
49603
  requestAnimationFrame(() => {
49515
49604
  if (!this.dropdown.isPopoverVisible) {
49516
49605
  this.inputList[0].focus();
@@ -51842,7 +51931,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
51842
51931
  }
51843
51932
  };
51844
51933
 
51845
- var formkitVersion$1$2 = '202609011830';
51934
+ var formkitVersion$1$2 = '202609022200';
51846
51935
 
51847
51936
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
51848
51937
  // See LICENSE in the project root for license information.
@@ -54079,6 +54168,48 @@ const computePosition$3 = (reference, floating, options) => {
54079
54168
  });
54080
54169
  };
54081
54170
 
54171
+ /**
54172
+ * Generates a v4 UUID with a three-tier fallback for insecure contexts.
54173
+ *
54174
+ * Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
54175
+ * Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
54176
+ * modern browsers regardless of secure-context status.
54177
+ * Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
54178
+ * but sufficient for element IDs where collision risk is negligible.
54179
+ *
54180
+ * See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
54181
+ */
54182
+ function generateUUID$2() {
54183
+ let uuid;
54184
+
54185
+ if (
54186
+ typeof crypto !== "undefined" &&
54187
+ typeof crypto.randomUUID === "function"
54188
+ ) {
54189
+ uuid = crypto.randomUUID();
54190
+ } else if (
54191
+ typeof crypto !== "undefined" &&
54192
+ typeof crypto.getRandomValues === "function"
54193
+ ) {
54194
+ const bytes = new Uint8Array(16);
54195
+ crypto.getRandomValues(bytes);
54196
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
54197
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
54198
+ const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
54199
+ 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("")}`;
54200
+ } else {
54201
+ let d = new Date().getTime();
54202
+ uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
54203
+ const r = (d % 16) | 0;
54204
+ d = (d - r) / 16 || new Date().getTime();
54205
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
54206
+ });
54207
+ }
54208
+
54209
+ // CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
54210
+ return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
54211
+ }
54212
+
54082
54213
  /* eslint-disable line-comment-position, no-inline-comments */
54083
54214
 
54084
54215
 
@@ -55097,7 +55228,7 @@ let AuroFloatingUI$2 = class AuroFloatingUI {
55097
55228
 
55098
55229
  this.id = element.getAttribute("id");
55099
55230
  if (!this.id) {
55100
- this.id = window.crypto.randomUUID();
55231
+ this.id = generateUUID$2();
55101
55232
  element.setAttribute("id", this.id);
55102
55233
  }
55103
55234
 
@@ -55181,7 +55312,7 @@ let AuroFloatingUI$2 = class AuroFloatingUI {
55181
55312
  };
55182
55313
 
55183
55314
  // Selectors for focusable elements
55184
- const FOCUSABLE_SELECTORS$3 = [
55315
+ const FOCUSABLE_SELECTORS$1$1 = [
55185
55316
  "a[href]",
55186
55317
  "button:not([disabled])",
55187
55318
  "textarea:not([disabled])",
@@ -55195,7 +55326,7 @@ const FOCUSABLE_SELECTORS$3 = [
55195
55326
  ];
55196
55327
 
55197
55328
  // List of custom components that are known to be focusable
55198
- const FOCUSABLE_COMPONENTS$3 = [
55329
+ const FOCUSABLE_COMPONENTS$1$1 = [
55199
55330
  "auro-checkbox",
55200
55331
  "auro-radio",
55201
55332
  "auro-dropdown",
@@ -55217,12 +55348,12 @@ const FOCUSABLE_COMPONENTS$3 = [
55217
55348
  * @param {HTMLElement} element The element to check for focusability.
55218
55349
  * @returns {boolean} True if the element is a focusable custom component, false otherwise.
55219
55350
  */
55220
- function isFocusableComponent$3(element) {
55351
+ function isFocusableComponent$1$1(element) {
55221
55352
  const componentName = element.tagName.toLowerCase();
55222
55353
 
55223
55354
  // Guard Clause: Element is a focusable component
55224
55355
  if (
55225
- !FOCUSABLE_COMPONENTS$3.some(
55356
+ !FOCUSABLE_COMPONENTS$1$1.some(
55226
55357
  (name) => element.hasAttribute(name) || componentName === name,
55227
55358
  )
55228
55359
  )
@@ -55246,7 +55377,7 @@ function isFocusableComponent$3(element) {
55246
55377
  * @param {HTMLElement} element The element whose tabindex to read.
55247
55378
  * @returns {?number} The numeric tabindex or null if missing/invalid.
55248
55379
  */
55249
- function getNumericTabIndex$3(element) {
55380
+ function getNumericTabIndex$1$1(element) {
55250
55381
  const raw = element.getAttribute("tabindex");
55251
55382
  if (raw == null) return null;
55252
55383
 
@@ -55262,7 +55393,7 @@ function getNumericTabIndex$3(element) {
55262
55393
  * @param {HTMLElement} container The container to search within
55263
55394
  * @returns {Array<HTMLElement>} An array of focusable elements within the container.
55264
55395
  */
55265
- function getFocusableElements$3(container) {
55396
+ function getFocusableElements$1$1(container) {
55266
55397
  // Get elements in DOM order by walking the tree
55267
55398
  const orderedFocusableElements = [];
55268
55399
 
@@ -55271,7 +55402,7 @@ function getFocusableElements$3(container) {
55271
55402
  // Check if current element is focusable
55272
55403
  if (root.nodeType === Node.ELEMENT_NODE) {
55273
55404
  // Check if this is a custom component that is focusable
55274
- const isComponentFocusable = isFocusableComponent$3(root);
55405
+ const isComponentFocusable = isFocusableComponent$1$1(root);
55275
55406
 
55276
55407
  if (isComponentFocusable) {
55277
55408
  // Add the component itself as a focusable element and don't traverse its shadow DOM
@@ -55280,7 +55411,7 @@ function getFocusableElements$3(container) {
55280
55411
  }
55281
55412
 
55282
55413
  // Check if the element itself matches any selector
55283
- for (const selector of FOCUSABLE_SELECTORS$3) {
55414
+ for (const selector of FOCUSABLE_SELECTORS$1$1) {
55284
55415
  if (root.matches?.(selector)) {
55285
55416
  orderedFocusableElements.push(root);
55286
55417
  break; // Once we know it's focusable, no need to check other selectors
@@ -55334,20 +55465,20 @@ function getFocusableElements$3(container) {
55334
55465
 
55335
55466
  // First extract elements with valid positive tabindex
55336
55467
  const elementsWithTabindex = uniqueElements.filter((el) => {
55337
- const tabindex = getNumericTabIndex$3(el);
55468
+ const tabindex = getNumericTabIndex$1$1(el);
55338
55469
  return tabindex !== null && tabindex > 0;
55339
55470
  });
55340
55471
 
55341
55472
  // Sort these elements by their tabindex value
55342
55473
  elementsWithTabindex.sort((a, b) => {
55343
- const aIndex = getNumericTabIndex$3(a) ?? 0;
55344
- const bIndex = getNumericTabIndex$3(b) ?? 0;
55474
+ const aIndex = getNumericTabIndex$1$1(a) ?? 0;
55475
+ const bIndex = getNumericTabIndex$1$1(b) ?? 0;
55345
55476
  return aIndex - bIndex;
55346
55477
  });
55347
55478
 
55348
55479
  // Elements without tabindex (preserving their original order)
55349
55480
  const elementsWithoutTabindex = uniqueElements.filter((el) => {
55350
- const tabindex = getNumericTabIndex$3(el);
55481
+ const tabindex = getNumericTabIndex$1$1(el);
55351
55482
 
55352
55483
  // Elements without tabindex or with tabindex of 0 stay in DOM order
55353
55484
  return tabindex === null || tabindex === 0;
@@ -56142,7 +56273,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
56142
56273
  }
56143
56274
  };
56144
56275
 
56145
- var formkitVersion$6 = '202609011830';
56276
+ var formkitVersion$6 = '202609022200';
56146
56277
 
56147
56278
  /**
56148
56279
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -56442,7 +56573,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
56442
56573
  */
56443
56574
  focus() {
56444
56575
  if (this.isPopoverVisible && this.bibContent) {
56445
- const focusables = getFocusableElements$3(this.bibContent);
56576
+ const focusables = getFocusableElements$1$1(this.bibContent);
56446
56577
  if (focusables.length > 0) {
56447
56578
  focusables[0].focus();
56448
56579
  }
@@ -56474,7 +56605,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
56474
56605
  // wrappers like <div> containing a <button>). If none found, try
56475
56606
  // focusing the element directly (works for custom elements like
56476
56607
  // auro-input that have delegatesFocus or a custom focus() method).
56477
- const descendants = getFocusableElements$3(el);
56608
+ const descendants = getFocusableElements$1$1(el);
56478
56609
  if (descendants.length > 0) {
56479
56610
  descendants[0].focus();
56480
56611
  return;
@@ -56486,7 +56617,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
56486
56617
  }
56487
56618
  }
56488
56619
  // Fallback: try DOM children (non-slotted content)
56489
- const focusables = getFocusableElements$3(this.trigger);
56620
+ const focusables = getFocusableElements$1$1(this.trigger);
56490
56621
  if (focusables.length > 0) {
56491
56622
  focusables[0].focus();
56492
56623
  }
@@ -57165,7 +57296,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57165
57296
  }
57166
57297
 
57167
57298
  // Collect focusable elements from the bib content.
57168
- const focusables = getFocusableElements$3(this.bibContent);
57299
+ const focusables = getFocusableElements$1$1(this.bibContent);
57169
57300
 
57170
57301
  // Fallback: try from slotted content directly
57171
57302
  if (!focusables.length) {
@@ -57174,7 +57305,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57174
57305
 
57175
57306
  for (const node of assignedNodes) {
57176
57307
  if (node.nodeType === Node.ELEMENT_NODE) {
57177
- focusables.push(...getFocusableElements$3(node));
57308
+ focusables.push(...getFocusableElements$1$1(node));
57178
57309
  }
57179
57310
  }
57180
57311
  }
@@ -57234,7 +57365,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57234
57365
 
57235
57366
  // Move initial focus into the bib content, matching FocusTrap behavior
57236
57367
  requestAnimationFrame(() => {
57237
- const focusables = getFocusableElements$3(this.bibContent);
57368
+ const focusables = getFocusableElements$1$1(this.bibContent);
57238
57369
  if (focusables.length) {
57239
57370
  focusables[0].focus();
57240
57371
  }
@@ -57247,7 +57378,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57247
57378
  // popover asynchronously — a synchronous focus() would target
57248
57379
  // zero-dimension elements and be silently ignored.
57249
57380
  requestAnimationFrame(() => {
57250
- const focusables = getFocusableElements$3(this.bibContent);
57381
+ const focusables = getFocusableElements$1$1(this.bibContent);
57251
57382
  if (focusables.length) {
57252
57383
  focusables[0].focus();
57253
57384
  }
@@ -57465,7 +57596,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57465
57596
  if (triggerContentNodes) {
57466
57597
 
57467
57598
  // See if any of them are focusable elements
57468
- this.triggerContentFocusable = triggerContentNodes.some((node) => getFocusableElements$3(node).length > 0);
57599
+ this.triggerContentFocusable = triggerContentNodes.some((node) => getFocusableElements$1$1(node).length > 0);
57469
57600
 
57470
57601
  // If any of them are focusable elements
57471
57602
  if (this.triggerContentFocusable) {
@@ -58227,9 +58358,241 @@ let AuroElement$4 = class AuroElement extends i$2 {
58227
58358
  }
58228
58359
  };
58229
58360
 
58361
+ // Selectors for focusable elements
58362
+ const FOCUSABLE_SELECTORS$3 = [
58363
+ "a[href]",
58364
+ "button:not([disabled])",
58365
+ "textarea:not([disabled])",
58366
+ "input:not([disabled])",
58367
+ "select:not([disabled])",
58368
+ '[role="tab"]:not([disabled])',
58369
+ '[role="link"]:not([disabled])',
58370
+ '[role="button"]:not([disabled])',
58371
+ '[tabindex]:not([tabindex="-1"])',
58372
+ '[contenteditable]:not([contenteditable="false"])',
58373
+ ];
58374
+
58375
+ // List of custom components that are known to be focusable
58376
+ const FOCUSABLE_COMPONENTS$3 = [
58377
+ "auro-checkbox",
58378
+ "auro-radio",
58379
+ "auro-dropdown",
58380
+ "auro-button",
58381
+ "auro-combobox",
58382
+ "auro-input",
58383
+ "auro-counter",
58384
+ // 'auro-menu', // Auro menu is not focusable by default, it uses a different interaction model
58385
+ "auro-select",
58386
+ "auro-datepicker",
58387
+ "auro-hyperlink",
58388
+ "auro-accordion",
58389
+ ];
58390
+
58391
+ /**
58392
+ * Determines if a given element is a custom focusable component.
58393
+ * Returns true if the element matches a known focusable component and is not disabled.
58394
+ *
58395
+ * @param {HTMLElement} element The element to check for focusability.
58396
+ * @returns {boolean} True if the element is a focusable custom component, false otherwise.
58397
+ */
58398
+ function isFocusableComponent$3(element) {
58399
+ const componentName = element.tagName.toLowerCase();
58400
+
58401
+ // Guard Clause: Element is a focusable component
58402
+ if (
58403
+ !FOCUSABLE_COMPONENTS$3.some(
58404
+ (name) => element.hasAttribute(name) || componentName === name,
58405
+ )
58406
+ )
58407
+ return false;
58408
+
58409
+ // Guard Clause: Element is not disabled
58410
+ if (element.hasAttribute("disabled")) return false;
58411
+
58412
+ // Guard Clause: The element is a hyperlink and has no href attribute
58413
+ if (componentName.match("hyperlink") && !element.hasAttribute("href"))
58414
+ return false;
58415
+
58416
+ // If all guard clauses pass, the element is a focusable component
58417
+ return true;
58418
+ }
58419
+
58420
+ /**
58421
+ * Safely get a numeric tabindex for an element.
58422
+ * Returns a number if the tabindex is a valid integer, otherwise null.
58423
+ *
58424
+ * @param {HTMLElement} element The element whose tabindex to read.
58425
+ * @returns {?number} The numeric tabindex or null if missing/invalid.
58426
+ */
58427
+ function getNumericTabIndex$3(element) {
58428
+ const raw = element.getAttribute("tabindex");
58429
+ if (raw == null) return null;
58430
+
58431
+ const value = Number.parseInt(raw, 10);
58432
+ return Number.isNaN(value) ? null : value;
58433
+ }
58434
+
58435
+ /**
58436
+ * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
58437
+ * Returns a unique, ordered array of elements that can receive focus.
58438
+ * Also sorts elements with tabindex first, preserving their order.
58439
+ *
58440
+ * @param {HTMLElement} container The container to search within
58441
+ * @returns {Array<HTMLElement>} An array of focusable elements within the container.
58442
+ */
58443
+ function getFocusableElements$3(container) {
58444
+ // Get elements in DOM order by walking the tree
58445
+ const orderedFocusableElements = [];
58446
+
58447
+ // Define a recursive function to collect focusable elements in DOM order
58448
+ const collectFocusableElements = (root) => {
58449
+ // Check if current element is focusable
58450
+ if (root.nodeType === Node.ELEMENT_NODE) {
58451
+ // Check if this is a custom component that is focusable
58452
+ const isComponentFocusable = isFocusableComponent$3(root);
58453
+
58454
+ if (isComponentFocusable) {
58455
+ // Add the component itself as a focusable element and don't traverse its shadow DOM
58456
+ orderedFocusableElements.push(root);
58457
+ return; // Skip traversing inside this component
58458
+ }
58459
+
58460
+ // Check if the element itself matches any selector
58461
+ for (const selector of FOCUSABLE_SELECTORS$3) {
58462
+ if (root.matches?.(selector)) {
58463
+ orderedFocusableElements.push(root);
58464
+ break; // Once we know it's focusable, no need to check other selectors
58465
+ }
58466
+ }
58467
+
58468
+ // Process shadow DOM only for non-Auro components
58469
+ if (root.shadowRoot) {
58470
+ // Process shadow DOM children in order
58471
+ if (root.shadowRoot.children) {
58472
+ Array.from(root.shadowRoot.children).forEach((child) => {
58473
+ collectFocusableElements(child);
58474
+ });
58475
+ }
58476
+ }
58477
+
58478
+ // Process slots and their assigned nodes in order
58479
+ if (root.tagName === "SLOT") {
58480
+ const assignedNodes = root.assignedNodes({ flatten: true });
58481
+ for (const node of assignedNodes) {
58482
+ collectFocusableElements(node);
58483
+ }
58484
+ } else {
58485
+ // Process light DOM children in order
58486
+ if (root.children) {
58487
+ Array.from(root.children).forEach((child) => {
58488
+ collectFocusableElements(child);
58489
+ });
58490
+ }
58491
+ }
58492
+ }
58493
+ };
58494
+
58495
+ // Start the traversal from the container
58496
+ collectFocusableElements(container);
58497
+
58498
+ // Remove duplicates that might have been collected through different paths
58499
+ // while preserving order
58500
+ const uniqueElements = [];
58501
+ const seen = new Set();
58502
+
58503
+ for (const element of orderedFocusableElements) {
58504
+ if (!seen.has(element)) {
58505
+ seen.add(element);
58506
+ uniqueElements.push(element);
58507
+ }
58508
+ }
58509
+
58510
+ // Move tab-indexed elements to the front while preserving their order
58511
+ // This ensures that elements with tabindex are prioritized in the focus order
58512
+
58513
+ // First extract elements with valid positive tabindex
58514
+ const elementsWithTabindex = uniqueElements.filter((el) => {
58515
+ const tabindex = getNumericTabIndex$3(el);
58516
+ return tabindex !== null && tabindex > 0;
58517
+ });
58518
+
58519
+ // Sort these elements by their tabindex value
58520
+ elementsWithTabindex.sort((a, b) => {
58521
+ const aIndex = getNumericTabIndex$3(a) ?? 0;
58522
+ const bIndex = getNumericTabIndex$3(b) ?? 0;
58523
+ return aIndex - bIndex;
58524
+ });
58525
+
58526
+ // Elements without tabindex (preserving their original order)
58527
+ const elementsWithoutTabindex = uniqueElements.filter((el) => {
58528
+ const tabindex = getNumericTabIndex$3(el);
58529
+
58530
+ // Elements without tabindex or with tabindex of 0 stay in DOM order
58531
+ return tabindex === null || tabindex === 0;
58532
+ });
58533
+
58534
+ // Combine both arrays with tabindex elements first
58535
+ const tabIndexedUniqueElements = [
58536
+ ...elementsWithTabindex,
58537
+ ...elementsWithoutTabindex,
58538
+ ];
58539
+
58540
+ return tabIndexedUniqueElements;
58541
+ }
58542
+
58230
58543
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
58231
58544
  // See LICENSE in the project root for license information.
58232
58545
 
58546
+
58547
+ /**
58548
+ * Whether `el` is currently visible enough to receive focus. Prefers the
58549
+ * browser's `checkVisibility()`; otherwise combines a display/visibility check
58550
+ * with an ancestor-hidden probe that keeps position:fixed elements visible.
58551
+ * @param {Element} el - The element to test.
58552
+ * @returns {boolean}
58553
+ */
58554
+ function isVisibleForFocus$1(el) {
58555
+ if (typeof el.checkVisibility === 'function') {
58556
+ return el.checkVisibility();
58557
+ }
58558
+ const style = el.ownerDocument.defaultView.getComputedStyle(el);
58559
+ if (style.display === 'none' || style.visibility === 'hidden') {
58560
+ return false;
58561
+ }
58562
+ return el.offsetParent !== null || style.position === 'fixed';
58563
+ }
58564
+
58565
+ /**
58566
+ * Return the tab stop that comes before the counter-group in page tab order,
58567
+ * skipping any hidden entries the walker doesn't filter itself. The group host
58568
+ * itself is not a tab stop; its focusables (the internal dropdown and the
58569
+ * counters) are, so anchor the search on the group's earliest focusable.
58570
+ * @param {Element} component - The auro-counter-group host element.
58571
+ * @returns {Element|null}
58572
+ */
58573
+ function getPreviousTabStop$1(component) {
58574
+ const tabStops = getFocusableElements$3(component.ownerDocument.body);
58575
+ const counters = component.counters || [];
58576
+ const owned = [
58577
+ component,
58578
+ component.dropdown,
58579
+ ...counters
58580
+ ].filter(Boolean);
58581
+ let groupStart = tabStops.length;
58582
+ owned.forEach((node) => {
58583
+ const index = tabStops.indexOf(node);
58584
+ if (index >= 0 && index < groupStart) {
58585
+ groupStart = index;
58586
+ }
58587
+ });
58588
+ for (let index = groupStart - 1; index >= 0; index -= 1) {
58589
+ if (isVisibleForFocus$1(tabStops[index])) {
58590
+ return tabStops[index];
58591
+ }
58592
+ }
58593
+ return null;
58594
+ }
58595
+
58233
58596
  const counterGroupKeyboardStrategy = {
58234
58597
  Escape(component, evt) {
58235
58598
  if (!component.dropdown || !component.dropdown.isPopoverVisible) {
@@ -58243,6 +58606,48 @@ const counterGroupKeyboardStrategy = {
58243
58606
 
58244
58607
  component.dropdown.hide();
58245
58608
  },
58609
+
58610
+ Tab(component, evt, ctx) {
58611
+ // Forward Tab already exits past the bib content and the focusout handler
58612
+ // closes the bib. Fullscreen relies on the dialog's native focus trapping.
58613
+ if (!ctx.isExpanded || ctx.isModal || !evt.shiftKey) {
58614
+ return;
58615
+ }
58616
+
58617
+ // The trigger precedes the bib content in the flattened tab order, so a
58618
+ // native Shift+Tab off the first counter lands back on the trigger and
58619
+ // leaves the bib open. Only intercept when focus is on the first focusable
58620
+ // in the bib; otherwise let the browser move to the previous counter.
58621
+ // `composedPath()` reports the real event origin through every shadow
58622
+ // boundary, unlike `document.activeElement`, which retargets to the first
58623
+ // slotted counter and cannot tell the counters apart.
58624
+ const focusables = getFocusableElements$3(component.dropdown.bibContent);
58625
+ if (!focusables.length) {
58626
+ return;
58627
+ }
58628
+
58629
+ const path = evt.composedPath();
58630
+ const activeIndex = focusables.findIndex((el) => path.includes(el));
58631
+ if (activeIndex !== 0) {
58632
+ return;
58633
+ }
58634
+
58635
+ const previousTabStop = getPreviousTabStop$1(component);
58636
+
58637
+ // Always suppress the native Shift+Tab. Otherwise it fires against the bib
58638
+ // as it is torn down and lands focus on the trigger (which precedes the
58639
+ // first counter), re-opening the exact loop this handler prevents. When
58640
+ // nothing precedes the group, focus falls to the body instead of the
58641
+ // trigger, which reads as exiting the group backward.
58642
+ evt.preventDefault();
58643
+ component.hideBib();
58644
+
58645
+ if (!previousTabStop) {
58646
+ return;
58647
+ }
58648
+
58649
+ doubleRaf$2(() => previousTabStop.focus());
58650
+ },
58246
58651
  };
58247
58652
 
58248
58653
  /* 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,
@@ -60327,7 +60732,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
60327
60732
  }
60328
60733
  };
60329
60734
 
60330
- var formkitVersion$5 = '202609011830';
60735
+ var formkitVersion$5 = '202609022200';
60331
60736
 
60332
60737
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
60333
60738
  // See LICENSE in the project root for license information.
@@ -62121,7 +62526,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
62121
62526
  }
62122
62527
  };
62123
62528
 
62124
- var formkitVersion$4 = '202609011830';
62529
+ var formkitVersion$4 = '202609022200';
62125
62530
 
62126
62531
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
62127
62532
  // See LICENSE in the project root for license information.
@@ -65485,6 +65890,48 @@ const computePosition$2 = (reference, floating, options) => {
65485
65890
  });
65486
65891
  };
65487
65892
 
65893
+ /**
65894
+ * Generates a v4 UUID with a three-tier fallback for insecure contexts.
65895
+ *
65896
+ * Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
65897
+ * Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
65898
+ * modern browsers regardless of secure-context status.
65899
+ * Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
65900
+ * but sufficient for element IDs where collision risk is negligible.
65901
+ *
65902
+ * See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
65903
+ */
65904
+ function generateUUID$1() {
65905
+ let uuid;
65906
+
65907
+ if (
65908
+ typeof crypto !== "undefined" &&
65909
+ typeof crypto.randomUUID === "function"
65910
+ ) {
65911
+ uuid = crypto.randomUUID();
65912
+ } else if (
65913
+ typeof crypto !== "undefined" &&
65914
+ typeof crypto.getRandomValues === "function"
65915
+ ) {
65916
+ const bytes = new Uint8Array(16);
65917
+ crypto.getRandomValues(bytes);
65918
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
65919
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
65920
+ const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
65921
+ 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("")}`;
65922
+ } else {
65923
+ let d = new Date().getTime();
65924
+ uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
65925
+ const r = (d % 16) | 0;
65926
+ d = (d - r) / 16 || new Date().getTime();
65927
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
65928
+ });
65929
+ }
65930
+
65931
+ // CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
65932
+ return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
65933
+ }
65934
+
65488
65935
  /* eslint-disable line-comment-position, no-inline-comments */
65489
65936
 
65490
65937
 
@@ -66503,7 +66950,7 @@ let AuroFloatingUI$1 = class AuroFloatingUI {
66503
66950
 
66504
66951
  this.id = element.getAttribute("id");
66505
66952
  if (!this.id) {
66506
- this.id = window.crypto.randomUUID();
66953
+ this.id = generateUUID$1();
66507
66954
  element.setAttribute("id", this.id);
66508
66955
  }
66509
66956
 
@@ -67548,7 +67995,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
67548
67995
  }
67549
67996
  };
67550
67997
 
67551
- var formkitVersion$2 = '202609011830';
67998
+ var formkitVersion$2 = '202609022200';
67552
67999
 
67553
68000
  /**
67554
68001
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -81410,7 +81857,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
81410
81857
  }
81411
81858
  };
81412
81859
 
81413
- var formkitVersion$1$1 = '202609011830';
81860
+ var formkitVersion$1$1 = '202609022200';
81414
81861
 
81415
81862
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
81416
81863
  // See LICENSE in the project root for license information.
@@ -82602,7 +83049,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
82602
83049
  }
82603
83050
  };
82604
83051
 
82605
- var formkitVersion$3 = '202609011830';
83052
+ var formkitVersion$3 = '202609022200';
82606
83053
 
82607
83054
  var styleCss$1$3 = i$4`.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}`;
82608
83055
 
@@ -83043,6 +83490,11 @@ class AuroCombobox extends AuroElement$3 {
83043
83490
  this.behavior = "suggestion";
83044
83491
  this.clearBtnFocused = false;
83045
83492
 
83493
+ // One-shot: set when the input's clear button is activated so the
83494
+ // SPA-preselect guard in handleInputValueChange doesn't swallow the
83495
+ // genuine clear (AB#1634257).
83496
+ this._clearBtnActivated = false;
83497
+
83046
83498
  // Defaults that effect the overall layout of the combobox
83047
83499
  this.checkmark = false;
83048
83500
  this.dvInputOnly = false;
@@ -84000,6 +84452,13 @@ class AuroCombobox extends AuroElement$3 {
84000
84452
  this.bibtemplate = this.dropdown.querySelector(this.bibtemplateTag._$litStatic$);
84001
84453
  this.inputInBib = this.bibtemplate.querySelector(this.inputTag._$litStatic$);
84002
84454
 
84455
+ // Mirror the trigger's clear-button tracking onto the fullscreen bib input
84456
+ // so clearing there also fully resets the combobox (AB#1634257). See
84457
+ // trackClearBtnActivation for why this must run in the capture phase.
84458
+ if (this.inputInBib && this.inputInBib !== this.input) {
84459
+ this.trackClearBtnActivation(this.inputInBib);
84460
+ }
84461
+
84003
84462
  // Pass label text to the dropdown bib for accessible dialog naming
84004
84463
  const labelElement = this.querySelector('[slot="label"]');
84005
84464
  if (labelElement) {
@@ -84385,6 +84844,52 @@ class AuroCombobox extends AuroElement$3 {
84385
84844
  this.clearBtnFocused = false;
84386
84845
  }
84387
84846
  });
84847
+
84848
+ this.trackClearBtnActivation(this.input);
84849
+ }
84850
+
84851
+ /**
84852
+ * Flags genuine clear-button activations on an auro-input so the SPA-preselect
84853
+ * guard in handleInputValueChange doesn't swallow them.
84854
+ *
84855
+ * The auro-input clear button fires an `isProgrammatic` input event (via
84856
+ * notifyValueChanged) that is indistinguishable in shape from the
84857
+ * SPA-preselect echo that guard bails on (isProgrammatic + set value + empty
84858
+ * input). Without this one-shot flag, clicking clear would leave
84859
+ * this.value/optionSelected stale (AB#1634257).
84860
+ *
84861
+ * Delegated on the shadow root so it works regardless of when .clearBtn
84862
+ * renders (it only exists after a value is set), and covers both real clicks
84863
+ * and programmatic clearBtn.click() (which no focusin precedes). Registered in
84864
+ * the CAPTURE phase so the flag is set BEFORE the button's own @click
84865
+ * (handleClickClear) fires its synchronous input event — which is when
84866
+ * handleInputValueChange reads the flag.
84867
+ * @private
84868
+ * @param {Element} inputEl - The auro-input whose clear button to track.
84869
+ * @returns {void}
84870
+ */
84871
+ trackClearBtnActivation(inputEl) {
84872
+ if (!inputEl || !inputEl.shadowRoot) {
84873
+ return;
84874
+ }
84875
+ inputEl.shadowRoot.addEventListener('click', (event) => {
84876
+ if (event.target.closest('.clearBtn')) {
84877
+ this._clearBtnActivated = true;
84878
+
84879
+ // Bound the flag's lifetime to this synchronous clear -> input window.
84880
+ // auro-input's handleClickClear fires its input event synchronously
84881
+ // (before any macrotask runs), so handleInputValueChange consumes the
84882
+ // flag first and this reset is a harmless no-op. It only does real work
84883
+ // if that input event never arrives (e.g. auro-input throws mid-clear),
84884
+ // guaranteeing the flag can't survive to be misread as a genuine clear
84885
+ // by a later unrelated event such as an SPA-preselect echo (AB#1634257).
84886
+ // Scheduled via _scheduleTimer so disconnectedCallback cancels it if the
84887
+ // component tears down inside that window.
84888
+ this._scheduleTimer(() => {
84889
+ this._clearBtnActivated = false;
84890
+ }, 0);
84891
+ }
84892
+ }, true);
84388
84893
  }
84389
84894
 
84390
84895
  /**
@@ -84426,6 +84931,17 @@ class AuroCombobox extends AuroElement$3 {
84426
84931
  * @returns {void}
84427
84932
  */
84428
84933
  handleInputValueChange(event) {
84934
+ // Consume the one-shot clear-button flag on EVERY entry, before any branch
84935
+ // below can early-return. trackClearBtnActivation sets it in the capture
84936
+ // phase right before auro-input's clear button fires its synchronous input
84937
+ // event; reading and immediately clearing it here guarantees the flag never
84938
+ // survives a handleInputValueChange call to leak into a later event (e.g.
84939
+ // the bib branch bailing at _syncingDisplayValue, or an SPA-preselect echo)
84940
+ // where it would defeat the guard below. Held in a local so that guard can
84941
+ // still tell a genuine clear from the init-render echo (AB#1634257).
84942
+ const clearBtnActivated = this._clearBtnActivated;
84943
+ this._clearBtnActivated = false;
84944
+
84429
84945
  // When the event comes from the fullscreen bib input, sync the value to
84430
84946
  // the trigger input. Setting trigger.value triggers Lit's updated()
84431
84947
  // (async, microtask) which fires notifyValueChanged() → another 'input'
@@ -84473,7 +84989,12 @@ class AuroCombobox extends AuroElement$3 {
84473
84989
  // to the exact shape of that echo (isProgrammatic + non-empty combobox
84474
84990
  // value + empty input.value) so it doesn't affect the swap/typed paths
84475
84991
  // where value/input already track each other through the sync helpers.
84476
- if (event && event.isProgrammatic && this.value && !this.input.value) {
84992
+ // The clear button's echo has the same shape (isProgrammatic + set value +
84993
+ // empty input) but is a genuine user clear that MUST reset this.value and
84994
+ // optionSelected below. clearBtnActivated (consumed at the top of this
84995
+ // method) is true only for that genuine clear, so only the real
84996
+ // SPA-preselect echo bails (AB#1634257).
84997
+ if (event && event.isProgrammatic && this.value && !this.input.value && !clearBtnActivated) {
84477
84998
  return;
84478
84999
  }
84479
85000
 
@@ -84618,6 +85139,14 @@ class AuroCombobox extends AuroElement$3 {
84618
85139
  // retry would otherwise keep rescheduling itself indefinitely.
84619
85140
  this._pendingTimers.forEach((id) => clearTimeout(id));
84620
85141
  this._pendingTimers.clear();
85142
+
85143
+ // Cancelling the timers above drops the macrotask that would have reset
85144
+ // _clearBtnActivated, so reset it here too. Otherwise a disconnect inside
85145
+ // the clear-click -> macrotask window strands the flag `true`; instance
85146
+ // state survives reconnect, and the first matching input event (including
85147
+ // an SPA-preselect echo) would then bypass the guard in
85148
+ // handleInputValueChange and silently clear value/optionSelected (AB#1634257).
85149
+ this._clearBtnActivated = false;
84621
85150
  }
84622
85151
 
84623
85152
  firstUpdated() {
@@ -84716,6 +85245,14 @@ class AuroCombobox extends AuroElement$3 {
84716
85245
  }
84717
85246
  if (this.menu.value || this.menu.optionSelected) {
84718
85247
  this.menu.reset();
85248
+ } else {
85249
+ // The menu's selection properties are already cleared, but option
85250
+ // elements can still carry a stale `selected` attribute (e.g. the menu
85251
+ // options were rebuilt after the value was set, orphaning the DOM from
85252
+ // the now-null optionSelected). reset() is skipped above in that case,
85253
+ // so re-sync the option DOM directly to guarantee no option renders as
85254
+ // selected once the field is cleared (AB#1634259).
85255
+ this.menu.clearSelection();
84719
85256
  }
84720
85257
  } finally {
84721
85258
  this._clearing = false;
@@ -86350,6 +86887,22 @@ class AuroMenu extends AuroElement$2 {
86350
86887
  this.value = undefined;
86351
86888
  this._selectedKey = undefined;
86352
86889
  this._index = -1;
86890
+
86891
+ // Eagerly sync the option DOM to the now-empty selection. Nulling the
86892
+ // reactive properties above normally schedules updated() → updateItemsState,
86893
+ // but that only runs when a property actually changes. If an option still
86894
+ // carries a stale `selected`/`aria-selected` attribute while these
86895
+ // properties are already undefined (e.g. options were rebuilt after a value
86896
+ // was set), no re-render fires and the option keeps rendering as selected.
86897
+ // Strip that state now so no option looks selected after a clear (AB#1634259).
86898
+ // Intentionally leaves `active`/`optionActive` untouched so a highlighted
86899
+ // option remains keyboard-re-selectable after emptying the value (AB#1606433).
86900
+ this.updateItemsState(new Map([
86901
+ [
86902
+ 'optionSelected',
86903
+ true
86904
+ ]
86905
+ ]));
86353
86906
  }
86354
86907
 
86355
86908
  /**
@@ -89970,6 +90523,48 @@ const computePosition = (reference, floating, options) => {
89970
90523
  });
89971
90524
  };
89972
90525
 
90526
+ /**
90527
+ * Generates a v4 UUID with a three-tier fallback for insecure contexts.
90528
+ *
90529
+ * Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
90530
+ * Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
90531
+ * modern browsers regardless of secure-context status.
90532
+ * Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
90533
+ * but sufficient for element IDs where collision risk is negligible.
90534
+ *
90535
+ * See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
90536
+ */
90537
+ function generateUUID() {
90538
+ let uuid;
90539
+
90540
+ if (
90541
+ typeof crypto !== "undefined" &&
90542
+ typeof crypto.randomUUID === "function"
90543
+ ) {
90544
+ uuid = crypto.randomUUID();
90545
+ } else if (
90546
+ typeof crypto !== "undefined" &&
90547
+ typeof crypto.getRandomValues === "function"
90548
+ ) {
90549
+ const bytes = new Uint8Array(16);
90550
+ crypto.getRandomValues(bytes);
90551
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
90552
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
90553
+ const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
90554
+ 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("")}`;
90555
+ } else {
90556
+ let d = new Date().getTime();
90557
+ uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
90558
+ const r = (d % 16) | 0;
90559
+ d = (d - r) / 16 || new Date().getTime();
90560
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
90561
+ });
90562
+ }
90563
+
90564
+ // CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
90565
+ return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
90566
+ }
90567
+
89973
90568
  /* eslint-disable line-comment-position, no-inline-comments */
89974
90569
 
89975
90570
 
@@ -90988,7 +91583,7 @@ class AuroFloatingUI {
90988
91583
 
90989
91584
  this.id = element.getAttribute("id");
90990
91585
  if (!this.id) {
90991
- this.id = window.crypto.randomUUID();
91586
+ this.id = generateUUID();
90992
91587
  element.setAttribute("id", this.id);
90993
91588
  }
90994
91589
 
@@ -92033,7 +92628,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
92033
92628
  }
92034
92629
  };
92035
92630
 
92036
- var formkitVersion$1 = '202609011830';
92631
+ var formkitVersion$1 = '202609022200';
92037
92632
 
92038
92633
  /**
92039
92634
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -94206,7 +94801,7 @@ class AuroHelpText extends i$2 {
94206
94801
  }
94207
94802
  }
94208
94803
 
94209
- var formkitVersion = '202609011830';
94804
+ var formkitVersion = '202609022200';
94210
94805
 
94211
94806
  var styleCss = i$4`.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}`;
94212
94807