@aurodesignsystem-dev/auro-formkit 0.0.0-pr1475.1 → 0.0.0-pr1475.3

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 (49) 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 +20 -8
  7. package/components/combobox/demo/getting-started.min.js +20 -8
  8. package/components/combobox/demo/index.min.js +20 -8
  9. package/components/combobox/dist/index.js +20 -8
  10. package/components/combobox/dist/registered.js +20 -8
  11. package/components/counter/demo/customize.min.js +19 -7
  12. package/components/counter/demo/index.min.js +19 -7
  13. package/components/counter/dist/index.js +1 -1
  14. package/components/counter/dist/registered.js +1 -1
  15. package/components/datepicker/demo/accessibility.md +1 -1
  16. package/components/datepicker/demo/customize.min.js +153 -44
  17. package/components/datepicker/demo/index.md +2 -2
  18. package/components/datepicker/demo/index.min.js +159 -46
  19. package/components/datepicker/demo/keyboard-behavior.md +1 -1
  20. package/components/datepicker/dist/index.js +153 -42
  21. package/components/datepicker/dist/registered.js +153 -42
  22. package/components/datepicker/dist/src/auro-calendar-cell.d.ts +9 -0
  23. package/components/dropdown/demo/customize.min.js +18 -6
  24. package/components/dropdown/demo/getting-started.min.js +18 -6
  25. package/components/dropdown/demo/index.min.js +18 -6
  26. package/components/dropdown/dist/auro-dropdown.d.ts +2 -1
  27. package/components/dropdown/dist/index.js +18 -6
  28. package/components/dropdown/dist/registered.js +18 -6
  29. package/components/form/demo/customize.min.js +214 -67
  30. package/components/form/demo/getting-started.min.js +214 -67
  31. package/components/form/demo/index.min.js +214 -67
  32. package/components/form/demo/registerDemoDeps.min.js +214 -67
  33. package/components/input/demo/customize.min.js +1 -1
  34. package/components/input/demo/getting-started.min.js +1 -1
  35. package/components/input/demo/index.min.js +1 -1
  36. package/components/input/dist/index.js +1 -1
  37. package/components/input/dist/registered.js +1 -1
  38. package/components/radio/demo/customize.min.js +1 -1
  39. package/components/radio/demo/getting-started.min.js +1 -1
  40. package/components/radio/demo/index.min.js +1 -1
  41. package/components/radio/dist/index.js +1 -1
  42. package/components/radio/dist/registered.js +1 -1
  43. package/components/select/demo/customize.min.js +19 -7
  44. package/components/select/demo/getting-started.min.js +19 -7
  45. package/components/select/demo/index.min.js +19 -7
  46. package/components/select/dist/index.js +19 -7
  47. package/components/select/dist/registered.js +19 -7
  48. package/custom-elements.json +3949 -3938
  49. package/package.json +1 -1
@@ -8097,11 +8097,22 @@ class AuroCalendarCell extends LitElement {
8097
8097
  return false;
8098
8098
  }
8099
8099
 
8100
+ // Check against disabledDays timestamps (legacy path)
8101
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
8102
+ if (this.disabledDays.findIndex(d => parseInt(d, 10) === this.day.date) !== -1) {
8103
+ return true;
8104
+ }
8105
+ }
8106
+
8100
8107
  // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
8101
8108
  const blackoutDates = this.datepicker?.blackoutDates;
8102
8109
 
8103
8110
  if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
8104
- const cellDate = new Date(this.day.date * 1000).toISOString().split('T')[0];
8111
+ const date = new Date(this.day.date * 1000);
8112
+ const yyyy = date.getFullYear();
8113
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
8114
+ const dd = String(date.getDate()).padStart(2, '0');
8115
+ const cellDate = `${yyyy}-${mm}-${dd}`;
8105
8116
  if (blackoutDates.includes(cellDate)) {
8106
8117
  return true;
8107
8118
  }
@@ -8157,8 +8168,9 @@ class AuroCalendarCell extends LitElement {
8157
8168
 
8158
8169
  const date = new Date(this.day.date * 1000);
8159
8170
 
8160
- // Generate localized full date string
8161
- const dateFormatter = new Intl.DateTimeFormat(undefined, {
8171
+ // Generate localized full date string using the configured locale
8172
+ const localeCode = this.locale?.code || undefined;
8173
+ const dateFormatter = new Intl.DateTimeFormat(localeCode, {
8162
8174
  weekday: 'long',
8163
8175
  year: 'numeric',
8164
8176
  month: 'long',
@@ -8167,7 +8179,7 @@ class AuroCalendarCell extends LitElement {
8167
8179
 
8168
8180
  let label = dateFormatter.format(date);
8169
8181
 
8170
- // appending popover content here so that it get's read in a logical order with the other date content.
8182
+ // appending popover content here so that it gets read in a logical order with the other date content.
8171
8183
  if (this.hasPopoverContent) {
8172
8184
  label += `, ${this.querySelector(`[slot="popover_${this.dateStr}"]`).innerText.trim()}`;
8173
8185
  }
@@ -8399,10 +8411,22 @@ class AuroCalendarCell extends LitElement {
8399
8411
  this.handleSlotContent();
8400
8412
  });
8401
8413
 
8414
+ this.calendarMonth = calendarMonth;
8415
+ this.configurePopover();
8416
+ }
8417
+
8418
+ /**
8419
+ * Configures the popover instance with the calendar month boundary.
8420
+ * Called from firstUpdated and updated because the popover element is only
8421
+ * rendered after hasPopoverContent becomes true (set by handleSlotContent).
8422
+ * @private
8423
+ * @returns {void}
8424
+ */
8425
+ configurePopover() {
8402
8426
  this.auroPopover = this.shadowRoot.querySelector(this.popoverTag._$litStatic$);
8403
8427
 
8404
- if (this.auroPopover) {
8405
- this.auroPopover.boundary = calendarMonth;
8428
+ if (this.auroPopover && this.calendarMonth) {
8429
+ this.auroPopover.boundary = this.calendarMonth;
8406
8430
  }
8407
8431
  }
8408
8432
 
@@ -8415,6 +8439,11 @@ class AuroCalendarCell extends LitElement {
8415
8439
  this.setDateSlotName();
8416
8440
  this.handleSlotContent();
8417
8441
  }
8442
+
8443
+ // Configure popover when it first becomes rendered
8444
+ if (properties.has('hasPopoverContent') && this.hasPopoverContent) {
8445
+ this.updateComplete.then(() => this.configurePopover());
8446
+ }
8418
8447
  }
8419
8448
 
8420
8449
  /**
@@ -8436,7 +8465,7 @@ class AuroCalendarCell extends LitElement {
8436
8465
  const buttonClasses = {
8437
8466
  'day': true,
8438
8467
  'body-lg': true,
8439
- 'currentDate': this.currentDate,
8468
+ 'currentDate': this.isCurrentDate,
8440
8469
  'selected': this.selected,
8441
8470
  'inRange': this.datepicker?.hasAttribute('range') && this.hovered && this.isInRange(this.day, this.dateFrom, this.dateTo),
8442
8471
  'lastHoveredDate': this.isLastHoveredDate(this.day, this.dateFrom, this.dateTo, this.hoveredDate) && this.datepicker && this.datepicker.hasAttribute('range'),
@@ -8458,8 +8487,8 @@ class AuroCalendarCell extends LitElement {
8458
8487
  @focus="${outOfRange ? nothing : this.handleHover}"
8459
8488
  class="${classMap(buttonClasses)}"
8460
8489
  ?disabled="${outOfRange}"
8461
- ?aria-disabled="${blackout}"
8462
- ?aria-hidden="${outOfRange}"
8490
+ aria-disabled="${blackout ? 'true' : nothing}"
8491
+ aria-hidden="${outOfRange ? 'true' : nothing}"
8463
8492
  aria-selected="${this.selected ? 'true' : 'false'}"
8464
8493
  aria-current="${this.isCurrentDate ? 'date' : nothing}"
8465
8494
  tabindex="${this.active ? '0' : '-1'}">
@@ -8671,8 +8700,12 @@ class AuroCalendarMonth extends RangeDatepickerCalendar {
8671
8700
  }
8672
8701
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
8673
8702
  // Find the target day (same day-of-week, +/- 7 days)
8703
+ // Use Date arithmetic instead of fixed seconds to handle DST correctly
8674
8704
  const increment = key === 'ArrowDown' ? 7 : -7;
8675
- const targetDate = activeCell.day.date + (increment * 86400); // 86400 seconds per day
8705
+ const currentDate = new Date(activeCell.day.date * 1000);
8706
+ currentDate.setDate(currentDate.getDate() + increment);
8707
+ currentDate.setHours(0, 0, 0, 0);
8708
+ const targetDate = Math.floor(currentDate.getTime() / 1000);
8676
8709
 
8677
8710
  // Look for the target date in this month's focusable cells
8678
8711
  targetCell = focusableCells.find(cell => cell.day.date === targetDate);
@@ -8736,7 +8769,7 @@ class AuroCalendarMonth extends RangeDatepickerCalendar {
8736
8769
  var _a, _b;
8737
8770
 
8738
8771
  return html `
8739
- <div aria-labelledby="${this.getHeadingId()}" @keydown="${this.handleGridKeyDown}">
8772
+ <div aria-labelledby="${this.getHeadingId()}">
8740
8773
  <div class="header">
8741
8774
  ${this.renderPrevButton()}
8742
8775
  <div class="headerTitle heading-xs" id="${this.getHeadingId()}" aria-live="polite" aria-atomic="true">
@@ -8751,7 +8784,7 @@ class AuroCalendarMonth extends RangeDatepickerCalendar {
8751
8784
  ${this.renderNextButton()}
8752
8785
  </div>
8753
8786
 
8754
- <div class="table" role="grid" aria-labelledby="${this.getHeadingId()}">
8787
+ <div class="table" role="grid" aria-labelledby="${this.getHeadingId()}" @keydown="${this.handleGridKeyDown}">
8755
8788
  <div class="thead" role="rowgroup">
8756
8789
  <div class="tr" role="row">
8757
8790
  ${(_a = this.dayNamesOfTheWeek) === null || _a === void 0 ? void 0 : _a.map((dayNameOfWeek, index) => this.renderDayOfWeek(dayNameOfWeek, index))}
@@ -9569,7 +9602,7 @@ class AuroBibtemplate extends LitElement {
9569
9602
  }
9570
9603
  }
9571
9604
 
9572
- var formkitVersion$2 = '202605182202';
9605
+ var formkitVersion$2 = '202605182353';
9573
9606
 
9574
9607
  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}
9575
9608
  `,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}}
@@ -9859,7 +9892,8 @@ class AuroCalendar extends RangeDatepicker {
9859
9892
  */
9860
9893
  announceMonthChange() {
9861
9894
  const date = new Date(this.centralDate);
9862
- const formatter = new Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' });
9895
+ const localeCode = this.locale?.code || undefined;
9896
+ const formatter = new Intl.DateTimeFormat(localeCode, { month: 'long', year: 'numeric' });
9863
9897
  this.announceSelection(formatter.format(date));
9864
9898
  }
9865
9899
 
@@ -10039,9 +10073,19 @@ class AuroCalendar extends RangeDatepicker {
10039
10073
  * @returns {Number|undefined} Unix timestamp (seconds) of the date to activate, or undefined.
10040
10074
  */
10041
10075
  computeActiveDate() {
10042
- const ONE_DAY = 86400; // seconds
10043
10076
  const MAX_SCAN_DAYS = 366; // scan at most ~1 year in each direction
10044
10077
 
10078
+ /**
10079
+ * Adds days to a timestamp using Date arithmetic to handle DST correctly.
10080
+ * Returns a local-midnight-aligned timestamp in seconds.
10081
+ */
10082
+ const addDays = (ts, days) => {
10083
+ const d = new Date(ts * 1000);
10084
+ d.setDate(d.getDate() + days);
10085
+ d.setHours(0, 0, 0, 0);
10086
+ return Math.floor(d.getTime() / 1000);
10087
+ };
10088
+
10045
10089
  const rawMin = Number(this.min);
10046
10090
  const rawMax = Number(this.max);
10047
10091
 
@@ -10054,6 +10098,17 @@ class AuroCalendar extends RangeDatepicker {
10054
10098
  (this.disabledDays || []).map(d => parseInt(d, 10))
10055
10099
  );
10056
10100
 
10101
+ // Also include ISO-format blackoutDates from the datepicker if available.
10102
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
10103
+ const isoBlackouts = this.datepicker?.blackoutDates;
10104
+ if (Array.isArray(isoBlackouts)) {
10105
+ for (const isoStr of isoBlackouts) {
10106
+ const parts = isoStr.split('-');
10107
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
10108
+ if (Number.isFinite(ts)) blackoutSet.add(ts);
10109
+ }
10110
+ }
10111
+
10057
10112
  /**
10058
10113
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
10059
10114
  * it is within [min, max] AND not a blackout day.
@@ -10078,31 +10133,34 @@ class AuroCalendar extends RangeDatepicker {
10078
10133
  if (isEnabled(now)) return now;
10079
10134
 
10080
10135
  // 3. First future enabled date (scan forward from tomorrow, capped by max and MAX_SCAN_DAYS).
10081
- const scanMax = Number.isFinite(maxTs)
10082
- ? Math.min(maxTs, now + (MAX_SCAN_DAYS * ONE_DAY))
10083
- : now + (MAX_SCAN_DAYS * ONE_DAY);
10084
-
10085
- for (let ts = now + ONE_DAY; ts <= scanMax; ts += ONE_DAY) {
10136
+ for (let idx = 1; idx <= MAX_SCAN_DAYS; idx++) {
10137
+ const ts = addDays(now, idx);
10138
+ if (Number.isFinite(maxTs) && ts > maxTs) break;
10086
10139
  if (isEnabled(ts)) return ts;
10087
10140
  }
10088
10141
 
10089
10142
  // 4. First previous enabled date (scan backward from yesterday, capped by min and MAX_SCAN_DAYS).
10090
- const scanMin = Number.isFinite(minTs)
10091
- ? Math.max(minTs, now - (MAX_SCAN_DAYS * ONE_DAY))
10092
- : now - (MAX_SCAN_DAYS * ONE_DAY);
10093
-
10094
- for (let ts = now - ONE_DAY; ts >= scanMin; ts -= ONE_DAY) {
10143
+ for (let idx = 1; idx <= MAX_SCAN_DAYS; idx++) {
10144
+ const ts = addDays(now, -idx);
10145
+ if (Number.isFinite(minTs) && ts < minTs) break;
10095
10146
  if (isEnabled(ts)) return ts;
10096
10147
  }
10097
10148
 
10098
10149
  // 5. If scans missed (e.g. min/max range is far from today), fall back to
10099
10150
  // the first enabled date in the [min, max] range.
10100
10151
  if (Number.isFinite(minTs) && Number.isFinite(maxTs)) {
10101
- for (let ts = minTs; ts <= maxTs; ts += ONE_DAY) {
10152
+ let ts = minTs;
10153
+ for (let idx = 0; ts <= maxTs; idx++) {
10102
10154
  if (isEnabled(ts)) return ts;
10155
+ ts = addDays(minTs, idx + 1);
10103
10156
  }
10104
10157
  }
10105
10158
 
10159
+ // 6. All dates are blackout — fall back to the first in-range date so focus
10160
+ // still lands on a focusable (but not selectable) cell.
10161
+ if (Number.isFinite(minTs) && isInRange(minTs)) return minTs;
10162
+ if (isInRange(now)) return now;
10163
+
10106
10164
  return undefined;
10107
10165
  }
10108
10166
 
@@ -10161,8 +10219,12 @@ class AuroCalendar extends RangeDatepicker {
10161
10219
  }
10162
10220
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
10163
10221
  // Vertical navigation: find same day-of-week +/- 7 days
10222
+ // Use Date arithmetic instead of fixed seconds to handle DST correctly
10164
10223
  const increment = key === 'ArrowDown' ? 7 : -7;
10165
- const targetDate = fromDate + (increment * 86400);
10224
+ const currentDate = new Date(fromDate * 1000);
10225
+ currentDate.setDate(currentDate.getDate() + increment);
10226
+ currentDate.setHours(0, 0, 0, 0);
10227
+ const targetDate = Math.floor(currentDate.getTime() / 1000);
10166
10228
 
10167
10229
  const allCells = this.getAllFocusableCells();
10168
10230
  let targetCell = allCells.find(cell => cell.day && cell.day.date === targetDate);
@@ -10227,7 +10289,8 @@ class AuroCalendar extends RangeDatepicker {
10227
10289
  const monthElem = this.shadowRoot.querySelector(selector);
10228
10290
 
10229
10291
  if (monthElem) {
10230
- monthElem.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
10292
+ const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
10293
+ monthElem.scrollIntoView({ block: 'nearest', behavior: prefersReducedMotion ? 'instant' : 'smooth' });
10231
10294
  }
10232
10295
  }
10233
10296
 
@@ -10256,7 +10319,8 @@ class AuroCalendar extends RangeDatepicker {
10256
10319
  */
10257
10320
  formatAnnouncementDate(timestamp) {
10258
10321
  const date = new Date(parseInt(timestamp, 10) * 1000);
10259
- const formatter = new Intl.DateTimeFormat(undefined, {
10322
+ const localeCode = this.locale?.code || undefined;
10323
+ const formatter = new Intl.DateTimeFormat(localeCode, {
10260
10324
  weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
10261
10325
  });
10262
10326
  return formatter.format(date);
@@ -14270,7 +14334,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
14270
14334
  }
14271
14335
  };
14272
14336
 
14273
- var formkitVersion$1 = '202605182202';
14337
+ var formkitVersion$1 = '202605182353';
14274
14338
 
14275
14339
  let AuroElement$2 = class AuroElement extends LitElement {
14276
14340
  static get properties() {
@@ -15191,6 +15255,14 @@ class AuroDropdown extends AuroElement$2 {
15191
15255
  }
15192
15256
  };
15193
15257
  this.addEventListener('keydown', this._bibTabHandler);
15258
+
15259
+ // Move initial focus into the bib content, matching FocusTrap behavior
15260
+ requestAnimationFrame(() => {
15261
+ const focusables = getFocusableElements(this.bibContent);
15262
+ if (focusables.length) {
15263
+ focusables[0].focus();
15264
+ }
15265
+ });
15194
15266
  } else {
15195
15267
  // Normal desktop: use FocusTrap on the bib element
15196
15268
  this.focusTrap = new FocusTrap(this.bibContent);
@@ -15222,7 +15294,8 @@ class AuroDropdown extends AuroElement$2 {
15222
15294
  * Sets `inert` on sibling elements of the dropdown's top-level host
15223
15295
  * so that content outside the dropdown is not interactive while the modal is open.
15224
15296
  * Walks up through shadow DOM boundaries to find the outermost host element
15225
- * in the light DOM, then sets `inert` on that element's siblings.
15297
+ * in the light DOM, then sets `inert` on siblings at each ancestor level
15298
+ * to ensure all page content outside the host subtree is inert.
15226
15299
  * @private
15227
15300
  */
15228
15301
  _setPageInert() {
@@ -15241,15 +15314,18 @@ class AuroDropdown extends AuroElement$2 {
15241
15314
  host = host.getRootNode().host;
15242
15315
  }
15243
15316
 
15244
- const parent = host.parentElement;
15245
-
15246
- if (parent) {
15317
+ // Walk up the ancestor chain, inerting siblings at each level
15318
+ // to ensure the entire page outside the host subtree is inert.
15319
+ let current = host;
15320
+ while (current.parentElement) {
15321
+ const parent = current.parentElement;
15247
15322
  for (const sibling of parent.children) {
15248
- if (sibling !== host && !sibling.inert) {
15323
+ if (sibling !== current && !sibling.inert) {
15249
15324
  sibling.inert = true;
15250
15325
  this._inertSiblings.push(sibling);
15251
15326
  }
15252
15327
  }
15328
+ current = parent;
15253
15329
  }
15254
15330
  }
15255
15331
 
@@ -22200,7 +22276,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
22200
22276
  }
22201
22277
  };
22202
22278
 
22203
- var formkitVersion = '202605182202';
22279
+ var formkitVersion = '202605182353';
22204
22280
 
22205
22281
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
22206
22282
  // See LICENSE in the project root for license information.
@@ -23455,11 +23531,10 @@ function applyKeyboardStrategy(component, strategy, options = {}) {
23455
23531
  // components/datepicker/docs/partials/keyboardBehavior.md
23456
23532
  //
23457
23533
  // Current behavior (transitional — full bib keyboard navigation is planned for a future iteration):
23458
- // - The bib opens and closes via pointer/touch interaction only.
23459
23534
  // - Escape closes the bib and prevents the event from reaching parent containers.
23460
- // - Space opens the bib when it is closed.
23535
+ // - Enter opens the bib when it is closed (trigger input only, not clear button).
23536
+ // - Space opens the bib when it is closed (trigger input only, not clear button).
23461
23537
  // - Tab uses the browser's default tabindex sequence across trigger controls.
23462
- // - Enter does not open or close the bib.
23463
23538
  //
23464
23539
  // This file is an intentional placeholder for most keys. When datepicker bib keyboard navigation is
23465
23540
  // added, handlers should go here following the same strategy pattern used by
@@ -23483,7 +23558,13 @@ const datepickerKeyboardStrategy = {
23483
23558
  return;
23484
23559
  }
23485
23560
 
23486
- // Prevent the space character from being typed into the input.
23561
+ // Only open from the trigger input, not the clear button or other slotted elements.
23562
+ // evt.target is retargeted to the host in shadow DOM, so use composedPath() to find the real origin.
23563
+ const path = evt.composedPath();
23564
+ if (path.some(el => el.getAttribute?.('slot')?.includes('clear'))) {
23565
+ return;
23566
+ }
23567
+
23487
23568
  evt.preventDefault();
23488
23569
 
23489
23570
  component.dropdown.show();
@@ -23494,7 +23575,13 @@ const datepickerKeyboardStrategy = {
23494
23575
  return;
23495
23576
  }
23496
23577
 
23497
- // Prevent the space character from being typed into the input.
23578
+ // Only open from the trigger input, not the clear button or other slotted elements.
23579
+ // evt.target is retargeted to the host in shadow DOM, so use composedPath() to find the real origin.
23580
+ const path = evt.composedPath();
23581
+ if (path.some(el => el.getAttribute?.('slot')?.includes('clear'))) {
23582
+ return;
23583
+ }
23584
+
23498
23585
  evt.preventDefault();
23499
23586
 
23500
23587
  component.dropdown.show();
@@ -24459,9 +24546,10 @@ class AuroDatePicker extends AuroElement {
24459
24546
 
24460
24547
  // Show the month containing the selected date (or today) instead of
24461
24548
  // whichever month the user last navigated to.
24549
+ // Respect consumer-provided centralDate/calendarStartDate if no value is set.
24462
24550
  if (this.value && this.util.validDateStr(this.value, this.format)) {
24463
24551
  this.calendarRenderUtil.updateCentralDate(this, this.formattedValue);
24464
- } else if (!this.minDate) {
24552
+ } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
24465
24553
  this.calendarRenderUtil.updateCentralDate(this, new Date());
24466
24554
  }
24467
24555
  }
@@ -24752,6 +24840,11 @@ class AuroDatePicker extends AuroElement {
24752
24840
  } else {
24753
24841
  this.value = newDate;
24754
24842
  }
24843
+
24844
+ // For single-date picker, close the bib and return focus to trigger after selection
24845
+ if (!this.range) {
24846
+ this.hideBib();
24847
+ }
24755
24848
  }
24756
24849
  }
24757
24850
 
@@ -24924,10 +25017,28 @@ class AuroDatePicker extends AuroElement {
24924
25017
  this.setHasValue();
24925
25018
  }
24926
25019
 
25020
+ if (changedProperties.has('blackoutDates')) {
25021
+ // Force calendar cells to re-render with updated blackout state.
25022
+ // requestUpdate on the calendar alone is insufficient because cells
25023
+ // don't receive blackoutDates as a bound property. Dispatching the
25024
+ // slot content event triggers handleSlotContent → requestUpdate on each cell.
25025
+ if (this.calendar) {
25026
+ this.calendar.requestUpdate();
25027
+ this.dispatchEvent(new CustomEvent('auroDatePicker-newSlotContent'));
25028
+ }
25029
+ }
25030
+
24927
25031
  if (changedProperties.has('valueEnd') && this.inputList[1]) {
24928
25032
 
24929
25033
  this.formattedValueEnd = this.util.toNorthAmericanFormat(this.valueEnd, this.format);
24930
25034
 
25035
+ if (this.cellClickActive) {
25036
+ this.cellClickActive = false;
25037
+ this.wasCellClick = true;
25038
+ } else {
25039
+ this.wasCellClick = false;
25040
+ }
25041
+
24931
25042
  // update the calendar
24932
25043
  if (this.valueEnd && this.util.validDateStr(this.valueEnd, this.format)) {
24933
25044
  this.calendar.dateTo = this.convertToWcValidTime(this.formattedValueEnd);