@aurodesignsystem-dev/auro-formkit 0.0.0-pr1510.0 → 0.0.0-pr1510.1

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 (125) 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 +3 -3
  7. package/components/combobox/demo/getting-started.min.js +3 -3
  8. package/components/combobox/demo/index.min.js +3 -3
  9. package/components/combobox/dist/index.js +3 -3
  10. package/components/combobox/dist/registered.js +3 -3
  11. package/components/counter/demo/customize.min.js +2 -2
  12. package/components/counter/demo/index.min.js +2 -2
  13. package/components/counter/dist/index.js +2 -2
  14. package/components/counter/dist/registered.js +2 -2
  15. package/components/datepicker/demo/accessibility.md +1 -1
  16. package/components/datepicker/demo/api.md +2 -2
  17. package/components/datepicker/demo/customize.min.js +155 -66
  18. package/components/datepicker/demo/index.min.js +155 -66
  19. package/components/datepicker/dist/{src/auro-calendar.d.ts → auro-calendar.d.ts} +3 -1
  20. package/components/datepicker/dist/{src/auro-datepicker.d.ts → auro-datepicker.d.ts} +5 -2
  21. package/components/datepicker/dist/blackoutUtils.d.ts +43 -0
  22. package/components/datepicker/dist/index.js +155 -66
  23. package/components/datepicker/dist/registered.js +155 -66
  24. package/components/dropdown/demo/customize.min.js +1 -1
  25. package/components/dropdown/demo/getting-started.min.js +1 -1
  26. package/components/dropdown/demo/index.min.js +1 -1
  27. package/components/dropdown/dist/index.js +1 -1
  28. package/components/dropdown/dist/registered.js +1 -1
  29. package/components/form/demo/customize.min.js +165 -76
  30. package/components/form/demo/getting-started.min.js +165 -76
  31. package/components/form/demo/index.min.js +165 -76
  32. package/components/form/demo/registerDemoDeps.min.js +165 -76
  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 +2 -2
  44. package/components/select/demo/getting-started.min.js +2 -2
  45. package/components/select/demo/index.min.js +2 -2
  46. package/components/select/dist/index.js +2 -2
  47. package/components/select/dist/registered.js +2 -2
  48. package/custom-elements.json +453 -343
  49. package/package.json +5 -2
  50. package/components/checkbox/demo/customize.js +0 -22
  51. package/components/checkbox/demo/demo-support.js +0 -1
  52. package/components/checkbox/demo/getting-started.js +0 -22
  53. package/components/checkbox/demo/index.js +0 -8
  54. package/components/checkbox/demo/styles.scss +0 -1
  55. package/components/combobox/demo/customize.js +0 -24
  56. package/components/combobox/demo/demo-support.js +0 -1
  57. package/components/combobox/demo/getting-started.js +0 -21
  58. package/components/combobox/demo/index.js +0 -23
  59. package/components/combobox/demo/styles.scss +0 -1
  60. package/components/counter/demo/customize.js +0 -21
  61. package/components/counter/demo/demo-support.js +0 -1
  62. package/components/counter/demo/index.js +0 -21
  63. package/components/counter/demo/styles.scss +0 -1
  64. package/components/datepicker/demo/customize.js +0 -17
  65. package/components/datepicker/demo/demo-support.js +0 -1
  66. package/components/datepicker/demo/index.js +0 -23
  67. package/components/datepicker/demo/styles.scss +0 -1
  68. package/components/dropdown/demo/customize.js +0 -9
  69. package/components/dropdown/demo/demo-support.js +0 -1
  70. package/components/dropdown/demo/getting-started.js +0 -9
  71. package/components/dropdown/demo/index.js +0 -16
  72. package/components/dropdown/demo/styles.scss +0 -1
  73. package/components/form/demo/customize.js +0 -28
  74. package/components/form/demo/demo-support.js +0 -1
  75. package/components/form/demo/getting-started.js +0 -9
  76. package/components/form/demo/index.js +0 -5
  77. package/components/form/demo/registerDemoDeps.js +0 -23
  78. package/components/form/demo/styles.scss +0 -1
  79. package/components/input/demo/customize.js +0 -25
  80. package/components/input/demo/demo-support.js +0 -1
  81. package/components/input/demo/getting-started.js +0 -8
  82. package/components/input/demo/index.js +0 -8
  83. package/components/input/demo/styles.css +0 -974
  84. package/components/input/demo/styles.scss +0 -1
  85. package/components/menu/demo/demo-support.js +0 -1
  86. package/components/menu/demo/index.js +0 -25
  87. package/components/menu/demo/styles.scss +0 -1
  88. package/components/radio/demo/customize.js +0 -22
  89. package/components/radio/demo/demo-support.js +0 -1
  90. package/components/radio/demo/getting-started.js +0 -24
  91. package/components/radio/demo/index.js +0 -8
  92. package/components/radio/demo/styles.scss +0 -1
  93. package/components/select/demo/customize.js +0 -11
  94. package/components/select/demo/demo-support.js +0 -1
  95. package/components/select/demo/getting-started.js +0 -26
  96. package/components/select/demo/index.js +0 -11
  97. package/components/select/demo/styles.scss +0 -1
  98. /package/components/datepicker/dist/{src/auro-calendar-cell.d.ts → auro-calendar-cell.d.ts} +0 -0
  99. /package/components/datepicker/dist/{src/auro-calendar-month.d.ts → auro-calendar-month.d.ts} +0 -0
  100. /package/components/datepicker/dist/{src/buttonVersion.d.ts → buttonVersion.d.ts} +0 -0
  101. /package/components/datepicker/dist/{src/datepickerKeyboardStrategy.d.ts → datepickerKeyboardStrategy.d.ts} +0 -0
  102. /package/components/datepicker/dist/{src/iconVersion.d.ts → iconVersion.d.ts} +0 -0
  103. /package/components/datepicker/dist/{src/index.d.ts → index.d.ts} +0 -0
  104. /package/components/datepicker/dist/{src/popoverVersion.d.ts → popoverVersion.d.ts} +0 -0
  105. /package/components/datepicker/dist/{src/styles → styles}/classic/color-css.d.ts +0 -0
  106. /package/components/datepicker/dist/{src/styles → styles}/classic/style-css.d.ts +0 -0
  107. /package/components/datepicker/dist/{src/styles → styles}/color-calendar-css.d.ts +0 -0
  108. /package/components/datepicker/dist/{src/styles → styles}/color-cell-css.d.ts +0 -0
  109. /package/components/datepicker/dist/{src/styles → styles}/color-css.d.ts +0 -0
  110. /package/components/datepicker/dist/{src/styles → styles}/color-month-css.d.ts +0 -0
  111. /package/components/datepicker/dist/{src/styles → styles}/shapeSize-css.d.ts +0 -0
  112. /package/components/datepicker/dist/{src/styles → styles}/snowflake/color-css.d.ts +0 -0
  113. /package/components/datepicker/dist/{src/styles → styles}/snowflake/style-css.d.ts +0 -0
  114. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-cell-css.d.ts +0 -0
  115. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-css.d.ts +0 -0
  116. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-month-css.d.ts +0 -0
  117. /package/components/datepicker/dist/{src/styles → styles}/style-css.d.ts +0 -0
  118. /package/components/datepicker/dist/{src/styles → styles}/tokens-css.d.ts +0 -0
  119. /package/components/datepicker/dist/{src/utilities.d.ts → utilities.d.ts} +0 -0
  120. /package/components/datepicker/dist/{src/utilitiesCalendar.d.ts → utilitiesCalendar.d.ts} +0 -0
  121. /package/components/datepicker/dist/{src/utilitiesCalendarRender.d.ts → utilitiesCalendarRender.d.ts} +0 -0
  122. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/day.d.ts +0 -0
  123. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
  124. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
  125. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
@@ -11592,6 +11592,102 @@ let s$2 = class s{registerComponent(e,t){customElements.get(e)||customElements.d
11592
11592
 
11593
11593
  var popoverVersion = '6.0.1';
11594
11594
 
11595
+ /**
11596
+ * Single source of truth for parsing and matching blackout dates across the
11597
+ * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
11598
+ * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
11599
+ * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
11600
+ * `disabledDays` rules are defined exactly once.
11601
+ */
11602
+
11603
+ /**
11604
+ * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
11605
+ * representing local midnight on that calendar day. Returns `null` for
11606
+ * inputs that don't parse to a finite timestamp.
11607
+ *
11608
+ * Uses the `new Date(year, monthIndex, day)` constructor (NOT
11609
+ * `new Date(isoStr)`) so the result is local-midnight rather than UTC
11610
+ * midnight — required to keep the calendar grid aligned with the user's
11611
+ * local calendar day in negative-offset timezones.
11612
+ *
11613
+ * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
11614
+ * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
11615
+ */
11616
+ function parseIsoToTimestamp(isoStr) {
11617
+ if (typeof isoStr !== 'string') {
11618
+ return null;
11619
+ }
11620
+ const parts = isoStr.split('-');
11621
+ if (parts.length !== 3) {
11622
+ return null;
11623
+ }
11624
+ const year = parseInt(parts[0], 10);
11625
+ const month = parseInt(parts[1], 10);
11626
+ const day = parseInt(parts[2], 10);
11627
+ if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
11628
+ return null;
11629
+ }
11630
+ // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
11631
+ // silently normalizes those to a different calendar day, which would
11632
+ // disable the wrong date if we let the result through.
11633
+ if (month < 1 || month > 12 || day < 1 || day > 31) {
11634
+ return null;
11635
+ }
11636
+ const date = new Date(year, month - 1, day);
11637
+ // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
11638
+ // After construction, getFullYear/getMonth/getDate should match the inputs.
11639
+ if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
11640
+ return null;
11641
+ }
11642
+ const ts = Math.floor(date.getTime() / 1000);
11643
+ return Number.isFinite(ts) ? ts : null;
11644
+ }
11645
+
11646
+ /**
11647
+ * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
11648
+ * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
11649
+ * array. Use this for O(1) membership checks in hot paths.
11650
+ *
11651
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11652
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11653
+ * @returns {Set<number>}
11654
+ */
11655
+ function buildBlackoutSet(disabledDays, blackoutDates) {
11656
+ const set = new Set();
11657
+ if (Array.isArray(disabledDays)) {
11658
+ for (const day of disabledDays) {
11659
+ const ts = parseInt(day, 10);
11660
+ if (Number.isFinite(ts)) {
11661
+ set.add(ts);
11662
+ }
11663
+ }
11664
+ }
11665
+ if (Array.isArray(blackoutDates)) {
11666
+ for (const isoStr of blackoutDates) {
11667
+ const ts = parseIsoToTimestamp(isoStr);
11668
+ if (ts !== null) {
11669
+ set.add(ts);
11670
+ }
11671
+ }
11672
+ }
11673
+ return set;
11674
+ }
11675
+
11676
+ /**
11677
+ * One-shot membership test for a single timestamp against both blackout
11678
+ * sources. Allocates a Set on each call; only use this in cold paths
11679
+ * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
11680
+ * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
11681
+ *
11682
+ * @param {number} dateTs - Unix timestamp (seconds) to test.
11683
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11684
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11685
+ * @returns {boolean}
11686
+ */
11687
+ function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
11688
+ return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
11689
+ }
11690
+
11595
11691
  /* eslint-disable curly, max-lines, no-underscore-dangle, no-magic-numbers, no-underscore-dangle, max-params, no-extra-parens, arrow-parens, max-lines, line-comment-position, no-inline-comments, lit/binding-positions, lit/no-invalid-html */
11596
11692
 
11597
11693
  class AuroCalendarCell extends i$1 {
@@ -11790,8 +11886,10 @@ class AuroCalendarCell extends i$1 {
11790
11886
  // consumer or test mutated cell.disabledDays directly), the Set does
11791
11887
  // not reflect that addition — fall through to the per-cell scan only
11792
11888
  // when the reference no longer matches. Production data flow keeps
11793
- // these identical, so this branch stays cold.
11794
- if (this.disabledDays && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
11889
+ // these identical, so this branch stays cold. Guarded with
11890
+ // Array.isArray to match `_getBlackoutSet`'s contract: non-array
11891
+ // values are treated as empty rather than crashing on `.findIndex`.
11892
+ if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
11795
11893
  if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
11796
11894
  return true;
11797
11895
  }
@@ -11800,25 +11898,9 @@ class AuroCalendarCell extends i$1 {
11800
11898
  }
11801
11899
 
11802
11900
  // Pre-firstUpdated fallback — the cell may render once before the
11803
- // ancestor calendar is wired up. Uses the legacy O(N) scan so the
11804
- // result stays correct, just slower for the very first render.
11805
- if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
11806
- (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
11807
- return true;
11808
- }
11809
-
11810
- const blackoutDates = this.datepicker?.blackoutDates;
11811
- if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
11812
- const date = new Date(this.day.date * 1000);
11813
- const yyyy = date.getFullYear();
11814
- const mm = String(date.getMonth() + 1).padStart(2, '0');
11815
- const dd = String(date.getDate()).padStart(2, '0');
11816
- if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
11817
- return true;
11818
- }
11819
- }
11820
-
11821
- return false;
11901
+ // ancestor calendar is wired up. Routes through the shared
11902
+ // blackoutUtils helper so the parsing rules stay in one place.
11903
+ return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
11822
11904
  }
11823
11905
 
11824
11906
  /**
@@ -12218,9 +12300,14 @@ class AuroCalendarCell extends i$1 {
12218
12300
 
12219
12301
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
12220
12302
  if (outOfRange) {
12303
+ // Strip every aria attribute the in-range branch may have set on a
12304
+ // previous render — if a cell flips from in-range to out-of-range
12305
+ // (calendar shifts months, minDate/maxDate change, etc.).
12221
12306
  this.removeAttribute('role');
12222
12307
  this.removeAttribute('aria-label');
12223
12308
  this.removeAttribute('aria-current');
12309
+ this.removeAttribute('aria-selected');
12310
+ this.removeAttribute('aria-disabled');
12224
12311
  return;
12225
12312
  }
12226
12313
 
@@ -13475,7 +13562,7 @@ class AuroBibtemplate extends i$1 {
13475
13562
  }
13476
13563
  }
13477
13564
 
13478
- var formkitVersion$2 = '202606251933';
13565
+ var formkitVersion$2 = '202606252104';
13479
13566
 
13480
13567
  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}
13481
13568
  `,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}}
@@ -14163,11 +14250,15 @@ class AuroCalendar extends RangeDatepicker {
14163
14250
  * @returns {Set<Number>}
14164
14251
  */
14165
14252
  _getBlackoutSet() {
14166
- const disabledDays = this.disabledDays || [];
14253
+ // Guard with Array.isArray so a non-array truthy value (string, object,
14254
+ // etc.) is treated as "no legacy disabledDays" — keeps the deprecation
14255
+ // warning and the memoization key consistent with what buildBlackoutSet
14256
+ // will actually consume (also an Array.isArray check).
14257
+ const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : [];
14167
14258
  const blackoutDates = this.datepicker?.blackoutDates;
14168
- if (this._blackoutSet
14169
- && this._cachedBlackoutDisabledDays === disabledDays
14170
- && this._cachedBlackoutDates === blackoutDates) {
14259
+ if (this._blackoutSet &&
14260
+ this._cachedBlackoutDisabledDays === disabledDays &&
14261
+ this._cachedBlackoutDates === blackoutDates) {
14171
14262
  return this._blackoutSet;
14172
14263
  }
14173
14264
 
@@ -14175,23 +14266,10 @@ class AuroCalendar extends RangeDatepicker {
14175
14266
  this._warnDisabledDaysDeprecated();
14176
14267
  }
14177
14268
 
14178
- const set = new Set(disabledDays.map((day) => parseInt(day, 10)));
14179
-
14180
- // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
14181
- if (Array.isArray(blackoutDates)) {
14182
- for (const isoStr of blackoutDates) {
14183
- const parts = isoStr.split('-');
14184
- const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
14185
- if (Number.isFinite(ts)) {
14186
- set.add(ts);
14187
- }
14188
- }
14189
- }
14190
-
14191
- this._blackoutSet = set;
14269
+ this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
14192
14270
  this._cachedBlackoutDisabledDays = disabledDays;
14193
14271
  this._cachedBlackoutDates = blackoutDates;
14194
- return set;
14272
+ return this._blackoutSet;
14195
14273
  }
14196
14274
 
14197
14275
  /**
@@ -14840,32 +14918,15 @@ class AuroCalendar extends RangeDatepicker {
14840
14918
  }
14841
14919
 
14842
14920
  /**
14843
- * Checks whether a given date is a blackout date.
14921
+ * Checks whether a given date is a blackout date. Delegates to the
14922
+ * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
14923
+ * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
14844
14924
  * @private
14845
14925
  * @param {Number} dateTs - Unix timestamp (seconds).
14846
14926
  * @returns {Boolean} True if the date is blacked out.
14847
14927
  */
14848
14928
  isDateBlackout(dateTs) {
14849
- // Check legacy disabledDays.
14850
- if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
14851
- if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
14852
- return true;
14853
- }
14854
- }
14855
-
14856
- // Check ISO blackoutDates.
14857
- const blackoutDates = this.datepicker?.blackoutDates;
14858
- if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
14859
- const date = new Date(dateTs * 1000);
14860
- const yyyy = date.getFullYear();
14861
- const mm = String(date.getMonth() + 1).padStart(2, '0');
14862
- const dd = String(date.getDate()).padStart(2, '0');
14863
- if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
14864
- return true;
14865
- }
14866
- }
14867
-
14868
- return false;
14929
+ return this._getBlackoutSet().has(dateTs);
14869
14930
  }
14870
14931
 
14871
14932
  /**
@@ -19154,7 +19215,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
19154
19215
  }
19155
19216
  };
19156
19217
 
19157
- var formkitVersion$1 = '202606251933';
19218
+ var formkitVersion$1 = '202606252104';
19158
19219
 
19159
19220
  let AuroElement$2 = class AuroElement extends i$1 {
19160
19221
  static get properties() {
@@ -32754,7 +32815,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
32754
32815
  }
32755
32816
  };
32756
32817
 
32757
- var formkitVersion = '202606251933';
32818
+ var formkitVersion = '202606252104';
32758
32819
 
32759
32820
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32760
32821
  // See LICENSE in the project root for license information.
@@ -34662,7 +34723,10 @@ class AuroDatePicker extends AuroElement {
34662
34723
  },
34663
34724
 
34664
34725
  /**
34665
- * Label announced for cells after the range (or after start when no end is selected).
34726
+ * Label announced for cells after a fully selected range (both
34727
+ * `dateFrom` and `dateTo` are set). While a range is still being
34728
+ * picked (`dateFrom` set, `dateTo` unset), focused cells past the
34729
+ * start use `rangeLabelEndPreview` instead.
34666
34730
  * @default 'after range'
34667
34731
  */
34668
34732
  rangeLabelAfterRange: {
@@ -34718,7 +34782,7 @@ class AuroDatePicker extends AuroElement {
34718
34782
  },
34719
34783
 
34720
34784
  /**
34721
- * Dates that the user should have for reference as part of their decision making when selecting a date.
34785
+ * Dates that the user should have for reference as part of their decision-making when selecting a date.
34722
34786
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
34723
34787
  */
34724
34788
  referenceDates: {
@@ -36045,6 +36109,15 @@ class AuroDatePicker extends AuroElement {
36045
36109
  // Add the tag name as an attribute if it is different than the component name
36046
36110
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
36047
36111
 
36112
+ // If the element was disconnected before this first render finished,
36113
+ // disconnectedCallback's microtask already aborted the controller. The
36114
+ // connectedCallback reinit guard skips that case because `hasUpdated`
36115
+ // is still false. Mint a fresh controller here so configure* registers
36116
+ // listeners against a live signal.
36117
+ if (this._listenerAbortController.signal.aborted) {
36118
+ this._listenerAbortController = new AbortController();
36119
+ }
36120
+
36048
36121
  this.configureDropdown();
36049
36122
  this.configureInput();
36050
36123
  this.configureCalendar();
@@ -36056,6 +36129,22 @@ class AuroDatePicker extends AuroElement {
36056
36129
  connectedCallback() {
36057
36130
  super.connectedCallback();
36058
36131
 
36132
+ // True reconnect after `disconnectedCallback` aborted our controller:
36133
+ // the existing signal is dead, so listeners registered against it
36134
+ // would never fire. Create a fresh controller and re-run the
36135
+ // configure* wiring (each method is idempotent — it just re-caches
36136
+ // child refs and re-registers listeners against the new signal).
36137
+ // `hasUpdated` gates this so the *first* connect (which precedes
36138
+ // firstUpdated) still falls through to firstUpdated's initial wiring.
36139
+ if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
36140
+ this._listenerAbortController = new AbortController();
36141
+ this.configureDropdown();
36142
+ this.configureInput();
36143
+ this.configureCalendar();
36144
+ this.configureDatepicker();
36145
+ this.configureClickHandler();
36146
+ }
36147
+
36059
36148
  this.locale = this.domHandler.getLocale(this);
36060
36149
  }
36061
36150
 
@@ -426,7 +426,9 @@ export class AuroCalendar extends RangeDatepicker {
426
426
  */
427
427
  private getRangePositionLabel;
428
428
  /**
429
- * Checks whether a given date is a blackout date.
429
+ * Checks whether a given date is a blackout date. Delegates to the
430
+ * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
431
+ * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
430
432
  * @private
431
433
  * @param {Number} dateTs - Unix timestamp (seconds).
432
434
  * @returns {Boolean} True if the date is blacked out.
@@ -287,7 +287,10 @@ export class AuroDatePicker extends AuroElement {
287
287
  reflect: boolean;
288
288
  };
289
289
  /**
290
- * Label announced for cells after the range (or after start when no end is selected).
290
+ * Label announced for cells after a fully selected range (both
291
+ * `dateFrom` and `dateTo` are set). While a range is still being
292
+ * picked (`dateFrom` set, `dateTo` unset), focused cells past the
293
+ * start use `rangeLabelEndPreview` instead.
291
294
  * @default 'after range'
292
295
  */
293
296
  rangeLabelAfterRange: {
@@ -337,7 +340,7 @@ export class AuroDatePicker extends AuroElement {
337
340
  reflect: boolean;
338
341
  };
339
342
  /**
340
- * Dates that the user should have for reference as part of their decision making when selecting a date.
343
+ * Dates that the user should have for reference as part of their decision-making when selecting a date.
341
344
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
342
345
  */
343
346
  referenceDates: {
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Single source of truth for parsing and matching blackout dates across the
3
+ * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
4
+ * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
5
+ * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
6
+ * `disabledDays` rules are defined exactly once.
7
+ */
8
+ /**
9
+ * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
10
+ * representing local midnight on that calendar day. Returns `null` for
11
+ * inputs that don't parse to a finite timestamp.
12
+ *
13
+ * Uses the `new Date(year, monthIndex, day)` constructor (NOT
14
+ * `new Date(isoStr)`) so the result is local-midnight rather than UTC
15
+ * midnight — required to keep the calendar grid aligned with the user's
16
+ * local calendar day in negative-offset timezones.
17
+ *
18
+ * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
19
+ * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
20
+ */
21
+ export function parseIsoToTimestamp(isoStr: string): number | null;
22
+ /**
23
+ * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
24
+ * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
25
+ * array. Use this for O(1) membership checks in hot paths.
26
+ *
27
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
28
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
29
+ * @returns {Set<number>}
30
+ */
31
+ export function buildBlackoutSet(disabledDays: Array<string | number> | undefined, blackoutDates: Array<string> | undefined): Set<number>;
32
+ /**
33
+ * One-shot membership test for a single timestamp against both blackout
34
+ * sources. Allocates a Set on each call; only use this in cold paths
35
+ * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
36
+ * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
37
+ *
38
+ * @param {number} dateTs - Unix timestamp (seconds) to test.
39
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
40
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
41
+ * @returns {boolean}
42
+ */
43
+ export function isBlackoutTimestamp(dateTs: number, disabledDays: Array<string | number> | undefined, blackoutDates: Array<string> | undefined): boolean;