@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
@@ -8139,11 +8139,22 @@ class AuroCalendarCell extends i$1 {
8139
8139
  return false;
8140
8140
  }
8141
8141
 
8142
+ // Check against disabledDays timestamps (legacy path)
8143
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
8144
+ if (this.disabledDays.findIndex(d => parseInt(d, 10) === this.day.date) !== -1) {
8145
+ return true;
8146
+ }
8147
+ }
8148
+
8142
8149
  // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
8143
8150
  const blackoutDates = this.datepicker?.blackoutDates;
8144
8151
 
8145
8152
  if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
8146
- const cellDate = new Date(this.day.date * 1000).toISOString().split('T')[0];
8153
+ const date = new Date(this.day.date * 1000);
8154
+ const yyyy = date.getFullYear();
8155
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
8156
+ const dd = String(date.getDate()).padStart(2, '0');
8157
+ const cellDate = `${yyyy}-${mm}-${dd}`;
8147
8158
  if (blackoutDates.includes(cellDate)) {
8148
8159
  return true;
8149
8160
  }
@@ -8199,8 +8210,9 @@ class AuroCalendarCell extends i$1 {
8199
8210
 
8200
8211
  const date = new Date(this.day.date * 1000);
8201
8212
 
8202
- // Generate localized full date string
8203
- const dateFormatter = new Intl.DateTimeFormat(undefined, {
8213
+ // Generate localized full date string using the configured locale
8214
+ const localeCode = this.locale?.code || undefined;
8215
+ const dateFormatter = new Intl.DateTimeFormat(localeCode, {
8204
8216
  weekday: 'long',
8205
8217
  year: 'numeric',
8206
8218
  month: 'long',
@@ -8209,7 +8221,7 @@ class AuroCalendarCell extends i$1 {
8209
8221
 
8210
8222
  let label = dateFormatter.format(date);
8211
8223
 
8212
- // appending popover content here so that it get's read in a logical order with the other date content.
8224
+ // appending popover content here so that it gets read in a logical order with the other date content.
8213
8225
  if (this.hasPopoverContent) {
8214
8226
  label += `, ${this.querySelector(`[slot="popover_${this.dateStr}"]`).innerText.trim()}`;
8215
8227
  }
@@ -8441,10 +8453,22 @@ class AuroCalendarCell extends i$1 {
8441
8453
  this.handleSlotContent();
8442
8454
  });
8443
8455
 
8456
+ this.calendarMonth = calendarMonth;
8457
+ this.configurePopover();
8458
+ }
8459
+
8460
+ /**
8461
+ * Configures the popover instance with the calendar month boundary.
8462
+ * Called from firstUpdated and updated because the popover element is only
8463
+ * rendered after hasPopoverContent becomes true (set by handleSlotContent).
8464
+ * @private
8465
+ * @returns {void}
8466
+ */
8467
+ configurePopover() {
8444
8468
  this.auroPopover = this.shadowRoot.querySelector(this.popoverTag._$litStatic$);
8445
8469
 
8446
- if (this.auroPopover) {
8447
- this.auroPopover.boundary = calendarMonth;
8470
+ if (this.auroPopover && this.calendarMonth) {
8471
+ this.auroPopover.boundary = this.calendarMonth;
8448
8472
  }
8449
8473
  }
8450
8474
 
@@ -8457,6 +8481,11 @@ class AuroCalendarCell extends i$1 {
8457
8481
  this.setDateSlotName();
8458
8482
  this.handleSlotContent();
8459
8483
  }
8484
+
8485
+ // Configure popover when it first becomes rendered
8486
+ if (properties.has('hasPopoverContent') && this.hasPopoverContent) {
8487
+ this.updateComplete.then(() => this.configurePopover());
8488
+ }
8460
8489
  }
8461
8490
 
8462
8491
  /**
@@ -8478,7 +8507,7 @@ class AuroCalendarCell extends i$1 {
8478
8507
  const buttonClasses = {
8479
8508
  'day': true,
8480
8509
  'body-lg': true,
8481
- 'currentDate': this.currentDate,
8510
+ 'currentDate': this.isCurrentDate,
8482
8511
  'selected': this.selected,
8483
8512
  'inRange': this.datepicker?.hasAttribute('range') && this.hovered && this.isInRange(this.day, this.dateFrom, this.dateTo),
8484
8513
  'lastHoveredDate': this.isLastHoveredDate(this.day, this.dateFrom, this.dateTo, this.hoveredDate) && this.datepicker && this.datepicker.hasAttribute('range'),
@@ -8500,8 +8529,8 @@ class AuroCalendarCell extends i$1 {
8500
8529
  @focus="${outOfRange ? A$4 : this.handleHover}"
8501
8530
  class="${e$4(buttonClasses)}"
8502
8531
  ?disabled="${outOfRange}"
8503
- ?aria-disabled="${blackout}"
8504
- ?aria-hidden="${outOfRange}"
8532
+ aria-disabled="${blackout ? 'true' : A$4}"
8533
+ aria-hidden="${outOfRange ? 'true' : A$4}"
8505
8534
  aria-selected="${this.selected ? 'true' : 'false'}"
8506
8535
  aria-current="${this.isCurrentDate ? 'date' : A$4}"
8507
8536
  tabindex="${this.active ? '0' : '-1'}">
@@ -8713,8 +8742,12 @@ class AuroCalendarMonth extends RangeDatepickerCalendar {
8713
8742
  }
8714
8743
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
8715
8744
  // Find the target day (same day-of-week, +/- 7 days)
8745
+ // Use Date arithmetic instead of fixed seconds to handle DST correctly
8716
8746
  const increment = key === 'ArrowDown' ? 7 : -7;
8717
- const targetDate = activeCell.day.date + (increment * 86400); // 86400 seconds per day
8747
+ const currentDate = new Date(activeCell.day.date * 1000);
8748
+ currentDate.setDate(currentDate.getDate() + increment);
8749
+ currentDate.setHours(0, 0, 0, 0);
8750
+ const targetDate = Math.floor(currentDate.getTime() / 1000);
8718
8751
 
8719
8752
  // Look for the target date in this month's focusable cells
8720
8753
  targetCell = focusableCells.find(cell => cell.day.date === targetDate);
@@ -8778,7 +8811,7 @@ class AuroCalendarMonth extends RangeDatepickerCalendar {
8778
8811
  var _a, _b;
8779
8812
 
8780
8813
  return b$5 `
8781
- <div aria-labelledby="${this.getHeadingId()}" @keydown="${this.handleGridKeyDown}">
8814
+ <div aria-labelledby="${this.getHeadingId()}">
8782
8815
  <div class="header">
8783
8816
  ${this.renderPrevButton()}
8784
8817
  <div class="headerTitle heading-xs" id="${this.getHeadingId()}" aria-live="polite" aria-atomic="true">
@@ -8793,7 +8826,7 @@ class AuroCalendarMonth extends RangeDatepickerCalendar {
8793
8826
  ${this.renderNextButton()}
8794
8827
  </div>
8795
8828
 
8796
- <div class="table" role="grid" aria-labelledby="${this.getHeadingId()}">
8829
+ <div class="table" role="grid" aria-labelledby="${this.getHeadingId()}" @keydown="${this.handleGridKeyDown}">
8797
8830
  <div class="thead" role="rowgroup">
8798
8831
  <div class="tr" role="row">
8799
8832
  ${(_a = this.dayNamesOfTheWeek) === null || _a === void 0 ? void 0 : _a.map((dayNameOfWeek, index) => this.renderDayOfWeek(dayNameOfWeek, index))}
@@ -9617,7 +9650,7 @@ class AuroBibtemplate extends i$1 {
9617
9650
  }
9618
9651
  }
9619
9652
 
9620
- var formkitVersion$2 = '202605182202';
9653
+ var formkitVersion$2 = '202605182353';
9621
9654
 
9622
9655
  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}
9623
9656
  `,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}}
@@ -9907,7 +9940,8 @@ class AuroCalendar extends RangeDatepicker {
9907
9940
  */
9908
9941
  announceMonthChange() {
9909
9942
  const date = new Date(this.centralDate);
9910
- const formatter = new Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' });
9943
+ const localeCode = this.locale?.code || undefined;
9944
+ const formatter = new Intl.DateTimeFormat(localeCode, { month: 'long', year: 'numeric' });
9911
9945
  this.announceSelection(formatter.format(date));
9912
9946
  }
9913
9947
 
@@ -10087,9 +10121,19 @@ class AuroCalendar extends RangeDatepicker {
10087
10121
  * @returns {Number|undefined} Unix timestamp (seconds) of the date to activate, or undefined.
10088
10122
  */
10089
10123
  computeActiveDate() {
10090
- const ONE_DAY = 86400; // seconds
10091
10124
  const MAX_SCAN_DAYS = 366; // scan at most ~1 year in each direction
10092
10125
 
10126
+ /**
10127
+ * Adds days to a timestamp using Date arithmetic to handle DST correctly.
10128
+ * Returns a local-midnight-aligned timestamp in seconds.
10129
+ */
10130
+ const addDays = (ts, days) => {
10131
+ const d = new Date(ts * 1000);
10132
+ d.setDate(d.getDate() + days);
10133
+ d.setHours(0, 0, 0, 0);
10134
+ return Math.floor(d.getTime() / 1000);
10135
+ };
10136
+
10093
10137
  const rawMin = Number(this.min);
10094
10138
  const rawMax = Number(this.max);
10095
10139
 
@@ -10102,6 +10146,17 @@ class AuroCalendar extends RangeDatepicker {
10102
10146
  (this.disabledDays || []).map(d => parseInt(d, 10))
10103
10147
  );
10104
10148
 
10149
+ // Also include ISO-format blackoutDates from the datepicker if available.
10150
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
10151
+ const isoBlackouts = this.datepicker?.blackoutDates;
10152
+ if (Array.isArray(isoBlackouts)) {
10153
+ for (const isoStr of isoBlackouts) {
10154
+ const parts = isoStr.split('-');
10155
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
10156
+ if (Number.isFinite(ts)) blackoutSet.add(ts);
10157
+ }
10158
+ }
10159
+
10105
10160
  /**
10106
10161
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
10107
10162
  * it is within [min, max] AND not a blackout day.
@@ -10126,31 +10181,34 @@ class AuroCalendar extends RangeDatepicker {
10126
10181
  if (isEnabled(now)) return now;
10127
10182
 
10128
10183
  // 3. First future enabled date (scan forward from tomorrow, capped by max and MAX_SCAN_DAYS).
10129
- const scanMax = Number.isFinite(maxTs)
10130
- ? Math.min(maxTs, now + (MAX_SCAN_DAYS * ONE_DAY))
10131
- : now + (MAX_SCAN_DAYS * ONE_DAY);
10132
-
10133
- for (let ts = now + ONE_DAY; ts <= scanMax; ts += ONE_DAY) {
10184
+ for (let idx = 1; idx <= MAX_SCAN_DAYS; idx++) {
10185
+ const ts = addDays(now, idx);
10186
+ if (Number.isFinite(maxTs) && ts > maxTs) break;
10134
10187
  if (isEnabled(ts)) return ts;
10135
10188
  }
10136
10189
 
10137
10190
  // 4. First previous enabled date (scan backward from yesterday, capped by min and MAX_SCAN_DAYS).
10138
- const scanMin = Number.isFinite(minTs)
10139
- ? Math.max(minTs, now - (MAX_SCAN_DAYS * ONE_DAY))
10140
- : now - (MAX_SCAN_DAYS * ONE_DAY);
10141
-
10142
- for (let ts = now - ONE_DAY; ts >= scanMin; ts -= ONE_DAY) {
10191
+ for (let idx = 1; idx <= MAX_SCAN_DAYS; idx++) {
10192
+ const ts = addDays(now, -idx);
10193
+ if (Number.isFinite(minTs) && ts < minTs) break;
10143
10194
  if (isEnabled(ts)) return ts;
10144
10195
  }
10145
10196
 
10146
10197
  // 5. If scans missed (e.g. min/max range is far from today), fall back to
10147
10198
  // the first enabled date in the [min, max] range.
10148
10199
  if (Number.isFinite(minTs) && Number.isFinite(maxTs)) {
10149
- for (let ts = minTs; ts <= maxTs; ts += ONE_DAY) {
10200
+ let ts = minTs;
10201
+ for (let idx = 0; ts <= maxTs; idx++) {
10150
10202
  if (isEnabled(ts)) return ts;
10203
+ ts = addDays(minTs, idx + 1);
10151
10204
  }
10152
10205
  }
10153
10206
 
10207
+ // 6. All dates are blackout — fall back to the first in-range date so focus
10208
+ // still lands on a focusable (but not selectable) cell.
10209
+ if (Number.isFinite(minTs) && isInRange(minTs)) return minTs;
10210
+ if (isInRange(now)) return now;
10211
+
10154
10212
  return undefined;
10155
10213
  }
10156
10214
 
@@ -10209,8 +10267,12 @@ class AuroCalendar extends RangeDatepicker {
10209
10267
  }
10210
10268
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
10211
10269
  // Vertical navigation: find same day-of-week +/- 7 days
10270
+ // Use Date arithmetic instead of fixed seconds to handle DST correctly
10212
10271
  const increment = key === 'ArrowDown' ? 7 : -7;
10213
- const targetDate = fromDate + (increment * 86400);
10272
+ const currentDate = new Date(fromDate * 1000);
10273
+ currentDate.setDate(currentDate.getDate() + increment);
10274
+ currentDate.setHours(0, 0, 0, 0);
10275
+ const targetDate = Math.floor(currentDate.getTime() / 1000);
10214
10276
 
10215
10277
  const allCells = this.getAllFocusableCells();
10216
10278
  let targetCell = allCells.find(cell => cell.day && cell.day.date === targetDate);
@@ -10275,7 +10337,8 @@ class AuroCalendar extends RangeDatepicker {
10275
10337
  const monthElem = this.shadowRoot.querySelector(selector);
10276
10338
 
10277
10339
  if (monthElem) {
10278
- monthElem.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
10340
+ const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
10341
+ monthElem.scrollIntoView({ block: 'nearest', behavior: prefersReducedMotion ? 'instant' : 'smooth' });
10279
10342
  }
10280
10343
  }
10281
10344
 
@@ -10304,7 +10367,8 @@ class AuroCalendar extends RangeDatepicker {
10304
10367
  */
10305
10368
  formatAnnouncementDate(timestamp) {
10306
10369
  const date = new Date(parseInt(timestamp, 10) * 1000);
10307
- const formatter = new Intl.DateTimeFormat(undefined, {
10370
+ const localeCode = this.locale?.code || undefined;
10371
+ const formatter = new Intl.DateTimeFormat(localeCode, {
10308
10372
  weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
10309
10373
  });
10310
10374
  return formatter.format(date);
@@ -14342,7 +14406,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
14342
14406
  }
14343
14407
  };
14344
14408
 
14345
- var formkitVersion$1 = '202605182202';
14409
+ var formkitVersion$1 = '202605182353';
14346
14410
 
14347
14411
  let AuroElement$2 = class AuroElement extends i$1 {
14348
14412
  static get properties() {
@@ -15263,6 +15327,14 @@ class AuroDropdown extends AuroElement$2 {
15263
15327
  }
15264
15328
  };
15265
15329
  this.addEventListener('keydown', this._bibTabHandler);
15330
+
15331
+ // Move initial focus into the bib content, matching FocusTrap behavior
15332
+ requestAnimationFrame(() => {
15333
+ const focusables = getFocusableElements(this.bibContent);
15334
+ if (focusables.length) {
15335
+ focusables[0].focus();
15336
+ }
15337
+ });
15266
15338
  } else {
15267
15339
  // Normal desktop: use FocusTrap on the bib element
15268
15340
  this.focusTrap = new FocusTrap(this.bibContent);
@@ -15294,7 +15366,8 @@ class AuroDropdown extends AuroElement$2 {
15294
15366
  * Sets `inert` on sibling elements of the dropdown's top-level host
15295
15367
  * so that content outside the dropdown is not interactive while the modal is open.
15296
15368
  * Walks up through shadow DOM boundaries to find the outermost host element
15297
- * in the light DOM, then sets `inert` on that element's siblings.
15369
+ * in the light DOM, then sets `inert` on siblings at each ancestor level
15370
+ * to ensure all page content outside the host subtree is inert.
15298
15371
  * @private
15299
15372
  */
15300
15373
  _setPageInert() {
@@ -15313,15 +15386,18 @@ class AuroDropdown extends AuroElement$2 {
15313
15386
  host = host.getRootNode().host;
15314
15387
  }
15315
15388
 
15316
- const parent = host.parentElement;
15317
-
15318
- if (parent) {
15389
+ // Walk up the ancestor chain, inerting siblings at each level
15390
+ // to ensure the entire page outside the host subtree is inert.
15391
+ let current = host;
15392
+ while (current.parentElement) {
15393
+ const parent = current.parentElement;
15319
15394
  for (const sibling of parent.children) {
15320
- if (sibling !== host && !sibling.inert) {
15395
+ if (sibling !== current && !sibling.inert) {
15321
15396
  sibling.inert = true;
15322
15397
  this._inertSiblings.push(sibling);
15323
15398
  }
15324
15399
  }
15400
+ current = parent;
15325
15401
  }
15326
15402
  }
15327
15403
 
@@ -22279,7 +22355,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
22279
22355
  }
22280
22356
  };
22281
22357
 
22282
- var formkitVersion = '202605182202';
22358
+ var formkitVersion = '202605182353';
22283
22359
 
22284
22360
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
22285
22361
  // See LICENSE in the project root for license information.
@@ -23534,11 +23610,10 @@ function applyKeyboardStrategy(component, strategy, options = {}) {
23534
23610
  // components/datepicker/docs/partials/keyboardBehavior.md
23535
23611
  //
23536
23612
  // Current behavior (transitional — full bib keyboard navigation is planned for a future iteration):
23537
- // - The bib opens and closes via pointer/touch interaction only.
23538
23613
  // - Escape closes the bib and prevents the event from reaching parent containers.
23539
- // - Space opens the bib when it is closed.
23614
+ // - Enter opens the bib when it is closed (trigger input only, not clear button).
23615
+ // - Space opens the bib when it is closed (trigger input only, not clear button).
23540
23616
  // - Tab uses the browser's default tabindex sequence across trigger controls.
23541
- // - Enter does not open or close the bib.
23542
23617
  //
23543
23618
  // This file is an intentional placeholder for most keys. When datepicker bib keyboard navigation is
23544
23619
  // added, handlers should go here following the same strategy pattern used by
@@ -23562,7 +23637,13 @@ const datepickerKeyboardStrategy = {
23562
23637
  return;
23563
23638
  }
23564
23639
 
23565
- // Prevent the space character from being typed into the input.
23640
+ // Only open from the trigger input, not the clear button or other slotted elements.
23641
+ // evt.target is retargeted to the host in shadow DOM, so use composedPath() to find the real origin.
23642
+ const path = evt.composedPath();
23643
+ if (path.some(el => el.getAttribute?.('slot')?.includes('clear'))) {
23644
+ return;
23645
+ }
23646
+
23566
23647
  evt.preventDefault();
23567
23648
 
23568
23649
  component.dropdown.show();
@@ -23573,7 +23654,13 @@ const datepickerKeyboardStrategy = {
23573
23654
  return;
23574
23655
  }
23575
23656
 
23576
- // Prevent the space character from being typed into the input.
23657
+ // Only open from the trigger input, not the clear button or other slotted elements.
23658
+ // evt.target is retargeted to the host in shadow DOM, so use composedPath() to find the real origin.
23659
+ const path = evt.composedPath();
23660
+ if (path.some(el => el.getAttribute?.('slot')?.includes('clear'))) {
23661
+ return;
23662
+ }
23663
+
23577
23664
  evt.preventDefault();
23578
23665
 
23579
23666
  component.dropdown.show();
@@ -24538,9 +24625,10 @@ class AuroDatePicker extends AuroElement {
24538
24625
 
24539
24626
  // Show the month containing the selected date (or today) instead of
24540
24627
  // whichever month the user last navigated to.
24628
+ // Respect consumer-provided centralDate/calendarStartDate if no value is set.
24541
24629
  if (this.value && this.util.validDateStr(this.value, this.format)) {
24542
24630
  this.calendarRenderUtil.updateCentralDate(this, this.formattedValue);
24543
- } else if (!this.minDate) {
24631
+ } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
24544
24632
  this.calendarRenderUtil.updateCentralDate(this, new Date());
24545
24633
  }
24546
24634
  }
@@ -24831,6 +24919,11 @@ class AuroDatePicker extends AuroElement {
24831
24919
  } else {
24832
24920
  this.value = newDate;
24833
24921
  }
24922
+
24923
+ // For single-date picker, close the bib and return focus to trigger after selection
24924
+ if (!this.range) {
24925
+ this.hideBib();
24926
+ }
24834
24927
  }
24835
24928
  }
24836
24929
 
@@ -25003,10 +25096,28 @@ class AuroDatePicker extends AuroElement {
25003
25096
  this.setHasValue();
25004
25097
  }
25005
25098
 
25099
+ if (changedProperties.has('blackoutDates')) {
25100
+ // Force calendar cells to re-render with updated blackout state.
25101
+ // requestUpdate on the calendar alone is insufficient because cells
25102
+ // don't receive blackoutDates as a bound property. Dispatching the
25103
+ // slot content event triggers handleSlotContent → requestUpdate on each cell.
25104
+ if (this.calendar) {
25105
+ this.calendar.requestUpdate();
25106
+ this.dispatchEvent(new CustomEvent('auroDatePicker-newSlotContent'));
25107
+ }
25108
+ }
25109
+
25006
25110
  if (changedProperties.has('valueEnd') && this.inputList[1]) {
25007
25111
 
25008
25112
  this.formattedValueEnd = this.util.toNorthAmericanFormat(this.valueEnd, this.format);
25009
25113
 
25114
+ if (this.cellClickActive) {
25115
+ this.cellClickActive = false;
25116
+ this.wasCellClick = true;
25117
+ } else {
25118
+ this.wasCellClick = false;
25119
+ }
25120
+
25010
25121
  // update the calendar
25011
25122
  if (this.valueEnd && this.util.validDateStr(this.valueEnd, this.format)) {
25012
25123
  this.calendar.dateTo = this.convertToWcValidTime(this.formattedValueEnd);
@@ -25695,18 +25806,20 @@ function blackoutLabelExample() {
25695
25806
  const yyyy = current.getFullYear();
25696
25807
  const slotDateStr = `${mm}_${dd}_${yyyy}`;
25697
25808
 
25698
- // Randomly mark ~30% of dates as blackout
25699
- const isSoldOut = Math.random() < 0.3;
25809
+ // Mark every 3rd date as blackout (deterministic pattern)
25810
+ const dayOfMonth = current.getDate();
25811
+ const isSoldOut = dayOfMonth % 3 === 0;
25700
25812
 
25701
25813
  if (isSoldOut) {
25702
- blackoutDates.push(current.toISOString().split('T')[0]);
25814
+ blackoutDates.push(`${yyyy}-${mm}-${dd}`);
25703
25815
 
25704
25816
  const popover = document.createElement('span');
25705
25817
  popover.setAttribute('slot', `popover_${slotDateStr}`);
25706
25818
  popover.textContent = 'There are no tickets available for this date.';
25707
25819
  blackoutDP.appendChild(popover);
25708
25820
  } else {
25709
- const price = Math.floor(Math.random() * 400) + 100;
25821
+ // Use a fixed price based on day of month for deterministic output
25822
+ const price = 150 + (dayOfMonth * 17) % 400;
25710
25823
 
25711
25824
  const dateSlot = document.createElement('span');
25712
25825
  dateSlot.setAttribute('slot', `date_${slotDateStr}`);
@@ -88,7 +88,7 @@
88
88
  </tr>
89
89
  </tbody>
90
90
  </table>
91
- <auro-header level="3" id="keyEvents-calendar">Calendar grid</auro-header>
91
+ <auro-header level="3" id="keyEvents-calendarGrid">Calendar grid</auro-header>
92
92
  <p>When the calendar bib is open, one date cell is the <em>active</em> cell (roving <code>tabindex="0"</code>). All other cells have <code>tabindex="-1"</code>. Arrow keys move the active cell without wrapping — when a boundary is reached the calendar navigates to the adjacent month.</p>
93
93
  <table>
94
94
  <thead>