@aurodesignsystem-dev/auro-formkit 0.0.0-pr1530.1 → 0.0.0-pr1531.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 (51) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +43 -21
  7. package/components/combobox/demo/getting-started.min.js +43 -21
  8. package/components/combobox/demo/index.min.js +43 -21
  9. package/components/combobox/dist/index.js +43 -21
  10. package/components/combobox/dist/registered.js +43 -21
  11. package/components/counter/demo/customize.min.js +2 -2
  12. package/components/counter/demo/index.min.js +2 -2
  13. package/components/counter/dist/index.js +2 -2
  14. package/components/counter/dist/registered.js +2 -2
  15. package/components/datepicker/demo/accessibility.md +4 -13
  16. package/components/datepicker/demo/api.md +1 -1
  17. package/components/datepicker/demo/customize.min.js +69 -193
  18. package/components/datepicker/demo/index.min.js +69 -193
  19. package/components/datepicker/demo/voiceover.md +1 -1
  20. package/components/datepicker/dist/auro-calendar-cell.d.ts +0 -11
  21. package/components/datepicker/dist/auro-calendar.d.ts +2 -26
  22. package/components/datepicker/dist/auro-datepicker.d.ts +1 -9
  23. package/components/datepicker/dist/index.js +69 -193
  24. package/components/datepicker/dist/registered.js +69 -193
  25. package/components/dropdown/demo/customize.min.js +1 -1
  26. package/components/dropdown/demo/getting-started.min.js +1 -1
  27. package/components/dropdown/demo/index.min.js +1 -1
  28. package/components/dropdown/dist/index.js +1 -1
  29. package/components/dropdown/dist/registered.js +1 -1
  30. package/components/form/demo/customize.min.js +159 -239
  31. package/components/form/demo/getting-started.min.js +159 -239
  32. package/components/form/demo/index.min.js +159 -239
  33. package/components/form/demo/registerDemoDeps.min.js +159 -239
  34. package/components/input/demo/customize.min.js +41 -19
  35. package/components/input/demo/getting-started.min.js +41 -19
  36. package/components/input/demo/index.min.js +41 -19
  37. package/components/input/dist/base-input.d.ts +20 -4
  38. package/components/input/dist/index.js +41 -19
  39. package/components/input/dist/registered.js +41 -19
  40. package/components/radio/demo/customize.min.js +1 -1
  41. package/components/radio/demo/getting-started.min.js +1 -1
  42. package/components/radio/demo/index.min.js +1 -1
  43. package/components/radio/dist/index.js +1 -1
  44. package/components/radio/dist/registered.js +1 -1
  45. package/components/select/demo/customize.min.js +2 -2
  46. package/components/select/demo/getting-started.min.js +2 -2
  47. package/components/select/demo/index.min.js +2 -2
  48. package/components/select/dist/index.js +2 -2
  49. package/components/select/dist/registered.js +2 -2
  50. package/custom-elements.json +1619 -1595
  51. package/package.json +1 -1
@@ -11680,28 +11680,23 @@ var popoverVersion = '6.0.1';
11680
11680
  * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
11681
11681
  */
11682
11682
  function parseIsoToTimestamp(isoStr) {
11683
- // Strict YYYY-MM-DD matcher with named groups. Rejects trailing garbage
11684
- // ("2024x-01-01"), short segments ("2024-1-1"), and any non-digit
11685
- // characters. `parseInt` alone accepted both because it stops at the
11686
- // first non-digit and doesn't require a minimum length.
11687
- const ISO_DATE_RE = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
11688
- const MAX_MONTH = 12;
11689
- const MAX_DAY = 31;
11690
-
11691
11683
  if (typeof isoStr !== 'string') {
11692
11684
  return null;
11693
11685
  }
11694
- const match = ISO_DATE_RE.exec(isoStr);
11695
- if (!match) {
11686
+ const parts = isoStr.split('-');
11687
+ if (parts.length !== 3) {
11688
+ return null;
11689
+ }
11690
+ const year = parseInt(parts[0], 10);
11691
+ const month = parseInt(parts[1], 10);
11692
+ const day = parseInt(parts[2], 10);
11693
+ if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
11696
11694
  return null;
11697
11695
  }
11698
- const year = Number(match.groups.year);
11699
- const month = Number(match.groups.month);
11700
- const day = Number(match.groups.day);
11701
11696
  // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
11702
11697
  // silently normalizes those to a different calendar day, which would
11703
11698
  // disable the wrong date if we let the result through.
11704
- if (month < 1 || month > MAX_MONTH || day < 1 || day > MAX_DAY) {
11699
+ if (month < 1 || month > 12 || day < 1 || day > 31) {
11705
11700
  return null;
11706
11701
  }
11707
11702
  const date = new Date(year, month - 1, day);
@@ -12279,36 +12274,13 @@ class AuroCalendarCell extends i$1 {
12279
12274
  }
12280
12275
 
12281
12276
  firstUpdated() {
12282
- this._initFromAncestors();
12283
- }
12284
-
12285
- /**
12286
- * Wires the cell to its ancestor calendar-month and calendar (and, via
12287
- * the calendar, to the datepicker). Extracted from firstUpdated() so the
12288
- * retry loop can re-attempt without recursively invoking a Lit lifecycle
12289
- * method (which is outside the framework's contract).
12290
- * @private
12291
- * @returns {void}
12292
- */
12293
- _initFromAncestors() {
12294
12277
  const calendarMonth = this.runtimeUtils.closestElement('auro-formkit-calendar-month', this);
12295
12278
  const calendar = this.runtimeUtils.closestElement('auro-formkit-calendar', calendarMonth);
12296
12279
 
12297
12280
  if (!calendar) {
12298
- // Retry on the next event-loop turn to give the ancestor chain a chance
12299
- // to attach — but cap attempts so a permanently detached cell doesn't
12300
- // spin forever. 10 turns is far more than any observed race needs.
12301
- this._firstUpdatedRetries = (this._firstUpdatedRetries || 0) + 1;
12302
- if (this._firstUpdatedRetries > 10) {
12303
- return;
12304
- }
12305
- this._firstUpdatedRetryTimer = setTimeout(() => {
12306
- this._firstUpdatedRetryTimer = null;
12307
- this._initFromAncestors();
12308
- }, 0);
12281
+ setTimeout(() => this.firstUpdated(), 0);
12309
12282
  return;
12310
12283
  }
12311
- this._firstUpdatedRetries = 0;
12312
12284
  this.calendar = calendar;
12313
12285
  this.datepicker = calendar.datepicker;
12314
12286
  this._slotContentHandler = () => {
@@ -12336,10 +12308,6 @@ class AuroCalendarCell extends i$1 {
12336
12308
  if (this.datepicker && this._slotContentHandler) {
12337
12309
  this.datepicker.removeEventListener('auroDatePicker-newSlotContent', this._slotContentHandler);
12338
12310
  }
12339
- if (this._firstUpdatedRetryTimer) {
12340
- clearTimeout(this._firstUpdatedRetryTimer);
12341
- this._firstUpdatedRetryTimer = null;
12342
- }
12343
12311
  }
12344
12312
 
12345
12313
  /**
@@ -13717,7 +13685,7 @@ class AuroBibtemplate extends i$1 {
13717
13685
  }
13718
13686
  }
13719
13687
 
13720
- var formkitVersion$2 = '202607022134';
13688
+ var formkitVersion$2 = '202607022131';
13721
13689
 
13722
13690
  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=i$5`${s$5(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$4 = 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$3=i$3`: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}
13723
13691
  `,u$6=i$3`.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}}
@@ -13856,10 +13824,7 @@ class AuroCalendar extends RangeDatepicker {
13856
13824
  * Support will be removed in a future major release.
13857
13825
  * @private
13858
13826
  */
13859
- // Initialize the backing field directly so the constructor's default
13860
- // empty array doesn't trigger the deprecation warning. Assignments from
13861
- // consumers still route through the setter below.
13862
- this._disabledDays = [];
13827
+ this.disabledDays = [];
13863
13828
 
13864
13829
  /**
13865
13830
  * @private
@@ -13892,44 +13857,6 @@ class AuroCalendar extends RangeDatepicker {
13892
13857
  this._calendarInstanceId = Date.now().toString(36);
13893
13858
  }
13894
13859
 
13895
- /**
13896
- * @deprecated See constructor JSDoc — migrate to
13897
- * `auro-datepicker.blackoutDates`. The getter/setter pair exists so the
13898
- * one-time deprecation warning fires as soon as a consumer assigns a
13899
- * non-empty array (empty assignments are ignored — an empty array is
13900
- * indistinguishable from the constructor default and would produce a
13901
- * spurious warning), rather than only when `_getBlackoutSet()` happens
13902
- * to rebuild.
13903
- * @returns {Array} The current legacy `disabledDays` array.
13904
- */
13905
- get disabledDays() {
13906
- return this._disabledDays;
13907
- }
13908
-
13909
- /**
13910
- * @param {Array} value - The legacy `disabledDays` array to set.
13911
- */
13912
- set disabledDays(value) {
13913
- const oldValue = this._disabledDays;
13914
- // Coerce non-arrays to `[]`. Consumers occasionally pass `null`
13915
- // (Lit's Array attribute converter returns null for a missing/empty
13916
- // attribute) or misuse the API; downstream code in
13917
- // `auro-calendar-cell.isEnabled` calls `.findIndex()` on this value
13918
- // without an Array.isArray guard, so a truthy non-array would throw
13919
- // at render.
13920
- const coerced = Array.isArray(value) ? value : [];
13921
- if (coerced.length > 0) {
13922
- this._warnDisabledDaysDeprecated();
13923
- }
13924
- this._disabledDays = coerced;
13925
- // `disabledDays` is a Lit `@property({ type: Array })` on the
13926
- // RangeDatepicker base class; Lit's generated setter (which we've
13927
- // overridden here to insert the warning) is what normally invalidates
13928
- // the reactive cycle. Re-invoke requestUpdate manually so consumer
13929
- // assignments still re-render the calendar.
13930
- this.requestUpdate('disabledDays', oldValue);
13931
- }
13932
-
13933
13860
  static get styles() {
13934
13861
  return [
13935
13862
  styleCss$7,
@@ -14475,19 +14402,8 @@ class AuroCalendar extends RangeDatepicker {
14475
14402
  /**
14476
14403
  * Returns a memoized Set of blackout timestamps (seconds) drawn from both
14477
14404
  * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
14478
- *
14479
- * The cache invalidates on **reference identity** only when the
14480
- * consumer reassigns the array (`el.blackoutDates = [...]`), matching
14481
- * Lit's own reactivity semantics for array properties. In-place mutations
14482
- * on the existing array (`push`, `splice`, index assignment) will NOT
14483
- * invalidate the cache and the new entries will be silently ignored.
14484
- * Consumers must reassign to update — see the JSDoc on
14485
- * `auro-datepicker.blackoutDates` for the recommended pattern.
14486
- *
14487
- * A shallow-equality tier was considered but rejected: it would run
14488
- * O(N) work on every cell render (this method is called per-cell via
14489
- * `isBlackout()`) and still wouldn't catch same-length value swaps,
14490
- * offering a false sense of safety.
14405
+ * The cache invalidates when either source array's reference changes, which
14406
+ * matches Lit's own reactive identity semantics for array properties.
14491
14407
  * @private
14492
14408
  * @returns {Set<Number>}
14493
14409
  */
@@ -14668,24 +14584,7 @@ class AuroCalendar extends RangeDatepicker {
14668
14584
  // rendered month(s) first so a single-month calendar does not pick a date
14669
14585
  // that has no DOM cell. Determine the visible range based on centralDate and
14670
14586
  // the number of rendered months.
14671
- //
14672
- // numCalendars is assigned inside renderAllCalendars(), which runs during
14673
- // render() — so by the time the visible-change handler in updated()
14674
- // calls computeActiveDate() in the same cycle, numCalendars is normally
14675
- // set. Guard against the pre-first-render path anyway (e.g. any future
14676
- // caller that reaches computeActiveDate before render() has run):
14677
- // Math.max(undefined, 1) is NaN, which would silently skip the
14678
- // visible-month scan below. Fall back to maximumRenderableMonths'
14679
- // desktop default (1 for non-range, 2 for range) so the scan window is
14680
- // correctly sized whenever numCalendars is not yet populated.
14681
- let renderedMonths = null;
14682
-
14683
- if (Number.isFinite(this.numCalendars) && this.numCalendars > 0) {
14684
- renderedMonths = this.numCalendars;
14685
- } else {
14686
- renderedMonths = this.noRange ? 1 : 2;
14687
- }
14688
-
14587
+ const renderedMonths = Math.max(this.numCalendars, 1);
14689
14588
  const visibleAnchor = this.centralDateObject ?? new Date(now * 1000);
14690
14589
  const visMonthStart = new Date(visibleAnchor.getFullYear(), visibleAnchor.getMonth(), 1);
14691
14590
  visMonthStart.setHours(0, 0, 0, 0);
@@ -14955,8 +14854,6 @@ class AuroCalendar extends RangeDatepicker {
14955
14854
  let targetIndex = -1;
14956
14855
  if (direction === 'next') {
14957
14856
  targetIndex = currentIndex + 1;
14958
- } else if (direction === 'prev') {
14959
- targetIndex = currentIndex - 1;
14960
14857
  }
14961
14858
 
14962
14859
  if (targetIndex >= 0 && targetIndex < allCells.length) {
@@ -15561,10 +15458,6 @@ class AuroCalendar extends RangeDatepicker {
15561
15458
  * originally tried aria-live="polite" here, but VoiceOver treats
15562
15459
  * polite as "wait until idle" — which never happens during active
15563
15460
  * keyboard navigation — so the announcements were silently dropped.
15564
- *
15565
- * This is a documented deviation from WCAG 2.1 SC 4.1.3, which
15566
- * prefers `polite` for status messages. See the "Documented
15567
- * Deviation" section in components/datepicker/docs/pages/accessibility.md.
15568
15461
  * @private
15569
15462
  * @param {String} dateStr - The localized date string to announce.
15570
15463
  * @returns {void}
@@ -19634,7 +19527,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
19634
19527
  }
19635
19528
  };
19636
19529
 
19637
- var formkitVersion$1 = '202607022134';
19530
+ var formkitVersion$1 = '202607022131';
19638
19531
 
19639
19532
  let AuroElement$2 = class AuroElement extends i$1 {
19640
19533
  static get properties() {
@@ -31649,14 +31542,16 @@ class BaseInput extends AuroElement$1 {
31649
31542
  this.label = 'Input label is undefined';
31650
31543
  this.layout = 'classic';
31651
31544
  this.locale = 'en-US';
31545
+ this._format = undefined;
31546
+
31547
+ /** @private */
31548
+ this._userSetFormat = false;
31652
31549
  this.max = undefined;
31653
31550
  this.maxLength = undefined;
31654
31551
  this.min = undefined;
31655
31552
  this.minLength = undefined;
31656
31553
  this.noValidate = false;
31657
31554
  this.onDark = false;
31658
- // Raw values returned from the input mask before model normalization.
31659
- this._rawMaskValue = undefined;
31660
31555
  this.required = false;
31661
31556
  this.setCustomValidityForType = undefined;
31662
31557
  // Credit Card is intentionally excluded — its mask manages the cursor
@@ -31814,7 +31709,8 @@ class BaseInput extends AuroElement$1 {
31814
31709
  */
31815
31710
  format: {
31816
31711
  type: String,
31817
- reflect: true
31712
+ reflect: true,
31713
+ noAccessor: true
31818
31714
  },
31819
31715
 
31820
31716
  /**
@@ -32152,6 +32048,34 @@ class BaseInput extends AuroElement$1 {
32152
32048
  return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
32153
32049
  }
32154
32050
 
32051
+ get format() {
32052
+ return this._format;
32053
+ }
32054
+
32055
+ /**
32056
+ * Overrides LitElement's generated accessor so we can track whether the
32057
+ * consumer explicitly set `format`. Locale-derived updates use
32058
+ * `_setFormatFromLocale` instead, which skips this flag.
32059
+ */
32060
+ set format(value) {
32061
+ const oldValue = this._format;
32062
+ this._format = value;
32063
+ this._userSetFormat = true;
32064
+ this.requestUpdate('format', oldValue);
32065
+ }
32066
+
32067
+ /**
32068
+ * Sets format without marking it as user-set. Used by locale auto-derive
32069
+ * so that a subsequent locale change can still update the format.
32070
+ * @private
32071
+ * @param {string} value
32072
+ */
32073
+ _setFormatFromLocale(value) {
32074
+ const oldValue = this._format;
32075
+ this._format = value;
32076
+ this.requestUpdate('format', oldValue);
32077
+ }
32078
+
32155
32079
  connectedCallback() {
32156
32080
  super.connectedCallback();
32157
32081
 
@@ -32205,7 +32129,7 @@ class BaseInput extends AuroElement$1 {
32205
32129
  // format silently misses the map and leaves `setCustomValidityForType`
32206
32130
  // unset.
32207
32131
  if (this.format) {
32208
- this.format = this.format.toLowerCase();
32132
+ this._setFormatFromLocale(this.format.toLowerCase());
32209
32133
  }
32210
32134
 
32211
32135
  // use validity message override if declared when initializing the component
@@ -32314,12 +32238,10 @@ class BaseInput extends AuroElement$1 {
32314
32238
  updated(changedProperties) {
32315
32239
  super.updated(changedProperties);
32316
32240
 
32317
- // When locale changes without an explicit format override, derive format from the new locale.
32318
- // Only runs if the current format is still the previous locale's default (not user-overridden).
32241
+ // When locale changes, auto-derive format unless the consumer explicitly set one.
32319
32242
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
32320
- const previousLocaleFormat = getDateFormatFromLocale(changedProperties.get('locale'));
32321
- if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
32322
- this.format = getDateFormatFromLocale(this.locale);
32243
+ if (!this._userSetFormat) {
32244
+ this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
32323
32245
  }
32324
32246
  }
32325
32247
 
@@ -32490,9 +32412,6 @@ class BaseInput extends AuroElement$1 {
32490
32412
  this.maskInstance.on('accept', () => {
32491
32413
  if (this._configuringMask) return;
32492
32414
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
32493
- if (this.type === "date") {
32494
- this._rawMaskValue = this.maskInstance.value;
32495
- }
32496
32415
  });
32497
32416
 
32498
32417
  // Mask fires 'complete' on the restore step below for any value that
@@ -32500,9 +32419,6 @@ class BaseInput extends AuroElement$1 {
32500
32419
  this.maskInstance.on('complete', () => {
32501
32420
  if (this._configuringMask) return;
32502
32421
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
32503
- if (this.type === "date") {
32504
- this._rawMaskValue = this.maskInstance.value;
32505
- }
32506
32422
  });
32507
32423
 
32508
32424
  // Write existingValue through the mask (not the input directly) so
@@ -32739,8 +32655,7 @@ class BaseInput extends AuroElement$1 {
32739
32655
 
32740
32656
  // Set default date format if type=date and no format is defined
32741
32657
  if (this.type === "date" && !this.format) {
32742
- // Use locale to determine default date format
32743
- this.format = this.util.getDateMaskFromLocale().toLowerCase();
32658
+ this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
32744
32659
  this.util.updateFormat(this.format);
32745
32660
  }
32746
32661
  }
@@ -32769,7 +32684,7 @@ class BaseInput extends AuroElement$1 {
32769
32684
  const creditCard = this.matchInputValueToCreditCard();
32770
32685
  const previousFormat = this.format;
32771
32686
 
32772
- this.format = creditCard.maskFormat;
32687
+ this._setFormatFromLocale(creditCard.maskFormat);
32773
32688
 
32774
32689
  this.maxLength = creditCard.formatLength;
32775
32690
  this.minLength = creditCard.formatMinLength;
@@ -33243,7 +33158,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
33243
33158
  }
33244
33159
  };
33245
33160
 
33246
- var formkitVersion = '202607022134';
33161
+ var formkitVersion = '202607022131';
33247
33162
 
33248
33163
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
33249
33164
  // See LICENSE in the project root for license information.
@@ -34620,15 +34535,6 @@ const datepickerKeyboardStrategy = {
34620
34535
  evt.stopPropagation();
34621
34536
  evt.preventDefault();
34622
34537
 
34623
- // Signal to the visibility-change handler in auro-datepicker.js that
34624
- // focus should be restored to the trigger regardless of hasFocus.
34625
- // hidePopover() (desktop non-modal path) does not auto-restore focus,
34626
- // and hiding the grid's popover ancestor drops focus to <body>. That
34627
- // synchronously fires focusout on the datepicker host — clearing
34628
- // hasFocus — before updated() runs, which would otherwise skip the
34629
- // input refocus. Native <dialog>.close() (modal path) restores focus
34630
- // itself, but the flag is harmless there.
34631
- component._restoreFocusOnClose = true;
34632
34538
  component.hideBib();
34633
34539
  },
34634
34540
 
@@ -34902,14 +34808,6 @@ class AuroDatePicker extends AuroElement {
34902
34808
 
34903
34809
  /**
34904
34810
  * Array of dates that cannot be selected. Dates should be in ISO format (YYYY-MM-DD).
34905
- *
34906
- * **Immutable update required.** The datepicker treats this array as
34907
- * immutable and memoizes a lookup Set keyed on the array's reference
34908
- * identity — matching Lit's own reactivity semantics for array
34909
- * properties. In-place mutations (`blackoutDates.push(...)`,
34910
- * `blackoutDates[i] = ...`, `blackoutDates.splice(...)`) will not
34911
- * invalidate the cache and the new entries will be silently ignored.
34912
- * To update, reassign the property: `el.blackoutDates = [...el.blackoutDates, '2024-12-25']`.
34913
34811
  */
34914
34812
  blackoutDates: {
34915
34813
  type: Array,
@@ -35795,13 +35693,12 @@ class AuroDatePicker extends AuroElement {
35795
35693
  this.calendar.activeCellDate = null;
35796
35694
 
35797
35695
  // Show the month containing the selected date (or today) instead of
35798
- // whichever month the user last navigated to. Route through
35799
- // updateCentralDate so centralDate stays first-of-month.
35696
+ // whichever month the user last navigated to.
35800
35697
  // Respect consumer-provided centralDate/calendarStartDate if no value is set.
35801
35698
  if (this.valueObject) {
35802
- this.calendarRenderUtil.updateCentralDate(this, this.value);
35699
+ this.centralDate = this.value;
35803
35700
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
35804
- this.calendarRenderUtil.updateCentralDate(this, new Date());
35701
+ this.centralDate = dateFormatter$1.toISOFormatString(new Date());
35805
35702
  }
35806
35703
  }
35807
35704
 
@@ -35859,15 +35756,8 @@ class AuroDatePicker extends AuroElement {
35859
35756
  // Always clear the inert flag. Only restore focus to the input when the datepicker
35860
35757
  // still has focus (e.g. Escape, date selected) — not when the user tabbed away,
35861
35758
  // which would pull them back and require extra Tab presses to escape.
35862
- //
35863
- // `_restoreFocusOnClose` is set by the Escape handler in
35864
- // datepickerKeyboardStrategy.js to force restore even when hasFocus
35865
- // has already been cleared — hidePopover() (desktop non-modal path)
35866
- // can drop focus to <body> before this update fires.
35867
35759
  this.dropdown.trigger.inert = false;
35868
- const shouldRestoreFocus = this.hasFocus || this._restoreFocusOnClose;
35869
- this._restoreFocusOnClose = false;
35870
- if (shouldRestoreFocus) {
35760
+ if (this.hasFocus) {
35871
35761
  requestAnimationFrame(() => {
35872
35762
  if (!this.dropdown.isPopoverVisible) {
35873
35763
  this.inputList[0].focus();
@@ -36313,18 +36203,6 @@ class AuroDatePicker extends AuroElement {
36313
36203
  this.calendar.requestUpdate();
36314
36204
  this.dispatchEvent(new CustomEvent('auroDatePicker-newSlotContent'));
36315
36205
  }
36316
-
36317
- // Range invariant: if a value change (from click or programmatic) has
36318
- // moved start past end, clear valueEnd here so both properties land in
36319
- // the SAME reactive cycle. Doing it in updated() would schedule a
36320
- // second cycle after cellClickActive/wasCellClick has already been
36321
- // consumed by the value branch, leaving the valueEnd branch to run
36322
- // with a stale handshake and racing with any intervening programmatic
36323
- // value assignments.
36324
- if ((changedProperties.has('value') || changedProperties.has('valueEnd')) &&
36325
- this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
36326
- this.valueEnd = undefined;
36327
- }
36328
36206
  }
36329
36207
 
36330
36208
  updated(changedProperties) {
@@ -36392,12 +36270,8 @@ class AuroDatePicker extends AuroElement {
36392
36270
 
36393
36271
  if (this.value && this.value.length === this.inputList[0].lengthForType && !(this.wasCellClick && this.range)) {
36394
36272
  // Skip centralDate update when user clicked a cell in range mode
36395
- // to prevent the displayed months from shifting. Route through
36396
- // updateCentralDate so centralDate stays first-of-month — direct
36397
- // assignment of the raw value briefly holds a mid-month string
36398
- // and violates the invariant that observers (e.g. calendar sync)
36399
- // rely on.
36400
- this.calendarRenderUtil.updateCentralDate(this, this.value);
36273
+ // to prevent the displayed months from shifting
36274
+ this.centralDate = this.value;
36401
36275
  }
36402
36276
 
36403
36277
  this.setHasValue();
@@ -36455,10 +36329,8 @@ class AuroDatePicker extends AuroElement {
36455
36329
 
36456
36330
  if (this.valueEnd && this.valueEnd.length === this.inputList[1].lengthForType && !this.wasCellClick) {
36457
36331
  // Skip centralDate update when user clicked a cell in range mode
36458
- // to prevent the displayed months from shifting. Route through
36459
- // updateCentralDate to preserve the first-of-month invariant
36460
- // (see matching comment in the value branch above).
36461
- this.calendarRenderUtil.updateCentralDate(this, this.valueEnd);
36332
+ // to prevent the displayed months from shifting
36333
+ this.centralDate = this.valueEnd;
36462
36334
  }
36463
36335
 
36464
36336
  this.validate();
@@ -36482,6 +36354,10 @@ class AuroDatePicker extends AuroElement {
36482
36354
  this.validation.validate(lastInput, true);
36483
36355
  }
36484
36356
 
36357
+ if (this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
36358
+ this.valueEnd = undefined;
36359
+ }
36360
+
36485
36361
  // This resets the datepicker when the minDate is set to a new value that is
36486
36362
  // a later date than the current value date
36487
36363
  if (changedProperties.has('minDate') && this.minDate) {
@@ -47,7 +47,7 @@
47
47
  <li><em>"current date"</em> for today's date (via <code>aria-current="date"</code>)</li>
48
48
  <li>Selection state: <em>"selected"</em> or not (via <code>aria-selected</code>)</li>
49
49
  </ul>
50
- <p>Out-of-range cells (outside min/max bounds) use the native <code>disabled</code> attribute on their button and drop <code>role</code>/<code>aria-label</code> on the host, so arrow-key navigation skips them and VoiceOver does not browse into them.</p>
50
+ <p>Out-of-range cells (outside min/max bounds) are completely hidden from VoiceOver with <code>aria-hidden="true"</code>.</p>
51
51
  <auro-header level="3" id="voiceOverDateSelection">Date Selection</auro-header>
52
52
  <p>When a date is selected, an <code>aria-live="assertive"</code> region announces the selected date (e.g. <em>"Thursday, May 14, 2026"</em>). For range datepickers, both the start and end selections are announced.</p>
53
53
  <auro-header level="3" id="voiceOverDialogName">Dialog Name</auro-header>
@@ -219,17 +219,6 @@ export class AuroCalendarCell extends LitElement {
219
219
  */
220
220
  private handleSlotContent;
221
221
  firstUpdated(): void;
222
- /**
223
- * Wires the cell to its ancestor calendar-month and calendar (and, via
224
- * the calendar, to the datepicker). Extracted from firstUpdated() so the
225
- * retry loop can re-attempt without recursively invoking a Lit lifecycle
226
- * method (which is outside the framework's contract).
227
- * @private
228
- * @returns {void}
229
- */
230
- private _initFromAncestors;
231
- _firstUpdatedRetries: any;
232
- _firstUpdatedRetryTimer: any;
233
222
  calendar: any;
234
223
  datepicker: any;
235
224
  _slotContentHandler: (() => void) | undefined;
@@ -173,15 +173,6 @@ export class AuroCalendar extends RangeDatepicker {
173
173
  * @private
174
174
  */
175
175
  private calendarRangeMonths;
176
- /**
177
- * @deprecated Use `auro-datepicker.blackoutDates` (an array of
178
- * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
179
- * timestamps is still honored for backward compatibility but emits a
180
- * one-time `console.debug` the first time a non-empty value is observed.
181
- * Support will be removed in a future major release.
182
- * @private
183
- */
184
- private _disabledDays;
185
176
  /**
186
177
  * @private
187
178
  */
@@ -346,19 +337,8 @@ export class AuroCalendar extends RangeDatepicker {
346
337
  /**
347
338
  * Returns a memoized Set of blackout timestamps (seconds) drawn from both
348
339
  * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
349
- *
350
- * The cache invalidates on **reference identity** only when the
351
- * consumer reassigns the array (`el.blackoutDates = [...]`), matching
352
- * Lit's own reactivity semantics for array properties. In-place mutations
353
- * on the existing array (`push`, `splice`, index assignment) will NOT
354
- * invalidate the cache and the new entries will be silently ignored.
355
- * Consumers must reassign to update — see the JSDoc on
356
- * `auro-datepicker.blackoutDates` for the recommended pattern.
357
- *
358
- * A shallow-equality tier was considered but rejected: it would run
359
- * O(N) work on every cell render (this method is called per-cell via
360
- * `isBlackout()`) and still wouldn't catch same-length value swaps,
361
- * offering a false sense of safety.
340
+ * The cache invalidates when either source array's reference changes, which
341
+ * matches Lit's own reactive identity semantics for array properties.
362
342
  * @private
363
343
  * @returns {Set<Number>}
364
344
  */
@@ -608,10 +588,6 @@ export class AuroCalendar extends RangeDatepicker {
608
588
  * originally tried aria-live="polite" here, but VoiceOver treats
609
589
  * polite as "wait until idle" — which never happens during active
610
590
  * keyboard navigation — so the announcements were silently dropped.
611
- *
612
- * This is a documented deviation from WCAG 2.1 SC 4.1.3, which
613
- * prefers `polite` for status messages. See the "Documented
614
- * Deviation" section in components/datepicker/docs/pages/accessibility.md.
615
591
  * @private
616
592
  * @param {String} dateStr - The localized date string to announce.
617
593
  * @returns {void}
@@ -54,14 +54,6 @@ export class AuroDatePicker extends AuroElement {
54
54
  };
55
55
  /**
56
56
  * Array of dates that cannot be selected. Dates should be in ISO format (YYYY-MM-DD).
57
- *
58
- * **Immutable update required.** The datepicker treats this array as
59
- * immutable and memoizes a lookup Set keyed on the array's reference
60
- * identity — matching Lit's own reactivity semantics for array
61
- * properties. In-place mutations (`blackoutDates.push(...)`,
62
- * `blackoutDates[i] = ...`, `blackoutDates.splice(...)`) will not
63
- * invalidate the cache and the new entries will be silently ignored.
64
- * To update, reassign the property: `el.blackoutDates = [...el.blackoutDates, '2024-12-25']`.
65
57
  */
66
58
  blackoutDates: {
67
59
  type: ArrayConstructor;
@@ -753,7 +745,7 @@ export class AuroDatePicker extends AuroElement {
753
745
  */
754
746
  private configureDropdown;
755
747
  dropdown: any;
756
- _restoreFocusOnClose: boolean | undefined;
748
+ centralDate: any;
757
749
  /**
758
750
  * Binds all behavior needed to the input after rendering.
759
751
  * @private