@aurodesignsystem-dev/auro-formkit 0.0.0-pr1475.2 → 0.0.0-pr1475.4

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 (47) 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 +22 -3
  7. package/components/combobox/demo/getting-started.min.js +22 -3
  8. package/components/combobox/demo/index.min.js +22 -3
  9. package/components/combobox/dist/index.js +22 -3
  10. package/components/combobox/dist/registered.js +22 -3
  11. package/components/counter/demo/customize.min.js +21 -2
  12. package/components/counter/demo/index.min.js +21 -2
  13. package/components/counter/dist/index.js +45 -441
  14. package/components/counter/dist/registered.js +1 -1
  15. package/components/datepicker/demo/customize.min.js +126 -49
  16. package/components/datepicker/demo/index.js +4 -1
  17. package/components/datepicker/demo/index.md +2 -2
  18. package/components/datepicker/demo/index.min.js +131 -51
  19. package/components/datepicker/dist/index.js +126 -49
  20. package/components/datepicker/dist/registered.js +126 -49
  21. package/components/datepicker/dist/src/auro-calendar-cell.d.ts +13 -9
  22. package/components/dropdown/demo/customize.min.js +20 -1
  23. package/components/dropdown/demo/getting-started.min.js +20 -1
  24. package/components/dropdown/demo/index.min.js +20 -1
  25. package/components/dropdown/dist/index.js +20 -1
  26. package/components/dropdown/dist/registered.js +20 -1
  27. package/components/form/demo/customize.min.js +1042 -908
  28. package/components/form/demo/getting-started.min.js +1042 -908
  29. package/components/form/demo/index.min.js +1042 -908
  30. package/components/form/demo/registerDemoDeps.min.js +1037 -903
  31. package/components/input/demo/customize.min.js +1 -1
  32. package/components/input/demo/getting-started.min.js +1 -1
  33. package/components/input/demo/index.min.js +1 -1
  34. package/components/input/dist/index.js +1 -1
  35. package/components/input/dist/registered.js +1 -1
  36. package/components/radio/demo/customize.min.js +1 -1
  37. package/components/radio/demo/getting-started.min.js +1 -1
  38. package/components/radio/demo/index.min.js +1 -1
  39. package/components/radio/dist/index.js +1 -1
  40. package/components/radio/dist/registered.js +1 -1
  41. package/components/select/demo/customize.min.js +21 -2
  42. package/components/select/demo/getting-started.min.js +21 -2
  43. package/components/select/demo/index.min.js +21 -2
  44. package/components/select/dist/index.js +21 -2
  45. package/components/select/dist/registered.js +21 -2
  46. package/custom-elements.json +13 -22
  47. package/package.json +1 -1
@@ -1471,7 +1471,7 @@ class AuroHelpText extends LitElement {
1471
1471
  }
1472
1472
  }
1473
1473
 
1474
- var formkitVersion = '202605182240';
1474
+ var formkitVersion = '202605190056';
1475
1475
 
1476
1476
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1477
1477
  // See LICENSE in the project root for license information.
@@ -8084,19 +8084,6 @@ class AuroCalendarCell extends i$1 {
8084
8084
  }
8085
8085
  }
8086
8086
 
8087
- /**
8088
- * Handles Enter/Space key on the cell button.
8089
- * @private
8090
- * @param {KeyboardEvent} event - The keyboard event.
8091
- * @returns {void}
8092
- */
8093
- handleKeyDown(event) {
8094
- if (event.key === 'Enter' || event.key === ' ') {
8095
- event.preventDefault();
8096
- this.handleTap();
8097
- }
8098
- }
8099
-
8100
8087
  /**
8101
8088
  * Handles user hover events and dispatches a custom event.
8102
8089
  * @private
@@ -8139,6 +8126,13 @@ class AuroCalendarCell extends i$1 {
8139
8126
  return false;
8140
8127
  }
8141
8128
 
8129
+ // Check against disabledDays timestamps (legacy path)
8130
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
8131
+ if (this.disabledDays.findIndex(d => parseInt(d, 10) === this.day.date) !== -1) {
8132
+ return true;
8133
+ }
8134
+ }
8135
+
8142
8136
  // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
8143
8137
  const blackoutDates = this.datepicker?.blackoutDates;
8144
8138
 
@@ -8157,8 +8151,10 @@ class AuroCalendarCell extends i$1 {
8157
8151
  }
8158
8152
 
8159
8153
  /**
8160
- * Checks if the current date is a valid date depending on the min and max values.
8161
- * Sets the disabled attribute for both out-of-range and blackout dates.
8154
+ * Checks if the current date is disabled based on min/max range or the
8155
+ * legacy disabledDays timestamp list. Sets the `disabled` attribute on the
8156
+ * host when the date falls outside the allowed range or appears in
8157
+ * disabledDays. Note: blackout dates are handled separately by `isBlackout()`.
8162
8158
  * @private
8163
8159
  * @param {Object} day - An object containing the dateFrom and day of month values.
8164
8160
  * @param {Number} min - The minimum date value.
@@ -8203,8 +8199,9 @@ class AuroCalendarCell extends i$1 {
8203
8199
 
8204
8200
  const date = new Date(this.day.date * 1000);
8205
8201
 
8206
- // Generate localized full date string
8207
- const dateFormatter = new Intl.DateTimeFormat(undefined, {
8202
+ // Generate localized full date string using the configured locale
8203
+ const localeCode = this.locale?.code || undefined;
8204
+ const dateFormatter = new Intl.DateTimeFormat(localeCode, {
8208
8205
  weekday: 'long',
8209
8206
  year: 'numeric',
8210
8207
  month: 'long',
@@ -8213,7 +8210,7 @@ class AuroCalendarCell extends i$1 {
8213
8210
 
8214
8211
  let label = dateFormatter.format(date);
8215
8212
 
8216
- // appending popover content here so that it get's read in a logical order with the other date content.
8213
+ // appending popover content here so that it gets read in a logical order with the other date content.
8217
8214
  if (this.hasPopoverContent) {
8218
8215
  label += `, ${this.querySelector(`[slot="popover_${this.dateStr}"]`).innerText.trim()}`;
8219
8216
  }
@@ -8445,10 +8442,22 @@ class AuroCalendarCell extends i$1 {
8445
8442
  this.handleSlotContent();
8446
8443
  });
8447
8444
 
8445
+ this.calendarMonth = calendarMonth;
8446
+ this.configurePopover();
8447
+ }
8448
+
8449
+ /**
8450
+ * Configures the popover instance with the calendar month boundary.
8451
+ * Called from firstUpdated and updated because the popover element is only
8452
+ * rendered after hasPopoverContent becomes true (set by handleSlotContent).
8453
+ * @private
8454
+ * @returns {void}
8455
+ */
8456
+ configurePopover() {
8448
8457
  this.auroPopover = this.shadowRoot.querySelector(this.popoverTag._$litStatic$);
8449
8458
 
8450
- if (this.auroPopover) {
8451
- this.auroPopover.boundary = calendarMonth;
8459
+ if (this.auroPopover && this.calendarMonth) {
8460
+ this.auroPopover.boundary = this.calendarMonth;
8452
8461
  }
8453
8462
  }
8454
8463
 
@@ -8461,6 +8470,11 @@ class AuroCalendarCell extends i$1 {
8461
8470
  this.setDateSlotName();
8462
8471
  this.handleSlotContent();
8463
8472
  }
8473
+
8474
+ // Configure popover when it first becomes rendered
8475
+ if (properties.has('hasPopoverContent') && this.hasPopoverContent) {
8476
+ this.updateComplete.then(() => this.configurePopover());
8477
+ }
8464
8478
  }
8465
8479
 
8466
8480
  /**
@@ -8717,8 +8731,12 @@ class AuroCalendarMonth extends RangeDatepickerCalendar {
8717
8731
  }
8718
8732
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
8719
8733
  // Find the target day (same day-of-week, +/- 7 days)
8734
+ // Use Date arithmetic instead of fixed seconds to handle DST correctly
8720
8735
  const increment = key === 'ArrowDown' ? 7 : -7;
8721
- const targetDate = activeCell.day.date + (increment * 86400); // 86400 seconds per day
8736
+ const currentDate = new Date(activeCell.day.date * 1000);
8737
+ currentDate.setDate(currentDate.getDate() + increment);
8738
+ currentDate.setHours(0, 0, 0, 0);
8739
+ const targetDate = Math.floor(currentDate.getTime() / 1000);
8722
8740
 
8723
8741
  // Look for the target date in this month's focusable cells
8724
8742
  targetCell = focusableCells.find(cell => cell.day.date === targetDate);
@@ -8782,7 +8800,7 @@ class AuroCalendarMonth extends RangeDatepickerCalendar {
8782
8800
  var _a, _b;
8783
8801
 
8784
8802
  return b$5 `
8785
- <div aria-labelledby="${this.getHeadingId()}" @keydown="${this.handleGridKeyDown}">
8803
+ <div aria-labelledby="${this.getHeadingId()}">
8786
8804
  <div class="header">
8787
8805
  ${this.renderPrevButton()}
8788
8806
  <div class="headerTitle heading-xs" id="${this.getHeadingId()}" aria-live="polite" aria-atomic="true">
@@ -8797,7 +8815,7 @@ class AuroCalendarMonth extends RangeDatepickerCalendar {
8797
8815
  ${this.renderNextButton()}
8798
8816
  </div>
8799
8817
 
8800
- <div class="table" role="grid" aria-labelledby="${this.getHeadingId()}">
8818
+ <div class="table" role="grid" aria-labelledby="${this.getHeadingId()}" @keydown="${this.handleGridKeyDown}">
8801
8819
  <div class="thead" role="rowgroup">
8802
8820
  <div class="tr" role="row">
8803
8821
  ${(_a = this.dayNamesOfTheWeek) === null || _a === void 0 ? void 0 : _a.map((dayNameOfWeek, index) => this.renderDayOfWeek(dayNameOfWeek, index))}
@@ -9621,7 +9639,7 @@ class AuroBibtemplate extends i$1 {
9621
9639
  }
9622
9640
  }
9623
9641
 
9624
- var formkitVersion$2 = '202605182240';
9642
+ var formkitVersion$2 = '202605190056';
9625
9643
 
9626
9644
  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}
9627
9645
  `,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}}
@@ -9911,7 +9929,8 @@ class AuroCalendar extends RangeDatepicker {
9911
9929
  */
9912
9930
  announceMonthChange() {
9913
9931
  const date = new Date(this.centralDate);
9914
- const formatter = new Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' });
9932
+ const localeCode = this.locale?.code || undefined;
9933
+ const formatter = new Intl.DateTimeFormat(localeCode, { month: 'long', year: 'numeric' });
9915
9934
  this.announceSelection(formatter.format(date));
9916
9935
  }
9917
9936
 
@@ -10091,9 +10110,19 @@ class AuroCalendar extends RangeDatepicker {
10091
10110
  * @returns {Number|undefined} Unix timestamp (seconds) of the date to activate, or undefined.
10092
10111
  */
10093
10112
  computeActiveDate() {
10094
- const ONE_DAY = 86400; // seconds
10095
10113
  const MAX_SCAN_DAYS = 366; // scan at most ~1 year in each direction
10096
10114
 
10115
+ /**
10116
+ * Adds days to a timestamp using Date arithmetic to handle DST correctly.
10117
+ * Returns a local-midnight-aligned timestamp in seconds.
10118
+ */
10119
+ const addDays = (ts, days) => {
10120
+ const d = new Date(ts * 1000);
10121
+ d.setDate(d.getDate() + days);
10122
+ d.setHours(0, 0, 0, 0);
10123
+ return Math.floor(d.getTime() / 1000);
10124
+ };
10125
+
10097
10126
  const rawMin = Number(this.min);
10098
10127
  const rawMax = Number(this.max);
10099
10128
 
@@ -10106,11 +10135,13 @@ class AuroCalendar extends RangeDatepicker {
10106
10135
  (this.disabledDays || []).map(d => parseInt(d, 10))
10107
10136
  );
10108
10137
 
10109
- // Also include ISO-format blackoutDates from the datepicker if available
10138
+ // Also include ISO-format blackoutDates from the datepicker if available.
10139
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
10110
10140
  const isoBlackouts = this.datepicker?.blackoutDates;
10111
10141
  if (Array.isArray(isoBlackouts)) {
10112
10142
  for (const isoStr of isoBlackouts) {
10113
- const ts = Math.floor(new Date(isoStr).setHours(0, 0, 0, 0) / 1000);
10143
+ const parts = isoStr.split('-');
10144
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
10114
10145
  if (Number.isFinite(ts)) blackoutSet.add(ts);
10115
10146
  }
10116
10147
  }
@@ -10139,31 +10170,43 @@ class AuroCalendar extends RangeDatepicker {
10139
10170
  if (isEnabled(now)) return now;
10140
10171
 
10141
10172
  // 3. First future enabled date (scan forward from tomorrow, capped by max and MAX_SCAN_DAYS).
10142
- const scanMax = Number.isFinite(maxTs)
10143
- ? Math.min(maxTs, now + (MAX_SCAN_DAYS * ONE_DAY))
10144
- : now + (MAX_SCAN_DAYS * ONE_DAY);
10145
-
10146
- for (let ts = now + ONE_DAY; ts <= scanMax; ts += ONE_DAY) {
10173
+ for (let idx = 1; idx <= MAX_SCAN_DAYS; idx++) {
10174
+ const ts = addDays(now, idx);
10175
+ if (Number.isFinite(maxTs) && ts > maxTs) break;
10147
10176
  if (isEnabled(ts)) return ts;
10148
10177
  }
10149
10178
 
10150
10179
  // 4. First previous enabled date (scan backward from yesterday, capped by min and MAX_SCAN_DAYS).
10151
- const scanMin = Number.isFinite(minTs)
10152
- ? Math.max(minTs, now - (MAX_SCAN_DAYS * ONE_DAY))
10153
- : now - (MAX_SCAN_DAYS * ONE_DAY);
10154
-
10155
- for (let ts = now - ONE_DAY; ts >= scanMin; ts -= ONE_DAY) {
10180
+ for (let idx = 1; idx <= MAX_SCAN_DAYS; idx++) {
10181
+ const ts = addDays(now, -idx);
10182
+ if (Number.isFinite(minTs) && ts < minTs) break;
10156
10183
  if (isEnabled(ts)) return ts;
10157
10184
  }
10158
10185
 
10159
10186
  // 5. If scans missed (e.g. min/max range is far from today), fall back to
10160
10187
  // the first enabled date in the [min, max] range.
10161
10188
  if (Number.isFinite(minTs) && Number.isFinite(maxTs)) {
10162
- for (let ts = minTs; ts <= maxTs; ts += ONE_DAY) {
10189
+ let ts = minTs;
10190
+ for (let idx = 0; ts <= maxTs; idx++) {
10163
10191
  if (isEnabled(ts)) return ts;
10192
+ ts = addDays(minTs, idx + 1);
10164
10193
  }
10165
10194
  }
10166
10195
 
10196
+ // 5b. Unbounded min with a finite max far in the past (e.g. birth-date picker):
10197
+ // scan backward from max for up to MAX_SCAN_DAYS.
10198
+ if (!Number.isFinite(minTs) && Number.isFinite(maxTs)) {
10199
+ for (let idx = 0; idx <= MAX_SCAN_DAYS; idx++) {
10200
+ const ts = addDays(maxTs, -idx);
10201
+ if (isEnabled(ts)) return ts;
10202
+ }
10203
+ }
10204
+
10205
+ // 6. All dates are blackout — fall back to the first in-range date so focus
10206
+ // still lands on a focusable (but not selectable) cell.
10207
+ if (Number.isFinite(minTs) && isInRange(minTs)) return minTs;
10208
+ if (isInRange(now)) return now;
10209
+
10167
10210
  return undefined;
10168
10211
  }
10169
10212
 
@@ -10222,8 +10265,12 @@ class AuroCalendar extends RangeDatepicker {
10222
10265
  }
10223
10266
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
10224
10267
  // Vertical navigation: find same day-of-week +/- 7 days
10268
+ // Use Date arithmetic instead of fixed seconds to handle DST correctly
10225
10269
  const increment = key === 'ArrowDown' ? 7 : -7;
10226
- const targetDate = fromDate + (increment * 86400);
10270
+ const currentDate = new Date(fromDate * 1000);
10271
+ currentDate.setDate(currentDate.getDate() + increment);
10272
+ currentDate.setHours(0, 0, 0, 0);
10273
+ const targetDate = Math.floor(currentDate.getTime() / 1000);
10227
10274
 
10228
10275
  const allCells = this.getAllFocusableCells();
10229
10276
  let targetCell = allCells.find(cell => cell.day && cell.day.date === targetDate);
@@ -10318,7 +10365,8 @@ class AuroCalendar extends RangeDatepicker {
10318
10365
  */
10319
10366
  formatAnnouncementDate(timestamp) {
10320
10367
  const date = new Date(parseInt(timestamp, 10) * 1000);
10321
- const formatter = new Intl.DateTimeFormat(undefined, {
10368
+ const localeCode = this.locale?.code || undefined;
10369
+ const formatter = new Intl.DateTimeFormat(localeCode, {
10322
10370
  weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
10323
10371
  });
10324
10372
  return formatter.format(date);
@@ -14356,7 +14404,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
14356
14404
  }
14357
14405
  };
14358
14406
 
14359
- var formkitVersion$1 = '202605182240';
14407
+ var formkitVersion$1 = '202605190056';
14360
14408
 
14361
14409
  let AuroElement$2 = class AuroElement extends i$1 {
14362
14410
  static get properties() {
@@ -15077,6 +15125,17 @@ class AuroDropdown extends AuroElement$2 {
15077
15125
  this._clearPageInert();
15078
15126
  }
15079
15127
  }
15128
+
15129
+ // Handle desktopModal toggled while the dropdown is already open.
15130
+ // Re-initialize focus trapping and page inert state to match the new mode.
15131
+ if (changedProperties.has('desktopModal') && this.isPopoverVisible && !this.isBibFullscreen) {
15132
+ this.updateFocusTrap();
15133
+ if (this.desktopModal) {
15134
+ this._setPageInert();
15135
+ } else {
15136
+ this._clearPageInert();
15137
+ }
15138
+ }
15080
15139
  }
15081
15140
 
15082
15141
  /**
@@ -15277,6 +15336,14 @@ class AuroDropdown extends AuroElement$2 {
15277
15336
  }
15278
15337
  };
15279
15338
  this.addEventListener('keydown', this._bibTabHandler);
15339
+
15340
+ // Move initial focus into the bib content, matching FocusTrap behavior
15341
+ requestAnimationFrame(() => {
15342
+ const focusables = getFocusableElements(this.bibContent);
15343
+ if (focusables.length) {
15344
+ focusables[0].focus();
15345
+ }
15346
+ });
15280
15347
  } else {
15281
15348
  // Normal desktop: use FocusTrap on the bib element
15282
15349
  this.focusTrap = new FocusTrap(this.bibContent);
@@ -22297,7 +22364,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
22297
22364
  }
22298
22365
  };
22299
22366
 
22300
- var formkitVersion = '202605182240';
22367
+ var formkitVersion = '202605190056';
22301
22368
 
22302
22369
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
22303
22370
  // See LICENSE in the project root for license information.
@@ -23579,8 +23646,11 @@ const datepickerKeyboardStrategy = {
23579
23646
  return;
23580
23647
  }
23581
23648
 
23582
- // Only open from the trigger input, not the clear button or other elements
23583
- if (evt.target?.hasAttribute?.('slot') && evt.target.getAttribute('slot').includes('clear')) {
23649
+ // Only open from the trigger input, not the clear button or other internal elements.
23650
+ // evt.target is retargeted to the host in shadow DOM, so use composedPath()
23651
+ // to find the real origin. The clear button is rendered with class "clearBtn".
23652
+ const path = evt.composedPath();
23653
+ if (path.some(el => el.classList?.contains('clearBtn'))) {
23584
23654
  return;
23585
23655
  }
23586
23656
 
@@ -23594,8 +23664,11 @@ const datepickerKeyboardStrategy = {
23594
23664
  return;
23595
23665
  }
23596
23666
 
23597
- // Only open from the trigger input, not the clear button or other elements
23598
- if (evt.target?.hasAttribute?.('slot') && evt.target.getAttribute('slot').includes('clear')) {
23667
+ // Only open from the trigger input, not the clear button or other internal elements.
23668
+ // evt.target is retargeted to the host in shadow DOM, so use composedPath()
23669
+ // to find the real origin. The clear button is rendered with class "clearBtn".
23670
+ const path = evt.composedPath();
23671
+ if (path.some(el => el.classList?.contains('clearBtn'))) {
23599
23672
  return;
23600
23673
  }
23601
23674
 
@@ -24659,7 +24732,7 @@ class AuroDatePicker extends AuroElement {
24659
24732
  bibEl.close();
24660
24733
  bibEl.open(true);
24661
24734
  doubleRaf(() => {
24662
- this.calendar.focusCloseButton();
24735
+ this.focusActiveCellWhenReady();
24663
24736
  });
24664
24737
  }
24665
24738
  });
@@ -25035,9 +25108,13 @@ class AuroDatePicker extends AuroElement {
25035
25108
  }
25036
25109
 
25037
25110
  if (changedProperties.has('blackoutDates')) {
25038
- // Force calendar cells to re-render with updated blackout state
25111
+ // Force calendar cells to re-render with updated blackout state.
25112
+ // requestUpdate on the calendar alone is insufficient because cells
25113
+ // don't receive blackoutDates as a bound property. Dispatching the
25114
+ // slot content event triggers handleSlotContent → requestUpdate on each cell.
25039
25115
  if (this.calendar) {
25040
25116
  this.calendar.requestUpdate();
25117
+ this.dispatchEvent(new CustomEvent('auroDatePicker-newSlotContent'));
25041
25118
  }
25042
25119
  }
25043
25120
 
@@ -8,7 +8,10 @@ export function initExamples(initCount) {
8
8
  initCount = initCount || 0;
9
9
 
10
10
  try {
11
- blackoutLabelExample();
11
+ // Only run when the demo element exists on the current page
12
+ if (document.querySelector('#blackoutLabelExample')) {
13
+ blackoutLabelExample();
14
+ }
12
15
  } catch {
13
16
  if (initCount <= 20) {
14
17
  // setTimeout handles issue where content is sometimes loaded after the functions get called
@@ -180,7 +180,7 @@
180
180
  <div class="exampleWrapper">
181
181
  <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/popover-slot.html) -->
182
182
  <!-- The below content is automatically added from ./../apiExamples/popover-slot.html -->
183
- <auro-datepicker centralDate="12/03/2023" minDate="12/04/2023" maxDate="12/09/2023">
183
+ <auro-datepicker centralDate="12/03/2023" calendarStartDate="12/01/2023" calendarEndDate="12/31/2023" minDate="12/04/2023" maxDate="12/09/2023">
184
184
  <span slot="bib.fullscreen.headline">Popover Slot Example</span>
185
185
  <span slot="fromLabel">Choose a date</span>
186
186
  <span slot="bib.fullscreen.fromLabel">Choose a date</span>
@@ -205,7 +205,7 @@
205
205
  <span slot="trigger">See code</span>
206
206
  <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/popover-slot.html) -->
207
207
  <!-- The below code snippet is automatically added from ./../apiExamples/popover-slot.html -->
208
- <pre class="language-html"><code class="language-html">&lt;auro-datepicker centralDate="12/03/2023" minDate="12/04/2023" maxDate="12/09/2023"&gt;
208
+ <pre class="language-html"><code class="language-html">&lt;auro-datepicker centralDate="12/03/2023" calendarStartDate="12/01/2023" calendarEndDate="12/31/2023" minDate="12/04/2023" maxDate="12/09/2023"&gt;
209
209
  &lt;span slot="bib.fullscreen.headline"&gt;Popover Slot Example&lt;/span&gt;
210
210
  &lt;span slot="fromLabel"&gt;Choose a date&lt;/span&gt;
211
211
  &lt;span slot="bib.fullscreen.fromLabel"&gt;Choose a date&lt;/span&gt;