@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.
- package/CHANGELOG.md +5 -240
- package/components/checkbox/demo/customize.min.js +1 -1
- package/components/checkbox/demo/getting-started.min.js +1 -1
- package/components/checkbox/demo/index.min.js +1 -1
- package/components/checkbox/dist/index.js +1 -1
- package/components/checkbox/dist/registered.js +1 -1
- package/components/combobox/demo/customize.min.js +172 -46
- package/components/combobox/demo/getting-started.min.js +172 -46
- package/components/combobox/demo/index.min.js +172 -46
- package/components/combobox/dist/index.js +172 -46
- package/components/combobox/dist/registered.js +172 -46
- package/components/counter/demo/customize.min.js +59 -7
- package/components/counter/demo/index.min.js +59 -7
- package/components/counter/dist/index.js +59 -7
- package/components/counter/dist/registered.js +59 -7
- package/components/datepicker/demo/customize.min.js +106 -18
- package/components/datepicker/demo/index.min.js +106 -18
- package/components/datepicker/dist/index.js +106 -18
- package/components/datepicker/dist/registered.js +106 -18
- package/components/dropdown/demo/customize.min.js +58 -6
- package/components/dropdown/demo/getting-started.min.js +58 -6
- package/components/dropdown/demo/index.min.js +58 -6
- package/components/dropdown/dist/auro-dropdown.d.ts +16 -1
- package/components/dropdown/dist/index.js +58 -6
- package/components/dropdown/dist/registered.js +58 -6
- package/components/form/demo/customize.min.js +445 -91
- package/components/form/demo/getting-started.min.js +445 -91
- package/components/form/demo/index.min.js +445 -91
- package/components/form/demo/registerDemoDeps.min.js +445 -91
- package/components/input/demo/customize.min.js +47 -11
- package/components/input/demo/getting-started.min.js +47 -11
- package/components/input/demo/index.min.js +47 -11
- package/components/input/dist/index.js +47 -11
- package/components/input/dist/registered.js +47 -11
- package/components/radio/demo/customize.min.js +1 -1
- package/components/radio/demo/getting-started.min.js +1 -1
- package/components/radio/demo/index.min.js +1 -1
- package/components/radio/dist/index.js +1 -1
- package/components/radio/dist/registered.js +1 -1
- package/components/select/demo/customize.min.js +59 -7
- package/components/select/demo/getting-started.min.js +59 -7
- package/components/select/demo/index.min.js +59 -7
- package/components/select/dist/index.js +59 -7
- package/components/select/dist/registered.js +59 -7
- package/custom-elements.json +1500 -1484
- package/package.json +1 -1
|
@@ -13669,7 +13669,7 @@ class AuroBibtemplate extends LitElement {
|
|
|
13669
13669
|
}
|
|
13670
13670
|
}
|
|
13671
13671
|
|
|
13672
|
-
var formkitVersion$2 = '
|
|
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 = '
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
-
//
|
|
31344
|
-
//
|
|
31345
|
-
//
|
|
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 = '
|
|
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
|
-
|
|
33309
|
-
|
|
33310
|
-
|
|
33311
|
-
|
|
33312
|
-
|
|
33313
|
-
|
|
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
|
-
|
|
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 = '
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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 = '
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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 = '
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|