@aurodesignsystem-dev/auro-formkit 0.0.0-pr1498.0 → 0.0.0-pr1499.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 (62) hide show
  1. package/components/checkbox/demo/customize.min.js +2 -2
  2. package/components/checkbox/demo/getting-started.min.js +2 -2
  3. package/components/checkbox/demo/index.min.js +2 -2
  4. package/components/checkbox/dist/index.js +2 -2
  5. package/components/checkbox/dist/registered.js +2 -2
  6. package/components/combobox/demo/customize.md +3 -7
  7. package/components/combobox/demo/customize.min.js +1705 -1459
  8. package/components/combobox/demo/getting-started.min.js +1705 -1459
  9. package/components/combobox/demo/index.min.js +1705 -1459
  10. package/components/combobox/dist/auro-combobox.d.ts +0 -5
  11. package/components/combobox/dist/index.js +162 -491
  12. package/components/combobox/dist/registered.js +162 -491
  13. package/components/counter/demo/customize.min.js +19 -18
  14. package/components/counter/demo/index.min.js +19 -18
  15. package/components/counter/dist/index.js +187 -5442
  16. package/components/counter/dist/registered.js +187 -5442
  17. package/components/datepicker/demo/customize.md +477 -384
  18. package/components/datepicker/demo/customize.min.js +96 -161
  19. package/components/datepicker/demo/index.md +0 -1
  20. package/components/datepicker/demo/index.min.js +96 -161
  21. package/components/datepicker/dist/index.js +96 -161
  22. package/components/datepicker/dist/registered.js +96 -161
  23. package/components/datepicker/dist/src/auro-datepicker.d.ts +2 -2
  24. package/components/dropdown/demo/customize.min.js +17 -16
  25. package/components/dropdown/demo/getting-started.min.js +17 -16
  26. package/components/dropdown/demo/index.min.js +17 -16
  27. package/components/dropdown/dist/auro-dropdown.d.ts +2 -1
  28. package/components/dropdown/dist/index.js +17 -16
  29. package/components/dropdown/dist/registered.js +17 -16
  30. package/components/form/demo/customize.min.js +7965 -7884
  31. package/components/form/demo/getting-started.min.js +7965 -7884
  32. package/components/form/demo/index.min.js +7965 -7884
  33. package/components/form/demo/registerDemoDeps.min.js +7934 -7853
  34. package/components/input/demo/customize.md +539 -472
  35. package/components/input/demo/customize.min.js +61 -132
  36. package/components/input/demo/getting-started.min.js +61 -132
  37. package/components/input/demo/index.min.js +61 -132
  38. package/components/input/dist/base-input.d.ts +0 -16
  39. package/components/input/dist/index.js +61 -132
  40. package/components/input/dist/registered.js +61 -132
  41. package/components/menu/demo/api.md +45 -41
  42. package/components/menu/demo/customize.md +28 -0
  43. package/components/menu/demo/index.min.js +1358 -783
  44. package/components/menu/dist/auro-menu.context.d.ts +238 -0
  45. package/components/menu/dist/auro-menu.d.ts +110 -95
  46. package/components/menu/dist/auro-menuoption.d.ts +138 -32
  47. package/components/menu/dist/index.js +1312 -757
  48. package/components/menu/dist/registered.js +1312 -769
  49. package/components/radio/demo/customize.min.js +2 -2
  50. package/components/radio/demo/getting-started.min.js +2 -2
  51. package/components/radio/demo/index.min.js +2 -2
  52. package/components/radio/dist/index.js +2 -2
  53. package/components/radio/dist/registered.js +2 -2
  54. package/components/select/demo/customize.md +3 -7
  55. package/components/select/demo/customize.min.js +1634 -1089
  56. package/components/select/demo/getting-started.min.js +1634 -1089
  57. package/components/select/demo/index.min.js +1634 -1089
  58. package/components/select/dist/index.js +31 -61
  59. package/components/select/dist/registered.js +31 -61
  60. package/custom-elements.json +2085 -1439
  61. package/package.json +1 -1
  62. package/components/select/dist/selectUtils.d.ts +0 -12
@@ -747,7 +747,7 @@ let AuroFormValidation$1 = class AuroFormValidation {
747
747
  } else if (this.runtimeUtils.elementMatch(elem, 'auro-input') && elem.errorMessage === '') {
748
748
  const input = elem.renderRoot.querySelector('input');
749
749
 
750
- if (input && input.validationMessage.length > 0) {
750
+ if (input.validationMessage.length > 0) {
751
751
  elem.errorMessage = input.validationMessage;
752
752
  }
753
753
  } else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox') && elem.errorMessage === '') {
@@ -10342,7 +10342,11 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10342
10342
  return part.value;
10343
10343
  }
10344
10344
  })
10345
- .join("");
10345
+ .join("")
10346
+ // Remove whitespace and leading/trailing special characters for IMask compatibility
10347
+ // for example, ko-KR's format is `YYYY. MM. DD.` which causes issues with IMask if we don't remove the trailing period.
10348
+ .replace(/\s/gu, '')
10349
+ .replace(/^[^A-Z0-9]+|[^A-Z0-9]+$/gu, '');
10346
10350
  }
10347
10351
 
10348
10352
  /**
@@ -10507,6 +10511,7 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10507
10511
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
10508
10512
 
10509
10513
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
10514
+ console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
10510
10515
  return undefined;
10511
10516
  }
10512
10517
 
@@ -10726,8 +10731,8 @@ class UtilitiesCalendarRender {
10726
10731
  <auro-formkit-calendar-month
10727
10732
  id="${`month-${month}-${year}`}"
10728
10733
  .disabledDays="${elem.disabledDays}"
10729
- .min="${elem.min}"
10730
- .max="${elem.max}"
10734
+ .min="${elem.minDateObject?.getTime() / 1000}"
10735
+ .max="${elem.maxDateObject?.getTime() / 1000}"
10731
10736
  ?noRange="${elem.noRange}"
10732
10737
  .monthFirst="${elem.monthFirst}"
10733
10738
  .dateTo="${elem.dateTo}"
@@ -13388,7 +13393,7 @@ class AuroBibtemplate extends LitElement {
13388
13393
  }
13389
13394
  }
13390
13395
 
13391
- var formkitVersion$2 = '202606100232';
13396
+ var formkitVersion$2 = '202606101857';
13392
13397
 
13393
13398
  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}
13394
13399
  `,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}}
@@ -18901,7 +18906,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
18901
18906
  }
18902
18907
  };
18903
18908
 
18904
- var formkitVersion$1 = '202606100232';
18909
+ var formkitVersion$1 = '202606101857';
18905
18910
 
18906
18911
  let AuroElement$2 = class AuroElement extends LitElement {
18907
18912
  static get properties() {
@@ -19759,18 +19764,27 @@ class AuroDropdown extends AuroElement$2 {
19759
19764
  this.focusTrap = undefined;
19760
19765
  }
19761
19766
 
19762
- // Restore any focus-loss suppression we installed for a prior trap state.
19763
- // The desktopModal trap moves focus into the bib via RAF, which would
19764
- // otherwise trip AuroFloatingUI.handleFocusLoss (a popover-top-layer
19765
- // timing issue makes its :focus-within guard miss the focused button).
19766
- if (this._priorNoHideOnFocusLoss !== undefined) {
19767
- this.noHideOnThisFocusLoss = this._priorNoHideOnFocusLoss;
19768
- this._priorNoHideOnFocusLoss = undefined;
19767
+ // Restore the user-set noHideOnThisFocusLoss value, if we overrode it.
19768
+ if (this._noHideOverridden) {
19769
+ this.noHideOnThisFocusLoss = this._priorNoHide;
19770
+ this._noHideOverridden = false;
19771
+ this._priorNoHide = undefined;
19769
19772
  }
19770
19773
 
19771
19774
  if (this.isPopoverVisible) {
19772
19775
  if (!this.isBibFullscreen) {
19773
19776
  if (this.desktopModal) {
19777
+ // The floater's focus-loss check uses :focus-within, which does not
19778
+ // match the host when focus is on a slotted element projected through
19779
+ // multiple shadow roots. Without this override, focusing a button
19780
+ // inside the bib would be misread as focus leaving the dropdown and
19781
+ // close the bib immediately. desktopModal traps focus inside the
19782
+ // bib and inerts siblings, so suppressing focus-loss dismissal here
19783
+ // is safe — Escape and outside-click still close the bib.
19784
+ this._priorNoHide = this.noHideOnThisFocusLoss;
19785
+ this._noHideOverridden = true;
19786
+ this.noHideOnThisFocusLoss = true;
19787
+
19774
19788
  // Desktop modal: trap focus only within the bib content.
19775
19789
  // Can't use FocusTrap on the bib element because keydown events
19776
19790
  // from slotted content bubble through the dropdown host (light DOM),
@@ -19843,14 +19857,6 @@ class AuroDropdown extends AuroElement$2 {
19843
19857
  };
19844
19858
  this.addEventListener('keydown', this._bibTabHandler);
19845
19859
 
19846
- // Suppress AuroFloatingUI's auto-hide-on-focus-loss while the
19847
- // desktopModal trap owns focus management. Without this, the very
19848
- // first focus move into the bib (from the RAF below) triggers
19849
- // handleFocusLoss → hideBib, tearing down the trap before the
19850
- // user can press Tab.
19851
- this._priorNoHideOnFocusLoss = this.noHideOnThisFocusLoss;
19852
- this.noHideOnThisFocusLoss = true;
19853
-
19854
19860
  // Move initial focus into the bib content, matching FocusTrap behavior
19855
19861
  requestAnimationFrame(() => {
19856
19862
  const focusables = getFocusableElements(this.bibContent);
@@ -24773,7 +24779,7 @@ class AuroFormValidation {
24773
24779
  } else if (this.runtimeUtils.elementMatch(elem, 'auro-input') && elem.errorMessage === '') {
24774
24780
  const input = elem.renderRoot.querySelector('input');
24775
24781
 
24776
- if (input && input.validationMessage.length > 0) {
24782
+ if (input.validationMessage.length > 0) {
24777
24783
  elem.errorMessage = input.validationMessage;
24778
24784
  }
24779
24785
  } else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox') && elem.errorMessage === '') {
@@ -30445,7 +30451,11 @@ class AuroInputUtilities {
30445
30451
  return part.value;
30446
30452
  }
30447
30453
  })
30448
- .join("");
30454
+ .join("")
30455
+ // Remove whitespace and leading/trailing special characters for IMask compatibility
30456
+ // for example, ko-KR's format is `YYYY. MM. DD.` which causes issues with IMask if we don't remove the trailing period.
30457
+ .replace(/\s/gu, '')
30458
+ .replace(/^[^A-Z0-9]+|[^A-Z0-9]+$/gu, '');
30449
30459
  }
30450
30460
 
30451
30461
  /**
@@ -30610,6 +30620,7 @@ class AuroInputUtilities {
30610
30620
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
30611
30621
 
30612
30622
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
30623
+ console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
30613
30624
  return undefined;
30614
30625
  }
30615
30626
 
@@ -31312,7 +31323,7 @@ class BaseInput extends AuroElement$1 {
31312
31323
  * @returns {Date|undefined}
31313
31324
  */
31314
31325
  get valueObject() {
31315
- return this._valueObject || this._computeDateObjectFallback(this.value);
31326
+ return this._valueObject;
31316
31327
  }
31317
31328
 
31318
31329
  /**
@@ -31320,7 +31331,7 @@ class BaseInput extends AuroElement$1 {
31320
31331
  * @returns {Date|undefined}
31321
31332
  */
31322
31333
  get minObject() {
31323
- return this._minObject || this._computeDateObjectFallback(this.min);
31334
+ return this._minObject;
31324
31335
  }
31325
31336
 
31326
31337
  /**
@@ -31328,31 +31339,7 @@ class BaseInput extends AuroElement$1 {
31328
31339
  * @returns {Date|undefined}
31329
31340
  */
31330
31341
  get maxObject() {
31331
- return this._maxObject || this._computeDateObjectFallback(this.max);
31332
- }
31333
-
31334
- /**
31335
- * Parses a date string into a Date object when the corresponding `_*Object`
31336
- * field hasn't been synced yet by `updated()`. Returns undefined when the
31337
- * input type/format isn't a full date or the string is not a valid date.
31338
- *
31339
- * Why this exists: a parent (datepicker) can call `inputN.validate()` from
31340
- * inside its own `updated()` before this input's `updated()` has run
31341
- * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
31342
- * and range checks would otherwise silently no-op (flipping the result to
31343
- * `valid` or `patternMismatch`).
31344
- * @private
31345
- * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
31346
- * @returns {Date|undefined}
31347
- */
31348
- _computeDateObjectFallback(dateStr) {
31349
- if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
31350
- return undefined;
31351
- }
31352
- if (!dateFormatter.isValidDate(dateStr)) {
31353
- return undefined;
31354
- }
31355
- return dateFormatter.stringToDateInstance(dateStr);
31342
+ return this._maxObject;
31356
31343
  }
31357
31344
 
31358
31345
  /**
@@ -31377,30 +31364,8 @@ class BaseInput extends AuroElement$1 {
31377
31364
  connectedCallback() {
31378
31365
  super.connectedCallback();
31379
31366
 
31380
- // Mark for query selectors when registered under a versioned tag (e.g. inside
31381
- // a datepicker/combobox). Must run before parent components call validate() on
31382
- // their inner inputs — the validation framework matches via tag-or-attribute,
31383
- // and parents trigger validation during their own updated() cycle, which can
31384
- // precede this input's firstUpdated().
31385
- if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
31386
- this.setAttribute('auro-input', '');
31387
- }
31388
-
31389
31367
  this.locale = this.domHandler.getLocale(this);
31390
31368
  notifyOnLangChange(this);
31391
-
31392
- // Pre-compute lengthForType and date-object fields so a parent (e.g. datepicker)
31393
- // calling our validate() synchronously during its own updated() cycle sees
31394
- // populated values. Without this, range validation silently no-ops because
31395
- // `max.length === lengthForType` fails when lengthForType is still undefined.
31396
- // Rebuild util here (constructor seeded with en-US default) so configureDataForType's
31397
- // locale-derived format lookup uses the actual locale just resolved above.
31398
- this.util = new AuroInputUtilities({
31399
- locale: this.locale,
31400
- format: this.format
31401
- });
31402
- this.configureDataForType();
31403
- this.syncDateValues();
31404
31369
  }
31405
31370
 
31406
31371
  disconnectedCallback() {
@@ -31421,8 +31386,8 @@ class BaseInput extends AuroElement$1 {
31421
31386
  }
31422
31387
 
31423
31388
  // add attribute for query selectors when auro-input is registered under a custom name
31424
- if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
31425
- this.setAttribute('auro-input', '');
31389
+ if (this.tagName.toLowerCase() !== 'auro-input') {
31390
+ this.setAttribute('auro-input', true);
31426
31391
  }
31427
31392
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
31428
31393
 
@@ -31470,12 +31435,6 @@ class BaseInput extends AuroElement$1 {
31470
31435
  return;
31471
31436
  }
31472
31437
 
31473
- // While configureAutoFormatting is running, imask's internal updateControl
31474
- // writes el.value to align display with the masked value. A synthetic input
31475
- // event from that write would re-enter handleInput → processCreditCard mid-setup
31476
- // and clobber a Lit value that was just pushed by the parent combobox.
31477
- if (component._configuringMask) return;
31478
-
31479
31438
  // If all guard clauses are passed, dispatch the event
31480
31439
  const inputEvent = new InputEvent('input', {
31481
31440
  bubbles: true,
@@ -31594,16 +31553,7 @@ class BaseInput extends AuroElement$1 {
31594
31553
 
31595
31554
  if (formattedValue !== this.inputElement.value) {
31596
31555
  this.skipNextProgrammaticInputEvent = true;
31597
- if (this.maskInstance && this.type === 'credit-card') {
31598
- // Route through the mask so its _value and el.value stay in lock-step
31599
- // (set value calls updateControl which writes el.value = displayValue).
31600
- // Writing el.value directly leaves the mask thinking displayValue is
31601
- // stale; _saveSelection on the next focus/click then warns. Scoped to
31602
- // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
31603
- // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
31604
- // and flip validity from patternMismatch to tooShort.
31605
- this.maskInstance.value = formattedValue || '';
31606
- } else if (formattedValue) {
31556
+ if (formattedValue) {
31607
31557
  this.inputElement.value = formattedValue;
31608
31558
  } else {
31609
31559
  this.inputElement.value = '';
@@ -31712,73 +31662,58 @@ class BaseInput extends AuroElement$1 {
31712
31662
  * @returns {void}
31713
31663
  */
31714
31664
  configureAutoFormatting() {
31715
- // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
31716
- // by _configuringMask above) could otherwise trigger handleInput →
31717
- // processCreditCard → configureAutoFormatting before the outer call's
31718
- // set value has finished its alignCursor pass.
31719
- if (this._configuringMask) return;
31720
- this._configuringMask = true;
31721
- try {
31722
- if (this.maskInstance) {
31723
- this.maskInstance.destroy();
31724
- }
31665
+ if (this.maskInstance) {
31666
+ this.maskInstance.destroy();
31667
+ }
31725
31668
 
31726
- // Pass new format to util
31727
- this.util.updateFormat(this.format);
31669
+ // Pass new format to util
31670
+ this.util.updateFormat(this.format);
31728
31671
 
31729
- const maskOptions = this.util.getMaskOptions(this.type, this.format);
31672
+ const maskOptions = this.util.getMaskOptions(this.type, this.format);
31730
31673
 
31731
- if (this.inputElement && maskOptions.mask) {
31674
+ if (this.inputElement && maskOptions.mask) {
31732
31675
 
31733
- // Stash and clear any existing value before IMask init.
31734
- // IMask's constructor processes the current input value which requires
31735
- // selection state — clearing first avoids that scenario entirely.
31736
- // When the format changes (e.g. locale switch) and we have a valid ISO
31737
- // model value, compute the display string for the NEW format instead of
31738
- // re-using the old display string, which may be invalid in the new mask.
31739
- let existingValue = this.inputElement.value;
31740
- if (
31741
- this.util.isFullDateFormat(this.type, this.format) &&
31742
- this.value &&
31743
- dateFormatter.isValidDate(this.value) &&
31744
- this.valueObject instanceof Date &&
31745
- !Number.isNaN(this.valueObject.getTime()) &&
31746
- typeof maskOptions.format === 'function'
31747
- ) {
31748
- existingValue = maskOptions.format(this.valueObject);
31749
- }
31676
+ // Stash and clear any existing value before IMask init.
31677
+ // IMask's constructor processes the current input value which requires
31678
+ // selection state — clearing first avoids that scenario entirely.
31679
+ // When the format changes (e.g. locale switch) and we have a valid ISO
31680
+ // model value, compute the display string for the NEW format instead of
31681
+ // re-using the old display string, which may be invalid in the new mask.
31682
+ let existingValue = this.inputElement.value;
31683
+ if (
31684
+ this.util.isFullDateFormat(this.type, this.format) &&
31685
+ this.value &&
31686
+ dateFormatter.isValidDate(this.value) &&
31687
+ this.valueObject instanceof Date &&
31688
+ !Number.isNaN(this.valueObject.getTime()) &&
31689
+ typeof maskOptions.format === 'function'
31690
+ ) {
31691
+ existingValue = maskOptions.format(this.valueObject);
31692
+ }
31750
31693
 
31751
- this.skipNextProgrammaticInputEvent = true;
31752
- this.inputElement.value = '';
31753
-
31754
- this.maskInstance = IMask(this.inputElement, maskOptions);
31755
-
31756
- this.maskInstance.on('accept', () => {
31757
- // Suppress propagation during configureAutoFormatting's own value-restoration
31758
- // (line below) — the mask emits 'accept' on every value-set, including ours,
31759
- // and we don't want to overwrite a value the parent just pushed.
31760
- if (this._configuringMask) return;
31761
- this.value = this.util.toModelValue(this.maskInstance.value, this.format);
31762
- if (this.type === "date") {
31763
- this._rawMaskValue = this.maskInstance.value;
31764
- }
31765
- });
31694
+ this.skipNextProgrammaticInputEvent = true;
31695
+ this.inputElement.value = '';
31766
31696
 
31767
- this.maskInstance.on('complete', () => {
31768
- if (this._configuringMask) return;
31769
- this.value = this.util.toModelValue(this.maskInstance.value, this.format);
31770
- if (this.type === "date") {
31771
- this._rawMaskValue = this.maskInstance.value;
31772
- }
31773
- });
31697
+ this.maskInstance = IMask(this.inputElement, maskOptions);
31774
31698
 
31775
- // Restore the stashed value through IMask so it's properly masked
31776
- if (existingValue) {
31777
- this.maskInstance.value = existingValue;
31699
+ this.maskInstance.on('accept', () => {
31700
+ this.value = this.util.toModelValue(this.maskInstance.value, this.format);
31701
+ if (this.type === "date") {
31702
+ this._rawMaskValue = this.maskInstance.value;
31778
31703
  }
31704
+ });
31705
+
31706
+ this.maskInstance.on('complete', () => {
31707
+ this.value = this.util.toModelValue(this.maskInstance.value, this.format);
31708
+ if (this.type === "date") {
31709
+ this._rawMaskValue = this.maskInstance.value;
31710
+ }
31711
+ });
31712
+
31713
+ // Restore the stashed value through IMask so it's properly masked
31714
+ if (existingValue) {
31715
+ this.maskInstance.value = existingValue;
31779
31716
  }
31780
- } finally {
31781
- this._configuringMask = false;
31782
31717
  }
31783
31718
  }
31784
31719
 
@@ -32065,10 +32000,10 @@ class BaseInput extends AuroElement$1 {
32065
32000
  },
32066
32001
  {
32067
32002
  name: 'Diners club',
32068
- regex: /^(?<num>30[0-5]|36|38)\d{0}/u,
32003
+ regex: /^(?<num>36|38)\d{0}/u,
32069
32004
  formatLength: 16,
32070
32005
  errorMessage: CreditCardValidationMessage,
32071
- cardIcon: 'cc-dinersclub',
32006
+ cardIcon: 'credit-card',
32072
32007
  maskFormat: "0000 000000 0000"
32073
32008
  },
32074
32009
  {
@@ -32478,7 +32413,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
32478
32413
  }
32479
32414
  };
32480
32415
 
32481
- var formkitVersion = '202606100232';
32416
+ var formkitVersion = '202606101857';
32482
32417
 
32483
32418
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32484
32419
  // See LICENSE in the project root for license information.
@@ -34686,7 +34621,7 @@ class AuroDatePicker extends AuroElement {
34686
34621
  * @returns {Number} Simplified number.
34687
34622
  */
34688
34623
  convertToWcValidTime(date) {
34689
- return new Date(date).getTime() / 1000;
34624
+ return date?.getTime() / 1000;
34690
34625
  }
34691
34626
 
34692
34627
  /**
@@ -35733,7 +35668,7 @@ class AuroDatePicker extends AuroElement {
35733
35668
  <div class="${classMap(this.commonDisplayValueWrapperClasses)}">
35734
35669
  <slot name="displayValue" @slotchange=${this.checkDisplayValueSlotChange}>
35735
35670
  <span>
35736
- ${this.formatShortDate(this.value)}${this.range ? html$1`–${this.formatShortDate(this.valueEnd)}` : undefined}
35671
+ ${this.formatShortDate(this.valueObject)}${this.range ? html$1`–${this.formatShortDate(this.valueEndObject)}` : undefined}
35737
35672
  </span>
35738
35673
  </slot>
35739
35674
  </div>
@@ -35807,7 +35742,7 @@ class AuroDatePicker extends AuroElement {
35807
35742
  * Simple formatter that ONLY WORKS FOR US DATES.
35808
35743
  * Returns formatted date like Apr 21 or Dec 25.
35809
35744
  * @private
35810
- * @param {string} date - Date format should be in a format Date constructor accepts, like '2023-04-21' or '2023/04/21'.
35745
+ * @param {Date} date - Date format should be in a format Date constructor accepts, like '2023-04-21' or '2023/04/21'.
35811
35746
  * @returns {string}
35812
35747
  */
35813
35748
  formatShortDate(date) {
@@ -35817,16 +35752,16 @@ class AuroDatePicker extends AuroElement {
35817
35752
  day: '2-digit'
35818
35753
  };
35819
35754
 
35820
- return new Date(date).toLocaleDateString('en-US', options).replace(',', '');
35755
+ return date?.toLocaleDateString(this.locale, options).replace(',', '');
35821
35756
  }
35822
35757
 
35823
35758
  /**
35824
35759
  * Format and render the provided date value.
35825
35760
  * @private
35826
- * @param {string} dateValue - The date value to format and render.
35761
+ * @param {Date} date - The date value to format and render.
35827
35762
  * @returns {import('lit').TemplateResult}
35828
35763
  */
35829
- renderDisplayTextDate(dateValue) {
35764
+ renderDisplayTextDate(date) {
35830
35765
  const displayTextClasses = {
35831
35766
  'displayValueText': true,
35832
35767
  'body-lg': true
@@ -35835,8 +35770,8 @@ class AuroDatePicker extends AuroElement {
35835
35770
  return html$1`
35836
35771
  <div>
35837
35772
  <div class="${classMap(displayTextClasses)}">
35838
- ${dateValue && dateFormatter$1.isValidDate(dateValue)
35839
- ? this.formatShortDate(dateValue)
35773
+ ${date
35774
+ ? this.formatShortDate(date)
35840
35775
  : undefined
35841
35776
  }
35842
35777
  </div>
@@ -35885,7 +35820,7 @@ class AuroDatePicker extends AuroElement {
35885
35820
  ${this.layout !== "classic"
35886
35821
  ? html$1`
35887
35822
  <span slot="displayValue">
35888
- ${this.renderDisplayTextDate(this.value)}
35823
+ ${this.renderDisplayTextDate(this.valueObject)}
35889
35824
  </span>
35890
35825
  `
35891
35826
  : undefined
@@ -35929,7 +35864,7 @@ class AuroDatePicker extends AuroElement {
35929
35864
  ${this.layout !== "classic"
35930
35865
  ? html$1`
35931
35866
  <span slot="displayValue">
35932
- ${this.renderDisplayTextDate(this.valueEnd)}
35867
+ ${this.renderDisplayTextDate(this.valueEndObject)}
35933
35868
  </span>
35934
35869
  `
35935
35870
  : undefined
@@ -820,14 +820,14 @@ export class AuroDatePicker extends AuroElement {
820
820
  * Simple formatter that ONLY WORKS FOR US DATES.
821
821
  * Returns formatted date like Apr 21 or Dec 25.
822
822
  * @private
823
- * @param {string} date - Date format should be in a format Date constructor accepts, like '2023-04-21' or '2023/04/21'.
823
+ * @param {Date} date - Date format should be in a format Date constructor accepts, like '2023-04-21' or '2023/04/21'.
824
824
  * @returns {string}
825
825
  */
826
826
  private formatShortDate;
827
827
  /**
828
828
  * Format and render the provided date value.
829
829
  * @private
830
- * @param {string} dateValue - The date value to format and render.
830
+ * @param {Date} date - The date value to format and render.
831
831
  * @returns {import('lit').TemplateResult}
832
832
  */
833
833
  private renderDisplayTextDate;
@@ -3942,7 +3942,7 @@ class AuroHelpText extends i {
3942
3942
  }
3943
3943
  }
3944
3944
 
3945
- var formkitVersion = '202606100232';
3945
+ var formkitVersion = '202606101857';
3946
3946
 
3947
3947
  class AuroElement extends i {
3948
3948
  static get properties() {
@@ -4800,18 +4800,27 @@ class AuroDropdown extends AuroElement {
4800
4800
  this.focusTrap = undefined;
4801
4801
  }
4802
4802
 
4803
- // Restore any focus-loss suppression we installed for a prior trap state.
4804
- // The desktopModal trap moves focus into the bib via RAF, which would
4805
- // otherwise trip AuroFloatingUI.handleFocusLoss (a popover-top-layer
4806
- // timing issue makes its :focus-within guard miss the focused button).
4807
- if (this._priorNoHideOnFocusLoss !== undefined) {
4808
- this.noHideOnThisFocusLoss = this._priorNoHideOnFocusLoss;
4809
- this._priorNoHideOnFocusLoss = undefined;
4803
+ // Restore the user-set noHideOnThisFocusLoss value, if we overrode it.
4804
+ if (this._noHideOverridden) {
4805
+ this.noHideOnThisFocusLoss = this._priorNoHide;
4806
+ this._noHideOverridden = false;
4807
+ this._priorNoHide = undefined;
4810
4808
  }
4811
4809
 
4812
4810
  if (this.isPopoverVisible) {
4813
4811
  if (!this.isBibFullscreen) {
4814
4812
  if (this.desktopModal) {
4813
+ // The floater's focus-loss check uses :focus-within, which does not
4814
+ // match the host when focus is on a slotted element projected through
4815
+ // multiple shadow roots. Without this override, focusing a button
4816
+ // inside the bib would be misread as focus leaving the dropdown and
4817
+ // close the bib immediately. desktopModal traps focus inside the
4818
+ // bib and inerts siblings, so suppressing focus-loss dismissal here
4819
+ // is safe — Escape and outside-click still close the bib.
4820
+ this._priorNoHide = this.noHideOnThisFocusLoss;
4821
+ this._noHideOverridden = true;
4822
+ this.noHideOnThisFocusLoss = true;
4823
+
4815
4824
  // Desktop modal: trap focus only within the bib content.
4816
4825
  // Can't use FocusTrap on the bib element because keydown events
4817
4826
  // from slotted content bubble through the dropdown host (light DOM),
@@ -4884,14 +4893,6 @@ class AuroDropdown extends AuroElement {
4884
4893
  };
4885
4894
  this.addEventListener('keydown', this._bibTabHandler);
4886
4895
 
4887
- // Suppress AuroFloatingUI's auto-hide-on-focus-loss while the
4888
- // desktopModal trap owns focus management. Without this, the very
4889
- // first focus move into the bib (from the RAF below) triggers
4890
- // handleFocusLoss → hideBib, tearing down the trap before the
4891
- // user can press Tab.
4892
- this._priorNoHideOnFocusLoss = this.noHideOnThisFocusLoss;
4893
- this.noHideOnThisFocusLoss = true;
4894
-
4895
4896
  // Move initial focus into the bib content, matching FocusTrap behavior
4896
4897
  requestAnimationFrame(() => {
4897
4898
  const focusables = getFocusableElements(this.bibContent);
@@ -3942,7 +3942,7 @@ class AuroHelpText extends i {
3942
3942
  }
3943
3943
  }
3944
3944
 
3945
- var formkitVersion = '202606100232';
3945
+ var formkitVersion = '202606101857';
3946
3946
 
3947
3947
  class AuroElement extends i {
3948
3948
  static get properties() {
@@ -4800,18 +4800,27 @@ class AuroDropdown extends AuroElement {
4800
4800
  this.focusTrap = undefined;
4801
4801
  }
4802
4802
 
4803
- // Restore any focus-loss suppression we installed for a prior trap state.
4804
- // The desktopModal trap moves focus into the bib via RAF, which would
4805
- // otherwise trip AuroFloatingUI.handleFocusLoss (a popover-top-layer
4806
- // timing issue makes its :focus-within guard miss the focused button).
4807
- if (this._priorNoHideOnFocusLoss !== undefined) {
4808
- this.noHideOnThisFocusLoss = this._priorNoHideOnFocusLoss;
4809
- this._priorNoHideOnFocusLoss = undefined;
4803
+ // Restore the user-set noHideOnThisFocusLoss value, if we overrode it.
4804
+ if (this._noHideOverridden) {
4805
+ this.noHideOnThisFocusLoss = this._priorNoHide;
4806
+ this._noHideOverridden = false;
4807
+ this._priorNoHide = undefined;
4810
4808
  }
4811
4809
 
4812
4810
  if (this.isPopoverVisible) {
4813
4811
  if (!this.isBibFullscreen) {
4814
4812
  if (this.desktopModal) {
4813
+ // The floater's focus-loss check uses :focus-within, which does not
4814
+ // match the host when focus is on a slotted element projected through
4815
+ // multiple shadow roots. Without this override, focusing a button
4816
+ // inside the bib would be misread as focus leaving the dropdown and
4817
+ // close the bib immediately. desktopModal traps focus inside the
4818
+ // bib and inerts siblings, so suppressing focus-loss dismissal here
4819
+ // is safe — Escape and outside-click still close the bib.
4820
+ this._priorNoHide = this.noHideOnThisFocusLoss;
4821
+ this._noHideOverridden = true;
4822
+ this.noHideOnThisFocusLoss = true;
4823
+
4815
4824
  // Desktop modal: trap focus only within the bib content.
4816
4825
  // Can't use FocusTrap on the bib element because keydown events
4817
4826
  // from slotted content bubble through the dropdown host (light DOM),
@@ -4884,14 +4893,6 @@ class AuroDropdown extends AuroElement {
4884
4893
  };
4885
4894
  this.addEventListener('keydown', this._bibTabHandler);
4886
4895
 
4887
- // Suppress AuroFloatingUI's auto-hide-on-focus-loss while the
4888
- // desktopModal trap owns focus management. Without this, the very
4889
- // first focus move into the bib (from the RAF below) triggers
4890
- // handleFocusLoss → hideBib, tearing down the trap before the
4891
- // user can press Tab.
4892
- this._priorNoHideOnFocusLoss = this.noHideOnThisFocusLoss;
4893
- this.noHideOnThisFocusLoss = true;
4894
-
4895
4896
  // Move initial focus into the bib content, matching FocusTrap behavior
4896
4897
  requestAnimationFrame(() => {
4897
4898
  const focusables = getFocusableElements(this.bibContent);