@aurodesignsystem-dev/auro-formkit 0.0.0-pr1512.0 → 0.0.0-pr1513.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.
- package/components/checkbox/demo/customize.min.js +1 -1
- package/components/checkbox/demo/getting-started.min.js +1 -1
- package/components/checkbox/demo/index.min.js +1 -1
- package/components/checkbox/dist/index.js +1 -1
- package/components/checkbox/dist/registered.js +1 -1
- package/components/combobox/demo/customize.min.js +96 -119
- package/components/combobox/demo/getting-started.min.js +96 -119
- package/components/combobox/demo/index.min.js +96 -119
- package/components/combobox/dist/index.js +95 -118
- package/components/combobox/dist/registered.js +95 -118
- package/components/counter/demo/customize.min.js +2 -2
- package/components/counter/demo/index.min.js +2 -2
- package/components/counter/dist/index.js +2 -2
- package/components/counter/dist/registered.js +2 -2
- package/components/datepicker/demo/accessibility.md +2 -1
- package/components/datepicker/demo/api.md +63 -62
- package/components/datepicker/demo/customize.md +12 -1
- package/components/datepicker/demo/customize.min.js +716 -336
- package/components/datepicker/demo/index.min.js +716 -336
- package/components/datepicker/dist/{src/auro-calendar-cell.d.ts → auro-calendar-cell.d.ts} +14 -3
- package/components/datepicker/dist/{src/auro-calendar.d.ts → auro-calendar.d.ts} +91 -6
- package/components/datepicker/dist/{src/auro-datepicker.d.ts → auro-datepicker.d.ts} +78 -5
- package/components/datepicker/dist/blackoutUtils.d.ts +43 -0
- package/components/datepicker/dist/index.js +716 -336
- package/components/datepicker/dist/registered.js +716 -336
- package/components/dropdown/demo/customize.min.js +1 -1
- package/components/dropdown/demo/getting-started.min.js +1 -1
- package/components/dropdown/demo/index.min.js +1 -1
- package/components/dropdown/dist/index.js +1 -1
- package/components/dropdown/dist/registered.js +1 -1
- package/components/form/demo/customize.min.js +918 -584
- package/components/form/demo/getting-started.min.js +918 -584
- package/components/form/demo/index.min.js +918 -584
- package/components/form/demo/registerDemoDeps.min.js +918 -584
- package/components/input/demo/api.md +5 -5
- package/components/input/demo/customize.md +8 -8
- package/components/input/demo/customize.min.js +93 -116
- package/components/input/demo/getting-started.min.js +93 -116
- package/components/input/demo/index.min.js +93 -116
- package/components/input/dist/base-input.d.ts +44 -33
- package/components/input/dist/index.js +94 -129
- package/components/input/dist/registered.js +93 -116
- package/components/radio/demo/customize.min.js +1 -1
- package/components/radio/demo/getting-started.min.js +1 -1
- package/components/radio/demo/index.min.js +1 -1
- package/components/radio/dist/index.js +1 -1
- package/components/radio/dist/registered.js +1 -1
- package/components/select/demo/customize.min.js +2 -2
- package/components/select/demo/getting-started.min.js +2 -2
- package/components/select/demo/index.min.js +2 -2
- package/components/select/dist/index.js +2 -2
- package/components/select/dist/registered.js +2 -2
- package/custom-elements.json +562 -480
- package/package.json +6 -2
- package/components/checkbox/demo/customize.js +0 -22
- package/components/checkbox/demo/demo-support.js +0 -1
- package/components/checkbox/demo/getting-started.js +0 -22
- package/components/checkbox/demo/index.js +0 -8
- package/components/checkbox/demo/styles.scss +0 -1
- package/components/combobox/demo/customize.js +0 -24
- package/components/combobox/demo/demo-support.js +0 -1
- package/components/combobox/demo/getting-started.js +0 -21
- package/components/combobox/demo/index.js +0 -23
- package/components/combobox/demo/styles.scss +0 -1
- package/components/counter/demo/customize.js +0 -21
- package/components/counter/demo/demo-support.js +0 -1
- package/components/counter/demo/index.js +0 -21
- package/components/counter/demo/styles.scss +0 -1
- package/components/datepicker/demo/customize.js +0 -17
- package/components/datepicker/demo/demo-support.js +0 -1
- package/components/datepicker/demo/index.js +0 -23
- package/components/datepicker/demo/styles.scss +0 -1
- package/components/dropdown/demo/customize.js +0 -9
- package/components/dropdown/demo/demo-support.js +0 -1
- package/components/dropdown/demo/getting-started.js +0 -9
- package/components/dropdown/demo/index.js +0 -16
- package/components/dropdown/demo/styles.scss +0 -1
- package/components/form/demo/customize.js +0 -28
- package/components/form/demo/demo-support.js +0 -1
- package/components/form/demo/getting-started.js +0 -9
- package/components/form/demo/index.js +0 -5
- package/components/form/demo/registerDemoDeps.js +0 -23
- package/components/form/demo/styles.scss +0 -1
- package/components/input/demo/customize.js +0 -25
- package/components/input/demo/demo-support.js +0 -1
- package/components/input/demo/getting-started.js +0 -8
- package/components/input/demo/index.js +0 -8
- package/components/input/demo/styles.css +0 -974
- package/components/input/demo/styles.scss +0 -1
- package/components/menu/demo/demo-support.js +0 -1
- package/components/menu/demo/index.js +0 -25
- package/components/menu/demo/styles.scss +0 -1
- package/components/radio/demo/customize.js +0 -22
- package/components/radio/demo/demo-support.js +0 -1
- package/components/radio/demo/getting-started.js +0 -24
- package/components/radio/demo/index.js +0 -8
- package/components/radio/demo/styles.scss +0 -1
- package/components/select/demo/customize.js +0 -11
- package/components/select/demo/demo-support.js +0 -1
- package/components/select/demo/getting-started.js +0 -26
- package/components/select/demo/index.js +0 -11
- package/components/select/demo/styles.scss +0 -1
- /package/components/datepicker/dist/{src/auro-calendar-month.d.ts → auro-calendar-month.d.ts} +0 -0
- /package/components/datepicker/dist/{src/buttonVersion.d.ts → buttonVersion.d.ts} +0 -0
- /package/components/datepicker/dist/{src/datepickerKeyboardStrategy.d.ts → datepickerKeyboardStrategy.d.ts} +0 -0
- /package/components/datepicker/dist/{src/iconVersion.d.ts → iconVersion.d.ts} +0 -0
- /package/components/datepicker/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/components/datepicker/dist/{src/popoverVersion.d.ts → popoverVersion.d.ts} +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/classic/color-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/classic/style-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/color-calendar-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/color-cell-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/color-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/color-month-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/shapeSize-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/snowflake/color-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/snowflake/style-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-cell-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-month-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/style-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/tokens-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/utilities.d.ts → utilities.d.ts} +0 -0
- /package/components/datepicker/dist/{src/utilitiesCalendar.d.ts → utilitiesCalendar.d.ts} +0 -0
- /package/components/datepicker/dist/{src/utilitiesCalendarRender.d.ts → utilitiesCalendarRender.d.ts} +0 -0
- /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/day.d.ts +0 -0
- /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
- /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
- /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
|
@@ -1373,7 +1373,7 @@ function normalizeDates$1(context, ...dates) {
|
|
|
1373
1373
|
* const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
|
|
1374
1374
|
* //=> Tue Sep 02 2014 00:00:00
|
|
1375
1375
|
*/
|
|
1376
|
-
function startOfDay$
|
|
1376
|
+
function startOfDay$1(date, options) {
|
|
1377
1377
|
const _date = toDate$1(date, options?.in);
|
|
1378
1378
|
_date.setHours(0, 0, 0, 0);
|
|
1379
1379
|
return _date;
|
|
@@ -1421,8 +1421,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
|
|
|
1421
1421
|
earlierDate,
|
|
1422
1422
|
);
|
|
1423
1423
|
|
|
1424
|
-
const laterStartOfDay = startOfDay$
|
|
1425
|
-
const earlierStartOfDay = startOfDay$
|
|
1424
|
+
const laterStartOfDay = startOfDay$1(laterDate_);
|
|
1425
|
+
const earlierStartOfDay = startOfDay$1(earlierDate_);
|
|
1426
1426
|
|
|
1427
1427
|
const laterTimestamp =
|
|
1428
1428
|
+laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
|
|
@@ -10524,13 +10524,6 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10524
10524
|
* @returns {string | undefined}
|
|
10525
10525
|
*/
|
|
10526
10526
|
toFormattedValue(valueObject, format) {
|
|
10527
|
-
// Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
|
|
10528
|
-
// `format` argument has to fail gracefully rather than throw on
|
|
10529
|
-
// `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
|
|
10530
|
-
// as "no format → no display value".
|
|
10531
|
-
if (!format) {
|
|
10532
|
-
return undefined;
|
|
10533
|
-
}
|
|
10534
10527
|
const normalizedFormat = format.toLowerCase();
|
|
10535
10528
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
10536
10529
|
|
|
@@ -10911,8 +10904,8 @@ class RangeDatepickerCell extends i$1 {
|
|
|
10911
10904
|
const parsedDateFrom = parseInt(dateFrom, 10);
|
|
10912
10905
|
const parsedDateTo = parseInt(dateTo, 10);
|
|
10913
10906
|
if (day) {
|
|
10914
|
-
if (getTime(startOfDay$
|
|
10915
|
-
getTime(startOfDay$
|
|
10907
|
+
if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
|
|
10908
|
+
getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
|
|
10916
10909
|
this.selected = true;
|
|
10917
10910
|
}
|
|
10918
10911
|
if (((hoveredDate === day.date || day.date < hoveredDate) &&
|
|
@@ -11100,7 +11093,7 @@ class RangeDatepickerCalendar extends i$1 {
|
|
|
11100
11093
|
this.dayNamesOfTheWeek = [];
|
|
11101
11094
|
this.daysOfMonth = [];
|
|
11102
11095
|
this._locale = null;
|
|
11103
|
-
this.currentDate = parseInt(format$1(startOfDay$
|
|
11096
|
+
this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
|
|
11104
11097
|
this.localeChanged();
|
|
11105
11098
|
this.yearAndMonthChanged(this.year, this.month);
|
|
11106
11099
|
}
|
|
@@ -11574,7 +11567,7 @@ __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "dayNamesO
|
|
|
11574
11567
|
__decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
|
|
11575
11568
|
AuroLibraryRuntimeUtils$5.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
|
|
11576
11569
|
|
|
11577
|
-
var styleCss$5 = i$3`.body-default{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-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{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-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.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-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{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-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{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-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{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-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.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-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{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-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-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-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{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-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.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-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.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-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.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-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.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-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.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-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.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-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.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-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.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-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.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-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.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-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.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-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.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-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.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-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);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-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.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-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);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-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.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-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);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-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.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-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
|
|
11570
|
+
var styleCss$5 = i$3`.body-default{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-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{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-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.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-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{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-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{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-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{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-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.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-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{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-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-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-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{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-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.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-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.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-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.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-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.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-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.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-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.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-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.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-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.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-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.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-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.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-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.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-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.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-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.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-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);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-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.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-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);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-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.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-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);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-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.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-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.rangeDepartDate.lastHoveredDate::before{border-radius:10px}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
|
|
11578
11571
|
|
|
11579
11572
|
var colorCss$5 = i$3`:host ::slotted([slot^=date_]){color:var(--ds-auro-calendar-cell-price-text-color)}:host ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success, #447a1f)}:host .day{border-color:var(--ds-auro-calendar-cell-border-color);background-color:var(--ds-auro-calendar-cell-container-color);color:var(--ds-auro-calendar-cell-text-color)}:host .day.activeCell:not(.selected){--ds-auro-calendar-cell-container-color: var(--ds-auro-calendar-cell-in-range-color);border-color:var(--ds-advanced-color-state-selected);outline-color:var(--ds-auro-calendar-cell-container-color)}:host .day.selected{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected, #01426a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.selected ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success-subtle, #d6eac7)}:host .day.selected:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected-hover, #00274a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.reference:after{border-color:var(--ds-basic-color-border-default, #959595);box-shadow:inset 0 0 0 2px var(--ds-basic-color-surface-default, #ffffff)}:host .day.reference:hover::after{box-shadow:inset 0 0 0 2px var(--ds-advanced-color-shared-background-muted, #f7f7f7)}:host .day:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host .day.disabled{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.blackout{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.inRange:before,:host .day.rangeDepartDate:before,:host .day.rangeReturnDate:before,:host .day.lastHoveredDate:before{background-color:var(--ds-auro-calendar-cell-in-range-color)}:host .day.sameDateTrip:before{--ds-auro-calendar-cell-in-range-color: transparent}`;
|
|
11580
11573
|
|
|
@@ -11599,13 +11592,103 @@ let s$2 = class s{registerComponent(e,t){customElements.get(e)||customElements.d
|
|
|
11599
11592
|
|
|
11600
11593
|
var popoverVersion = '6.0.1';
|
|
11601
11594
|
|
|
11602
|
-
|
|
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
|
+
*/
|
|
11603
11602
|
|
|
11604
|
-
|
|
11605
|
-
|
|
11606
|
-
|
|
11607
|
-
|
|
11608
|
-
|
|
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
|
+
|
|
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 */
|
|
11609
11692
|
|
|
11610
11693
|
class AuroCalendarCell extends i$1 {
|
|
11611
11694
|
constructor() {
|
|
@@ -11653,6 +11736,14 @@ class AuroCalendarCell extends i$1 {
|
|
|
11653
11736
|
type: Boolean,
|
|
11654
11737
|
reflect: true
|
|
11655
11738
|
},
|
|
11739
|
+
/**
|
|
11740
|
+
* @deprecated Propagated from the legacy `auro-calendar.disabledDays`
|
|
11741
|
+
* Unix-timestamp array. The cell honors it for backward compatibility
|
|
11742
|
+
* (see the divergence-check fallback inside `isBlackout`), but
|
|
11743
|
+
* consumers should migrate to `auro-datepicker.blackoutDates`
|
|
11744
|
+
* (YYYY-MM-DD ISO strings). The calendar emits a one-time
|
|
11745
|
+
* deprecation warning the first time a non-empty value is observed.
|
|
11746
|
+
*/
|
|
11656
11747
|
disabledDays: { type: Array },
|
|
11657
11748
|
isCurrentDate: { type: Boolean },
|
|
11658
11749
|
locale: { type: String },
|
|
@@ -11698,8 +11789,8 @@ class AuroCalendarCell extends i$1 {
|
|
|
11698
11789
|
const parsedDateTo = parseInt(dateTo, 10);
|
|
11699
11790
|
|
|
11700
11791
|
if (day) {
|
|
11701
|
-
const departTimestamp =
|
|
11702
|
-
const returnTimestamp =
|
|
11792
|
+
const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11793
|
+
const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11703
11794
|
|
|
11704
11795
|
if (day.date === departTimestamp || day.date === returnTimestamp) {
|
|
11705
11796
|
this.selected = true;
|
|
@@ -11783,27 +11874,33 @@ class AuroCalendarCell extends i$1 {
|
|
|
11783
11874
|
return false;
|
|
11784
11875
|
}
|
|
11785
11876
|
|
|
11786
|
-
//
|
|
11787
|
-
|
|
11788
|
-
|
|
11789
|
-
|
|
11790
|
-
|
|
11791
|
-
|
|
11792
|
-
// Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
|
|
11793
|
-
const blackoutDates = this.datepicker?.blackoutDates;
|
|
11794
|
-
|
|
11795
|
-
if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
|
|
11796
|
-
const date = new Date(this.day.date * 1000);
|
|
11797
|
-
const yyyy = date.getFullYear();
|
|
11798
|
-
const mm = String(date.getMonth() + 1).padStart(2, '0');
|
|
11799
|
-
const dd = String(date.getDate()).padStart(2, '0');
|
|
11800
|
-
const cellDate = `${yyyy}-${mm}-${dd}`;
|
|
11801
|
-
if (blackoutDates.includes(cellDate)) {
|
|
11877
|
+
// Delegate to the calendar's memoized blackout Set for O(1) lookup
|
|
11878
|
+
// (instead of rescanning disabledDays + blackoutDates per render). The
|
|
11879
|
+
// Set is rebuilt only when either source array reference changes — see
|
|
11880
|
+
// auro-calendar.js#_getBlackoutSet.
|
|
11881
|
+
if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
|
|
11882
|
+
if (this.calendar._getBlackoutSet().has(this.day.date)) {
|
|
11802
11883
|
return true;
|
|
11803
11884
|
}
|
|
11885
|
+
// If the cell's local disabledDays diverged from the calendar's (a
|
|
11886
|
+
// consumer or test mutated cell.disabledDays directly), the Set does
|
|
11887
|
+
// not reflect that addition — fall through to the per-cell scan only
|
|
11888
|
+
// when the reference no longer matches. Production data flow keeps
|
|
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) {
|
|
11893
|
+
if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
|
|
11894
|
+
return true;
|
|
11895
|
+
}
|
|
11896
|
+
}
|
|
11897
|
+
return false;
|
|
11804
11898
|
}
|
|
11805
11899
|
|
|
11806
|
-
|
|
11900
|
+
// Pre-firstUpdated fallback — the cell may render once before the
|
|
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);
|
|
11807
11904
|
}
|
|
11808
11905
|
|
|
11809
11906
|
/**
|
|
@@ -11909,12 +12006,12 @@ class AuroCalendarCell extends i$1 {
|
|
|
11909
12006
|
const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
|
|
11910
12007
|
if (!Number.isFinite(parsedDateFrom)) return null;
|
|
11911
12008
|
|
|
11912
|
-
const departTimestamp =
|
|
12009
|
+
const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11913
12010
|
const dayDate = this.day.date;
|
|
11914
12011
|
|
|
11915
12012
|
const parsedDateTo = Number.parseInt(this.dateTo, 10);
|
|
11916
12013
|
const hasDateTo = Number.isFinite(parsedDateTo);
|
|
11917
|
-
const returnTimestamp = hasDateTo ?
|
|
12014
|
+
const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
|
|
11918
12015
|
|
|
11919
12016
|
if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
|
|
11920
12017
|
|
|
@@ -11924,7 +12021,9 @@ class AuroCalendarCell extends i$1 {
|
|
|
11924
12021
|
|
|
11925
12022
|
if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
|
|
11926
12023
|
|
|
11927
|
-
|
|
12024
|
+
if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
|
|
12025
|
+
|
|
12026
|
+
// After end date when both dateFrom and dateTo are set.
|
|
11928
12027
|
return this.datepicker.rangeLabelAfterRange || 'after range';
|
|
11929
12028
|
}
|
|
11930
12029
|
|
|
@@ -11937,7 +12036,7 @@ class AuroCalendarCell extends i$1 {
|
|
|
11937
12036
|
*/
|
|
11938
12037
|
isDepartDate(day, dateFrom) {
|
|
11939
12038
|
const parsedDateFrom = parseInt(dateFrom, 10);
|
|
11940
|
-
const departTimestamp =
|
|
12039
|
+
const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11941
12040
|
|
|
11942
12041
|
return this.selected && day.date === departTimestamp;
|
|
11943
12042
|
}
|
|
@@ -11952,7 +12051,7 @@ class AuroCalendarCell extends i$1 {
|
|
|
11952
12051
|
*/
|
|
11953
12052
|
isReturnDate(day, dateFrom, dateTo) {
|
|
11954
12053
|
const parsedDateTo = parseInt(dateTo, 10);
|
|
11955
|
-
const returnTimestamp =
|
|
12054
|
+
const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11956
12055
|
|
|
11957
12056
|
return this.selected && day.date === returnTimestamp && dateFrom;
|
|
11958
12057
|
}
|
|
@@ -12116,6 +12215,7 @@ class AuroCalendarCell extends i$1 {
|
|
|
12116
12215
|
setTimeout(() => this.firstUpdated(), 0);
|
|
12117
12216
|
return;
|
|
12118
12217
|
}
|
|
12218
|
+
this.calendar = calendar;
|
|
12119
12219
|
this.datepicker = calendar.datepicker;
|
|
12120
12220
|
this._slotContentHandler = () => {
|
|
12121
12221
|
this.handleSlotContent();
|
|
@@ -12173,12 +12273,13 @@ class AuroCalendarCell extends i$1 {
|
|
|
12173
12273
|
this._cachedButton = this.shadowRoot.querySelector('button.day');
|
|
12174
12274
|
});
|
|
12175
12275
|
|
|
12176
|
-
//
|
|
12276
|
+
// Keep the host's gridcell aria attributes in sync with the day data.
|
|
12177
12277
|
this.updateHostAria();
|
|
12178
12278
|
}
|
|
12179
12279
|
|
|
12180
12280
|
// Update host aria when selection changes (aria-selected, range labels)
|
|
12181
|
-
|
|
12281
|
+
// or when isCurrentDate flips (aria-current).
|
|
12282
|
+
if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
|
|
12182
12283
|
this.updateHostAria();
|
|
12183
12284
|
}
|
|
12184
12285
|
|
|
@@ -12189,8 +12290,8 @@ class AuroCalendarCell extends i$1 {
|
|
|
12189
12290
|
}
|
|
12190
12291
|
|
|
12191
12292
|
/**
|
|
12192
|
-
*
|
|
12193
|
-
*
|
|
12293
|
+
* Sets host-level ARIA so each cell exposes its date, selection state,
|
|
12294
|
+
* and blackout status to assistive tech browsing the month grid.
|
|
12194
12295
|
* @private
|
|
12195
12296
|
* @returns {void}
|
|
12196
12297
|
*/
|
|
@@ -12199,16 +12300,27 @@ class AuroCalendarCell extends i$1 {
|
|
|
12199
12300
|
|
|
12200
12301
|
const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
|
|
12201
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.).
|
|
12202
12306
|
this.removeAttribute('role');
|
|
12203
12307
|
this.removeAttribute('aria-label');
|
|
12308
|
+
this.removeAttribute('aria-current');
|
|
12309
|
+
this.removeAttribute('aria-selected');
|
|
12310
|
+
this.removeAttribute('aria-disabled');
|
|
12204
12311
|
return;
|
|
12205
12312
|
}
|
|
12206
12313
|
|
|
12207
|
-
// The host acts as the gridcell for ariaActiveDescendantElement.
|
|
12208
12314
|
this.setAttribute('role', 'gridcell');
|
|
12209
12315
|
this.setAttribute('aria-label', this.getAriaLabel());
|
|
12210
12316
|
this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
|
|
12211
12317
|
|
|
12318
|
+
if (this.isCurrentDate) {
|
|
12319
|
+
this.setAttribute('aria-current', 'date');
|
|
12320
|
+
} else {
|
|
12321
|
+
this.removeAttribute('aria-current');
|
|
12322
|
+
}
|
|
12323
|
+
|
|
12212
12324
|
if (this.isBlackout()) {
|
|
12213
12325
|
this.setAttribute('aria-disabled', 'true');
|
|
12214
12326
|
} else {
|
|
@@ -12223,7 +12335,7 @@ class AuroCalendarCell extends i$1 {
|
|
|
12223
12335
|
* @returns {void}
|
|
12224
12336
|
*/
|
|
12225
12337
|
focusButton() {
|
|
12226
|
-
const button = this._cachedButton || this.shadowRoot.querySelector('button:not([
|
|
12338
|
+
const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
|
|
12227
12339
|
if (button) {
|
|
12228
12340
|
button.focus({ focusVisible: true });
|
|
12229
12341
|
}
|
|
@@ -12231,7 +12343,9 @@ class AuroCalendarCell extends i$1 {
|
|
|
12231
12343
|
|
|
12232
12344
|
/**
|
|
12233
12345
|
* Imperatively marks this cell as active without triggering a Lit re-render.
|
|
12234
|
-
*
|
|
12346
|
+
* Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper —
|
|
12347
|
+
* arrow keys move the active cell imperatively and the live region carries
|
|
12348
|
+
* the SR announcement.
|
|
12235
12349
|
* @returns {void}
|
|
12236
12350
|
*/
|
|
12237
12351
|
setActive() {
|
|
@@ -12273,10 +12387,13 @@ class AuroCalendarCell extends i$1 {
|
|
|
12273
12387
|
if (!btn || !this.day) return;
|
|
12274
12388
|
|
|
12275
12389
|
const dayDate = this.day.date;
|
|
12276
|
-
const departTimestamp =
|
|
12390
|
+
const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
12277
12391
|
const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
|
|
12278
|
-
|
|
12279
|
-
|
|
12392
|
+
// `>=` so hovering the depart cell itself (a same-day round-trip
|
|
12393
|
+
// preview) still surfaces a visual cue: the depart cell receives both
|
|
12394
|
+
// rangeDepartDate and lastHoveredDate.
|
|
12395
|
+
const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
|
|
12396
|
+
const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
|
|
12280
12397
|
|
|
12281
12398
|
btn.classList.toggle('inRange', isInRange);
|
|
12282
12399
|
btn.classList.toggle('lastHoveredDate', isLastHovered);
|
|
@@ -12334,7 +12451,6 @@ class AuroCalendarCell extends i$1 {
|
|
|
12334
12451
|
@focus="${outOfRange ? undefined : this.handleFocus}"
|
|
12335
12452
|
class="${e$4(buttonClasses)}"
|
|
12336
12453
|
?disabled="${outOfRange}"
|
|
12337
|
-
aria-hidden="${outOfRange ? 'true' : A$4}"
|
|
12338
12454
|
tabindex="-1">
|
|
12339
12455
|
<div class="buttonWrapper" aria-hidden="true">
|
|
12340
12456
|
<div class="currentDayMarker">${this.day?.title || A$4}</div>
|
|
@@ -13446,7 +13562,7 @@ class AuroBibtemplate extends i$1 {
|
|
|
13446
13562
|
}
|
|
13447
13563
|
}
|
|
13448
13564
|
|
|
13449
|
-
var formkitVersion$2 = '
|
|
13565
|
+
var formkitVersion$2 = '202606291455';
|
|
13450
13566
|
|
|
13451
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}
|
|
13452
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}}
|
|
@@ -13569,7 +13685,11 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13569
13685
|
this.calendarRangeMonths = null;
|
|
13570
13686
|
|
|
13571
13687
|
/**
|
|
13572
|
-
*
|
|
13688
|
+
* @deprecated Use `auro-datepicker.blackoutDates` (an array of
|
|
13689
|
+
* `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
|
|
13690
|
+
* timestamps is still honored for backward compatibility but emits a
|
|
13691
|
+
* one-time `console.debug` the first time a non-empty value is observed.
|
|
13692
|
+
* Support will be removed in a future major release.
|
|
13573
13693
|
* @private
|
|
13574
13694
|
*/
|
|
13575
13695
|
this.disabledDays = [];
|
|
@@ -13826,17 +13946,44 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13826
13946
|
* @returns {void}
|
|
13827
13947
|
*/
|
|
13828
13948
|
updateActiveCellForVisibleMonth() {
|
|
13829
|
-
|
|
13830
|
-
|
|
13831
|
-
requestAnimationFrame(() => {
|
|
13832
|
-
requestAnimationFrame(() => {
|
|
13833
|
-
const newDate = this.computeActiveDate({ skipDateFrom: true });
|
|
13949
|
+
this._afterMonthRender(() => {
|
|
13950
|
+
const newDate = this.computeActiveDate({ skipDateFrom: true });
|
|
13834
13951
|
|
|
13835
|
-
|
|
13836
|
-
|
|
13837
|
-
|
|
13838
|
-
|
|
13839
|
-
|
|
13952
|
+
if (newDate !== null && newDate !== undefined) {
|
|
13953
|
+
this.activeCellDate = newDate;
|
|
13954
|
+
this.setActiveCell(this.activeCellDate);
|
|
13955
|
+
}
|
|
13956
|
+
});
|
|
13957
|
+
}
|
|
13958
|
+
|
|
13959
|
+
/**
|
|
13960
|
+
* Schedules `callback` two animation frames out, giving the child
|
|
13961
|
+
* `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
|
|
13962
|
+
* a full render-and-paint cycle to settle before the callback reads or
|
|
13963
|
+
* mutates DOM.
|
|
13964
|
+
*
|
|
13965
|
+
* Why two frames, not one:
|
|
13966
|
+
* 1. Lit batches property updates and renders in a microtask, so frame N
|
|
13967
|
+
* schedules the render but the new DOM may not be painted yet.
|
|
13968
|
+
* 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
|
|
13969
|
+
* which also lands a tick later. Reading buttons from frame N+1
|
|
13970
|
+
* (after both renders + cache refresh have flushed) reliably hits the
|
|
13971
|
+
* new month's cells.
|
|
13972
|
+
*
|
|
13973
|
+
* Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
|
|
13974
|
+
* and then needs to inspect the freshly-rendered cells (cross-month
|
|
13975
|
+
* keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
|
|
13976
|
+
* Do NOT collapse to a single rAF — it intermittently lands before
|
|
13977
|
+
* `_cachedButton` is refreshed, which silently breaks focus restoration
|
|
13978
|
+
* and `setActiveCell` lookups.
|
|
13979
|
+
* @private
|
|
13980
|
+
* @param {() => void} callback - Runs once after the month re-render and
|
|
13981
|
+
* the cells' button caches have refreshed.
|
|
13982
|
+
* @returns {void}
|
|
13983
|
+
*/
|
|
13984
|
+
_afterMonthRender(callback) {
|
|
13985
|
+
requestAnimationFrame(() => {
|
|
13986
|
+
requestAnimationFrame(callback);
|
|
13840
13987
|
});
|
|
13841
13988
|
}
|
|
13842
13989
|
|
|
@@ -13954,6 +14101,47 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13954
14101
|
return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
|
|
13955
14102
|
}
|
|
13956
14103
|
|
|
14104
|
+
/**
|
|
14105
|
+
* Picks the focusable cell whose date is closest to targetTs. Used as a
|
|
14106
|
+
* fallback after a month-boundary nav when the exact target date isn't
|
|
14107
|
+
* focusable — typically because the month re-render lagged or the date
|
|
14108
|
+
* was filtered out by isOutOfRange. When two cells are equidistant, the
|
|
14109
|
+
* navigation direction breaks the tie so the user moves the way they
|
|
14110
|
+
* pressed (forward → later cell, backward → earlier cell).
|
|
14111
|
+
* @private
|
|
14112
|
+
* @param {Array} cells - Focusable cells from getAllFocusableCells.
|
|
14113
|
+
* @param {Number} targetTs - Desired Unix timestamp (seconds).
|
|
14114
|
+
* @param {'next'|'prev'} direction - Navigation direction.
|
|
14115
|
+
* @returns {Object|null} The nearest cell, or null when cells is empty.
|
|
14116
|
+
*/
|
|
14117
|
+
pickNearestCell(cells, targetTs, direction) {
|
|
14118
|
+
if (!cells.length) {
|
|
14119
|
+
return null;
|
|
14120
|
+
}
|
|
14121
|
+
const forward = direction === 'next';
|
|
14122
|
+
let best = null;
|
|
14123
|
+
let bestDelta = Infinity;
|
|
14124
|
+
cells.forEach((cell) => {
|
|
14125
|
+
if (!cell.day) {
|
|
14126
|
+
return;
|
|
14127
|
+
}
|
|
14128
|
+
const distance = Math.abs(cell.day.date - targetTs);
|
|
14129
|
+
if (distance < bestDelta) {
|
|
14130
|
+
best = cell;
|
|
14131
|
+
bestDelta = distance;
|
|
14132
|
+
return;
|
|
14133
|
+
}
|
|
14134
|
+
if (distance === bestDelta && best) {
|
|
14135
|
+
if (forward && cell.day.date > best.day.date) {
|
|
14136
|
+
best = cell;
|
|
14137
|
+
} else if (!forward && cell.day.date < best.day.date) {
|
|
14138
|
+
best = cell;
|
|
14139
|
+
}
|
|
14140
|
+
}
|
|
14141
|
+
});
|
|
14142
|
+
return best;
|
|
14143
|
+
}
|
|
14144
|
+
|
|
13957
14145
|
/**
|
|
13958
14146
|
* Gets all focusable cells across all rendered months.
|
|
13959
14147
|
* @private
|
|
@@ -13970,9 +14158,9 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13970
14158
|
|
|
13971
14159
|
/**
|
|
13972
14160
|
* Sets the active cell across all months. Only one cell has tabindex="0" at a time.
|
|
13973
|
-
* Uses imperative DOM manipulation — no Lit re-render triggered.
|
|
13974
|
-
*
|
|
13975
|
-
*
|
|
14161
|
+
* Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
|
|
14162
|
+
* stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
|
|
14163
|
+
* is what announces the active cell to assistive tech.
|
|
13976
14164
|
* @param {Number} date - Unix timestamp of the cell to activate.
|
|
13977
14165
|
* @returns {void}
|
|
13978
14166
|
*/
|
|
@@ -14021,10 +14209,23 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14021
14209
|
/**
|
|
14022
14210
|
* Shows the activeCell ring when the grid gains focus.
|
|
14023
14211
|
* @private
|
|
14212
|
+
* @param {FocusEvent} [event] - The focusin event.
|
|
14024
14213
|
* @returns {void}
|
|
14025
14214
|
*/
|
|
14026
|
-
handleGridFocusIn() {
|
|
14215
|
+
handleGridFocusIn(event) {
|
|
14027
14216
|
this._gridHasFocus = true;
|
|
14217
|
+
|
|
14218
|
+
// Only apply the activeCell ring when the grid wrapper itself receives focus
|
|
14219
|
+
// (Tab/programmatic). When focus moves into a cell button via mousedown,
|
|
14220
|
+
// event.target is the cell descendant — skip the ring here. The subsequent
|
|
14221
|
+
// click handler calls setActiveCell on the clicked cell, which applies the
|
|
14222
|
+
// ring there. Without this guard, mousedown briefly flashes the ring on the
|
|
14223
|
+
// previously-active cell (e.g. the 1st-of-month set by month navigation
|
|
14224
|
+
// when the grid was not focused).
|
|
14225
|
+
if (event && event.target !== event.currentTarget) {
|
|
14226
|
+
return;
|
|
14227
|
+
}
|
|
14228
|
+
|
|
14028
14229
|
const activeCell = this.getAllFocusableCells().find((cell) => cell.active);
|
|
14029
14230
|
if (activeCell) {
|
|
14030
14231
|
const btn = activeCell._cachedButton || activeCell.shadowRoot.querySelector('button.day');
|
|
@@ -14053,6 +14254,65 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14053
14254
|
this.clearRangePreview();
|
|
14054
14255
|
}
|
|
14055
14256
|
|
|
14257
|
+
/**
|
|
14258
|
+
* Returns a memoized Set of blackout timestamps (seconds) drawn from both
|
|
14259
|
+
* the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
|
|
14260
|
+
* The cache invalidates when either source array's reference changes, which
|
|
14261
|
+
* matches Lit's own reactive identity semantics for array properties.
|
|
14262
|
+
* @private
|
|
14263
|
+
* @returns {Set<Number>}
|
|
14264
|
+
*/
|
|
14265
|
+
_getBlackoutSet() {
|
|
14266
|
+
// Normalize non-array values to a stable `null` sentinel rather than a
|
|
14267
|
+
// fresh `[]` per call — otherwise the reference-identity cache key
|
|
14268
|
+
// (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
|
|
14269
|
+
// subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
|
|
14270
|
+
// already treats null/non-array as "no legacy disabledDays" via its
|
|
14271
|
+
// own Array.isArray gate.
|
|
14272
|
+
const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
|
|
14273
|
+
const blackoutDates = this.datepicker?.blackoutDates;
|
|
14274
|
+
if (this._blackoutSet &&
|
|
14275
|
+
this._cachedBlackoutDisabledDays === disabledDays &&
|
|
14276
|
+
this._cachedBlackoutDates === blackoutDates) {
|
|
14277
|
+
return this._blackoutSet;
|
|
14278
|
+
}
|
|
14279
|
+
|
|
14280
|
+
if (disabledDays && disabledDays.length > 0) {
|
|
14281
|
+
this._warnDisabledDaysDeprecated();
|
|
14282
|
+
}
|
|
14283
|
+
|
|
14284
|
+
this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
|
|
14285
|
+
this._cachedBlackoutDisabledDays = disabledDays;
|
|
14286
|
+
this._cachedBlackoutDates = blackoutDates;
|
|
14287
|
+
return this._blackoutSet;
|
|
14288
|
+
}
|
|
14289
|
+
|
|
14290
|
+
/**
|
|
14291
|
+
* Per-class flag that gates the `disabledDays` deprecation warning so it
|
|
14292
|
+
* fires exactly once per page no matter how many calendars or rebuild
|
|
14293
|
+
* cycles encounter the legacy array.
|
|
14294
|
+
* @private
|
|
14295
|
+
*/
|
|
14296
|
+
static _warnedDisabledDaysDeprecation = false;
|
|
14297
|
+
|
|
14298
|
+
/**
|
|
14299
|
+
* One-time `console.debug` directing consumers from the legacy
|
|
14300
|
+
* `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
|
|
14301
|
+
* the first time `_getBlackoutSet` rebuilds from a non-empty
|
|
14302
|
+
* `disabledDays`; subsequent calls (on this or any other AuroCalendar
|
|
14303
|
+
* instance on the page) are silent.
|
|
14304
|
+
* @private
|
|
14305
|
+
* @returns {void}
|
|
14306
|
+
*/
|
|
14307
|
+
_warnDisabledDaysDeprecated() {
|
|
14308
|
+
if (AuroCalendar._warnedDisabledDaysDeprecation) {
|
|
14309
|
+
return;
|
|
14310
|
+
}
|
|
14311
|
+
AuroCalendar._warnedDisabledDaysDeprecation = true;
|
|
14312
|
+
// eslint-disable-next-line no-console
|
|
14313
|
+
console.debug('[auro-datepicker] The `disabledDays` property (Unix timestamps) is deprecated. Migrate to the `blackoutDates` property on auro-datepicker (an array of `YYYY-MM-DD` ISO strings). `disabledDays` will be removed in a future major release.');
|
|
14314
|
+
}
|
|
14315
|
+
|
|
14056
14316
|
/**
|
|
14057
14317
|
* Computes the initial active date from data properties alone — no DOM required.
|
|
14058
14318
|
* Priority:
|
|
@@ -14097,21 +14357,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14097
14357
|
const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
|
|
14098
14358
|
const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
|
|
14099
14359
|
|
|
14100
|
-
// Build a Set of blackout timestamps for O(1) lookup.
|
|
14101
|
-
|
|
14102
|
-
|
|
14103
|
-
|
|
14104
|
-
// Parse YYYY-MM-DD as local date to avoid UTC shift issues.
|
|
14105
|
-
const isoBlackouts = this.datepicker?.blackoutDates;
|
|
14106
|
-
if (Array.isArray(isoBlackouts)) {
|
|
14107
|
-
for (const isoStr of isoBlackouts) {
|
|
14108
|
-
const parts = isoStr.split('-');
|
|
14109
|
-
const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
|
|
14110
|
-
if (Number.isFinite(ts)) {
|
|
14111
|
-
blackoutSet.add(ts);
|
|
14112
|
-
}
|
|
14113
|
-
}
|
|
14114
|
-
}
|
|
14360
|
+
// Build a Set of blackout timestamps for O(1) lookup. Memoized by the
|
|
14361
|
+
// identity of the source arrays so rapid month nav doesn't rebuild the
|
|
14362
|
+
// Set (and re-parse every ISO string) on every keypress.
|
|
14363
|
+
const blackoutSet = this._getBlackoutSet();
|
|
14115
14364
|
|
|
14116
14365
|
/**
|
|
14117
14366
|
* A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
|
|
@@ -14307,8 +14556,8 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14307
14556
|
|
|
14308
14557
|
/**
|
|
14309
14558
|
* Handles arrow key navigation on the calendar grid wrapper.
|
|
14310
|
-
* Focus stays on the grid wrapper; only
|
|
14311
|
-
*
|
|
14559
|
+
* Focus stays on the grid wrapper; only the visual active-cell indicator
|
|
14560
|
+
* changes. The live region announces the new active cell.
|
|
14312
14561
|
* @private
|
|
14313
14562
|
* @param {KeyboardEvent} event - The keyboard event.
|
|
14314
14563
|
* @returns {void}
|
|
@@ -14373,21 +14622,21 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14373
14622
|
} else {
|
|
14374
14623
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14375
14624
|
}
|
|
14376
|
-
|
|
14377
|
-
|
|
14378
|
-
|
|
14379
|
-
|
|
14380
|
-
|
|
14381
|
-
|
|
14382
|
-
|
|
14383
|
-
|
|
14384
|
-
|
|
14625
|
+
this._afterMonthRender(() => {
|
|
14626
|
+
const cells = this.getAllFocusableCells();
|
|
14627
|
+
const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
|
|
14628
|
+
if (target) {
|
|
14629
|
+
this.setActiveCell(target.day.date);
|
|
14630
|
+
this.handleCellFocused({ detail: { date: target.day.date } });
|
|
14631
|
+
} else {
|
|
14632
|
+
const fallback = this.pickNearestCell(cells, targetTs, navDir);
|
|
14633
|
+
if (fallback) {
|
|
14385
14634
|
this.setActiveCell(fallback.day.date);
|
|
14386
14635
|
this.handleCellFocused({ detail: { date: fallback.day.date } });
|
|
14387
14636
|
}
|
|
14388
|
-
|
|
14389
|
-
|
|
14390
|
-
|
|
14637
|
+
}
|
|
14638
|
+
// Re-focus grid wrapper after month change re-render
|
|
14639
|
+
this.focusActiveCell();
|
|
14391
14640
|
});
|
|
14392
14641
|
}
|
|
14393
14642
|
}
|
|
@@ -14413,26 +14662,20 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14413
14662
|
} else {
|
|
14414
14663
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14415
14664
|
}
|
|
14416
|
-
|
|
14417
|
-
|
|
14418
|
-
|
|
14419
|
-
|
|
14420
|
-
|
|
14421
|
-
|
|
14422
|
-
|
|
14423
|
-
|
|
14424
|
-
|
|
14425
|
-
|
|
14426
|
-
if (navDirection === 'next') {
|
|
14427
|
-
[nearest] = cells;
|
|
14428
|
-
} else {
|
|
14429
|
-
nearest = cells[cells.length - 1];
|
|
14430
|
-
}
|
|
14665
|
+
this._afterMonthRender(() => {
|
|
14666
|
+
const cells = this.getAllFocusableCells();
|
|
14667
|
+
const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
|
|
14668
|
+
if (target) {
|
|
14669
|
+
this.setActiveCell(target.day.date);
|
|
14670
|
+
this.handleCellFocused({ detail: { date: target.day.date } });
|
|
14671
|
+
} else {
|
|
14672
|
+
const nearest = this.pickNearestCell(cells, targetDate, navDirection);
|
|
14673
|
+
if (nearest) {
|
|
14431
14674
|
this.setActiveCell(nearest.day.date);
|
|
14432
14675
|
this.handleCellFocused({ detail: { date: nearest.day.date } });
|
|
14433
14676
|
}
|
|
14434
|
-
|
|
14435
|
-
|
|
14677
|
+
}
|
|
14678
|
+
this.focusActiveCell();
|
|
14436
14679
|
});
|
|
14437
14680
|
}
|
|
14438
14681
|
}
|
|
@@ -14482,19 +14725,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14482
14725
|
}
|
|
14483
14726
|
|
|
14484
14727
|
this.handleNextMonth({ skipActiveUpdate: true });
|
|
14485
|
-
|
|
14486
|
-
|
|
14487
|
-
|
|
14488
|
-
|
|
14489
|
-
|
|
14490
|
-
|
|
14491
|
-
|
|
14492
|
-
|
|
14493
|
-
|
|
14494
|
-
|
|
14728
|
+
this._afterMonthRender(() => {
|
|
14729
|
+
const cells = this.getAllFocusableCells();
|
|
14730
|
+
const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
|
|
14731
|
+
if (target) {
|
|
14732
|
+
this.setActiveCell(target.day.date);
|
|
14733
|
+
this.focusActiveCell();
|
|
14734
|
+
} else {
|
|
14735
|
+
// Same nearest-by-date fallback handleGridKeyDown uses — direct
|
|
14736
|
+
// `cells[length - 1]` would land on the end of the new month,
|
|
14737
|
+
// far from the user's intended `nextTs`.
|
|
14738
|
+
const fallback = this.pickNearestCell(cells, nextTs, 'next');
|
|
14739
|
+
if (fallback) {
|
|
14740
|
+
this.setActiveCell(fallback.day.date);
|
|
14495
14741
|
this.focusActiveCell();
|
|
14496
14742
|
}
|
|
14497
|
-
}
|
|
14743
|
+
}
|
|
14498
14744
|
});
|
|
14499
14745
|
} else if (direction === 'prev' && this.showPrevMonthBtn) {
|
|
14500
14746
|
// Navigate to previous month and focus the computed previous date.
|
|
@@ -14508,19 +14754,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14508
14754
|
}
|
|
14509
14755
|
|
|
14510
14756
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14511
|
-
|
|
14512
|
-
|
|
14513
|
-
|
|
14514
|
-
|
|
14515
|
-
|
|
14516
|
-
|
|
14517
|
-
|
|
14518
|
-
|
|
14519
|
-
|
|
14520
|
-
|
|
14757
|
+
this._afterMonthRender(() => {
|
|
14758
|
+
const cells = this.getAllFocusableCells();
|
|
14759
|
+
const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
|
|
14760
|
+
if (target) {
|
|
14761
|
+
this.setActiveCell(target.day.date);
|
|
14762
|
+
this.focusActiveCell();
|
|
14763
|
+
} else {
|
|
14764
|
+
// Same nearest-by-date fallback handleGridKeyDown uses — direct
|
|
14765
|
+
// `cells[0]` would land on the start of the previous month, far
|
|
14766
|
+
// from the user's intended `prevTs`.
|
|
14767
|
+
const fallback = this.pickNearestCell(cells, prevTs, 'prev');
|
|
14768
|
+
if (fallback) {
|
|
14769
|
+
this.setActiveCell(fallback.day.date);
|
|
14521
14770
|
this.focusActiveCell();
|
|
14522
14771
|
}
|
|
14523
|
-
}
|
|
14772
|
+
}
|
|
14524
14773
|
});
|
|
14525
14774
|
}
|
|
14526
14775
|
} else if (key === 'ArrowDown' || key === 'ArrowUp') {
|
|
@@ -14548,20 +14797,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14548
14797
|
} else {
|
|
14549
14798
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14550
14799
|
}
|
|
14551
|
-
|
|
14552
|
-
|
|
14553
|
-
|
|
14554
|
-
|
|
14555
|
-
|
|
14556
|
-
|
|
14557
|
-
|
|
14558
|
-
|
|
14559
|
-
|
|
14560
|
-
|
|
14800
|
+
this._afterMonthRender(() => {
|
|
14801
|
+
const cells = this.getAllFocusableCells();
|
|
14802
|
+
const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
|
|
14803
|
+
if (target) {
|
|
14804
|
+
this.setActiveCell(target.day.date);
|
|
14805
|
+
this.focusActiveCell();
|
|
14806
|
+
} else {
|
|
14807
|
+
// Same nearest-by-date fallback handleGridKeyDown uses — the
|
|
14808
|
+
// old direction-based `cells[0]`/`cells[length-1]` clamp
|
|
14809
|
+
// could land 25+ days from the intended target.
|
|
14810
|
+
const nearest = this.pickNearestCell(cells, targetDate, navDirection);
|
|
14811
|
+
if (nearest) {
|
|
14561
14812
|
this.setActiveCell(nearest.day.date);
|
|
14562
14813
|
this.focusActiveCell();
|
|
14563
14814
|
}
|
|
14564
|
-
}
|
|
14815
|
+
}
|
|
14565
14816
|
});
|
|
14566
14817
|
}
|
|
14567
14818
|
}
|
|
@@ -14600,8 +14851,9 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14600
14851
|
return;
|
|
14601
14852
|
}
|
|
14602
14853
|
|
|
14603
|
-
//
|
|
14604
|
-
// so
|
|
14854
|
+
// DOM focus stays on the grid wrapper while arrow keys move the active
|
|
14855
|
+
// cell, so cell buttons never receive native focus. The debounced live
|
|
14856
|
+
// region carries the full-context announcement instead.
|
|
14605
14857
|
const announcement = this.buildFocusAnnouncement(date);
|
|
14606
14858
|
this.announceFocusDebounced(announcement);
|
|
14607
14859
|
|
|
@@ -14671,10 +14923,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14671
14923
|
return null;
|
|
14672
14924
|
}
|
|
14673
14925
|
|
|
14674
|
-
const departTs =
|
|
14926
|
+
const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
14675
14927
|
const parsedTo = Number.parseInt(this.dateTo, 10);
|
|
14676
14928
|
const hasTo = Number.isFinite(parsedTo);
|
|
14677
|
-
const returnTs = hasTo ?
|
|
14929
|
+
const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
|
|
14678
14930
|
|
|
14679
14931
|
if (date === departTs) {
|
|
14680
14932
|
return this.datepicker.rangeLabelStart || 'range start';
|
|
@@ -14688,36 +14940,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14688
14940
|
if (hasTo && date > departTs && date < returnTs) {
|
|
14689
14941
|
return this.datepicker.rangeLabelInRange || 'in range';
|
|
14690
14942
|
}
|
|
14943
|
+
if (!hasTo && date > departTs) {
|
|
14944
|
+
return this.datepicker.rangeLabelEndPreview || 'previewing range end';
|
|
14945
|
+
}
|
|
14691
14946
|
return this.datepicker.rangeLabelAfterRange || 'after range';
|
|
14692
14947
|
}
|
|
14693
14948
|
|
|
14694
14949
|
/**
|
|
14695
|
-
* Checks whether a given date is a blackout date.
|
|
14950
|
+
* Checks whether a given date is a blackout date. Delegates to the
|
|
14951
|
+
* memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
|
|
14952
|
+
* legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
|
|
14696
14953
|
* @private
|
|
14697
14954
|
* @param {Number} dateTs - Unix timestamp (seconds).
|
|
14698
14955
|
* @returns {Boolean} True if the date is blacked out.
|
|
14699
14956
|
*/
|
|
14700
14957
|
isDateBlackout(dateTs) {
|
|
14701
|
-
|
|
14702
|
-
if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
|
|
14703
|
-
if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
|
|
14704
|
-
return true;
|
|
14705
|
-
}
|
|
14706
|
-
}
|
|
14707
|
-
|
|
14708
|
-
// Check ISO blackoutDates.
|
|
14709
|
-
const blackoutDates = this.datepicker?.blackoutDates;
|
|
14710
|
-
if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
|
|
14711
|
-
const date = new Date(dateTs * 1000);
|
|
14712
|
-
const yyyy = date.getFullYear();
|
|
14713
|
-
const mm = String(date.getMonth() + 1).padStart(2, '0');
|
|
14714
|
-
const dd = String(date.getDate()).padStart(2, '0');
|
|
14715
|
-
if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
|
|
14716
|
-
return true;
|
|
14717
|
-
}
|
|
14718
|
-
}
|
|
14719
|
-
|
|
14720
|
-
return false;
|
|
14958
|
+
return this._getBlackoutSet().has(dateTs);
|
|
14721
14959
|
}
|
|
14722
14960
|
|
|
14723
14961
|
/**
|
|
@@ -14884,9 +15122,34 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14884
15122
|
// the last one.
|
|
14885
15123
|
if (this._announceRafId) {
|
|
14886
15124
|
cancelAnimationFrame(this._announceRafId);
|
|
15125
|
+
this._announceRafId = null;
|
|
14887
15126
|
}
|
|
15127
|
+
this._deliverAnnouncement(dateStr, 0);
|
|
15128
|
+
}
|
|
15129
|
+
|
|
15130
|
+
/**
|
|
15131
|
+
* Writes `dateStr` to the live region. If the dropdown's dialog hasn't
|
|
15132
|
+
* mounted yet (so getOrCreateLiveRegion can't attach), retries on the
|
|
15133
|
+
* next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
|
|
15134
|
+
* dropping the announcement. The retry uses the same `_announceRafId`
|
|
15135
|
+
* the double-rAF below uses, so a newer announceSelection call (or
|
|
15136
|
+
* disconnectedCallback) cancels any in-flight retry.
|
|
15137
|
+
* @private
|
|
15138
|
+
* @param {String} dateStr - The localized date string to announce.
|
|
15139
|
+
* @param {Number} attempts - Number of prior retry attempts.
|
|
15140
|
+
* @returns {void}
|
|
15141
|
+
*/
|
|
15142
|
+
_deliverAnnouncement(dateStr, attempts) {
|
|
14888
15143
|
const liveRegion = this.getOrCreateLiveRegion();
|
|
14889
15144
|
if (!liveRegion) {
|
|
15145
|
+
const MAX_LIVE_REGION_RETRIES = 10;
|
|
15146
|
+
if (attempts < MAX_LIVE_REGION_RETRIES) {
|
|
15147
|
+
this._announceRafId = requestAnimationFrame(() => {
|
|
15148
|
+
this._deliverAnnouncement(dateStr, attempts + 1);
|
|
15149
|
+
});
|
|
15150
|
+
} else {
|
|
15151
|
+
this._announceRafId = null;
|
|
15152
|
+
}
|
|
14890
15153
|
return;
|
|
14891
15154
|
}
|
|
14892
15155
|
|
|
@@ -15072,7 +15335,7 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
15072
15335
|
</button>
|
|
15073
15336
|
` : undefined}
|
|
15074
15337
|
</div>
|
|
15075
|
-
<div id="calendarGrid" class="calendars" role="group" tabindex="0" aria-label="${this.datepicker?.calendarGridLabel}" @keydown="${this.handleGridKeyDown}" @focusin="${this.handleGridFocusIn}" @focusout="${this.handleGridFocusOut}" @calendar-month-mouseleave="${this.clearRangePreview}">
|
|
15338
|
+
<div id="calendarGrid" class="calendars" role="group" aria-roledescription="calendar" tabindex="0" aria-label="${this.datepicker?.calendarGridLabel}" @keydown="${this.handleGridKeyDown}" @focusin="${this.handleGridFocusIn}" @focusout="${this.handleGridFocusOut}" @calendar-month-mouseleave="${this.clearRangePreview}">
|
|
15076
15339
|
${this.renderAllCalendars()}
|
|
15077
15340
|
</div>
|
|
15078
15341
|
</div>
|
|
@@ -18981,7 +19244,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
|
|
|
18981
19244
|
}
|
|
18982
19245
|
};
|
|
18983
19246
|
|
|
18984
|
-
var formkitVersion$1 = '
|
|
19247
|
+
var formkitVersion$1 = '202606291455';
|
|
18985
19248
|
|
|
18986
19249
|
let AuroElement$2 = class AuroElement extends i$1 {
|
|
18987
19250
|
static get properties() {
|
|
@@ -30706,13 +30969,6 @@ class AuroInputUtilities {
|
|
|
30706
30969
|
* @returns {string | undefined}
|
|
30707
30970
|
*/
|
|
30708
30971
|
toFormattedValue(valueObject, format) {
|
|
30709
|
-
// Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
|
|
30710
|
-
// `format` argument has to fail gracefully rather than throw on
|
|
30711
|
-
// `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
|
|
30712
|
-
// as "no format → no display value".
|
|
30713
|
-
if (!format) {
|
|
30714
|
-
return undefined;
|
|
30715
|
-
}
|
|
30716
30972
|
const normalizedFormat = format.toLowerCase();
|
|
30717
30973
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
30718
30974
|
|
|
@@ -30863,18 +31119,79 @@ class BaseInput extends AuroElement$1 {
|
|
|
30863
31119
|
constructor() {
|
|
30864
31120
|
super();
|
|
30865
31121
|
|
|
30866
|
-
|
|
30867
|
-
|
|
30868
|
-
|
|
30869
|
-
|
|
30870
|
-
|
|
30871
|
-
|
|
30872
|
-
|
|
30873
|
-
|
|
30874
|
-
|
|
30875
|
-
|
|
31122
|
+
this.appearance = "default";
|
|
31123
|
+
this.disabled = false;
|
|
31124
|
+
this.layout = 'classic';
|
|
31125
|
+
this.locale = 'en-US';
|
|
31126
|
+
this.max = undefined;
|
|
31127
|
+
this._maxObject = undefined;
|
|
31128
|
+
this.maxLength = undefined;
|
|
31129
|
+
this.min = undefined;
|
|
31130
|
+
this._minObject = undefined;
|
|
31131
|
+
this.minLength = undefined;
|
|
31132
|
+
this.required = false;
|
|
31133
|
+
this.onDark = false;
|
|
31134
|
+
this.setCustomValidityForType = undefined;
|
|
31135
|
+
this.size = 'lg';
|
|
31136
|
+
this.shape = 'classic';
|
|
31137
|
+
this.value = undefined;
|
|
31138
|
+
this._valueObject = undefined;
|
|
31139
|
+
|
|
31140
|
+
this._initializePrivateDefaults();
|
|
31141
|
+
}
|
|
31142
|
+
|
|
31143
|
+
/**
|
|
31144
|
+
* Internal Defaults.
|
|
31145
|
+
* @private
|
|
31146
|
+
* @returns {void}
|
|
31147
|
+
*/
|
|
31148
|
+
_initializePrivateDefaults() {
|
|
30876
31149
|
this.activeLabel = false;
|
|
30877
|
-
|
|
31150
|
+
this.appearance = "default";
|
|
31151
|
+
this.icon = false;
|
|
31152
|
+
this.disabled = false;
|
|
31153
|
+
this.dvInputOnly = false;
|
|
31154
|
+
this.hideLabelVisually = false;
|
|
31155
|
+
this.max = undefined;
|
|
31156
|
+
this.maxLength = undefined;
|
|
31157
|
+
this.min = undefined;
|
|
31158
|
+
this.minLength = undefined;
|
|
31159
|
+
this.noValidate = false;
|
|
31160
|
+
this.onDark = false;
|
|
31161
|
+
this.required = false;
|
|
31162
|
+
this.setCustomValidityForType = undefined;
|
|
31163
|
+
|
|
31164
|
+
// Used for storing raw values returned from input mask.
|
|
31165
|
+
this._rawMaskValue = undefined;
|
|
31166
|
+
|
|
31167
|
+
/**
|
|
31168
|
+
* @private
|
|
31169
|
+
*/
|
|
31170
|
+
this.layout = 'classic';
|
|
31171
|
+
|
|
31172
|
+
/**
|
|
31173
|
+
* @private
|
|
31174
|
+
*/
|
|
31175
|
+
this.shape = 'classic';
|
|
31176
|
+
|
|
31177
|
+
/**
|
|
31178
|
+
* @private
|
|
31179
|
+
*/
|
|
31180
|
+
this.size = 'lg';
|
|
31181
|
+
|
|
31182
|
+
this.touched = false;
|
|
31183
|
+
this.util = new AuroInputUtilities({
|
|
31184
|
+
locale: "en-US",
|
|
31185
|
+
format: this.format
|
|
31186
|
+
});
|
|
31187
|
+
this.validation = new AuroFormValidation();
|
|
31188
|
+
this.inputIconName = undefined;
|
|
31189
|
+
this.showPassword = false;
|
|
31190
|
+
this.validationCCLength = undefined;
|
|
31191
|
+
this.hasValue = false;
|
|
31192
|
+
this.label = 'Input label is undefined';
|
|
31193
|
+
|
|
31194
|
+
|
|
30878
31195
|
this.allowedInputTypes = [
|
|
30879
31196
|
"text",
|
|
30880
31197
|
"number",
|
|
@@ -30883,8 +31200,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
30883
31200
|
"credit-card",
|
|
30884
31201
|
"tel"
|
|
30885
31202
|
];
|
|
30886
|
-
this.
|
|
30887
|
-
/** @private */
|
|
31203
|
+
this.icon = false;
|
|
30888
31204
|
this.dateFormatMap = {
|
|
30889
31205
|
'mm/dd/yyyy': 'dateMMDDYYYY',
|
|
30890
31206
|
'dd/mm/yyyy': 'dateDDMMYYYY',
|
|
@@ -30901,57 +31217,27 @@ class BaseInput extends AuroElement$1 {
|
|
|
30901
31217
|
'dd/mm': 'dateDDMM',
|
|
30902
31218
|
'mm/dd': 'dateMMDD'
|
|
30903
31219
|
};
|
|
30904
|
-
this.disabled = false;
|
|
30905
|
-
/** @private */
|
|
30906
31220
|
this.domHandler = new DomHandler();
|
|
30907
31221
|
this.dvInputOnly = false;
|
|
30908
31222
|
this.hasValue = false;
|
|
30909
|
-
this.hideLabelVisually = false;
|
|
30910
|
-
this.icon = false;
|
|
30911
|
-
/** @private */
|
|
30912
31223
|
this.inputIconName = undefined;
|
|
30913
|
-
/** @private */
|
|
30914
31224
|
this.label = 'Input label is undefined';
|
|
30915
|
-
this.layout = 'classic';
|
|
30916
|
-
this.locale = 'en-US';
|
|
30917
|
-
this.max = undefined;
|
|
30918
|
-
this._maxObject = undefined;
|
|
30919
|
-
this.maxLength = undefined;
|
|
30920
|
-
this.min = undefined;
|
|
30921
|
-
this._minObject = undefined;
|
|
30922
|
-
this.minLength = undefined;
|
|
30923
31225
|
this.noValidate = false;
|
|
30924
|
-
this.
|
|
30925
|
-
// Raw values returned from the input mask before model normalization.
|
|
30926
|
-
this._rawMaskValue = undefined;
|
|
30927
|
-
this.required = false;
|
|
30928
|
-
this.setCustomValidityForType = undefined;
|
|
30929
|
-
// Credit Card is intentionally excluded — its mask manages the cursor
|
|
30930
|
-
// itself, and listing it here caused cursor placement issues in Safari.
|
|
30931
|
-
/** @private */
|
|
31226
|
+
this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
|
|
30932
31227
|
this.setSelectionInputTypes = [
|
|
30933
31228
|
"text",
|
|
30934
31229
|
"password",
|
|
30935
31230
|
"email"
|
|
30936
|
-
];
|
|
30937
|
-
this.shape = 'classic';
|
|
30938
|
-
/** @private */
|
|
31231
|
+
]; // Credit Card is not included as this caused cursor placement issues in Safari.
|
|
30939
31232
|
this.showPassword = false;
|
|
30940
|
-
this.size = 'lg';
|
|
30941
31233
|
this.touched = false;
|
|
30942
|
-
/** @private */
|
|
30943
31234
|
this.uniqueId = new UniqueId().create();
|
|
30944
|
-
/** @private */
|
|
30945
31235
|
this.util = new AuroInputUtilities({
|
|
30946
31236
|
locale: this.locale,
|
|
30947
31237
|
format: this.format
|
|
30948
31238
|
});
|
|
30949
|
-
/** @private */
|
|
30950
31239
|
this.validation = new AuroFormValidation();
|
|
30951
|
-
/** @private */
|
|
30952
31240
|
this.validationCCLength = undefined;
|
|
30953
|
-
this.value = undefined;
|
|
30954
|
-
this._valueObject = undefined;
|
|
30955
31241
|
}
|
|
30956
31242
|
|
|
30957
31243
|
// function to define props used within the scope of this component
|
|
@@ -31499,15 +31785,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31499
31785
|
|
|
31500
31786
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
31501
31787
|
|
|
31502
|
-
// Normalize the format token to lowercase so case-mixed values supplied
|
|
31503
|
-
// via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
|
|
31504
|
-
// lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
|
|
31505
|
-
// format silently misses the map and leaves `setCustomValidityForType`
|
|
31506
|
-
// unset.
|
|
31507
|
-
if (this.format) {
|
|
31508
|
-
this.format = this.format.toLowerCase();
|
|
31509
|
-
}
|
|
31510
|
-
|
|
31511
31788
|
// use validity message override if declared when initializing the component
|
|
31512
31789
|
if (this.hasAttribute('setCustomValidity')) {
|
|
31513
31790
|
this.ValidityMessageOverride = this.setCustomValidity;
|
|
@@ -31941,38 +32218,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31941
32218
|
this.touched = true;
|
|
31942
32219
|
this.validation.validate(this);
|
|
31943
32220
|
}
|
|
31944
|
-
|
|
31945
|
-
// Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
|
|
31946
|
-
// update that can re-render the input and reset the native cursor; we
|
|
31947
|
-
// capture the caret position before that update commits and restore it
|
|
31948
|
-
// via `setSelectionRange` once the update has flushed. Gated on
|
|
31949
|
-
// `setSelectionInputTypes` so credit-card (and other masked types whose
|
|
31950
|
-
// formatter manages the cursor itself) doesn't get a competing write.
|
|
31951
|
-
// Capture the caret position INSIDE the gate — reading `selectionStart`
|
|
31952
|
-
// on input types that don't support text selection (number, email in
|
|
31953
|
-
// some browsers) throws InvalidStateError, which would crash all input
|
|
31954
|
-
// handling. Wrap the read in try/catch belt-and-suspenders even though
|
|
31955
|
-
// the gated types currently support it, since the list is a public
|
|
31956
|
-
// property a consumer could mutate.
|
|
31957
|
-
if (this.setSelectionInputTypes.includes(this.type)) {
|
|
31958
|
-
let selectionStart;
|
|
31959
|
-
try {
|
|
31960
|
-
selectionStart = this.inputElement.selectionStart;
|
|
31961
|
-
} catch (error) { // eslint-disable-line no-unused-vars
|
|
31962
|
-
return;
|
|
31963
|
-
}
|
|
31964
|
-
if (typeof selectionStart !== 'number') {
|
|
31965
|
-
return;
|
|
31966
|
-
}
|
|
31967
|
-
this.updateComplete.then(() => {
|
|
31968
|
-
try {
|
|
31969
|
-
this.inputElement.setSelectionRange(selectionStart, selectionStart);
|
|
31970
|
-
} catch (error) { // eslint-disable-line no-unused-vars
|
|
31971
|
-
// Some input types (number/email in certain UAs) throw on
|
|
31972
|
-
// setSelectionRange; swallow and let the native cursor stand.
|
|
31973
|
-
}
|
|
31974
|
-
});
|
|
31975
|
-
}
|
|
31976
32221
|
}
|
|
31977
32222
|
|
|
31978
32223
|
/**
|
|
@@ -32599,7 +32844,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
|
|
|
32599
32844
|
}
|
|
32600
32845
|
};
|
|
32601
32846
|
|
|
32602
|
-
var formkitVersion = '
|
|
32847
|
+
var formkitVersion = '202606291455';
|
|
32603
32848
|
|
|
32604
32849
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
32605
32850
|
// See LICENSE in the project root for license information.
|
|
@@ -33102,7 +33347,6 @@ class AuroInput extends BaseInput {
|
|
|
33102
33347
|
<${this.buttonTag}
|
|
33103
33348
|
@click="${this.handleClickShowPassword}"
|
|
33104
33349
|
appearance="${this.onDark ? 'inverse' : this.appearance}"
|
|
33105
|
-
aria-pressed="${this.showPassword ? 'true' : 'false'}"
|
|
33106
33350
|
class="notificationBtn passwordBtn"
|
|
33107
33351
|
shape="circle"
|
|
33108
33352
|
size="sm"
|
|
@@ -33176,29 +33420,25 @@ class AuroInput extends BaseInput {
|
|
|
33176
33420
|
* @returns {html} - Returns HTML for the help text and error message.
|
|
33177
33421
|
*/
|
|
33178
33422
|
renderHtmlHelpText() {
|
|
33179
|
-
// Single `<p>` with stable identity across validity transitions —
|
|
33180
|
-
// previously two distinct templates (valid vs invalid) caused Lit to
|
|
33181
|
-
// replace the node entirely on a flip, and VoiceOver wouldn't
|
|
33182
|
-
// re-announce because the live-region element it was watching had been
|
|
33183
|
-
// removed and a new one inserted. Keeping one node means the `role`,
|
|
33184
|
-
// `aria-live`, and text content all change in-place, which AT does
|
|
33185
|
-
// observe and announce.
|
|
33186
|
-
const isError = this.validity && this.validity !== 'valid';
|
|
33187
33423
|
return u$a`
|
|
33188
|
-
|
|
33189
|
-
|
|
33190
|
-
|
|
33191
|
-
|
|
33192
|
-
|
|
33193
|
-
|
|
33194
|
-
|
|
33195
|
-
|
|
33196
|
-
|
|
33197
|
-
|
|
33198
|
-
|
|
33199
|
-
|
|
33200
|
-
|
|
33201
|
-
|
|
33424
|
+
${!this.validity || this.validity === undefined || this.validity === 'valid'
|
|
33425
|
+
? u$a`
|
|
33426
|
+
<${this.helpTextTag}
|
|
33427
|
+
appearance="${this.onDark ? 'inverse' : this.appearance}">
|
|
33428
|
+
<p id="${this.uniqueId}" part="helpText">
|
|
33429
|
+
<slot name="helpText">${this.getHelpText()}</slot>
|
|
33430
|
+
</p>
|
|
33431
|
+
</${this.helpTextTag}>
|
|
33432
|
+
`
|
|
33433
|
+
: u$a`
|
|
33434
|
+
<${this.helpTextTag} error
|
|
33435
|
+
appearance="${this.onDark ? 'inverse' : this.appearance}">
|
|
33436
|
+
<p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
|
|
33437
|
+
${this.errorMessage}
|
|
33438
|
+
</p>
|
|
33439
|
+
</${this.helpTextTag}>
|
|
33440
|
+
`
|
|
33441
|
+
}
|
|
33202
33442
|
`;
|
|
33203
33443
|
}
|
|
33204
33444
|
|
|
@@ -33345,15 +33585,6 @@ function formatISODate(isoStr, format) {
|
|
|
33345
33585
|
try {
|
|
33346
33586
|
const date = dateFormatter.stringToDateInstance(isoStr);
|
|
33347
33587
|
|
|
33348
|
-
// `stringToDateInstance` returns an `Invalid Date` for malformed strings
|
|
33349
|
-
// and `null` for non-string input — it does NOT throw. Without this
|
|
33350
|
-
// guard, `getFullYear()`/`getMonth()`/`getDate()` on an Invalid Date
|
|
33351
|
-
// yield `NaN`, and `String(NaN).padStart(4, '0')` produces literals
|
|
33352
|
-
// like "0NaN/0NaN/0NaN" instead of `undefined`.
|
|
33353
|
-
if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
|
|
33354
|
-
return undefined;
|
|
33355
|
-
}
|
|
33356
|
-
|
|
33357
33588
|
const year = String(date.getFullYear()).padStart(4, '0');
|
|
33358
33589
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
33359
33590
|
const day = String(date.getDate()).padStart(2, '0');
|
|
@@ -33364,10 +33595,7 @@ function formatISODate(isoStr, format) {
|
|
|
33364
33595
|
replace(/mm/iu, month).
|
|
33365
33596
|
replace(/dd/iu, day);
|
|
33366
33597
|
} catch (err) {
|
|
33367
|
-
//
|
|
33368
|
-
// (inside `stringToDateInstance`) could throw on pathological input
|
|
33369
|
-
// future-library-versions might introduce. Treat any thrown error as
|
|
33370
|
-
// "not a valid date" and return undefined.
|
|
33598
|
+
// If the input string is not a valid date, return undefined
|
|
33371
33599
|
return undefined;
|
|
33372
33600
|
}
|
|
33373
33601
|
}
|
|
@@ -34093,6 +34321,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34093
34321
|
this.rangeLabelBeforeRange = 'before range';
|
|
34094
34322
|
this.rangeLabelInRange = 'in range';
|
|
34095
34323
|
this.rangeLabelAfterRange = 'after range';
|
|
34324
|
+
this.rangeLabelEndPreview = 'previewing range end';
|
|
34096
34325
|
this.blackoutDates = [];
|
|
34097
34326
|
this.blackoutLabel = 'unavailable';
|
|
34098
34327
|
this.navLabelPrevMonth = 'Previous month';
|
|
@@ -34192,6 +34421,22 @@ class AuroDatePicker extends AuroElement {
|
|
|
34192
34421
|
*/
|
|
34193
34422
|
this.handleClick = this.handleClick.bind(this);
|
|
34194
34423
|
|
|
34424
|
+
/**
|
|
34425
|
+
* Single AbortController shared by every listener registered in the
|
|
34426
|
+
* configure* methods. Lets disconnectedCallback tear all of them down
|
|
34427
|
+
* with one abort() call.
|
|
34428
|
+
*
|
|
34429
|
+
* The genuine leak risk is the listeners attached to children that can
|
|
34430
|
+
* outlive the host if they get reparented — `this.dropdown`,
|
|
34431
|
+
* `this.calendar`, and the inputs inside the dropdown's slot.
|
|
34432
|
+
* Listeners attached to `this` (e.g. focusin/focusout on the host)
|
|
34433
|
+
* form a self-contained reference graph that the GC can collect with
|
|
34434
|
+
* the host anyway, but they share the same signal so the cleanup
|
|
34435
|
+
* pattern stays uniform across all configure* sites.
|
|
34436
|
+
* @private
|
|
34437
|
+
*/
|
|
34438
|
+
this._listenerAbortController = new AbortController();
|
|
34439
|
+
|
|
34195
34440
|
/**
|
|
34196
34441
|
* @private
|
|
34197
34442
|
*/
|
|
@@ -34240,6 +34485,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34240
34485
|
|
|
34241
34486
|
/**
|
|
34242
34487
|
* Label announced for blackout (disabled but in-range) date cells.
|
|
34488
|
+
* @default 'unavailable'
|
|
34243
34489
|
*/
|
|
34244
34490
|
blackoutLabel: {
|
|
34245
34491
|
type: String,
|
|
@@ -34256,6 +34502,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34256
34502
|
|
|
34257
34503
|
/**
|
|
34258
34504
|
* Accessible label for the calendar grid containing the days of the month.
|
|
34505
|
+
* @default 'Calendar days of the month'
|
|
34259
34506
|
*/
|
|
34260
34507
|
calendarGridLabel: {
|
|
34261
34508
|
type: String,
|
|
@@ -34418,6 +34665,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34418
34665
|
|
|
34419
34666
|
/**
|
|
34420
34667
|
* Accessible label for the next month navigation button.
|
|
34668
|
+
* @default 'Next month'
|
|
34421
34669
|
*/
|
|
34422
34670
|
navLabelNextMonth: {
|
|
34423
34671
|
type: String,
|
|
@@ -34426,6 +34674,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34426
34674
|
|
|
34427
34675
|
/**
|
|
34428
34676
|
* Accessible label for the previous month navigation button.
|
|
34677
|
+
* @default 'Previous month'
|
|
34429
34678
|
*/
|
|
34430
34679
|
navLabelPrevMonth: {
|
|
34431
34680
|
type: String,
|
|
@@ -34503,7 +34752,11 @@ class AuroDatePicker extends AuroElement {
|
|
|
34503
34752
|
},
|
|
34504
34753
|
|
|
34505
34754
|
/**
|
|
34506
|
-
* Label announced for cells after
|
|
34755
|
+
* Label announced for cells after a fully selected range (both
|
|
34756
|
+
* `dateFrom` and `dateTo` are set). While a range is still being
|
|
34757
|
+
* picked (`dateFrom` set, `dateTo` unset), focused cells past the
|
|
34758
|
+
* start use `rangeLabelEndPreview` instead.
|
|
34759
|
+
* @default 'after range'
|
|
34507
34760
|
*/
|
|
34508
34761
|
rangeLabelAfterRange: {
|
|
34509
34762
|
type: String,
|
|
@@ -34512,6 +34765,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34512
34765
|
|
|
34513
34766
|
/**
|
|
34514
34767
|
* Label announced for cells before the range start.
|
|
34768
|
+
* @default 'before range'
|
|
34515
34769
|
*/
|
|
34516
34770
|
rangeLabelBeforeRange: {
|
|
34517
34771
|
type: String,
|
|
@@ -34520,14 +34774,27 @@ class AuroDatePicker extends AuroElement {
|
|
|
34520
34774
|
|
|
34521
34775
|
/**
|
|
34522
34776
|
* Label announced for the range end date cell.
|
|
34777
|
+
* @default 'range end'
|
|
34523
34778
|
*/
|
|
34524
34779
|
rangeLabelEnd: {
|
|
34525
34780
|
type: String,
|
|
34526
34781
|
reflect: true
|
|
34527
34782
|
},
|
|
34528
34783
|
|
|
34784
|
+
/**
|
|
34785
|
+
* Label announced for the focused cell while previewing a range end
|
|
34786
|
+
* (dateFrom set, dateTo not yet selected). Tells AT users that
|
|
34787
|
+
* pressing Enter would commit this cell as the range end.
|
|
34788
|
+
* @default 'previewing range end'
|
|
34789
|
+
*/
|
|
34790
|
+
rangeLabelEndPreview: {
|
|
34791
|
+
type: String,
|
|
34792
|
+
reflect: true
|
|
34793
|
+
},
|
|
34794
|
+
|
|
34529
34795
|
/**
|
|
34530
34796
|
* Label announced for cells within the selected range.
|
|
34797
|
+
* @default 'in range'
|
|
34531
34798
|
*/
|
|
34532
34799
|
rangeLabelInRange: {
|
|
34533
34800
|
type: String,
|
|
@@ -34536,6 +34803,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34536
34803
|
|
|
34537
34804
|
/**
|
|
34538
34805
|
* Label announced for the range start date cell.
|
|
34806
|
+
* @default 'range start'
|
|
34539
34807
|
*/
|
|
34540
34808
|
rangeLabelStart: {
|
|
34541
34809
|
type: String,
|
|
@@ -34543,7 +34811,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34543
34811
|
},
|
|
34544
34812
|
|
|
34545
34813
|
/**
|
|
34546
|
-
* Dates that the user should have for reference as part of their decision
|
|
34814
|
+
* Dates that the user should have for reference as part of their decision-making when selecting a date.
|
|
34547
34815
|
* This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
|
|
34548
34816
|
*/
|
|
34549
34817
|
referenceDates: {
|
|
@@ -34900,10 +35168,26 @@ class AuroDatePicker extends AuroElement {
|
|
|
34900
35168
|
// ─── Vendor calendar time conversions ─────────────────────────────────────
|
|
34901
35169
|
|
|
34902
35170
|
/**
|
|
34903
|
-
* Converts a Unix timestamp (seconds) from the
|
|
35171
|
+
* Converts a Unix timestamp (seconds) from the vendored range-datepicker
|
|
35172
|
+
* (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
|
|
35173
|
+
*
|
|
35174
|
+
* Timezone contract:
|
|
35175
|
+
* - INPUT: `time` is assumed to be the seconds-since-epoch of **local
|
|
35176
|
+
* midnight** for the intended calendar day. The vendor's Day constructor
|
|
35177
|
+
* builds it via `date-fns format(date, 't')` from a locally-constructed
|
|
35178
|
+
* Date, so this assumption currently holds end-to-end.
|
|
35179
|
+
* - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
|
|
35180
|
+
* getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
|
|
35181
|
+
* string matches the local calendar day.
|
|
35182
|
+
*
|
|
35183
|
+
* If the vendor ever switches to emitting UTC-midnight timestamps, this
|
|
35184
|
+
* conversion will silently shift the returned date by one day in zones
|
|
35185
|
+
* west of UTC. Any vendor swap should re-verify this contract; the TZ
|
|
35186
|
+
* regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
|
|
35187
|
+
*
|
|
34904
35188
|
* @private
|
|
34905
|
-
* @param {number} time - Unix timestamp
|
|
34906
|
-
* @returns {string} ISO date string (yyyy-mm-dd).
|
|
35189
|
+
* @param {number} time - Unix timestamp (seconds), local midnight of the day.
|
|
35190
|
+
* @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
|
|
34907
35191
|
*/
|
|
34908
35192
|
convertWcTimeToDate(time) {
|
|
34909
35193
|
return dateFormatter$1.toISOFormatString(new Date(time * 1000));
|
|
@@ -35005,8 +35289,8 @@ class AuroDatePicker extends AuroElement {
|
|
|
35005
35289
|
}
|
|
35006
35290
|
}
|
|
35007
35291
|
|
|
35008
|
-
// Focus the calendar grid wrapper (
|
|
35009
|
-
// the SR announcement for the active cell
|
|
35292
|
+
// Focus the calendar grid wrapper. The live region (announced just
|
|
35293
|
+
// below) handles the SR announcement for the active cell.
|
|
35010
35294
|
if (activeCell) {
|
|
35011
35295
|
this.calendar.focusActiveCell();
|
|
35012
35296
|
|
|
@@ -35056,11 +35340,13 @@ class AuroDatePicker extends AuroElement {
|
|
|
35056
35340
|
this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
|
|
35057
35341
|
}
|
|
35058
35342
|
|
|
35343
|
+
const { signal } = this._listenerAbortController;
|
|
35344
|
+
|
|
35059
35345
|
this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
|
|
35060
35346
|
if (!this.isPopoverVisible) {
|
|
35061
35347
|
this.dropdown.show();
|
|
35062
35348
|
}
|
|
35063
|
-
});
|
|
35349
|
+
}, { signal });
|
|
35064
35350
|
|
|
35065
35351
|
this.dropdown.addEventListener('auroDropdown-toggled', () => {
|
|
35066
35352
|
this.notifyDatepickerToggled();
|
|
@@ -35078,7 +35364,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35078
35364
|
if (this.valueObject) {
|
|
35079
35365
|
this.centralDate = this.value;
|
|
35080
35366
|
} else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
|
|
35081
|
-
this.centralDate = new Date();
|
|
35367
|
+
this.centralDate = dateFormatter$1.toISOFormatString(new Date());
|
|
35082
35368
|
}
|
|
35083
35369
|
}
|
|
35084
35370
|
|
|
@@ -35158,7 +35444,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35158
35444
|
this.forceScrollOnNextMobileCalendarRender = false;
|
|
35159
35445
|
}, 0);
|
|
35160
35446
|
}
|
|
35161
|
-
});
|
|
35447
|
+
}, { signal });
|
|
35162
35448
|
|
|
35163
35449
|
// Handle responsive strategy changes while the dropdown is open
|
|
35164
35450
|
// (e.g. resizing from desktop → mobile or vice versa).
|
|
@@ -35205,7 +35491,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35205
35491
|
});
|
|
35206
35492
|
});
|
|
35207
35493
|
}
|
|
35208
|
-
});
|
|
35494
|
+
}, { signal });
|
|
35209
35495
|
}
|
|
35210
35496
|
|
|
35211
35497
|
/**
|
|
@@ -35218,6 +35504,8 @@ class AuroDatePicker extends AuroElement {
|
|
|
35218
35504
|
|
|
35219
35505
|
this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
|
|
35220
35506
|
|
|
35507
|
+
const { signal } = this._listenerAbortController;
|
|
35508
|
+
|
|
35221
35509
|
this.inputList.forEach((input, index) => {
|
|
35222
35510
|
input.addEventListener('input', (event) => {
|
|
35223
35511
|
event.stopPropagation();
|
|
@@ -35229,7 +35517,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35229
35517
|
}
|
|
35230
35518
|
|
|
35231
35519
|
this.notifyValueChanged();
|
|
35232
|
-
});
|
|
35520
|
+
}, { signal });
|
|
35233
35521
|
|
|
35234
35522
|
input.addEventListener('auroFormElement-validated', (evt) => {
|
|
35235
35523
|
// not to bubble up input's validated event.
|
|
@@ -35245,7 +35533,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35245
35533
|
this.validity = evt.detail.validity;
|
|
35246
35534
|
this.errorMessage = evt.detail.message;
|
|
35247
35535
|
}
|
|
35248
|
-
});
|
|
35536
|
+
}, { signal });
|
|
35249
35537
|
});
|
|
35250
35538
|
}
|
|
35251
35539
|
|
|
@@ -35259,19 +35547,32 @@ class AuroDatePicker extends AuroElement {
|
|
|
35259
35547
|
this.calendar.datepicker = this;
|
|
35260
35548
|
this.calendar.dropdown = this.dropdown;
|
|
35261
35549
|
|
|
35550
|
+
const { signal } = this._listenerAbortController;
|
|
35551
|
+
|
|
35262
35552
|
this.calendar.addEventListener('auroCalendar-dateSelected', () => {
|
|
35263
|
-
|
|
35264
|
-
|
|
35553
|
+
// Compare the input's ISO value against the *converted* calendar
|
|
35554
|
+
// timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
|
|
35555
|
+
// strings — comparing the input ISO directly against them would
|
|
35556
|
+
// never match, so the write would fire on every event and emit
|
|
35557
|
+
// redundant input/change activity).
|
|
35558
|
+
if (this.calendar.dateFrom !== undefined) {
|
|
35559
|
+
const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
|
|
35560
|
+
if (this.inputList[0].value !== fromIso) {
|
|
35561
|
+
this.inputList[0].value = fromIso;
|
|
35562
|
+
}
|
|
35265
35563
|
}
|
|
35266
35564
|
|
|
35267
|
-
if (this.inputList[1] && this.calendar.dateTo
|
|
35268
|
-
|
|
35565
|
+
if (this.inputList[1] && this.calendar.dateTo) {
|
|
35566
|
+
const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
|
|
35567
|
+
if (this.inputList[1].value !== toIso) {
|
|
35568
|
+
this.inputList[1].value = toIso;
|
|
35569
|
+
}
|
|
35269
35570
|
}
|
|
35270
|
-
});
|
|
35571
|
+
}, { signal });
|
|
35271
35572
|
|
|
35272
35573
|
this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
|
|
35273
35574
|
this.dropdown.hide();
|
|
35274
|
-
});
|
|
35575
|
+
}, { signal });
|
|
35275
35576
|
|
|
35276
35577
|
this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
|
|
35277
35578
|
const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
|
|
@@ -35281,7 +35582,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35281
35582
|
}
|
|
35282
35583
|
|
|
35283
35584
|
this.notifyMonthChanged(event);
|
|
35284
|
-
});
|
|
35585
|
+
}, { signal });
|
|
35285
35586
|
}
|
|
35286
35587
|
|
|
35287
35588
|
/**
|
|
@@ -35290,10 +35591,17 @@ class AuroDatePicker extends AuroElement {
|
|
|
35290
35591
|
* @returns {void}
|
|
35291
35592
|
*/
|
|
35292
35593
|
configureDatepicker() {
|
|
35594
|
+
// These listeners are on `this` (the host), so they would GC with the
|
|
35595
|
+
// host even without the abort signal — see the leak rationale on
|
|
35596
|
+
// `_listenerAbortController`. The signal is still passed for uniform
|
|
35597
|
+
// cleanup semantics with the child-element listeners in the other
|
|
35598
|
+
// configure* methods.
|
|
35599
|
+
const { signal } = this._listenerAbortController;
|
|
35600
|
+
|
|
35293
35601
|
this.addEventListener('focusin', () => {
|
|
35294
35602
|
this.touched = true;
|
|
35295
35603
|
this.hasFocus = true;
|
|
35296
|
-
});
|
|
35604
|
+
}, { signal });
|
|
35297
35605
|
|
|
35298
35606
|
this.addEventListener('focusout', () => {
|
|
35299
35607
|
this.hasFocus = false;
|
|
@@ -35305,7 +35613,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35305
35613
|
if (!this.matches(':focus-within')) {
|
|
35306
35614
|
this.validate();
|
|
35307
35615
|
}
|
|
35308
|
-
});
|
|
35616
|
+
}, { signal });
|
|
35309
35617
|
|
|
35310
35618
|
if (this.valueObject) {
|
|
35311
35619
|
this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
|
|
@@ -35503,6 +35811,41 @@ class AuroDatePicker extends AuroElement {
|
|
|
35503
35811
|
return this.validity !== undefined && this.validity !== 'valid';
|
|
35504
35812
|
}
|
|
35505
35813
|
|
|
35814
|
+
/**
|
|
35815
|
+
* Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
|
|
35816
|
+
* spans every datepicker instance on the page; lives on the class (not
|
|
35817
|
+
* at module scope) so it stays an encapsulated implementation detail of
|
|
35818
|
+
* this component and does not interfere with WCA's class-JSDoc
|
|
35819
|
+
* attachment.
|
|
35820
|
+
* @private
|
|
35821
|
+
*/
|
|
35822
|
+
static _warnedInvalidLocales = new Set();
|
|
35823
|
+
|
|
35824
|
+
/**
|
|
35825
|
+
* Logs a one-time `console.debug` when an unsupported locale falls back to
|
|
35826
|
+
* en-US. Deduped by the offending tag so noisy re-renders that resurface
|
|
35827
|
+
* the same bad value stay quiet, but each new bad value still signals so
|
|
35828
|
+
* consumers can spot the typo or missing tag.
|
|
35829
|
+
* @private
|
|
35830
|
+
* @param {string|undefined} badLocale - The locale value that failed.
|
|
35831
|
+
* @returns {void}
|
|
35832
|
+
*/
|
|
35833
|
+
_warnInvalidLocale(badLocale) {
|
|
35834
|
+
// Stringify without coalescing — `String(undefined)` / `String(null)`
|
|
35835
|
+
// surface the actual offending value in the log, instead of the
|
|
35836
|
+
// ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
|
|
35837
|
+
// Dedup still works correctly because each unique stringification
|
|
35838
|
+
// becomes its own Set entry.
|
|
35839
|
+
const key = String(badLocale);
|
|
35840
|
+
const seen = AuroDatePicker._warnedInvalidLocales;
|
|
35841
|
+
if (seen.has(key)) {
|
|
35842
|
+
return;
|
|
35843
|
+
}
|
|
35844
|
+
seen.add(key);
|
|
35845
|
+
// eslint-disable-next-line no-console
|
|
35846
|
+
console.debug(`[auro-datepicker] Locale "${key}" is not supported by Intl.DateTimeFormat. Falling back to "en-US". Pass a BCP 47 tag such as "en-US", "fr-FR", or "ja-JP".`);
|
|
35847
|
+
}
|
|
35848
|
+
|
|
35506
35849
|
/**
|
|
35507
35850
|
* Lifecycle method to check if the locale is valid.
|
|
35508
35851
|
* @ignore
|
|
@@ -35513,10 +35856,15 @@ class AuroDatePicker extends AuroElement {
|
|
|
35513
35856
|
if (changedProperties.has('locale')) {
|
|
35514
35857
|
try {
|
|
35515
35858
|
const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
|
|
35516
|
-
|
|
35859
|
+
if (supported.length > 0) {
|
|
35860
|
+
this._validLocale = this.locale;
|
|
35861
|
+
} else {
|
|
35862
|
+
this._validLocale = 'en-US';
|
|
35863
|
+
this._warnInvalidLocale(this.locale);
|
|
35864
|
+
}
|
|
35517
35865
|
} catch {
|
|
35518
|
-
console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
|
|
35519
35866
|
this._validLocale = 'en-US';
|
|
35867
|
+
this._warnInvalidLocale(this.locale);
|
|
35520
35868
|
}
|
|
35521
35869
|
|
|
35522
35870
|
const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
|
|
@@ -35598,8 +35946,6 @@ class AuroDatePicker extends AuroElement {
|
|
|
35598
35946
|
// Skip centralDate update when user clicked a cell in range mode
|
|
35599
35947
|
// to prevent the displayed months from shifting
|
|
35600
35948
|
this.centralDate = this.value;
|
|
35601
|
-
//TODO: TEST THIS CHANGE
|
|
35602
|
-
// this.calendarRenderUtil.updateCentralDate(this, this.value);
|
|
35603
35949
|
}
|
|
35604
35950
|
|
|
35605
35951
|
this.setHasValue();
|
|
@@ -35659,8 +36005,6 @@ class AuroDatePicker extends AuroElement {
|
|
|
35659
36005
|
// Skip centralDate update when user clicked a cell in range mode
|
|
35660
36006
|
// to prevent the displayed months from shifting
|
|
35661
36007
|
this.centralDate = this.valueEnd;
|
|
35662
|
-
// TODO: TEST THIS CHANGE
|
|
35663
|
-
// this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
|
|
35664
36008
|
}
|
|
35665
36009
|
|
|
35666
36010
|
this.validate();
|
|
@@ -35802,7 +36146,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35802
36146
|
* @returns {void}
|
|
35803
36147
|
*/
|
|
35804
36148
|
configureClickHandler() {
|
|
35805
|
-
this.addEventListener('click', this.handleClick);
|
|
36149
|
+
this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
|
|
35806
36150
|
}
|
|
35807
36151
|
|
|
35808
36152
|
firstUpdated() {
|
|
@@ -35810,6 +36154,15 @@ class AuroDatePicker extends AuroElement {
|
|
|
35810
36154
|
// Add the tag name as an attribute if it is different than the component name
|
|
35811
36155
|
this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
|
|
35812
36156
|
|
|
36157
|
+
// If the element was disconnected before this first render finished,
|
|
36158
|
+
// disconnectedCallback's microtask already aborted the controller. The
|
|
36159
|
+
// connectedCallback reinit guard skips that case because `hasUpdated`
|
|
36160
|
+
// is still false. Mint a fresh controller here so configure* registers
|
|
36161
|
+
// listeners against a live signal.
|
|
36162
|
+
if (this._listenerAbortController.signal.aborted) {
|
|
36163
|
+
this._listenerAbortController = new AbortController();
|
|
36164
|
+
}
|
|
36165
|
+
|
|
35813
36166
|
this.configureDropdown();
|
|
35814
36167
|
this.configureInput();
|
|
35815
36168
|
this.configureCalendar();
|
|
@@ -35821,9 +36174,36 @@ class AuroDatePicker extends AuroElement {
|
|
|
35821
36174
|
connectedCallback() {
|
|
35822
36175
|
super.connectedCallback();
|
|
35823
36176
|
|
|
36177
|
+
// True reconnect after `disconnectedCallback` aborted our controller:
|
|
36178
|
+
// the existing signal is dead, so listeners registered against it
|
|
36179
|
+
// would never fire. Create a fresh controller and re-run the
|
|
36180
|
+
// configure* wiring (each method is idempotent — it just re-caches
|
|
36181
|
+
// child refs and re-registers listeners against the new signal).
|
|
36182
|
+
// `hasUpdated` gates this so the *first* connect (which precedes
|
|
36183
|
+
// firstUpdated) still falls through to firstUpdated's initial wiring.
|
|
36184
|
+
if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
|
|
36185
|
+
this._listenerAbortController = new AbortController();
|
|
36186
|
+
this.configureDropdown();
|
|
36187
|
+
this.configureInput();
|
|
36188
|
+
this.configureCalendar();
|
|
36189
|
+
this.configureDatepicker();
|
|
36190
|
+
this.configureClickHandler();
|
|
36191
|
+
}
|
|
36192
|
+
|
|
35824
36193
|
this.locale = this.domHandler.getLocale(this);
|
|
35825
36194
|
}
|
|
35826
36195
|
|
|
36196
|
+
disconnectedCallback() {
|
|
36197
|
+
super.disconnectedCallback();
|
|
36198
|
+
// Defer so that re-parenting (auro-drawer slotting it into a dialog,
|
|
36199
|
+
// for example) does not abort listeners we still need after reconnect.
|
|
36200
|
+
queueMicrotask(() => {
|
|
36201
|
+
if (!this.isConnected) {
|
|
36202
|
+
this._listenerAbortController.abort();
|
|
36203
|
+
}
|
|
36204
|
+
});
|
|
36205
|
+
}
|
|
36206
|
+
|
|
35827
36207
|
// layout render methods
|
|
35828
36208
|
// ------------------------------------
|
|
35829
36209
|
|