@aurodesignsystem/auro-formkit 6.0.0 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +5 -240
  2. package/components/checkbox/demo/customize.min.js +1 -1
  3. package/components/checkbox/demo/getting-started.min.js +1 -1
  4. package/components/checkbox/demo/index.min.js +1 -1
  5. package/components/checkbox/dist/index.js +1 -1
  6. package/components/checkbox/dist/registered.js +1 -1
  7. package/components/combobox/demo/customize.min.js +172 -46
  8. package/components/combobox/demo/getting-started.min.js +172 -46
  9. package/components/combobox/demo/index.min.js +172 -46
  10. package/components/combobox/dist/index.js +172 -46
  11. package/components/combobox/dist/registered.js +172 -46
  12. package/components/counter/demo/customize.min.js +59 -7
  13. package/components/counter/demo/index.min.js +59 -7
  14. package/components/counter/dist/index.js +59 -7
  15. package/components/counter/dist/registered.js +59 -7
  16. package/components/datepicker/demo/customize.min.js +106 -18
  17. package/components/datepicker/demo/index.min.js +106 -18
  18. package/components/datepicker/dist/index.js +106 -18
  19. package/components/datepicker/dist/registered.js +106 -18
  20. package/components/dropdown/demo/customize.min.js +58 -6
  21. package/components/dropdown/demo/getting-started.min.js +58 -6
  22. package/components/dropdown/demo/index.min.js +58 -6
  23. package/components/dropdown/dist/auro-dropdown.d.ts +16 -1
  24. package/components/dropdown/dist/index.js +58 -6
  25. package/components/dropdown/dist/registered.js +58 -6
  26. package/components/form/demo/customize.min.js +445 -91
  27. package/components/form/demo/getting-started.min.js +445 -91
  28. package/components/form/demo/index.min.js +445 -91
  29. package/components/form/demo/registerDemoDeps.min.js +445 -91
  30. package/components/input/demo/customize.min.js +47 -11
  31. package/components/input/demo/getting-started.min.js +47 -11
  32. package/components/input/demo/index.min.js +47 -11
  33. package/components/input/dist/index.js +47 -11
  34. package/components/input/dist/registered.js +47 -11
  35. package/components/radio/demo/customize.min.js +1 -1
  36. package/components/radio/demo/getting-started.min.js +1 -1
  37. package/components/radio/demo/index.min.js +1 -1
  38. package/components/radio/dist/index.js +1 -1
  39. package/components/radio/dist/registered.js +1 -1
  40. package/components/select/demo/customize.min.js +59 -7
  41. package/components/select/demo/getting-started.min.js +59 -7
  42. package/components/select/demo/index.min.js +59 -7
  43. package/components/select/dist/index.js +59 -7
  44. package/components/select/dist/registered.js +59 -7
  45. package/custom-elements.json +1500 -1484
  46. package/package.json +1 -1
@@ -13669,7 +13669,7 @@ class AuroBibtemplate extends LitElement {
13669
13669
  }
13670
13670
  }
13671
13671
 
13672
- var formkitVersion$2 = '202607102309';
13672
+ var formkitVersion$2 = '202607161943';
13673
13673
 
13674
13674
  let l$1 = 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=literal`${unsafeStatic(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = 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 = 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=css`: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}
13675
13675
  `,u$4=css`.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}}
@@ -19397,7 +19397,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
19397
19397
  }
19398
19398
  };
19399
19399
 
19400
- var formkitVersion$1 = '202607102309';
19400
+ var formkitVersion$1 = '202607161943';
19401
19401
 
19402
19402
  let AuroElement$2 = class AuroElement extends LitElement {
19403
19403
  static get properties() {
@@ -19526,7 +19526,6 @@ class AuroDropdown extends AuroElement$2 {
19526
19526
  static get shadowRootOptions() {
19527
19527
  return {
19528
19528
  ...AuroElement$2.shadowRootOptions,
19529
- delegatesFocus: true,
19530
19529
  };
19531
19530
  }
19532
19531
 
@@ -19538,6 +19537,15 @@ class AuroDropdown extends AuroElement$2 {
19538
19537
  this.matchWidth = false;
19539
19538
  this.noHideOnThisFocusLoss = false;
19540
19539
 
19540
+ /**
19541
+ * When true, the dropdown skips its generic focus restoration on close.
19542
+ * Set by consumers (e.g. combobox) that manage their own focus routing
19543
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
19544
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
19545
+ * @private
19546
+ */
19547
+ this.noFocusRestoreOnClose = false;
19548
+
19541
19549
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
19542
19550
 
19543
19551
  // Layout Config
@@ -19693,7 +19701,49 @@ class AuroDropdown extends AuroElement$2 {
19693
19701
  focusables[0].focus();
19694
19702
  }
19695
19703
  } else {
19704
+ this.focusTrigger();
19705
+ }
19706
+ }
19707
+
19708
+ /**
19709
+ * Focus the trigger content. When the trigger wrapper itself is focusable
19710
+ * (has tabindex), focus it directly. Otherwise, focus the first focusable
19711
+ * element slotted into the trigger slot (e.g. the auro-input).
19712
+ * @private
19713
+ */
19714
+ focusTrigger() {
19715
+ if (this.trigger.hasAttribute('tabindex')) {
19696
19716
  this.trigger.focus();
19717
+ } else {
19718
+ // Slotted content isn't a DOM child of the trigger div, so
19719
+ // getFocusableElements can't find it. Query assigned nodes directly.
19720
+ const slot = this.trigger.querySelector('slot[name="trigger"]');
19721
+ if (slot) {
19722
+ const assigned = slot.assignedElements();
19723
+ for (const el of assigned) {
19724
+ if (el.hasAttribute('disabled')) {
19725
+ continue;
19726
+ }
19727
+ // Try finding a focusable descendant first (handles non-focusable
19728
+ // wrappers like <div> containing a <button>). If none found, try
19729
+ // focusing the element directly (works for custom elements like
19730
+ // auro-input that have delegatesFocus or a custom focus() method).
19731
+ const descendants = getFocusableElements(el);
19732
+ if (descendants.length > 0) {
19733
+ descendants[0].focus();
19734
+ return;
19735
+ }
19736
+ el.focus();
19737
+ if (document.activeElement === el) {
19738
+ return;
19739
+ }
19740
+ }
19741
+ }
19742
+ // Fallback: try DOM children (non-slotted content)
19743
+ const focusables = getFocusableElements(this.trigger);
19744
+ if (focusables.length > 0) {
19745
+ focusables[0].focus();
19746
+ }
19697
19747
  }
19698
19748
  }
19699
19749
 
@@ -20146,15 +20196,17 @@ class AuroDropdown extends AuroElement$2 {
20146
20196
  }
20147
20197
 
20148
20198
  const eventType = event.detail.eventType || "unknown";
20149
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
20150
- this.trigger.focus();
20199
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
20200
+ this.focusTrigger();
20151
20201
  }
20152
20202
 
20153
20203
 
20154
20204
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
20155
20205
  // — restoring to the trigger would trap the user on this dropdown, forcing
20156
20206
  // an extra Tab to move on. Escape and outside-click still restore.
20157
- if (!this.isPopoverVisible && eventType !== "focusloss") {
20207
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
20208
+ // its own focus restoration — skip the generic trigger focus to avoid races.
20209
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
20158
20210
  // wait til the bib gets fully closed and rendered
20159
20211
  setTimeout(() => {
20160
20212
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -20166,7 +20218,7 @@ class AuroDropdown extends AuroElement$2 {
20166
20218
  return;
20167
20219
  }
20168
20220
  // Restore focus to the trigger.
20169
- this.trigger.focus();
20221
+ this.focusTrigger();
20170
20222
  });
20171
20223
  }
20172
20224
  }
@@ -31340,9 +31392,10 @@ class DomHandler {
31340
31392
  class BaseInput extends AuroElement$1 {
31341
31393
 
31342
31394
  // Delegate focus to the native <input> inside the shadow root so that
31343
- // showModal()'s dialog focusing steps reach the input element.
31344
- // This keeps the mobile virtual keyboard open when the fullscreen dialog
31345
- // opens, because the browser sees an input-to-input focus transfer.
31395
+ // clicking anywhere on the input wrapper focuses the native input, and
31396
+ // programmatic .focus() calls on elements in the shadow DOM work correctly.
31397
+ // The initial-load focus theft was caused by the static `autofocus`
31398
+ // attribute on the bib input (now conditional), not by delegatesFocus.
31346
31399
  static get shadowRootOptions() {
31347
31400
  return {
31348
31401
  ...AuroElement$1.shadowRootOptions,
@@ -33019,7 +33072,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
33019
33072
  }
33020
33073
  };
33021
33074
 
33022
- var formkitVersion = '202607102309';
33075
+ var formkitVersion = '202607161943';
33023
33076
 
33024
33077
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
33025
33078
  // See LICENSE in the project root for license information.
@@ -33305,15 +33358,50 @@ class AuroInput extends BaseInput {
33305
33358
  * @returns {void}
33306
33359
  */
33307
33360
  checkDisplayValueSlotChange() {
33308
- // flatten:true resolves through auro-combobox's forwarding slot
33309
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
33310
- // directly to auro-input's light DOM alongside the forwarder still
33311
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
33312
- // discarded any siblings past the forwarder.
33313
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
33361
+ const slot = this.shadowRoot?.querySelector('slot[name="displayValue"]');
33362
+ if (!slot) {
33363
+ // Shadow slot not yet rendered fall back to checking light-DOM
33364
+ // children so hasDisplayValueContent isn't stuck false when called
33365
+ // before firstUpdated (e.g. from auro-combobox during mount).
33366
+ // Check for any element (including custom elements like <auro-icon>
33367
+ // that render via shadow DOM with no text content).
33368
+ const lightDomNodes = Array.from(this.querySelectorAll('[slot="displayValue"]:not(slot)'));
33369
+ const hasContent = lightDomNodes.some((node) => (
33370
+ node.textContent.trim().length > 0 ||
33371
+ node.children.length > 0 ||
33372
+ node.shadowRoot !== null
33373
+ ));
33374
+ if (this.hasDisplayValueContent !== hasContent) {
33375
+ this.hasDisplayValueContent = hasContent;
33376
+ this.requestUpdate();
33377
+ }
33378
+ return;
33379
+ }
33314
33380
  const nodes = slot.assignedNodes({ flatten: true });
33315
33381
 
33316
- this.hasDisplayValueContent = nodes.length > 0;
33382
+ // Check for actual visible content, not just node existence.
33383
+ // An empty <span slot="displayValue"></span> forwarded from the
33384
+ // consumer should not be treated as "has content" — it causes the
33385
+ // displayValue wrapper to render (with hasContent class) but show
33386
+ // nothing, blocking the combobox's synthetic displayValue from
33387
+ // being visible on preset/deeplink load.
33388
+ // Custom elements (e.g. <auro-icon>) that render via shadow DOM are
33389
+ // treated as content even when they have no text or light-DOM children.
33390
+ const hasContent = nodes.some((node) => {
33391
+ if (node.nodeType === Node.TEXT_NODE) {
33392
+ return node.textContent.trim().length > 0;
33393
+ }
33394
+ if (node.nodeType === Node.ELEMENT_NODE) {
33395
+ return node.textContent.trim().length > 0 ||
33396
+ node.children.length > 0 ||
33397
+ node.shadowRoot !== null;
33398
+ }
33399
+ return false;
33400
+ });
33401
+ if (this.hasDisplayValueContent !== hasContent) {
33402
+ this.hasDisplayValueContent = hasContent;
33403
+ this.requestUpdate();
33404
+ }
33317
33405
  }
33318
33406
 
33319
33407
  firstUpdated() {
@@ -3777,7 +3777,7 @@ class AuroHelpText extends i {
3777
3777
  }
3778
3778
  }
3779
3779
 
3780
- var formkitVersion = '202607102309';
3780
+ var formkitVersion = '202607161943';
3781
3781
 
3782
3782
  class AuroElement extends i {
3783
3783
  static get properties() {
@@ -3906,7 +3906,6 @@ class AuroDropdown extends AuroElement {
3906
3906
  static get shadowRootOptions() {
3907
3907
  return {
3908
3908
  ...AuroElement.shadowRootOptions,
3909
- delegatesFocus: true,
3910
3909
  };
3911
3910
  }
3912
3911
 
@@ -3918,6 +3917,15 @@ class AuroDropdown extends AuroElement {
3918
3917
  this.matchWidth = false;
3919
3918
  this.noHideOnThisFocusLoss = false;
3920
3919
 
3920
+ /**
3921
+ * When true, the dropdown skips its generic focus restoration on close.
3922
+ * Set by consumers (e.g. combobox) that manage their own focus routing
3923
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
3924
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
3925
+ * @private
3926
+ */
3927
+ this.noFocusRestoreOnClose = false;
3928
+
3921
3929
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
3922
3930
 
3923
3931
  // Layout Config
@@ -4073,7 +4081,49 @@ class AuroDropdown extends AuroElement {
4073
4081
  focusables[0].focus();
4074
4082
  }
4075
4083
  } else {
4084
+ this.focusTrigger();
4085
+ }
4086
+ }
4087
+
4088
+ /**
4089
+ * Focus the trigger content. When the trigger wrapper itself is focusable
4090
+ * (has tabindex), focus it directly. Otherwise, focus the first focusable
4091
+ * element slotted into the trigger slot (e.g. the auro-input).
4092
+ * @private
4093
+ */
4094
+ focusTrigger() {
4095
+ if (this.trigger.hasAttribute('tabindex')) {
4076
4096
  this.trigger.focus();
4097
+ } else {
4098
+ // Slotted content isn't a DOM child of the trigger div, so
4099
+ // getFocusableElements can't find it. Query assigned nodes directly.
4100
+ const slot = this.trigger.querySelector('slot[name="trigger"]');
4101
+ if (slot) {
4102
+ const assigned = slot.assignedElements();
4103
+ for (const el of assigned) {
4104
+ if (el.hasAttribute('disabled')) {
4105
+ continue;
4106
+ }
4107
+ // Try finding a focusable descendant first (handles non-focusable
4108
+ // wrappers like <div> containing a <button>). If none found, try
4109
+ // focusing the element directly (works for custom elements like
4110
+ // auro-input that have delegatesFocus or a custom focus() method).
4111
+ const descendants = getFocusableElements(el);
4112
+ if (descendants.length > 0) {
4113
+ descendants[0].focus();
4114
+ return;
4115
+ }
4116
+ el.focus();
4117
+ if (document.activeElement === el) {
4118
+ return;
4119
+ }
4120
+ }
4121
+ }
4122
+ // Fallback: try DOM children (non-slotted content)
4123
+ const focusables = getFocusableElements(this.trigger);
4124
+ if (focusables.length > 0) {
4125
+ focusables[0].focus();
4126
+ }
4077
4127
  }
4078
4128
  }
4079
4129
 
@@ -4526,15 +4576,17 @@ class AuroDropdown extends AuroElement {
4526
4576
  }
4527
4577
 
4528
4578
  const eventType = event.detail.eventType || "unknown";
4529
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
4530
- this.trigger.focus();
4579
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
4580
+ this.focusTrigger();
4531
4581
  }
4532
4582
 
4533
4583
 
4534
4584
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
4535
4585
  // — restoring to the trigger would trap the user on this dropdown, forcing
4536
4586
  // an extra Tab to move on. Escape and outside-click still restore.
4537
- if (!this.isPopoverVisible && eventType !== "focusloss") {
4587
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
4588
+ // its own focus restoration — skip the generic trigger focus to avoid races.
4589
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
4538
4590
  // wait til the bib gets fully closed and rendered
4539
4591
  setTimeout(() => {
4540
4592
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -4546,7 +4598,7 @@ class AuroDropdown extends AuroElement {
4546
4598
  return;
4547
4599
  }
4548
4600
  // Restore focus to the trigger.
4549
- this.trigger.focus();
4601
+ this.focusTrigger();
4550
4602
  });
4551
4603
  }
4552
4604
  }
@@ -3777,7 +3777,7 @@ class AuroHelpText extends i {
3777
3777
  }
3778
3778
  }
3779
3779
 
3780
- var formkitVersion = '202607102309';
3780
+ var formkitVersion = '202607161943';
3781
3781
 
3782
3782
  class AuroElement extends i {
3783
3783
  static get properties() {
@@ -3906,7 +3906,6 @@ class AuroDropdown extends AuroElement {
3906
3906
  static get shadowRootOptions() {
3907
3907
  return {
3908
3908
  ...AuroElement.shadowRootOptions,
3909
- delegatesFocus: true,
3910
3909
  };
3911
3910
  }
3912
3911
 
@@ -3918,6 +3917,15 @@ class AuroDropdown extends AuroElement {
3918
3917
  this.matchWidth = false;
3919
3918
  this.noHideOnThisFocusLoss = false;
3920
3919
 
3920
+ /**
3921
+ * When true, the dropdown skips its generic focus restoration on close.
3922
+ * Set by consumers (e.g. combobox) that manage their own focus routing
3923
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
3924
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
3925
+ * @private
3926
+ */
3927
+ this.noFocusRestoreOnClose = false;
3928
+
3921
3929
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
3922
3930
 
3923
3931
  // Layout Config
@@ -4073,7 +4081,49 @@ class AuroDropdown extends AuroElement {
4073
4081
  focusables[0].focus();
4074
4082
  }
4075
4083
  } else {
4084
+ this.focusTrigger();
4085
+ }
4086
+ }
4087
+
4088
+ /**
4089
+ * Focus the trigger content. When the trigger wrapper itself is focusable
4090
+ * (has tabindex), focus it directly. Otherwise, focus the first focusable
4091
+ * element slotted into the trigger slot (e.g. the auro-input).
4092
+ * @private
4093
+ */
4094
+ focusTrigger() {
4095
+ if (this.trigger.hasAttribute('tabindex')) {
4076
4096
  this.trigger.focus();
4097
+ } else {
4098
+ // Slotted content isn't a DOM child of the trigger div, so
4099
+ // getFocusableElements can't find it. Query assigned nodes directly.
4100
+ const slot = this.trigger.querySelector('slot[name="trigger"]');
4101
+ if (slot) {
4102
+ const assigned = slot.assignedElements();
4103
+ for (const el of assigned) {
4104
+ if (el.hasAttribute('disabled')) {
4105
+ continue;
4106
+ }
4107
+ // Try finding a focusable descendant first (handles non-focusable
4108
+ // wrappers like <div> containing a <button>). If none found, try
4109
+ // focusing the element directly (works for custom elements like
4110
+ // auro-input that have delegatesFocus or a custom focus() method).
4111
+ const descendants = getFocusableElements(el);
4112
+ if (descendants.length > 0) {
4113
+ descendants[0].focus();
4114
+ return;
4115
+ }
4116
+ el.focus();
4117
+ if (document.activeElement === el) {
4118
+ return;
4119
+ }
4120
+ }
4121
+ }
4122
+ // Fallback: try DOM children (non-slotted content)
4123
+ const focusables = getFocusableElements(this.trigger);
4124
+ if (focusables.length > 0) {
4125
+ focusables[0].focus();
4126
+ }
4077
4127
  }
4078
4128
  }
4079
4129
 
@@ -4526,15 +4576,17 @@ class AuroDropdown extends AuroElement {
4526
4576
  }
4527
4577
 
4528
4578
  const eventType = event.detail.eventType || "unknown";
4529
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
4530
- this.trigger.focus();
4579
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
4580
+ this.focusTrigger();
4531
4581
  }
4532
4582
 
4533
4583
 
4534
4584
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
4535
4585
  // — restoring to the trigger would trap the user on this dropdown, forcing
4536
4586
  // an extra Tab to move on. Escape and outside-click still restore.
4537
- if (!this.isPopoverVisible && eventType !== "focusloss") {
4587
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
4588
+ // its own focus restoration — skip the generic trigger focus to avoid races.
4589
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
4538
4590
  // wait til the bib gets fully closed and rendered
4539
4591
  setTimeout(() => {
4540
4592
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -4546,7 +4598,7 @@ class AuroDropdown extends AuroElement {
4546
4598
  return;
4547
4599
  }
4548
4600
  // Restore focus to the trigger.
4549
- this.trigger.focus();
4601
+ this.focusTrigger();
4550
4602
  });
4551
4603
  }
4552
4604
  }
@@ -3804,7 +3804,7 @@ class AuroHelpText extends i {
3804
3804
  }
3805
3805
  }
3806
3806
 
3807
- var formkitVersion = '202607102309';
3807
+ var formkitVersion = '202607161943';
3808
3808
 
3809
3809
  class AuroElement extends i {
3810
3810
  static get properties() {
@@ -3933,7 +3933,6 @@ class AuroDropdown extends AuroElement {
3933
3933
  static get shadowRootOptions() {
3934
3934
  return {
3935
3935
  ...AuroElement.shadowRootOptions,
3936
- delegatesFocus: true,
3937
3936
  };
3938
3937
  }
3939
3938
 
@@ -3945,6 +3944,15 @@ class AuroDropdown extends AuroElement {
3945
3944
  this.matchWidth = false;
3946
3945
  this.noHideOnThisFocusLoss = false;
3947
3946
 
3947
+ /**
3948
+ * When true, the dropdown skips its generic focus restoration on close.
3949
+ * Set by consumers (e.g. combobox) that manage their own focus routing
3950
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
3951
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
3952
+ * @private
3953
+ */
3954
+ this.noFocusRestoreOnClose = false;
3955
+
3948
3956
  this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
3949
3957
 
3950
3958
  // Layout Config
@@ -4100,7 +4108,49 @@ class AuroDropdown extends AuroElement {
4100
4108
  focusables[0].focus();
4101
4109
  }
4102
4110
  } else {
4111
+ this.focusTrigger();
4112
+ }
4113
+ }
4114
+
4115
+ /**
4116
+ * Focus the trigger content. When the trigger wrapper itself is focusable
4117
+ * (has tabindex), focus it directly. Otherwise, focus the first focusable
4118
+ * element slotted into the trigger slot (e.g. the auro-input).
4119
+ * @private
4120
+ */
4121
+ focusTrigger() {
4122
+ if (this.trigger.hasAttribute('tabindex')) {
4103
4123
  this.trigger.focus();
4124
+ } else {
4125
+ // Slotted content isn't a DOM child of the trigger div, so
4126
+ // getFocusableElements can't find it. Query assigned nodes directly.
4127
+ const slot = this.trigger.querySelector('slot[name="trigger"]');
4128
+ if (slot) {
4129
+ const assigned = slot.assignedElements();
4130
+ for (const el of assigned) {
4131
+ if (el.hasAttribute('disabled')) {
4132
+ continue;
4133
+ }
4134
+ // Try finding a focusable descendant first (handles non-focusable
4135
+ // wrappers like <div> containing a <button>). If none found, try
4136
+ // focusing the element directly (works for custom elements like
4137
+ // auro-input that have delegatesFocus or a custom focus() method).
4138
+ const descendants = getFocusableElements(el);
4139
+ if (descendants.length > 0) {
4140
+ descendants[0].focus();
4141
+ return;
4142
+ }
4143
+ el.focus();
4144
+ if (document.activeElement === el) {
4145
+ return;
4146
+ }
4147
+ }
4148
+ }
4149
+ // Fallback: try DOM children (non-slotted content)
4150
+ const focusables = getFocusableElements(this.trigger);
4151
+ if (focusables.length > 0) {
4152
+ focusables[0].focus();
4153
+ }
4104
4154
  }
4105
4155
  }
4106
4156
 
@@ -4553,15 +4603,17 @@ class AuroDropdown extends AuroElement {
4553
4603
  }
4554
4604
 
4555
4605
  const eventType = event.detail.eventType || "unknown";
4556
- if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
4557
- this.trigger.focus();
4606
+ if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
4607
+ this.focusTrigger();
4558
4608
  }
4559
4609
 
4560
4610
 
4561
4611
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
4562
4612
  // — restoring to the trigger would trap the user on this dropdown, forcing
4563
4613
  // an extra Tab to move on. Escape and outside-click still restore.
4564
- if (!this.isPopoverVisible && eventType !== "focusloss") {
4614
+ // When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
4615
+ // its own focus restoration — skip the generic trigger focus to avoid races.
4616
+ if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
4565
4617
  // wait til the bib gets fully closed and rendered
4566
4618
  setTimeout(() => {
4567
4619
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -4573,7 +4625,7 @@ class AuroDropdown extends AuroElement {
4573
4625
  return;
4574
4626
  }
4575
4627
  // Restore focus to the trigger.
4576
- this.trigger.focus();
4628
+ this.focusTrigger();
4577
4629
  });
4578
4630
  }
4579
4631
  }
@@ -15,9 +15,9 @@
15
15
  */
16
16
  export class AuroDropdown extends AuroElement {
17
17
  static get shadowRootOptions(): {
18
- delegatesFocus: boolean;
19
18
  clonable?: boolean;
20
19
  customElementRegistry?: CustomElementRegistry | null;
20
+ delegatesFocus?: boolean;
21
21
  mode: ShadowRootMode;
22
22
  serializable?: boolean;
23
23
  slotAssignment?: SlotAssignmentMode;
@@ -267,6 +267,14 @@ export class AuroDropdown extends AuroElement {
267
267
  isBibFullscreen: boolean;
268
268
  matchWidth: boolean;
269
269
  noHideOnThisFocusLoss: boolean;
270
+ /**
271
+ * When true, the dropdown skips its generic focus restoration on close.
272
+ * Set by consumers (e.g. combobox) that manage their own focus routing
273
+ * via setClearBtnFocus / setInputFocus / keyboard strategy.
274
+ * Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
275
+ * @private
276
+ */
277
+ private noFocusRestoreOnClose;
270
278
  errorMessage: any;
271
279
  layout: any;
272
280
  shape: any;
@@ -366,6 +374,13 @@ export class AuroDropdown extends AuroElement {
366
374
  * If not, trigger element will get focus.
367
375
  */
368
376
  focus(): void;
377
+ /**
378
+ * Focus the trigger content. When the trigger wrapper itself is focusable
379
+ * (has tabindex), focus it directly. Otherwise, focus the first focusable
380
+ * element slotted into the trigger slot (e.g. the auro-input).
381
+ * @private
382
+ */
383
+ private focusTrigger;
369
384
  /**
370
385
  * Sets the active descendant element for accessibility.
371
386
  * Uses ariaActiveDescendantElement to cross shadow DOM boundaries.