@aurodesignsystem-dev/auro-formkit 0.0.0-pr1503.4 → 0.0.0-pr1503.5
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/bibtemplate/dist/index.js +1 -1
- package/components/bibtemplate/dist/registered.js +1 -1
- package/components/checkbox/demo/accessibility.md +1 -1
- package/components/checkbox/demo/customize.html +1 -2
- package/components/checkbox/demo/customize.min.js +23 -8
- package/components/checkbox/demo/getting-started.min.js +23 -8
- package/components/checkbox/demo/index.min.js +23 -8
- package/components/checkbox/dist/index.js +23 -8
- package/components/checkbox/dist/registered.js +23 -8
- package/components/combobox/README.md +1 -1
- package/components/combobox/demo/accessibility.md +1 -1
- package/components/combobox/demo/api.md +2 -2
- package/components/combobox/demo/customize.html +1 -2
- package/components/combobox/demo/customize.md +166 -142
- package/components/combobox/demo/customize.min.js +2515 -2316
- package/components/combobox/demo/getting-started.min.js +2515 -2312
- package/components/combobox/demo/index.md +2 -1
- package/components/combobox/demo/index.min.js +2515 -2312
- package/components/combobox/demo/keyboard-behavior.md +3 -146
- package/components/combobox/demo/readme.md +1 -1
- package/components/combobox/demo/why-combobox.md +2 -2
- package/components/combobox/dist/auro-combobox.d.ts +49 -15
- package/components/combobox/dist/index.js +1462 -753
- package/components/combobox/dist/registered.js +1462 -753
- package/components/counter/demo/customize.min.js +188 -244
- package/components/counter/demo/index.min.js +188 -244
- package/components/counter/dist/auro-counter.d.ts +0 -8
- package/components/counter/dist/index.js +188 -244
- package/components/counter/dist/registered.js +188 -244
- package/components/datepicker/demo/accessibility.md +20 -10
- package/components/datepicker/demo/api.md +65 -62
- package/components/datepicker/demo/customize.md +180 -40
- package/components/datepicker/demo/customize.min.js +1690 -777
- package/components/datepicker/demo/getting-started.md +118 -2
- package/components/datepicker/demo/index.min.js +1690 -759
- package/components/datepicker/demo/keyboard-behavior.md +3 -3
- package/components/datepicker/demo/voiceover.md +4 -4
- package/components/datepicker/demo/why-datepicker.md +2 -2
- package/components/datepicker/dist/{src/auro-calendar-cell.d.ts → auro-calendar-cell.d.ts} +48 -3
- package/components/datepicker/dist/{src/auro-calendar.d.ts → auro-calendar.d.ts} +188 -10
- package/components/datepicker/dist/{src/auro-datepicker.d.ts → auro-datepicker.d.ts} +89 -6
- package/components/datepicker/dist/blackoutUtils.d.ts +43 -0
- package/components/datepicker/dist/index.js +1690 -759
- package/components/datepicker/dist/registered.js +1690 -759
- package/components/dropdown/demo/customize.html +3 -0
- package/components/dropdown/demo/customize.min.js +142 -208
- package/components/dropdown/demo/getting-started.min.js +131 -207
- package/components/dropdown/demo/index.min.js +131 -207
- package/components/dropdown/dist/auro-dropdown.d.ts +17 -1
- package/components/dropdown/dist/index.js +131 -207
- package/components/dropdown/dist/registered.js +131 -207
- package/components/form/demo/api.md +3 -3
- package/components/form/demo/customize.html +6 -6
- package/components/form/demo/customize.md +535 -135
- package/components/form/demo/customize.min.js +6307 -4378
- package/components/form/demo/getting-started.md +344 -96
- package/components/form/demo/getting-started.min.js +6255 -4378
- package/components/form/demo/index.min.js +6206 -4378
- package/components/form/demo/registerDemoDeps.min.js +5827 -4333
- package/components/form/dist/auro-form.d.ts +128 -10
- package/components/form/dist/index.js +377 -43
- package/components/form/dist/registered.js +377 -43
- package/components/input/demo/accessibility.md +1 -1
- package/components/input/demo/api.md +58 -57
- package/components/input/demo/customize.html +1 -2
- package/components/input/demo/customize.md +62 -61
- package/components/input/demo/customize.min.js +396 -275
- package/components/input/demo/getting-started.min.js +396 -275
- package/components/input/demo/index.min.js +396 -275
- package/components/input/dist/auro-input.d.ts +1 -1
- package/components/input/dist/base-input.d.ts +60 -81
- package/components/input/dist/index.js +409 -276
- package/components/input/dist/registered.js +396 -275
- package/components/input/dist/utilities.d.ts +10 -1
- package/components/menu/demo/accessibility.md +9 -4
- package/components/menu/demo/api.md +48 -45
- package/components/menu/demo/css-only.md +26 -19
- package/components/menu/demo/customize.md +307 -75
- package/components/menu/demo/design.md +1 -1
- package/components/menu/demo/getting-started.md +144 -7
- package/components/menu/demo/index.min.js +961 -1341
- package/components/menu/demo/keyboard-behavior.md +83 -4
- package/components/menu/demo/voiceover.md +21 -14
- package/components/menu/demo/why-menu.md +8 -9
- package/components/menu/dist/auro-menu-utils.d.ts +19 -0
- package/components/menu/dist/auro-menu.d.ts +97 -116
- package/components/menu/dist/auro-menuoption.d.ts +39 -133
- package/components/menu/dist/index.js +823 -1309
- package/components/menu/dist/registered.js +835 -1309
- package/components/radio/demo/accessibility.md +1 -1
- package/components/radio/demo/customize.min.js +23 -8
- package/components/radio/demo/getting-started.min.js +23 -8
- package/components/radio/demo/index.min.js +23 -8
- package/components/radio/dist/index.js +23 -8
- package/components/radio/dist/registered.js +23 -8
- package/components/select/demo/accessibility.md +6 -1
- package/components/select/demo/api.md +3 -2
- package/components/select/demo/customize.html +1 -2
- package/components/select/demo/customize.md +210 -5
- package/components/select/demo/customize.min.js +1613 -1854
- package/components/select/demo/design.md +10 -10
- package/components/select/demo/getting-started.md +1 -1
- package/components/select/demo/getting-started.min.js +1617 -1903
- package/components/select/demo/index.md +2 -2
- package/components/select/demo/index.min.js +1613 -1854
- package/components/select/demo/keyboard-behavior.md +81 -54
- package/components/select/demo/voiceover.md +28 -15
- package/components/select/dist/auro-select.d.ts +70 -12
- package/components/select/dist/index.js +580 -315
- package/components/select/dist/registered.js +580 -315
- package/components/select/dist/selectUtils.d.ts +24 -0
- package/custom-elements.json +8071 -7919
- package/package.json +7 -3
- 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 -19
- 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 -9
- 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/menu/dist/auro-menu.context.d.ts +0 -238
- 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/counter/dist/styles/{counter-wrapper-color-css.d.ts → counter-group-color-css.d.ts} +0 -0
- /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
|
@@ -542,8 +542,21 @@ let AuroFormValidation$1 = class AuroFormValidation {
|
|
|
542
542
|
return;
|
|
543
543
|
}
|
|
544
544
|
|
|
545
|
-
// Validate that the date passed was the correct format and is a valid date
|
|
545
|
+
// Validate that the date passed was the correct format and is a valid date.
|
|
546
|
+
// For partial date formats, valueObject is never populated; validate them directly.
|
|
546
547
|
if (elem.value && !elem.valueObject) {
|
|
548
|
+
const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
|
|
549
|
+
|
|
550
|
+
if (isPartialDateFormat) {
|
|
551
|
+
if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
|
|
552
|
+
elem.validity = 'patternMismatch';
|
|
553
|
+
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
554
|
+
}
|
|
555
|
+
// Partial date format — validate directly and skip max/min checks since valueObject is undefined.
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
// Full date format with no valueObject means the value is not a valid calendar date.
|
|
547
560
|
elem.validity = 'patternMismatch';
|
|
548
561
|
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
549
562
|
return;
|
|
@@ -640,15 +653,17 @@ let AuroFormValidation$1 = class AuroFormValidation {
|
|
|
640
653
|
);
|
|
641
654
|
}
|
|
642
655
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
656
|
+
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
657
|
+
|
|
658
|
+
// If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
|
|
659
|
+
// Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
|
|
660
|
+
// field (datepicker is the intended consumer — start/end are independently required).
|
|
661
|
+
if (this.auroInputElements?.length === 2 && !isCombobox) {
|
|
662
|
+
if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
|
|
646
663
|
hasValue = false;
|
|
647
664
|
}
|
|
648
665
|
}
|
|
649
666
|
|
|
650
|
-
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
651
|
-
|
|
652
667
|
if (isCombobox) {
|
|
653
668
|
|
|
654
669
|
if (!elem.persistInput || elem.behavior === "filter") {
|
|
@@ -747,7 +762,7 @@ let AuroFormValidation$1 = class AuroFormValidation {
|
|
|
747
762
|
} else if (this.runtimeUtils.elementMatch(elem, 'auro-input') && elem.errorMessage === '') {
|
|
748
763
|
const input = elem.renderRoot.querySelector('input');
|
|
749
764
|
|
|
750
|
-
if (input.validationMessage.length > 0) {
|
|
765
|
+
if (input && input.validationMessage.length > 0) {
|
|
751
766
|
elem.errorMessage = input.validationMessage;
|
|
752
767
|
}
|
|
753
768
|
} else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox') && elem.errorMessage === '') {
|
|
@@ -1356,7 +1371,7 @@ function normalizeDates$1(context, ...dates) {
|
|
|
1356
1371
|
* const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
|
|
1357
1372
|
* //=> Tue Sep 02 2014 00:00:00
|
|
1358
1373
|
*/
|
|
1359
|
-
function startOfDay$
|
|
1374
|
+
function startOfDay$1(date, options) {
|
|
1360
1375
|
const _date = toDate$1(date, options?.in);
|
|
1361
1376
|
_date.setHours(0, 0, 0, 0);
|
|
1362
1377
|
return _date;
|
|
@@ -1404,8 +1419,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
|
|
|
1404
1419
|
earlierDate,
|
|
1405
1420
|
);
|
|
1406
1421
|
|
|
1407
|
-
const laterStartOfDay = startOfDay$
|
|
1408
|
-
const earlierStartOfDay = startOfDay$
|
|
1422
|
+
const laterStartOfDay = startOfDay$1(laterDate_);
|
|
1423
|
+
const earlierStartOfDay = startOfDay$1(earlierDate_);
|
|
1409
1424
|
|
|
1410
1425
|
const laterTimestamp =
|
|
1411
1426
|
+laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
|
|
@@ -10252,8 +10267,6 @@ try {
|
|
|
10252
10267
|
globalThis.IMask = IMask$1;
|
|
10253
10268
|
} catch {}
|
|
10254
10269
|
|
|
10255
|
-
/* eslint-disable max-lines */
|
|
10256
|
-
|
|
10257
10270
|
let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
10258
10271
|
|
|
10259
10272
|
/**
|
|
@@ -10296,7 +10309,7 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10296
10309
|
/**
|
|
10297
10310
|
* Converts an IMask-style date mask to a date-fns compatible format string.
|
|
10298
10311
|
* @param {string} mask - IMask date mask (e.g. "MM/DD/YYYY").
|
|
10299
|
-
* @returns {string} date-fns format string (e.g. "MM/dd/yyyy").
|
|
10312
|
+
* @returns {string} A date-fns format string (e.g. "MM/dd/yyyy").
|
|
10300
10313
|
*/
|
|
10301
10314
|
toDateFnsMask(mask) {
|
|
10302
10315
|
return mask
|
|
@@ -10396,10 +10409,11 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10396
10409
|
const dateFormat = format || this.overrideFormat || pattern || 'mm/dd/yyyy';
|
|
10397
10410
|
|
|
10398
10411
|
if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
|
|
10399
|
-
const
|
|
10412
|
+
const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
|
|
10413
|
+
const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
|
|
10400
10414
|
return {
|
|
10401
10415
|
mask: IMask$1.MaskedRange,
|
|
10402
|
-
from:
|
|
10416
|
+
from: fromValue,
|
|
10403
10417
|
to: maxValue,
|
|
10404
10418
|
lazy: true,
|
|
10405
10419
|
placeholderChar: '',
|
|
@@ -10407,7 +10421,8 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10407
10421
|
return value.toString().padStart(dateFormat.length, '0');
|
|
10408
10422
|
},
|
|
10409
10423
|
parse(str) {
|
|
10410
|
-
|
|
10424
|
+
const num = parseInt(str, 10);
|
|
10425
|
+
return isNaN(num) ? null : num;
|
|
10411
10426
|
}
|
|
10412
10427
|
};
|
|
10413
10428
|
}
|
|
@@ -10471,6 +10486,49 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10471
10486
|
return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
|
|
10472
10487
|
}
|
|
10473
10488
|
|
|
10489
|
+
/**
|
|
10490
|
+
* Validates a value against a partial date format (one that lacks yy/mm/dd all three).
|
|
10491
|
+
* Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
|
|
10492
|
+
* a date-fns parse + round-trip to confirm both validity and exact formatting.
|
|
10493
|
+
* @param {string} value - The user-facing display value.
|
|
10494
|
+
* @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
|
|
10495
|
+
* @returns {boolean}
|
|
10496
|
+
*/
|
|
10497
|
+
isValidPartialDate(value, format) {
|
|
10498
|
+
if (!value || !format) {
|
|
10499
|
+
return false;
|
|
10500
|
+
}
|
|
10501
|
+
const normalizedFormat = format.toLowerCase();
|
|
10502
|
+
|
|
10503
|
+
if (normalizedFormat === 'dd') {
|
|
10504
|
+
const num = Number(value);
|
|
10505
|
+
return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
|
|
10506
|
+
}
|
|
10507
|
+
if (normalizedFormat === 'yy') {
|
|
10508
|
+
const num = Number(value);
|
|
10509
|
+
return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
|
|
10510
|
+
}
|
|
10511
|
+
if (normalizedFormat === 'yyyy') {
|
|
10512
|
+
const num = Number(value);
|
|
10513
|
+
return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
|
|
10514
|
+
}
|
|
10515
|
+
|
|
10516
|
+
const dateFnsMask = this.toDateFnsMask(normalizedFormat);
|
|
10517
|
+
// Use the 1st of the current month as the reference so that formats
|
|
10518
|
+
// omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
|
|
10519
|
+
const referenceDate = new Date();
|
|
10520
|
+
referenceDate.setDate(1);
|
|
10521
|
+
const parsed = parse$1(value, dateFnsMask, referenceDate);
|
|
10522
|
+
if (!isValid$1(parsed) || format$1(parsed, dateFnsMask) !== value) {
|
|
10523
|
+
return false;
|
|
10524
|
+
}
|
|
10525
|
+
if (normalizedFormat.includes('yyyy')) {
|
|
10526
|
+
const year = parsed.getFullYear();
|
|
10527
|
+
return year >= 1900 && year <= 2100;
|
|
10528
|
+
}
|
|
10529
|
+
return true;
|
|
10530
|
+
}
|
|
10531
|
+
|
|
10474
10532
|
/**
|
|
10475
10533
|
* Converts a display string to its model value.
|
|
10476
10534
|
* For full date formats, converts the display string to an ISO date string.
|
|
@@ -10507,6 +10565,13 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10507
10565
|
* @returns {string | undefined}
|
|
10508
10566
|
*/
|
|
10509
10567
|
toFormattedValue(valueObject, format) {
|
|
10568
|
+
// Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
|
|
10569
|
+
// `format` argument has to fail gracefully rather than throw on
|
|
10570
|
+
// `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
|
|
10571
|
+
// as "no format → no display value".
|
|
10572
|
+
if (!format) {
|
|
10573
|
+
return undefined;
|
|
10574
|
+
}
|
|
10510
10575
|
const normalizedFormat = format.toLowerCase();
|
|
10511
10576
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
10512
10577
|
|
|
@@ -10767,11 +10832,11 @@ var snowflakeStyle = css`:host([layout*=snowflake]) [auro-input]{flex:1;text-ali
|
|
|
10767
10832
|
|
|
10768
10833
|
var snowflakeColors = css`:host([layout=snowflake]) [auro-dropdown]:not(:is([error],.hasFocus)){--ds-auro-dropdown-trigger-border-color: transparent}`;
|
|
10769
10834
|
|
|
10770
|
-
var styleCss$7 = css`.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}:host{--calendar-width: 336px;--mobile-footer-height: 150px;--mobile-header-height: 68px;--desktop-footer-height: 80px;height:100vh;height:100dvh}.calendars{display:flex;flex-direction:row}.calendars:focus{outline:none}.calendarNavButtons{position:absolute;z-index:1;top:var(--ds-size-200, 1rem);right:var(--ds-size-50, 0.25rem);left:var(--ds-size-50, 0.25rem)}.calendarNavBtn{display:flex;width:var(--ds-size-500, 2.5rem);height:var(--ds-size-500, 2.5rem);align-items:center;justify-content:center;border-width:1px;border-style:solid;border-radius:50%;cursor:pointer}.prevMonth,.nextMonth{position:absolute;top:0}.prevMonth{left:0}.nextMonth{right:0}.headerActions{padding:0 var(--ds-size-200, 1rem)}.mobileHeader{width:100%;height:var(--mobile-header-height);z-index:1;align-items:center;flex-direction:row}.headerDateFrom,.headerDateTo{display:flex;height:var(--mobile-header-height);flex:1;flex-direction:column;justify-content:center;padding:0 var(--ds-size-150, 0.75rem) 0 var(--ds-size-200, 1rem)}.mobileDateLabel{padding:var(--ds-size-25, 0.125rem) 0}.mobileFooter{display:none;width:100%;align-items:flex-end;flex-direction:column;justify-content:flex-end}.mobileFooterActions{position:relative;bottom:0;left:50%;display:none;width:calc(100% - var(--ds-size-200, 1rem)*2);align-items:flex-end;flex-direction:column;justify-content:flex-end;padding:var(--ds-size-150) calc(var(--ds-size-200, 1rem));transform:translateX(-50%)}.mobileFooterActions auro-button{width:100%}.calendarWrapper.hasFooter{padding-bottom:var(--desktop-footer-height)}:host([isfullscreen]){width:100%;max-height:100dvh;overflow:hidden}:host([isfullscreen]) .prevMonth,:host([isfullscreen]) .nextMonth{display:none}:host([isfullscreen]) .mobileHeader,:host([isfullscreen]) .mobileFooter,:host([isfullscreen]) .mobileFooterActions{display:flex}:host([isfullscreen]) .calendarWrapper{display:flex;flex-direction:column}:host([isfullscreen]) .calendars{display:flex;flex-direction:column;flex:1;align-items:center;width:100%;overscroll-behavior:contain}:host([isfullscreen]) .calendars:after{display:block;width:100%;height:var(--mobile-footer-height);content:""}.sr-only{position:absolute;overflow:hidden;clip:rect(0, 0, 0, 0);width:1px;height:1px;margin:-1px;padding:0;border:0;white-space:nowrap}`;
|
|
10835
|
+
var styleCss$7 = css`.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}:host{--calendar-width: 336px;--mobile-footer-height: 150px;--mobile-header-height: 68px;--desktop-footer-height: 80px;height:100vh;height:100dvh}.calendars{display:flex;flex-direction:row}.calendars:focus{outline:none}.calendarNavButtons{position:absolute;z-index:1;top:var(--ds-size-200, 1rem);right:var(--ds-size-50, 0.25rem);left:var(--ds-size-50, 0.25rem)}.calendarNavBtn{display:flex;width:var(--ds-size-500, 2.5rem);height:var(--ds-size-500, 2.5rem);align-items:center;justify-content:center;border-width:1px;border-style:solid;border-radius:50%;cursor:pointer}.prevMonth,.nextMonth{position:absolute;top:0}.prevMonth{left:0}.nextMonth{right:0}.headerActions{padding:0 var(--ds-size-200, 1rem)}.mobileHeader{width:100%;height:var(--mobile-header-height);z-index:1;align-items:center;flex-direction:row}.headerDateFrom,.headerDateTo{display:flex;height:var(--mobile-header-height);flex:1;flex-direction:column;justify-content:center;padding:0 var(--ds-size-150, 0.75rem) 0 0}.mobileDateLabel{padding:var(--ds-size-25, 0.125rem) 0}.mobileFooter{display:none;width:100%;align-items:flex-end;flex-direction:column;justify-content:flex-end}.mobileFooterActions{position:relative;bottom:0;left:50%;display:none;width:calc(100% - var(--ds-size-200, 1rem)*2);align-items:flex-end;flex-direction:column;justify-content:flex-end;padding:var(--ds-size-150) calc(var(--ds-size-200, 1rem));transform:translateX(-50%)}.mobileFooterActions auro-button{width:100%}:host([isfullscreen]){width:100%;max-height:100dvh;overflow:hidden}:host([isfullscreen]) .prevMonth,:host([isfullscreen]) .nextMonth{display:none}:host([isfullscreen]) .mobileHeader,:host([isfullscreen]) .mobileFooter,:host([isfullscreen]) .mobileFooterActions{display:flex}:host([isfullscreen]) .calendarWrapper{display:flex;flex-direction:column}:host([isfullscreen]) .calendars{display:flex;flex-direction:column;flex:1;align-items:center;width:100%;overscroll-behavior:contain}:host([isfullscreen]) .calendars:after{display:block;width:100%;height:var(--mobile-footer-height);content:""}.sr-only{position:absolute;overflow:hidden;clip:rect(0, 0, 0, 0);width:1px;height:1px;margin:-1px;padding:0;border:0;white-space:nowrap}`;
|
|
10771
10836
|
|
|
10772
|
-
var colorCss$7 = css`.calendarNavBtn{border-color:var(--ds-auro-calendar-nav-btn-border-color);background-color:var(--ds-auro-calendar-nav-btn-container-color);color:var(--ds-auro-calendar-nav-btn-chevron-color)}.calendarNavBtn:hover{--ds-auro-calendar-nav-btn-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}.calendarNavBtn:focus{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}.calendarNavBtn:active{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a);box-shadow:inset 0 0 0 1px var(--ds-auro-calendar-nav-btn-border-color)}.mobileHeader{background-color:var(--ds-auro-calendar-mobile-header-container-color)}.mobileDateLabel{color:var(--ds-auro-calendar-mobile-header-text-color)}:host(:not([noRange])) .headerDateTo:after{background-color:var(--ds-auro-calendar-mobile-header-divider-color)}::slotted([slot="bib.fullscreen.fromStr"]),::slotted([slot=mobileDateToStr]){color:var(--ds-auro-datepicker-placeholder-color)}@media screen and (max-width: 576px){.calendarNavBtn{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}}`;
|
|
10837
|
+
var colorCss$7 = css`.calendarNavBtn{border-color:var(--ds-auro-calendar-nav-btn-border-color);background-color:var(--ds-auro-calendar-nav-btn-container-color);color:var(--ds-auro-calendar-nav-btn-chevron-color)}.calendarNavBtn:hover{--ds-auro-calendar-nav-btn-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}.calendarNavBtn:focus-visible{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a);outline:2px solid var(--ds-basic-color-brand-primary, #01426a);outline-offset:-2px}.calendarNavBtn:active{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a);outline:2px solid var(--ds-basic-color-brand-primary, #01426a);outline-offset:-2px;box-shadow:inset 0 0 0 1px var(--ds-auro-calendar-nav-btn-border-color)}.mobileHeader{background-color:var(--ds-auro-calendar-mobile-header-container-color)}.mobileDateLabel{color:var(--ds-auro-calendar-mobile-header-text-color)}:host(:not([noRange])) .headerDateTo:after{background-color:var(--ds-auro-calendar-mobile-header-divider-color)}::slotted([slot="bib.fullscreen.fromStr"]),::slotted([slot=mobileDateToStr]){color:var(--ds-auro-datepicker-placeholder-color)}@media screen and (max-width: 576px){.calendarNavBtn{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}}`;
|
|
10773
10838
|
|
|
10774
|
-
var styleCss$6 = css`:focus:not(:focus-visible){outline:3px solid transparent}.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}:host{position:relative;display:block;width:calc(100% - var(--ds-size-200, 1rem) - var(--ds-size-200, 1rem));margin:0 var(--ds-size-200, 1rem)}@media screen and (min-width: 576px){:host{width:336px;padding:var(--ds-size-200, 1rem) var(--ds-size-200, 1rem) 0}}@media screen and (min-width: 576px){:host(:not(:last-of-type)):after{position:absolute;top:var(--ds-size-200, 1rem);right:calc(-1*var(--ds-size-200, 1rem));height:calc(100% - var(--ds-size-200, 1rem) - var(--ds-size-200, 1rem));display:block;width:1px;content:""}}.header{display:flex;height:var(--ds-size-500, 2.5rem);margin-bottom:var(--ds-size-150, 0.75rem);align-items:center;flex-direction:row;text-align:center}.headerTitle{display:flex;align-items:center;flex:1;flex-direction:row;justify-content:center}.headerTitle div:first-child{margin-right:var(--ds-size-100, 0.5rem)}.calendarNavBtn{position:relative;display:flex;width:var(--ds-size-500, 2.5rem);height:var(--ds-size-500, 2.5rem);align-items:center;justify-content:center;border-width:1px;border-style:solid;border-radius:50%;cursor:pointer}.table{width:100%;border-collapse:collapse}.thead{margin-bottom:var(--ds-size-100, 0.5rem)}.th{display:flex;flex:1;align-items:center;justify-content:center}.th abbr{text-decoration:none}.tbody{width:100%;transition:all 0ms;transform:translateX(0)}@media screen and (min-width: 576px){.tbody{height:336px}}.td{flex:1;margin:0;padding:0}.tr{display:flex;flex-direction:row;width:100%;border-radius:10px;overflow:hidden}.tr:not(:last-of-type){margin-bottom:var(--ds-size-100, 0.5rem)}`;
|
|
10839
|
+
var styleCss$6 = css`:focus:not(:focus-visible){outline:3px solid transparent}.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}:host{position:relative;display:block;width:336px;margin:0 var(--ds-size-200, 1rem)}@media screen and (min-width: 576px){:host{width:336px;padding:var(--ds-size-200, 1rem) var(--ds-size-200, 1rem) 0}}@media screen and (min-width: 576px){:host(:not(:last-of-type)):after{position:absolute;top:var(--ds-size-200, 1rem);right:calc(-1*var(--ds-size-200, 1rem));height:calc(100% - var(--ds-size-200, 1rem) - var(--ds-size-200, 1rem));display:block;width:1px;content:""}}.header{display:flex;height:var(--ds-size-500, 2.5rem);margin-bottom:var(--ds-size-150, 0.75rem);align-items:center;flex-direction:row;text-align:center}.headerTitle{display:flex;align-items:center;flex:1;flex-direction:row;justify-content:center}.headerTitle div:first-child{margin-right:var(--ds-size-100, 0.5rem)}.calendarNavBtn{position:relative;display:flex;width:var(--ds-size-500, 2.5rem);height:var(--ds-size-500, 2.5rem);align-items:center;justify-content:center;border-width:1px;border-style:solid;border-radius:50%;cursor:pointer}.table{width:100%;border-collapse:collapse}.thead{margin-bottom:var(--ds-size-100, 0.5rem)}.th{display:flex;flex:1;align-items:center;justify-content:center}.th abbr{text-decoration:none}.tbody{width:100%;transition:all 0ms;transform:translateX(0)}@media screen and (min-width: 576px){.tbody{height:376px}}.td{flex:1;margin:0;padding:0}.tr{display:flex;flex-direction:row;width:100%;border-radius:10px;overflow:hidden}.tr:not(:last-of-type){margin-bottom:var(--ds-size-100, 0.5rem)}`;
|
|
10775
10840
|
|
|
10776
10841
|
var colorCss$6 = css`:focus:not(:focus-visible){outline:3px solid transparent}:host{background-color:var(--ds-auro-calendar-month-container-color)}@media screen and (min-width: 576px){:host(:not(:last-of-type)):after{background-color:var(--ds-auro-calendar-month-divider-color)}}.header{color:var(--ds-auro-calendar-month-header-color)}`;
|
|
10777
10842
|
|
|
@@ -10863,8 +10928,8 @@ class RangeDatepickerCell extends LitElement {
|
|
|
10863
10928
|
const parsedDateFrom = parseInt(dateFrom, 10);
|
|
10864
10929
|
const parsedDateTo = parseInt(dateTo, 10);
|
|
10865
10930
|
if (day) {
|
|
10866
|
-
if (getTime(startOfDay$
|
|
10867
|
-
getTime(startOfDay$
|
|
10931
|
+
if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
|
|
10932
|
+
getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
|
|
10868
10933
|
this.selected = true;
|
|
10869
10934
|
}
|
|
10870
10935
|
if (((hoveredDate === day.date || day.date < hoveredDate) &&
|
|
@@ -11052,7 +11117,7 @@ class RangeDatepickerCalendar extends LitElement {
|
|
|
11052
11117
|
this.dayNamesOfTheWeek = [];
|
|
11053
11118
|
this.daysOfMonth = [];
|
|
11054
11119
|
this._locale = null;
|
|
11055
|
-
this.currentDate = parseInt(format$1(startOfDay$
|
|
11120
|
+
this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
|
|
11056
11121
|
this.localeChanged();
|
|
11057
11122
|
this.yearAndMonthChanged(this.year, this.month);
|
|
11058
11123
|
}
|
|
@@ -11526,7 +11591,7 @@ __decorate([property({ type: Array })], RangeDatepickerCalendar.prototype, "dayN
|
|
|
11526
11591
|
__decorate([property({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
|
|
11527
11592
|
AuroLibraryRuntimeUtils$5.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
|
|
11528
11593
|
|
|
11529
|
-
var styleCss$5 = css`.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}`;
|
|
11594
|
+
var styleCss$5 = css`.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}`;
|
|
11530
11595
|
|
|
11531
11596
|
var colorCss$5 = css`: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}`;
|
|
11532
11597
|
|
|
@@ -11551,13 +11616,108 @@ class s{registerComponent(e,t){customElements.get(e)||customElements.define(e,cl
|
|
|
11551
11616
|
|
|
11552
11617
|
var popoverVersion = '6.0.1';
|
|
11553
11618
|
|
|
11554
|
-
|
|
11619
|
+
/**
|
|
11620
|
+
* Single source of truth for parsing and matching blackout dates across the
|
|
11621
|
+
* datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
|
|
11622
|
+
* pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
|
|
11623
|
+
* helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
|
|
11624
|
+
* `disabledDays` rules are defined exactly once.
|
|
11625
|
+
*/
|
|
11555
11626
|
|
|
11556
|
-
|
|
11557
|
-
|
|
11558
|
-
|
|
11559
|
-
|
|
11560
|
-
|
|
11627
|
+
/**
|
|
11628
|
+
* Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
|
|
11629
|
+
* representing local midnight on that calendar day. Returns `null` for
|
|
11630
|
+
* inputs that don't parse to a finite timestamp.
|
|
11631
|
+
*
|
|
11632
|
+
* Uses the `new Date(year, monthIndex, day)` constructor (NOT
|
|
11633
|
+
* `new Date(isoStr)`) so the result is local-midnight rather than UTC
|
|
11634
|
+
* midnight — required to keep the calendar grid aligned with the user's
|
|
11635
|
+
* local calendar day in negative-offset timezones.
|
|
11636
|
+
*
|
|
11637
|
+
* @param {string} isoStr - Date string in `YYYY-MM-DD` format.
|
|
11638
|
+
* @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
|
|
11639
|
+
*/
|
|
11640
|
+
function parseIsoToTimestamp(isoStr) {
|
|
11641
|
+
// Strict YYYY-MM-DD matcher with named groups. Rejects trailing garbage
|
|
11642
|
+
// ("2024x-01-01"), short segments ("2024-1-1"), and any non-digit
|
|
11643
|
+
// characters. `parseInt` alone accepted both because it stops at the
|
|
11644
|
+
// first non-digit and doesn't require a minimum length.
|
|
11645
|
+
const ISO_DATE_RE = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
|
|
11646
|
+
const MAX_MONTH = 12;
|
|
11647
|
+
const MAX_DAY = 31;
|
|
11648
|
+
|
|
11649
|
+
if (typeof isoStr !== 'string') {
|
|
11650
|
+
return null;
|
|
11651
|
+
}
|
|
11652
|
+
const match = ISO_DATE_RE.exec(isoStr);
|
|
11653
|
+
if (!match) {
|
|
11654
|
+
return null;
|
|
11655
|
+
}
|
|
11656
|
+
const year = Number(match.groups.year);
|
|
11657
|
+
const month = Number(match.groups.month);
|
|
11658
|
+
const day = Number(match.groups.day);
|
|
11659
|
+
// Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
|
|
11660
|
+
// silently normalizes those to a different calendar day, which would
|
|
11661
|
+
// disable the wrong date if we let the result through.
|
|
11662
|
+
if (month < 1 || month > MAX_MONTH || day < 1 || day > MAX_DAY) {
|
|
11663
|
+
return null;
|
|
11664
|
+
}
|
|
11665
|
+
const date = new Date(year, month - 1, day);
|
|
11666
|
+
// Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
|
|
11667
|
+
// After construction, getFullYear/getMonth/getDate should match the inputs.
|
|
11668
|
+
if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
|
|
11669
|
+
return null;
|
|
11670
|
+
}
|
|
11671
|
+
const ts = Math.floor(date.getTime() / 1000);
|
|
11672
|
+
return Number.isFinite(ts) ? ts : null;
|
|
11673
|
+
}
|
|
11674
|
+
|
|
11675
|
+
/**
|
|
11676
|
+
* Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
|
|
11677
|
+
* legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
|
|
11678
|
+
* array. Use this for O(1) membership checks in hot paths.
|
|
11679
|
+
*
|
|
11680
|
+
* @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
|
|
11681
|
+
* @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
|
|
11682
|
+
* @returns {Set<number>}
|
|
11683
|
+
*/
|
|
11684
|
+
function buildBlackoutSet(disabledDays, blackoutDates) {
|
|
11685
|
+
const set = new Set();
|
|
11686
|
+
if (Array.isArray(disabledDays)) {
|
|
11687
|
+
for (const day of disabledDays) {
|
|
11688
|
+
const ts = parseInt(day, 10);
|
|
11689
|
+
if (Number.isFinite(ts)) {
|
|
11690
|
+
set.add(ts);
|
|
11691
|
+
}
|
|
11692
|
+
}
|
|
11693
|
+
}
|
|
11694
|
+
if (Array.isArray(blackoutDates)) {
|
|
11695
|
+
for (const isoStr of blackoutDates) {
|
|
11696
|
+
const ts = parseIsoToTimestamp(isoStr);
|
|
11697
|
+
if (ts !== null) {
|
|
11698
|
+
set.add(ts);
|
|
11699
|
+
}
|
|
11700
|
+
}
|
|
11701
|
+
}
|
|
11702
|
+
return set;
|
|
11703
|
+
}
|
|
11704
|
+
|
|
11705
|
+
/**
|
|
11706
|
+
* One-shot membership test for a single timestamp against both blackout
|
|
11707
|
+
* sources. Allocates a Set on each call; only use this in cold paths
|
|
11708
|
+
* (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
|
|
11709
|
+
* Set returned from `buildBlackoutSet` and `.has(ts)` directly.
|
|
11710
|
+
*
|
|
11711
|
+
* @param {number} dateTs - Unix timestamp (seconds) to test.
|
|
11712
|
+
* @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
|
|
11713
|
+
* @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
|
|
11714
|
+
* @returns {boolean}
|
|
11715
|
+
*/
|
|
11716
|
+
function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
|
|
11717
|
+
return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
|
|
11718
|
+
}
|
|
11719
|
+
|
|
11720
|
+
/* 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 */
|
|
11561
11721
|
|
|
11562
11722
|
class AuroCalendarCell extends LitElement {
|
|
11563
11723
|
constructor() {
|
|
@@ -11605,6 +11765,14 @@ class AuroCalendarCell extends LitElement {
|
|
|
11605
11765
|
type: Boolean,
|
|
11606
11766
|
reflect: true
|
|
11607
11767
|
},
|
|
11768
|
+
/**
|
|
11769
|
+
* @deprecated Propagated from the legacy `auro-calendar.disabledDays`
|
|
11770
|
+
* Unix-timestamp array. The cell honors it for backward compatibility
|
|
11771
|
+
* (see the divergence-check fallback inside `isBlackout`), but
|
|
11772
|
+
* consumers should migrate to `auro-datepicker.blackoutDates`
|
|
11773
|
+
* (YYYY-MM-DD ISO strings). The calendar emits a one-time
|
|
11774
|
+
* deprecation warning the first time a non-empty value is observed.
|
|
11775
|
+
*/
|
|
11608
11776
|
disabledDays: { type: Array },
|
|
11609
11777
|
isCurrentDate: { type: Boolean },
|
|
11610
11778
|
locale: { type: String },
|
|
@@ -11650,8 +11818,8 @@ class AuroCalendarCell extends LitElement {
|
|
|
11650
11818
|
const parsedDateTo = parseInt(dateTo, 10);
|
|
11651
11819
|
|
|
11652
11820
|
if (day) {
|
|
11653
|
-
const departTimestamp =
|
|
11654
|
-
const returnTimestamp =
|
|
11821
|
+
const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11822
|
+
const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11655
11823
|
|
|
11656
11824
|
if (day.date === departTimestamp || day.date === returnTimestamp) {
|
|
11657
11825
|
this.selected = true;
|
|
@@ -11735,27 +11903,33 @@ class AuroCalendarCell extends LitElement {
|
|
|
11735
11903
|
return false;
|
|
11736
11904
|
}
|
|
11737
11905
|
|
|
11738
|
-
//
|
|
11739
|
-
|
|
11740
|
-
|
|
11741
|
-
|
|
11742
|
-
|
|
11743
|
-
|
|
11744
|
-
// Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
|
|
11745
|
-
const blackoutDates = this.datepicker?.blackoutDates;
|
|
11746
|
-
|
|
11747
|
-
if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
|
|
11748
|
-
const date = new Date(this.day.date * 1000);
|
|
11749
|
-
const yyyy = date.getFullYear();
|
|
11750
|
-
const mm = String(date.getMonth() + 1).padStart(2, '0');
|
|
11751
|
-
const dd = String(date.getDate()).padStart(2, '0');
|
|
11752
|
-
const cellDate = `${yyyy}-${mm}-${dd}`;
|
|
11753
|
-
if (blackoutDates.includes(cellDate)) {
|
|
11906
|
+
// Delegate to the calendar's memoized blackout Set for O(1) lookup
|
|
11907
|
+
// (instead of rescanning disabledDays + blackoutDates per render). The
|
|
11908
|
+
// Set is rebuilt only when either source array reference changes — see
|
|
11909
|
+
// auro-calendar.js#_getBlackoutSet.
|
|
11910
|
+
if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
|
|
11911
|
+
if (this.calendar._getBlackoutSet().has(this.day.date)) {
|
|
11754
11912
|
return true;
|
|
11755
11913
|
}
|
|
11914
|
+
// If the cell's local disabledDays diverged from the calendar's (a
|
|
11915
|
+
// consumer or test mutated cell.disabledDays directly), the Set does
|
|
11916
|
+
// not reflect that addition — fall through to the per-cell scan only
|
|
11917
|
+
// when the reference no longer matches. Production data flow keeps
|
|
11918
|
+
// these identical, so this branch stays cold. Guarded with
|
|
11919
|
+
// Array.isArray to match `_getBlackoutSet`'s contract: non-array
|
|
11920
|
+
// values are treated as empty rather than crashing on `.findIndex`.
|
|
11921
|
+
if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
|
|
11922
|
+
if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
|
|
11923
|
+
return true;
|
|
11924
|
+
}
|
|
11925
|
+
}
|
|
11926
|
+
return false;
|
|
11756
11927
|
}
|
|
11757
11928
|
|
|
11758
|
-
|
|
11929
|
+
// Pre-firstUpdated fallback — the cell may render once before the
|
|
11930
|
+
// ancestor calendar is wired up. Routes through the shared
|
|
11931
|
+
// blackoutUtils helper so the parsing rules stay in one place.
|
|
11932
|
+
return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
|
|
11759
11933
|
}
|
|
11760
11934
|
|
|
11761
11935
|
/**
|
|
@@ -11861,12 +12035,12 @@ class AuroCalendarCell extends LitElement {
|
|
|
11861
12035
|
const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
|
|
11862
12036
|
if (!Number.isFinite(parsedDateFrom)) return null;
|
|
11863
12037
|
|
|
11864
|
-
const departTimestamp =
|
|
12038
|
+
const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11865
12039
|
const dayDate = this.day.date;
|
|
11866
12040
|
|
|
11867
12041
|
const parsedDateTo = Number.parseInt(this.dateTo, 10);
|
|
11868
12042
|
const hasDateTo = Number.isFinite(parsedDateTo);
|
|
11869
|
-
const returnTimestamp = hasDateTo ?
|
|
12043
|
+
const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
|
|
11870
12044
|
|
|
11871
12045
|
if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
|
|
11872
12046
|
|
|
@@ -11876,7 +12050,9 @@ class AuroCalendarCell extends LitElement {
|
|
|
11876
12050
|
|
|
11877
12051
|
if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
|
|
11878
12052
|
|
|
11879
|
-
|
|
12053
|
+
if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
|
|
12054
|
+
|
|
12055
|
+
// After end date when both dateFrom and dateTo are set.
|
|
11880
12056
|
return this.datepicker.rangeLabelAfterRange || 'after range';
|
|
11881
12057
|
}
|
|
11882
12058
|
|
|
@@ -11889,7 +12065,7 @@ class AuroCalendarCell extends LitElement {
|
|
|
11889
12065
|
*/
|
|
11890
12066
|
isDepartDate(day, dateFrom) {
|
|
11891
12067
|
const parsedDateFrom = parseInt(dateFrom, 10);
|
|
11892
|
-
const departTimestamp =
|
|
12068
|
+
const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11893
12069
|
|
|
11894
12070
|
return this.selected && day.date === departTimestamp;
|
|
11895
12071
|
}
|
|
@@ -11904,7 +12080,7 @@ class AuroCalendarCell extends LitElement {
|
|
|
11904
12080
|
*/
|
|
11905
12081
|
isReturnDate(day, dateFrom, dateTo) {
|
|
11906
12082
|
const parsedDateTo = parseInt(dateTo, 10);
|
|
11907
|
-
const returnTimestamp =
|
|
12083
|
+
const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11908
12084
|
|
|
11909
12085
|
return this.selected && day.date === returnTimestamp && dateFrom;
|
|
11910
12086
|
}
|
|
@@ -12061,13 +12237,37 @@ class AuroCalendarCell extends LitElement {
|
|
|
12061
12237
|
}
|
|
12062
12238
|
|
|
12063
12239
|
firstUpdated() {
|
|
12240
|
+
this._initFromAncestors();
|
|
12241
|
+
}
|
|
12242
|
+
|
|
12243
|
+
/**
|
|
12244
|
+
* Wires the cell to its ancestor calendar-month and calendar (and, via
|
|
12245
|
+
* the calendar, to the datepicker). Extracted from firstUpdated() so the
|
|
12246
|
+
* retry loop can re-attempt without recursively invoking a Lit lifecycle
|
|
12247
|
+
* method (which is outside the framework's contract).
|
|
12248
|
+
* @private
|
|
12249
|
+
* @returns {void}
|
|
12250
|
+
*/
|
|
12251
|
+
_initFromAncestors() {
|
|
12064
12252
|
const calendarMonth = this.runtimeUtils.closestElement('auro-formkit-calendar-month', this);
|
|
12065
12253
|
const calendar = this.runtimeUtils.closestElement('auro-formkit-calendar', calendarMonth);
|
|
12066
12254
|
|
|
12067
12255
|
if (!calendar) {
|
|
12068
|
-
|
|
12256
|
+
// Retry on the next event-loop turn to give the ancestor chain a chance
|
|
12257
|
+
// to attach — but cap attempts so a permanently detached cell doesn't
|
|
12258
|
+
// spin forever. 10 turns is far more than any observed race needs.
|
|
12259
|
+
this._firstUpdatedRetries = (this._firstUpdatedRetries || 0) + 1;
|
|
12260
|
+
if (this._firstUpdatedRetries > 10) {
|
|
12261
|
+
return;
|
|
12262
|
+
}
|
|
12263
|
+
this._firstUpdatedRetryTimer = setTimeout(() => {
|
|
12264
|
+
this._firstUpdatedRetryTimer = null;
|
|
12265
|
+
this._initFromAncestors();
|
|
12266
|
+
}, 0);
|
|
12069
12267
|
return;
|
|
12070
12268
|
}
|
|
12269
|
+
this._firstUpdatedRetries = 0;
|
|
12270
|
+
this.calendar = calendar;
|
|
12071
12271
|
this.datepicker = calendar.datepicker;
|
|
12072
12272
|
this._slotContentHandler = () => {
|
|
12073
12273
|
this.handleSlotContent();
|
|
@@ -12094,6 +12294,10 @@ class AuroCalendarCell extends LitElement {
|
|
|
12094
12294
|
if (this.datepicker && this._slotContentHandler) {
|
|
12095
12295
|
this.datepicker.removeEventListener('auroDatePicker-newSlotContent', this._slotContentHandler);
|
|
12096
12296
|
}
|
|
12297
|
+
if (this._firstUpdatedRetryTimer) {
|
|
12298
|
+
clearTimeout(this._firstUpdatedRetryTimer);
|
|
12299
|
+
this._firstUpdatedRetryTimer = null;
|
|
12300
|
+
}
|
|
12097
12301
|
}
|
|
12098
12302
|
|
|
12099
12303
|
/**
|
|
@@ -12125,15 +12329,28 @@ class AuroCalendarCell extends LitElement {
|
|
|
12125
12329
|
this._cachedButton = this.shadowRoot.querySelector('button.day');
|
|
12126
12330
|
});
|
|
12127
12331
|
|
|
12128
|
-
//
|
|
12332
|
+
// Keep the host's gridcell aria attributes in sync with the day data.
|
|
12129
12333
|
this.updateHostAria();
|
|
12130
12334
|
}
|
|
12131
12335
|
|
|
12132
12336
|
// Update host aria when selection changes (aria-selected, range labels)
|
|
12133
|
-
|
|
12337
|
+
// or when isCurrentDate flips (aria-current).
|
|
12338
|
+
if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
|
|
12134
12339
|
this.updateHostAria();
|
|
12135
12340
|
}
|
|
12136
12341
|
|
|
12342
|
+
// When the rendered range shifts (month nav, min/max change), a cell
|
|
12343
|
+
// host may be re-rendered for a new date that is now out-of-range —
|
|
12344
|
+
// but its imperatively-set `active` flag and `activeCell` ring class
|
|
12345
|
+
// from the previous date persist because setActiveCell only iterates
|
|
12346
|
+
// focusable (in-range) cells when clearing the prior active state.
|
|
12347
|
+
// Drop the active state here so the disabled cell isn't left visually
|
|
12348
|
+
// ringed.
|
|
12349
|
+
if ((properties.has('day') || properties.has('min') || properties.has('max')) &&
|
|
12350
|
+
this.active && this.isOutOfRange(this.day, this.min, this.max)) {
|
|
12351
|
+
this.clearActive();
|
|
12352
|
+
}
|
|
12353
|
+
|
|
12137
12354
|
// Configure popover when it first becomes rendered
|
|
12138
12355
|
if (properties.has('hasPopoverContent') && this.hasPopoverContent) {
|
|
12139
12356
|
this.updateComplete.then(() => this.configurePopover());
|
|
@@ -12141,8 +12358,8 @@ class AuroCalendarCell extends LitElement {
|
|
|
12141
12358
|
}
|
|
12142
12359
|
|
|
12143
12360
|
/**
|
|
12144
|
-
*
|
|
12145
|
-
*
|
|
12361
|
+
* Sets host-level ARIA so each cell exposes its date, selection state,
|
|
12362
|
+
* and blackout status to assistive tech browsing the month grid.
|
|
12146
12363
|
* @private
|
|
12147
12364
|
* @returns {void}
|
|
12148
12365
|
*/
|
|
@@ -12151,16 +12368,27 @@ class AuroCalendarCell extends LitElement {
|
|
|
12151
12368
|
|
|
12152
12369
|
const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
|
|
12153
12370
|
if (outOfRange) {
|
|
12371
|
+
// Strip every aria attribute the in-range branch may have set on a
|
|
12372
|
+
// previous render — if a cell flips from in-range to out-of-range
|
|
12373
|
+
// (calendar shifts months, minDate/maxDate change, etc.).
|
|
12154
12374
|
this.removeAttribute('role');
|
|
12155
12375
|
this.removeAttribute('aria-label');
|
|
12376
|
+
this.removeAttribute('aria-current');
|
|
12377
|
+
this.removeAttribute('aria-selected');
|
|
12378
|
+
this.removeAttribute('aria-disabled');
|
|
12156
12379
|
return;
|
|
12157
12380
|
}
|
|
12158
12381
|
|
|
12159
|
-
// The host acts as the gridcell for ariaActiveDescendantElement.
|
|
12160
12382
|
this.setAttribute('role', 'gridcell');
|
|
12161
12383
|
this.setAttribute('aria-label', this.getAriaLabel());
|
|
12162
12384
|
this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
|
|
12163
12385
|
|
|
12386
|
+
if (this.isCurrentDate) {
|
|
12387
|
+
this.setAttribute('aria-current', 'date');
|
|
12388
|
+
} else {
|
|
12389
|
+
this.removeAttribute('aria-current');
|
|
12390
|
+
}
|
|
12391
|
+
|
|
12164
12392
|
if (this.isBlackout()) {
|
|
12165
12393
|
this.setAttribute('aria-disabled', 'true');
|
|
12166
12394
|
} else {
|
|
@@ -12175,7 +12403,7 @@ class AuroCalendarCell extends LitElement {
|
|
|
12175
12403
|
* @returns {void}
|
|
12176
12404
|
*/
|
|
12177
12405
|
focusButton() {
|
|
12178
|
-
const button = this._cachedButton || this.shadowRoot.querySelector('button:not([
|
|
12406
|
+
const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
|
|
12179
12407
|
if (button) {
|
|
12180
12408
|
button.focus({ focusVisible: true });
|
|
12181
12409
|
}
|
|
@@ -12183,10 +12411,22 @@ class AuroCalendarCell extends LitElement {
|
|
|
12183
12411
|
|
|
12184
12412
|
/**
|
|
12185
12413
|
* Imperatively marks this cell as active without triggering a Lit re-render.
|
|
12186
|
-
*
|
|
12414
|
+
* Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper —
|
|
12415
|
+
* arrow keys move the active cell imperatively and the live region carries
|
|
12416
|
+
* the SR announcement.
|
|
12417
|
+
*
|
|
12418
|
+
* Refuses to activate out-of-range cells: those are aria-hidden, have no
|
|
12419
|
+
* click/focus handlers, and are filtered out of `getFocusableCells`. The
|
|
12420
|
+
* active class showing on a disabled cell would be visually misleading,
|
|
12421
|
+
* so this guard is the single source of truth across every code path
|
|
12422
|
+
* that might call setActive (keyboard nav, focus restore, cell click).
|
|
12187
12423
|
* @returns {void}
|
|
12188
12424
|
*/
|
|
12189
12425
|
setActive() {
|
|
12426
|
+
if (this.isOutOfRange(this.day, this.min, this.max)) {
|
|
12427
|
+
return;
|
|
12428
|
+
}
|
|
12429
|
+
|
|
12190
12430
|
this.active = true;
|
|
12191
12431
|
|
|
12192
12432
|
// Show the popover when this cell becomes active via keyboard navigation.
|
|
@@ -12225,10 +12465,13 @@ class AuroCalendarCell extends LitElement {
|
|
|
12225
12465
|
if (!btn || !this.day) return;
|
|
12226
12466
|
|
|
12227
12467
|
const dayDate = this.day.date;
|
|
12228
|
-
const departTimestamp =
|
|
12468
|
+
const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
12229
12469
|
const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
|
|
12230
|
-
|
|
12231
|
-
|
|
12470
|
+
// `>=` so hovering the depart cell itself (a same-day round-trip
|
|
12471
|
+
// preview) still surfaces a visual cue: the depart cell receives both
|
|
12472
|
+
// rangeDepartDate and lastHoveredDate.
|
|
12473
|
+
const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
|
|
12474
|
+
const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
|
|
12232
12475
|
|
|
12233
12476
|
btn.classList.toggle('inRange', isInRange);
|
|
12234
12477
|
btn.classList.toggle('lastHoveredDate', isLastHovered);
|
|
@@ -12247,6 +12490,41 @@ class AuroCalendarCell extends LitElement {
|
|
|
12247
12490
|
btn.classList.remove('inRange', 'lastHoveredDate', 'rangeDepartDate');
|
|
12248
12491
|
}
|
|
12249
12492
|
|
|
12493
|
+
/**
|
|
12494
|
+
* Re-applies the committed-range classes (inRange / rangeDepartDate /
|
|
12495
|
+
* rangeReturnDate) imperatively from the cell's current `day`,
|
|
12496
|
+
* `dateFrom`, and `dateTo`. Used after month navigation flushes:
|
|
12497
|
+
* classMap in `renderCellButton` tracks its own previous state, so a
|
|
12498
|
+
* preceding imperative `classList.remove` (from
|
|
12499
|
+
* `clearRangePreviewClasses`) leaves classMap thinking the class is
|
|
12500
|
+
* still applied. On re-render with the same class-value, classMap emits
|
|
12501
|
+
* no delta and the class stays missing in the DOM. Re-toggling
|
|
12502
|
+
* imperatively resyncs the DOM with the committed range.
|
|
12503
|
+
*
|
|
12504
|
+
* Delegates to the same `isInRange` / `isDepartDate` / `isReturnDate`
|
|
12505
|
+
* helpers `renderCellButton` uses, so the two code paths cannot drift
|
|
12506
|
+
* (including whatever timestamp normalization those helpers apply).
|
|
12507
|
+
* @returns {void}
|
|
12508
|
+
*/
|
|
12509
|
+
applyCommittedRangeClasses() {
|
|
12510
|
+
if (!this.day) return;
|
|
12511
|
+
// Fall back to a shadowRoot query when `_cachedButton` hasn't
|
|
12512
|
+
// populated yet — this method's whole job is recovering from stale
|
|
12513
|
+
// DOM after a month re-render, so no-oping on a cache miss defeats
|
|
12514
|
+
// the fix (mirrors the fallback in `clearActive()`).
|
|
12515
|
+
const btn = this._cachedButton || this.shadowRoot?.querySelector('button.day');
|
|
12516
|
+
if (!btn) return;
|
|
12517
|
+
|
|
12518
|
+
const hasRange = this.datepicker?.hasAttribute('range');
|
|
12519
|
+
const inRange = hasRange && this.dateTo && this.isInRange(this.day, this.dateFrom, this.dateTo);
|
|
12520
|
+
const isDepart = hasRange && this.isDepartDate(this.day, this.dateFrom) && this.dateTo;
|
|
12521
|
+
const isReturn = hasRange && this.isReturnDate(this.day, this.dateFrom, this.dateTo);
|
|
12522
|
+
|
|
12523
|
+
btn.classList.toggle('inRange', Boolean(inRange));
|
|
12524
|
+
btn.classList.toggle('rangeDepartDate', Boolean(isDepart));
|
|
12525
|
+
btn.classList.toggle('rangeReturnDate', Boolean(isReturn));
|
|
12526
|
+
}
|
|
12527
|
+
|
|
12250
12528
|
renderCellButton() {
|
|
12251
12529
|
const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
|
|
12252
12530
|
const blackout = this.isBlackout();
|
|
@@ -12286,7 +12564,6 @@ class AuroCalendarCell extends LitElement {
|
|
|
12286
12564
|
@focus="${outOfRange ? undefined : this.handleFocus}"
|
|
12287
12565
|
class="${classMap(buttonClasses)}"
|
|
12288
12566
|
?disabled="${outOfRange}"
|
|
12289
|
-
aria-hidden="${outOfRange ? 'true' : nothing}"
|
|
12290
12567
|
tabindex="-1">
|
|
12291
12568
|
<div class="buttonWrapper" aria-hidden="true">
|
|
12292
12569
|
<div class="currentDayMarker">${this.day?.title || nothing}</div>
|
|
@@ -12997,7 +13274,7 @@ class CalendarUtilities {
|
|
|
12997
13274
|
|
|
12998
13275
|
var colorCss$4 = css`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
|
|
12999
13276
|
|
|
13000
|
-
var styleCss$4 = css`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem))
|
|
13277
|
+
var styleCss$4 = css`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;padding-bottom:var(--ds-size-200, 1rem);gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem))}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{padding:var(--ds-size-200, 1rem)}`;
|
|
13001
13278
|
|
|
13002
13279
|
var tokenCss = css`:host{--ds-auro-dropdownbib-header-boxshadow-color: var(--ds-elevation-200, 0px 0px 10px rgba(0, 0, 0, 0.15));--ds-auro-dropdownbib-footer-container-color: var(--ds-basic-color-surface-default, #ffffff)}`;
|
|
13003
13280
|
|
|
@@ -13392,7 +13669,7 @@ class AuroBibtemplate extends LitElement {
|
|
|
13392
13669
|
}
|
|
13393
13670
|
}
|
|
13394
13671
|
|
|
13395
|
-
var formkitVersion$2 = '
|
|
13672
|
+
var formkitVersion$2 = '202607221815';
|
|
13396
13673
|
|
|
13397
13674
|
let l$1 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=literal`${unsafeStatic(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1=css`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
|
|
13398
13675
|
`,u$4=css`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
|
|
@@ -13497,6 +13774,15 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13497
13774
|
*/
|
|
13498
13775
|
this.activeCellDate = null;
|
|
13499
13776
|
|
|
13777
|
+
/**
|
|
13778
|
+
* Cached reference to the active cell host. Set by setActiveCell and
|
|
13779
|
+
* refreshed by scrollToActiveCell when its cache check misses (stale
|
|
13780
|
+
* or missing). Lets scrollToActiveCell skip a full cell scan on each
|
|
13781
|
+
* arrow key.
|
|
13782
|
+
* @private
|
|
13783
|
+
*/
|
|
13784
|
+
this._activeCell = null;
|
|
13785
|
+
|
|
13500
13786
|
/**
|
|
13501
13787
|
* Whether the #calendarGrid wrapper currently has focus.
|
|
13502
13788
|
* Used to determine whether the visualFocus ring should be shown.
|
|
@@ -13515,10 +13801,17 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13515
13801
|
this.calendarRangeMonths = null;
|
|
13516
13802
|
|
|
13517
13803
|
/**
|
|
13518
|
-
*
|
|
13804
|
+
* @deprecated Use `auro-datepicker.blackoutDates` (an array of
|
|
13805
|
+
* `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
|
|
13806
|
+
* timestamps is still honored for backward compatibility but emits a
|
|
13807
|
+
* one-time `console.debug` the first time a non-empty value is observed.
|
|
13808
|
+
* Support will be removed in a future major release.
|
|
13519
13809
|
* @private
|
|
13520
13810
|
*/
|
|
13521
|
-
|
|
13811
|
+
// Initialize the backing field directly so the constructor's default
|
|
13812
|
+
// empty array doesn't trigger the deprecation warning. Assignments from
|
|
13813
|
+
// consumers still route through the setter below.
|
|
13814
|
+
this._disabledDays = [];
|
|
13522
13815
|
|
|
13523
13816
|
/**
|
|
13524
13817
|
* @private
|
|
@@ -13551,6 +13844,44 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13551
13844
|
this._calendarInstanceId = Date.now().toString(36);
|
|
13552
13845
|
}
|
|
13553
13846
|
|
|
13847
|
+
/**
|
|
13848
|
+
* @deprecated See constructor JSDoc — migrate to
|
|
13849
|
+
* `auro-datepicker.blackoutDates`. The getter/setter pair exists so the
|
|
13850
|
+
* one-time deprecation warning fires as soon as a consumer assigns a
|
|
13851
|
+
* non-empty array (empty assignments are ignored — an empty array is
|
|
13852
|
+
* indistinguishable from the constructor default and would produce a
|
|
13853
|
+
* spurious warning), rather than only when `_getBlackoutSet()` happens
|
|
13854
|
+
* to rebuild.
|
|
13855
|
+
* @returns {Array} The current legacy `disabledDays` array.
|
|
13856
|
+
*/
|
|
13857
|
+
get disabledDays() {
|
|
13858
|
+
return this._disabledDays;
|
|
13859
|
+
}
|
|
13860
|
+
|
|
13861
|
+
/**
|
|
13862
|
+
* @param {Array} value - The legacy `disabledDays` array to set.
|
|
13863
|
+
*/
|
|
13864
|
+
set disabledDays(value) {
|
|
13865
|
+
const oldValue = this._disabledDays;
|
|
13866
|
+
// Coerce non-arrays to `[]`. Consumers occasionally pass `null`
|
|
13867
|
+
// (Lit's Array attribute converter returns null for a missing/empty
|
|
13868
|
+
// attribute) or misuse the API; downstream code in
|
|
13869
|
+
// `auro-calendar-cell.isEnabled` calls `.findIndex()` on this value
|
|
13870
|
+
// without an Array.isArray guard, so a truthy non-array would throw
|
|
13871
|
+
// at render.
|
|
13872
|
+
const coerced = Array.isArray(value) ? value : [];
|
|
13873
|
+
if (coerced.length > 0) {
|
|
13874
|
+
this._warnDisabledDaysDeprecated();
|
|
13875
|
+
}
|
|
13876
|
+
this._disabledDays = coerced;
|
|
13877
|
+
// `disabledDays` is a Lit `@property({ type: Array })` on the
|
|
13878
|
+
// RangeDatepicker base class; Lit's generated setter (which we've
|
|
13879
|
+
// overridden here to insert the warning) is what normally invalidates
|
|
13880
|
+
// the reactive cycle. Re-invoke requestUpdate manually so consumer
|
|
13881
|
+
// assignments still re-render the calendar.
|
|
13882
|
+
this.requestUpdate('disabledDays', oldValue);
|
|
13883
|
+
}
|
|
13884
|
+
|
|
13554
13885
|
static get styles() {
|
|
13555
13886
|
return [
|
|
13556
13887
|
styleCss$7,
|
|
@@ -13724,6 +14055,11 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13724
14055
|
if (!opts.skipActiveUpdate) {
|
|
13725
14056
|
this.updateActiveCellForVisibleMonth();
|
|
13726
14057
|
}
|
|
14058
|
+
// clearRangePreview above strips classMap-managed range classes from
|
|
14059
|
+
// the DOM; classMap's private state still thinks they're applied, so
|
|
14060
|
+
// it won't re-add them on the post-nav re-render. Re-apply imperatively
|
|
14061
|
+
// after both months and their cell button caches have settled.
|
|
14062
|
+
this.scheduleCommittedRangeClassRefresh();
|
|
13727
14063
|
this.announceMonthChange();
|
|
13728
14064
|
}
|
|
13729
14065
|
|
|
@@ -13742,6 +14078,11 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13742
14078
|
if (!opts.skipActiveUpdate) {
|
|
13743
14079
|
this.updateActiveCellForVisibleMonth();
|
|
13744
14080
|
}
|
|
14081
|
+
// clearRangePreview above strips classMap-managed range classes from
|
|
14082
|
+
// the DOM; classMap's private state still thinks they're applied, so
|
|
14083
|
+
// it won't re-add them on the post-nav re-render. Re-apply imperatively
|
|
14084
|
+
// after both months and their cell button caches have settled.
|
|
14085
|
+
this.scheduleCommittedRangeClassRefresh();
|
|
13745
14086
|
this.announceMonthChange();
|
|
13746
14087
|
}
|
|
13747
14088
|
|
|
@@ -13772,17 +14113,44 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13772
14113
|
* @returns {void}
|
|
13773
14114
|
*/
|
|
13774
14115
|
updateActiveCellForVisibleMonth() {
|
|
13775
|
-
|
|
13776
|
-
|
|
13777
|
-
requestAnimationFrame(() => {
|
|
13778
|
-
requestAnimationFrame(() => {
|
|
13779
|
-
const newDate = this.computeActiveDate({ skipDateFrom: true });
|
|
14116
|
+
this._afterMonthRender(() => {
|
|
14117
|
+
const newDate = this.computeActiveDate({ skipDateFrom: true });
|
|
13780
14118
|
|
|
13781
|
-
|
|
13782
|
-
|
|
13783
|
-
|
|
13784
|
-
|
|
13785
|
-
|
|
14119
|
+
if (newDate !== null && newDate !== undefined) {
|
|
14120
|
+
this.activeCellDate = newDate;
|
|
14121
|
+
this.setActiveCell(this.activeCellDate);
|
|
14122
|
+
}
|
|
14123
|
+
});
|
|
14124
|
+
}
|
|
14125
|
+
|
|
14126
|
+
/**
|
|
14127
|
+
* Schedules `callback` two animation frames out, giving the child
|
|
14128
|
+
* `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
|
|
14129
|
+
* a full render-and-paint cycle to settle before the callback reads or
|
|
14130
|
+
* mutates DOM.
|
|
14131
|
+
*
|
|
14132
|
+
* Why two frames, not one:
|
|
14133
|
+
* 1. Lit batches property updates and renders in a microtask, so frame N
|
|
14134
|
+
* schedules the render but the new DOM may not be painted yet.
|
|
14135
|
+
* 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
|
|
14136
|
+
* which also lands a tick later. Reading buttons from frame N+1
|
|
14137
|
+
* (after both renders + cache refresh have flushed) reliably hits the
|
|
14138
|
+
* new month's cells.
|
|
14139
|
+
*
|
|
14140
|
+
* Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
|
|
14141
|
+
* and then needs to inspect the freshly-rendered cells (cross-month
|
|
14142
|
+
* keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
|
|
14143
|
+
* Do NOT collapse to a single rAF — it intermittently lands before
|
|
14144
|
+
* `_cachedButton` is refreshed, which silently breaks focus restoration
|
|
14145
|
+
* and `setActiveCell` lookups.
|
|
14146
|
+
* @private
|
|
14147
|
+
* @param {() => void} callback - Runs once after the month re-render and
|
|
14148
|
+
* the cells' button caches have refreshed.
|
|
14149
|
+
* @returns {void}
|
|
14150
|
+
*/
|
|
14151
|
+
_afterMonthRender(callback) {
|
|
14152
|
+
requestAnimationFrame(() => {
|
|
14153
|
+
requestAnimationFrame(callback);
|
|
13786
14154
|
});
|
|
13787
14155
|
}
|
|
13788
14156
|
|
|
@@ -13900,6 +14268,47 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13900
14268
|
return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
|
|
13901
14269
|
}
|
|
13902
14270
|
|
|
14271
|
+
/**
|
|
14272
|
+
* Picks the focusable cell whose date is closest to targetTs. Used as a
|
|
14273
|
+
* fallback after a month-boundary nav when the exact target date isn't
|
|
14274
|
+
* focusable — typically because the month re-render lagged or the date
|
|
14275
|
+
* was filtered out by isOutOfRange. When two cells are equidistant, the
|
|
14276
|
+
* navigation direction breaks the tie so the user moves the way they
|
|
14277
|
+
* pressed (forward → later cell, backward → earlier cell).
|
|
14278
|
+
* @private
|
|
14279
|
+
* @param {Array} cells - Focusable cells from getAllFocusableCells.
|
|
14280
|
+
* @param {Number} targetTs - Desired Unix timestamp (seconds).
|
|
14281
|
+
* @param {'next'|'prev'} direction - Navigation direction.
|
|
14282
|
+
* @returns {Object|null} The nearest cell, or null when cells is empty.
|
|
14283
|
+
*/
|
|
14284
|
+
pickNearestCell(cells, targetTs, direction) {
|
|
14285
|
+
if (!cells.length) {
|
|
14286
|
+
return null;
|
|
14287
|
+
}
|
|
14288
|
+
const forward = direction === 'next';
|
|
14289
|
+
let best = null;
|
|
14290
|
+
let bestDelta = Infinity;
|
|
14291
|
+
cells.forEach((cell) => {
|
|
14292
|
+
if (!cell.day) {
|
|
14293
|
+
return;
|
|
14294
|
+
}
|
|
14295
|
+
const distance = Math.abs(cell.day.date - targetTs);
|
|
14296
|
+
if (distance < bestDelta) {
|
|
14297
|
+
best = cell;
|
|
14298
|
+
bestDelta = distance;
|
|
14299
|
+
return;
|
|
14300
|
+
}
|
|
14301
|
+
if (distance === bestDelta && best) {
|
|
14302
|
+
if (forward && cell.day.date > best.day.date) {
|
|
14303
|
+
best = cell;
|
|
14304
|
+
} else if (!forward && cell.day.date < best.day.date) {
|
|
14305
|
+
best = cell;
|
|
14306
|
+
}
|
|
14307
|
+
}
|
|
14308
|
+
});
|
|
14309
|
+
return best;
|
|
14310
|
+
}
|
|
14311
|
+
|
|
13903
14312
|
/**
|
|
13904
14313
|
* Gets all focusable cells across all rendered months.
|
|
13905
14314
|
* @private
|
|
@@ -13916,9 +14325,9 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13916
14325
|
|
|
13917
14326
|
/**
|
|
13918
14327
|
* Sets the active cell across all months. Only one cell has tabindex="0" at a time.
|
|
13919
|
-
* Uses imperative DOM manipulation — no Lit re-render triggered.
|
|
13920
|
-
*
|
|
13921
|
-
*
|
|
14328
|
+
* Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
|
|
14329
|
+
* stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
|
|
14330
|
+
* is what announces the active cell to assistive tech.
|
|
13922
14331
|
* @param {Number} date - Unix timestamp of the cell to activate.
|
|
13923
14332
|
* @returns {void}
|
|
13924
14333
|
*/
|
|
@@ -13936,6 +14345,9 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13936
14345
|
});
|
|
13937
14346
|
|
|
13938
14347
|
this.activeCellDate = date;
|
|
14348
|
+
// Cache so scrollToActiveCell can scroll without re-querying all cells
|
|
14349
|
+
// on every arrow keypress.
|
|
14350
|
+
this._activeCell = newActiveCell;
|
|
13939
14351
|
|
|
13940
14352
|
// Apply activeCell ring only when the grid currently has focus.
|
|
13941
14353
|
if (newActiveCell && this._gridHasFocus) {
|
|
@@ -13967,10 +14379,23 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13967
14379
|
/**
|
|
13968
14380
|
* Shows the activeCell ring when the grid gains focus.
|
|
13969
14381
|
* @private
|
|
14382
|
+
* @param {FocusEvent} [event] - The focusin event.
|
|
13970
14383
|
* @returns {void}
|
|
13971
14384
|
*/
|
|
13972
|
-
handleGridFocusIn() {
|
|
14385
|
+
handleGridFocusIn(event) {
|
|
13973
14386
|
this._gridHasFocus = true;
|
|
14387
|
+
|
|
14388
|
+
// Only apply the activeCell ring when the grid wrapper itself receives focus
|
|
14389
|
+
// (Tab/programmatic). When focus moves into a cell button via mousedown,
|
|
14390
|
+
// event.target is the cell descendant — skip the ring here. The subsequent
|
|
14391
|
+
// click handler calls setActiveCell on the clicked cell, which applies the
|
|
14392
|
+
// ring there. Without this guard, mousedown briefly flashes the ring on the
|
|
14393
|
+
// previously-active cell (e.g. the 1st-of-month set by month navigation
|
|
14394
|
+
// when the grid was not focused).
|
|
14395
|
+
if (event && event.target !== event.currentTarget) {
|
|
14396
|
+
return;
|
|
14397
|
+
}
|
|
14398
|
+
|
|
13974
14399
|
const activeCell = this.getAllFocusableCells().find((cell) => cell.active);
|
|
13975
14400
|
if (activeCell) {
|
|
13976
14401
|
const btn = activeCell._cachedButton || activeCell.shadowRoot.querySelector('button.day');
|
|
@@ -13999,6 +14424,76 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13999
14424
|
this.clearRangePreview();
|
|
14000
14425
|
}
|
|
14001
14426
|
|
|
14427
|
+
/**
|
|
14428
|
+
* Returns a memoized Set of blackout timestamps (seconds) drawn from both
|
|
14429
|
+
* the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
|
|
14430
|
+
*
|
|
14431
|
+
* The cache invalidates on **reference identity** — only when the
|
|
14432
|
+
* consumer reassigns the array (`el.blackoutDates = [...]`), matching
|
|
14433
|
+
* Lit's own reactivity semantics for array properties. In-place mutations
|
|
14434
|
+
* on the existing array (`push`, `splice`, index assignment) will NOT
|
|
14435
|
+
* invalidate the cache and the new entries will be silently ignored.
|
|
14436
|
+
* Consumers must reassign to update — see the JSDoc on
|
|
14437
|
+
* `auro-datepicker.blackoutDates` for the recommended pattern.
|
|
14438
|
+
*
|
|
14439
|
+
* A shallow-equality tier was considered but rejected: it would run
|
|
14440
|
+
* O(N) work on every cell render (this method is called per-cell via
|
|
14441
|
+
* `isBlackout()`) and still wouldn't catch same-length value swaps,
|
|
14442
|
+
* offering a false sense of safety.
|
|
14443
|
+
* @private
|
|
14444
|
+
* @returns {Set<Number>}
|
|
14445
|
+
*/
|
|
14446
|
+
_getBlackoutSet() {
|
|
14447
|
+
// Normalize non-array values to a stable `null` sentinel rather than a
|
|
14448
|
+
// fresh `[]` per call — otherwise the reference-identity cache key
|
|
14449
|
+
// (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
|
|
14450
|
+
// subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
|
|
14451
|
+
// already treats null/non-array as "no legacy disabledDays" via its
|
|
14452
|
+
// own Array.isArray gate.
|
|
14453
|
+
const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
|
|
14454
|
+
const blackoutDates = this.datepicker?.blackoutDates;
|
|
14455
|
+
if (this._blackoutSet &&
|
|
14456
|
+
this._cachedBlackoutDisabledDays === disabledDays &&
|
|
14457
|
+
this._cachedBlackoutDates === blackoutDates) {
|
|
14458
|
+
return this._blackoutSet;
|
|
14459
|
+
}
|
|
14460
|
+
|
|
14461
|
+
if (disabledDays && disabledDays.length > 0) {
|
|
14462
|
+
this._warnDisabledDaysDeprecated();
|
|
14463
|
+
}
|
|
14464
|
+
|
|
14465
|
+
this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
|
|
14466
|
+
this._cachedBlackoutDisabledDays = disabledDays;
|
|
14467
|
+
this._cachedBlackoutDates = blackoutDates;
|
|
14468
|
+
return this._blackoutSet;
|
|
14469
|
+
}
|
|
14470
|
+
|
|
14471
|
+
/**
|
|
14472
|
+
* Per-class flag that gates the `disabledDays` deprecation warning so it
|
|
14473
|
+
* fires exactly once per page no matter how many calendars or rebuild
|
|
14474
|
+
* cycles encounter the legacy array.
|
|
14475
|
+
* @private
|
|
14476
|
+
*/
|
|
14477
|
+
static _warnedDisabledDaysDeprecation = false;
|
|
14478
|
+
|
|
14479
|
+
/**
|
|
14480
|
+
* One-time `console.debug` directing consumers from the legacy
|
|
14481
|
+
* `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
|
|
14482
|
+
* the first time `_getBlackoutSet` rebuilds from a non-empty
|
|
14483
|
+
* `disabledDays`; subsequent calls (on this or any other AuroCalendar
|
|
14484
|
+
* instance on the page) are silent.
|
|
14485
|
+
* @private
|
|
14486
|
+
* @returns {void}
|
|
14487
|
+
*/
|
|
14488
|
+
_warnDisabledDaysDeprecated() {
|
|
14489
|
+
if (AuroCalendar._warnedDisabledDaysDeprecation) {
|
|
14490
|
+
return;
|
|
14491
|
+
}
|
|
14492
|
+
AuroCalendar._warnedDisabledDaysDeprecation = true;
|
|
14493
|
+
// eslint-disable-next-line no-console
|
|
14494
|
+
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.');
|
|
14495
|
+
}
|
|
14496
|
+
|
|
14002
14497
|
/**
|
|
14003
14498
|
* Computes the initial active date from data properties alone — no DOM required.
|
|
14004
14499
|
* Priority:
|
|
@@ -14043,21 +14538,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14043
14538
|
const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
|
|
14044
14539
|
const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
|
|
14045
14540
|
|
|
14046
|
-
// Build a Set of blackout timestamps for O(1) lookup.
|
|
14047
|
-
|
|
14048
|
-
|
|
14049
|
-
|
|
14050
|
-
// Parse YYYY-MM-DD as local date to avoid UTC shift issues.
|
|
14051
|
-
const isoBlackouts = this.datepicker?.blackoutDates;
|
|
14052
|
-
if (Array.isArray(isoBlackouts)) {
|
|
14053
|
-
for (const isoStr of isoBlackouts) {
|
|
14054
|
-
const parts = isoStr.split('-');
|
|
14055
|
-
const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
|
|
14056
|
-
if (Number.isFinite(ts)) {
|
|
14057
|
-
blackoutSet.add(ts);
|
|
14058
|
-
}
|
|
14059
|
-
}
|
|
14060
|
-
}
|
|
14541
|
+
// Build a Set of blackout timestamps for O(1) lookup. Memoized by the
|
|
14542
|
+
// identity of the source arrays so rapid month nav doesn't rebuild the
|
|
14543
|
+
// Set (and re-parse every ISO string) on every keypress.
|
|
14544
|
+
const blackoutSet = this._getBlackoutSet();
|
|
14061
14545
|
|
|
14062
14546
|
/**
|
|
14063
14547
|
* A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
|
|
@@ -14136,7 +14620,24 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14136
14620
|
// rendered month(s) first so a single-month calendar does not pick a date
|
|
14137
14621
|
// that has no DOM cell. Determine the visible range based on centralDate and
|
|
14138
14622
|
// the number of rendered months.
|
|
14139
|
-
|
|
14623
|
+
//
|
|
14624
|
+
// numCalendars is assigned inside renderAllCalendars(), which runs during
|
|
14625
|
+
// render() — so by the time the visible-change handler in updated()
|
|
14626
|
+
// calls computeActiveDate() in the same cycle, numCalendars is normally
|
|
14627
|
+
// set. Guard against the pre-first-render path anyway (e.g. any future
|
|
14628
|
+
// caller that reaches computeActiveDate before render() has run):
|
|
14629
|
+
// Math.max(undefined, 1) is NaN, which would silently skip the
|
|
14630
|
+
// visible-month scan below. Fall back to maximumRenderableMonths'
|
|
14631
|
+
// desktop default (1 for non-range, 2 for range) so the scan window is
|
|
14632
|
+
// correctly sized whenever numCalendars is not yet populated.
|
|
14633
|
+
let renderedMonths = null;
|
|
14634
|
+
|
|
14635
|
+
if (Number.isFinite(this.numCalendars) && this.numCalendars > 0) {
|
|
14636
|
+
renderedMonths = this.numCalendars;
|
|
14637
|
+
} else {
|
|
14638
|
+
renderedMonths = this.noRange ? 1 : 2;
|
|
14639
|
+
}
|
|
14640
|
+
|
|
14140
14641
|
const visibleAnchor = this.centralDateObject ?? new Date(now * 1000);
|
|
14141
14642
|
const visMonthStart = new Date(visibleAnchor.getFullYear(), visibleAnchor.getMonth(), 1);
|
|
14142
14643
|
visMonthStart.setHours(0, 0, 0, 0);
|
|
@@ -14253,8 +14754,8 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14253
14754
|
|
|
14254
14755
|
/**
|
|
14255
14756
|
* Handles arrow key navigation on the calendar grid wrapper.
|
|
14256
|
-
* Focus stays on the grid wrapper; only
|
|
14257
|
-
*
|
|
14757
|
+
* Focus stays on the grid wrapper; only the visual active-cell indicator
|
|
14758
|
+
* changes. The live region announces the new active cell.
|
|
14258
14759
|
* @private
|
|
14259
14760
|
* @param {KeyboardEvent} event - The keyboard event.
|
|
14260
14761
|
* @returns {void}
|
|
@@ -14319,21 +14820,24 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14319
14820
|
} else {
|
|
14320
14821
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14321
14822
|
}
|
|
14322
|
-
|
|
14323
|
-
|
|
14324
|
-
|
|
14325
|
-
|
|
14326
|
-
|
|
14327
|
-
|
|
14328
|
-
|
|
14329
|
-
|
|
14330
|
-
|
|
14823
|
+
this._afterMonthRender(() => {
|
|
14824
|
+
const cells = this.getAllFocusableCells();
|
|
14825
|
+
const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
|
|
14826
|
+
if (target) {
|
|
14827
|
+
this.setActiveCell(target.day.date);
|
|
14828
|
+
this.handleCellFocused({ detail: { date: target.day.date } });
|
|
14829
|
+
} else {
|
|
14830
|
+
const fallback = this.pickNearestCell(cells, targetTs, navDir);
|
|
14831
|
+
if (fallback) {
|
|
14331
14832
|
this.setActiveCell(fallback.day.date);
|
|
14332
14833
|
this.handleCellFocused({ detail: { date: fallback.day.date } });
|
|
14333
14834
|
}
|
|
14334
|
-
|
|
14335
|
-
|
|
14336
|
-
|
|
14835
|
+
}
|
|
14836
|
+
// Scroll AFTER the cross-month setActiveCell so the freshly
|
|
14837
|
+
// activated cell is what gets scrolled into view.
|
|
14838
|
+
this.scrollToActiveCell();
|
|
14839
|
+
// Re-focus grid wrapper after month change re-render
|
|
14840
|
+
this.focusActiveCell();
|
|
14337
14841
|
});
|
|
14338
14842
|
}
|
|
14339
14843
|
}
|
|
@@ -14359,26 +14863,23 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14359
14863
|
} else {
|
|
14360
14864
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14361
14865
|
}
|
|
14362
|
-
|
|
14363
|
-
|
|
14364
|
-
|
|
14365
|
-
|
|
14366
|
-
|
|
14367
|
-
|
|
14368
|
-
|
|
14369
|
-
|
|
14370
|
-
|
|
14371
|
-
|
|
14372
|
-
if (navDirection === 'next') {
|
|
14373
|
-
[nearest] = cells;
|
|
14374
|
-
} else {
|
|
14375
|
-
nearest = cells[cells.length - 1];
|
|
14376
|
-
}
|
|
14866
|
+
this._afterMonthRender(() => {
|
|
14867
|
+
const cells = this.getAllFocusableCells();
|
|
14868
|
+
const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
|
|
14869
|
+
if (target) {
|
|
14870
|
+
this.setActiveCell(target.day.date);
|
|
14871
|
+
this.handleCellFocused({ detail: { date: target.day.date } });
|
|
14872
|
+
} else {
|
|
14873
|
+
const nearest = this.pickNearestCell(cells, targetDate, navDirection);
|
|
14874
|
+
if (nearest) {
|
|
14377
14875
|
this.setActiveCell(nearest.day.date);
|
|
14378
14876
|
this.handleCellFocused({ detail: { date: nearest.day.date } });
|
|
14379
14877
|
}
|
|
14380
|
-
|
|
14381
|
-
|
|
14878
|
+
}
|
|
14879
|
+
// Scroll AFTER the cross-month setActiveCell so the freshly
|
|
14880
|
+
// activated cell is what gets scrolled into view.
|
|
14881
|
+
this.scrollToActiveCell();
|
|
14882
|
+
this.focusActiveCell();
|
|
14382
14883
|
});
|
|
14383
14884
|
}
|
|
14384
14885
|
}
|
|
@@ -14406,12 +14907,16 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14406
14907
|
let targetIndex = -1;
|
|
14407
14908
|
if (direction === 'next') {
|
|
14408
14909
|
targetIndex = currentIndex + 1;
|
|
14910
|
+
} else if (direction === 'prev') {
|
|
14911
|
+
targetIndex = currentIndex - 1;
|
|
14409
14912
|
}
|
|
14410
14913
|
|
|
14411
14914
|
if (targetIndex >= 0 && targetIndex < allCells.length) {
|
|
14412
14915
|
const targetCell = allCells[targetIndex];
|
|
14413
14916
|
this.setActiveCell(targetCell.day.date);
|
|
14414
14917
|
this.scrollToActiveCell();
|
|
14918
|
+
// Match the cross-month branches: keep DOM focus on the grid wrapper
|
|
14919
|
+
// so subsequent arrow keys continue to land on this handler.
|
|
14415
14920
|
this.focusActiveCell();
|
|
14416
14921
|
} else if (direction === 'next' && this.showNextMonthBtn) {
|
|
14417
14922
|
// Navigate to next month and focus the computed next date.
|
|
@@ -14428,19 +14933,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14428
14933
|
}
|
|
14429
14934
|
|
|
14430
14935
|
this.handleNextMonth({ skipActiveUpdate: true });
|
|
14431
|
-
|
|
14432
|
-
|
|
14433
|
-
|
|
14434
|
-
|
|
14435
|
-
|
|
14436
|
-
|
|
14437
|
-
|
|
14438
|
-
|
|
14439
|
-
|
|
14440
|
-
|
|
14441
|
-
|
|
14936
|
+
this._afterMonthRender(() => {
|
|
14937
|
+
const cells = this.getAllFocusableCells();
|
|
14938
|
+
const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
|
|
14939
|
+
if (target) {
|
|
14940
|
+
this.setActiveCell(target.day.date);
|
|
14941
|
+
} else {
|
|
14942
|
+
// Same nearest-by-date fallback handleGridKeyDown uses — direct
|
|
14943
|
+
// `cells[length - 1]` would land on the end of the new month,
|
|
14944
|
+
// far from the user's intended `nextTs`.
|
|
14945
|
+
const fallback = this.pickNearestCell(cells, nextTs, 'next');
|
|
14946
|
+
if (fallback) {
|
|
14947
|
+
this.setActiveCell(fallback.day.date);
|
|
14442
14948
|
}
|
|
14443
|
-
}
|
|
14949
|
+
}
|
|
14950
|
+
this.scrollToActiveCell();
|
|
14951
|
+
this.focusActiveCell();
|
|
14444
14952
|
});
|
|
14445
14953
|
} else if (direction === 'prev' && this.showPrevMonthBtn) {
|
|
14446
14954
|
// Navigate to previous month and focus the computed previous date.
|
|
@@ -14454,19 +14962,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14454
14962
|
}
|
|
14455
14963
|
|
|
14456
14964
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14457
|
-
|
|
14458
|
-
|
|
14459
|
-
|
|
14460
|
-
|
|
14461
|
-
|
|
14462
|
-
|
|
14463
|
-
|
|
14464
|
-
|
|
14465
|
-
|
|
14466
|
-
|
|
14467
|
-
|
|
14965
|
+
this._afterMonthRender(() => {
|
|
14966
|
+
const cells = this.getAllFocusableCells();
|
|
14967
|
+
const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
|
|
14968
|
+
if (target) {
|
|
14969
|
+
this.setActiveCell(target.day.date);
|
|
14970
|
+
} else {
|
|
14971
|
+
// Same nearest-by-date fallback handleGridKeyDown uses — direct
|
|
14972
|
+
// `cells[0]` would land on the start of the previous month, far
|
|
14973
|
+
// from the user's intended `prevTs`.
|
|
14974
|
+
const fallback = this.pickNearestCell(cells, prevTs, 'prev');
|
|
14975
|
+
if (fallback) {
|
|
14976
|
+
this.setActiveCell(fallback.day.date);
|
|
14468
14977
|
}
|
|
14469
|
-
}
|
|
14978
|
+
}
|
|
14979
|
+
this.scrollToActiveCell();
|
|
14980
|
+
this.focusActiveCell();
|
|
14470
14981
|
});
|
|
14471
14982
|
}
|
|
14472
14983
|
} else if (key === 'ArrowDown' || key === 'ArrowUp') {
|
|
@@ -14494,20 +15005,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14494
15005
|
} else {
|
|
14495
15006
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14496
15007
|
}
|
|
14497
|
-
|
|
14498
|
-
|
|
14499
|
-
|
|
14500
|
-
|
|
14501
|
-
|
|
14502
|
-
|
|
14503
|
-
|
|
14504
|
-
|
|
14505
|
-
|
|
14506
|
-
|
|
15008
|
+
this._afterMonthRender(() => {
|
|
15009
|
+
const cells = this.getAllFocusableCells();
|
|
15010
|
+
const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
|
|
15011
|
+
if (target) {
|
|
15012
|
+
this.setActiveCell(target.day.date);
|
|
15013
|
+
} else {
|
|
15014
|
+
// Same nearest-by-date fallback handleGridKeyDown uses — the
|
|
15015
|
+
// old direction-based `cells[0]`/`cells[length-1]` clamp
|
|
15016
|
+
// could land 25+ days from the intended target.
|
|
15017
|
+
const nearest = this.pickNearestCell(cells, targetDate, navDirection);
|
|
15018
|
+
if (nearest) {
|
|
14507
15019
|
this.setActiveCell(nearest.day.date);
|
|
14508
|
-
this.focusActiveCell();
|
|
14509
15020
|
}
|
|
14510
|
-
}
|
|
15021
|
+
}
|
|
15022
|
+
this.scrollToActiveCell();
|
|
15023
|
+
this.focusActiveCell();
|
|
14511
15024
|
});
|
|
14512
15025
|
}
|
|
14513
15026
|
}
|
|
@@ -14546,8 +15059,9 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14546
15059
|
return;
|
|
14547
15060
|
}
|
|
14548
15061
|
|
|
14549
|
-
//
|
|
14550
|
-
// so
|
|
15062
|
+
// DOM focus stays on the grid wrapper while arrow keys move the active
|
|
15063
|
+
// cell, so cell buttons never receive native focus. The debounced live
|
|
15064
|
+
// region carries the full-context announcement instead.
|
|
14551
15065
|
const announcement = this.buildFocusAnnouncement(date);
|
|
14552
15066
|
this.announceFocusDebounced(announcement);
|
|
14553
15067
|
|
|
@@ -14617,10 +15131,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14617
15131
|
return null;
|
|
14618
15132
|
}
|
|
14619
15133
|
|
|
14620
|
-
const departTs =
|
|
15134
|
+
const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
14621
15135
|
const parsedTo = Number.parseInt(this.dateTo, 10);
|
|
14622
15136
|
const hasTo = Number.isFinite(parsedTo);
|
|
14623
|
-
const returnTs = hasTo ?
|
|
15137
|
+
const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
|
|
14624
15138
|
|
|
14625
15139
|
if (date === departTs) {
|
|
14626
15140
|
return this.datepicker.rangeLabelStart || 'range start';
|
|
@@ -14634,36 +15148,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14634
15148
|
if (hasTo && date > departTs && date < returnTs) {
|
|
14635
15149
|
return this.datepicker.rangeLabelInRange || 'in range';
|
|
14636
15150
|
}
|
|
15151
|
+
if (!hasTo && date > departTs) {
|
|
15152
|
+
return this.datepicker.rangeLabelEndPreview || 'previewing range end';
|
|
15153
|
+
}
|
|
14637
15154
|
return this.datepicker.rangeLabelAfterRange || 'after range';
|
|
14638
15155
|
}
|
|
14639
15156
|
|
|
14640
15157
|
/**
|
|
14641
|
-
* Checks whether a given date is a blackout date.
|
|
15158
|
+
* Checks whether a given date is a blackout date. Delegates to the
|
|
15159
|
+
* memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
|
|
15160
|
+
* legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
|
|
14642
15161
|
* @private
|
|
14643
15162
|
* @param {Number} dateTs - Unix timestamp (seconds).
|
|
14644
15163
|
* @returns {Boolean} True if the date is blacked out.
|
|
14645
15164
|
*/
|
|
14646
15165
|
isDateBlackout(dateTs) {
|
|
14647
|
-
|
|
14648
|
-
if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
|
|
14649
|
-
if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
|
|
14650
|
-
return true;
|
|
14651
|
-
}
|
|
14652
|
-
}
|
|
14653
|
-
|
|
14654
|
-
// Check ISO blackoutDates.
|
|
14655
|
-
const blackoutDates = this.datepicker?.blackoutDates;
|
|
14656
|
-
if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
|
|
14657
|
-
const date = new Date(dateTs * 1000);
|
|
14658
|
-
const yyyy = date.getFullYear();
|
|
14659
|
-
const mm = String(date.getMonth() + 1).padStart(2, '0');
|
|
14660
|
-
const dd = String(date.getDate()).padStart(2, '0');
|
|
14661
|
-
if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
|
|
14662
|
-
return true;
|
|
14663
|
-
}
|
|
14664
|
-
}
|
|
14665
|
-
|
|
14666
|
-
return false;
|
|
15166
|
+
return this._getBlackoutSet().has(dateTs);
|
|
14667
15167
|
}
|
|
14668
15168
|
|
|
14669
15169
|
/**
|
|
@@ -14691,9 +15191,14 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14691
15191
|
* @private
|
|
14692
15192
|
* @param {Object} [options] - Optional settings.
|
|
14693
15193
|
* @param {boolean} [options.force=false] - When true, clears classes even
|
|
14694
|
-
* when both dateFrom and dateTo are set. Used by month nav handlers
|
|
14695
|
-
*
|
|
14696
|
-
*
|
|
15194
|
+
* when both dateFrom and dateTo are set. Used by month nav handlers to
|
|
15195
|
+
* strip the imperative-only `lastHoveredDate` before the re-render.
|
|
15196
|
+
* The other two classes (`inRange`, `rangeDepartDate`) are classMap-
|
|
15197
|
+
* managed and get stripped as a side effect here; because classMap
|
|
15198
|
+
* remembers what it last emitted and does not diff against the actual
|
|
15199
|
+
* DOM, the following month re-render will NOT re-add them on its own.
|
|
15200
|
+
* Nav handlers must schedule `refreshCommittedRangeClasses` (via
|
|
15201
|
+
* `scheduleCommittedRangeClassRefresh`) to resync them.
|
|
14697
15202
|
* @returns {void}
|
|
14698
15203
|
*/
|
|
14699
15204
|
clearRangePreview(options) {
|
|
@@ -14708,6 +15213,57 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14708
15213
|
});
|
|
14709
15214
|
}
|
|
14710
15215
|
|
|
15216
|
+
/**
|
|
15217
|
+
* Re-applies the committed-range classes across every focusable cell
|
|
15218
|
+
* after a month navigation. classMap in the cell tracks its own
|
|
15219
|
+
* previous state: once `clearRangePreview({ force: true })` strips
|
|
15220
|
+
* `inRange`/`rangeDepartDate` imperatively before the re-render,
|
|
15221
|
+
* classMap's next diff sees the same class-value it emitted before and
|
|
15222
|
+
* produces no delta, leaving the DOM without the classes even though a
|
|
15223
|
+
* full range is committed. Re-applying imperatively resyncs the two
|
|
15224
|
+
* months' cells with `dateFrom`/`dateTo`.
|
|
15225
|
+
*
|
|
15226
|
+
* Iterates `getAllFocusableCells()` — out-of-range cells (blocked by
|
|
15227
|
+
* `min`/`max`) can never carry range classes anyway, so skipping them
|
|
15228
|
+
* is correct and cheaper than a whole-grid walk.
|
|
15229
|
+
*
|
|
15230
|
+
* The cell's `applyCommittedRangeClasses` reuses the same
|
|
15231
|
+
* `isInRange`/`isDepartDate`/`isReturnDate` helpers `renderCellButton`
|
|
15232
|
+
* uses, so we don't parse dateFrom/dateTo here — the helpers already
|
|
15233
|
+
* normalize their inputs (midnight-truncation, string→int) internally.
|
|
15234
|
+
* @private
|
|
15235
|
+
* @returns {void}
|
|
15236
|
+
*/
|
|
15237
|
+
refreshCommittedRangeClasses() {
|
|
15238
|
+
if (this.noRange || !this.dateFrom || !this.dateTo) {
|
|
15239
|
+
return;
|
|
15240
|
+
}
|
|
15241
|
+
|
|
15242
|
+
const allCells = this.getAllFocusableCells();
|
|
15243
|
+
allCells.forEach((cell) => {
|
|
15244
|
+
cell.applyCommittedRangeClasses();
|
|
15245
|
+
});
|
|
15246
|
+
}
|
|
15247
|
+
|
|
15248
|
+
/**
|
|
15249
|
+
* Schedules `refreshCommittedRangeClasses` to run after the month
|
|
15250
|
+
* re-render has flushed and the cells' button caches have refreshed.
|
|
15251
|
+
* Both `handlePrevMonth` and `handleNextMonth` need this exact call
|
|
15252
|
+
* shape; keeping it in one place prevents them from drifting apart.
|
|
15253
|
+
*
|
|
15254
|
+
* Bails synchronously when a full committed range isn't set — otherwise
|
|
15255
|
+
* every prev/next click in single-date mode (or before the user picks
|
|
15256
|
+
* both dates in range mode) pays for an unused double-rAF hop.
|
|
15257
|
+
* @private
|
|
15258
|
+
* @returns {void}
|
|
15259
|
+
*/
|
|
15260
|
+
scheduleCommittedRangeClassRefresh() {
|
|
15261
|
+
if (this.noRange || !this.dateFrom || !this.dateTo) {
|
|
15262
|
+
return;
|
|
15263
|
+
}
|
|
15264
|
+
this._afterMonthRender(() => this.refreshCommittedRangeClasses());
|
|
15265
|
+
}
|
|
15266
|
+
|
|
14711
15267
|
/**
|
|
14712
15268
|
* Overrides the base class handler to prevent setting `this.hoveredDate`
|
|
14713
15269
|
* as a reactive property. Instead, handles the range preview imperatively.
|
|
@@ -14721,7 +15277,28 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14721
15277
|
}
|
|
14722
15278
|
|
|
14723
15279
|
/**
|
|
14724
|
-
* Scrolls the calendar
|
|
15280
|
+
* Scrolls the calendar so the active cell is visible.
|
|
15281
|
+
*
|
|
15282
|
+
* Walks the flat tree (rendered, slot-aware) outward from the active
|
|
15283
|
+
* cell's button and calls `scrollBy` on every vertically-scrollable
|
|
15284
|
+
* ancestor by whatever delta still separates the cell from that
|
|
15285
|
+
* ancestor's viewport. Native `scrollIntoView` is not used because the
|
|
15286
|
+
* cell sits inside multiple nested scroll containers (the dropdown bib's
|
|
15287
|
+
* `<dialog>`, the bibtemplate's `#bodyContainer`) and the algorithm only
|
|
15288
|
+
* scrolls one of them on its own, leaving the cell short of the
|
|
15289
|
+
* viewport in mobile fullscreen.
|
|
15290
|
+
*
|
|
15291
|
+
* Uses `behavior: 'auto'` (the spec's universally-supported non-animated
|
|
15292
|
+
* value) so each `scrollBy` resolves synchronously and the next
|
|
15293
|
+
* iteration's `getBoundingClientRect` reads post-scroll positions
|
|
15294
|
+
* accurately. This also satisfies `prefers-reduced-motion` users — the
|
|
15295
|
+
* scroll containers do not set CSS `scroll-behavior: smooth`, so `auto`
|
|
15296
|
+
* is effectively instant.
|
|
15297
|
+
*
|
|
15298
|
+
* The active cell is looked up from the cache populated by
|
|
15299
|
+
* `setActiveCell`. On a cache miss (stale or absent) the cache is
|
|
15300
|
+
* refreshed from a single full scan so subsequent calls stay on the
|
|
15301
|
+
* fast path.
|
|
14725
15302
|
* @private
|
|
14726
15303
|
* @returns {void}
|
|
14727
15304
|
*/
|
|
@@ -14730,16 +15307,69 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14730
15307
|
return;
|
|
14731
15308
|
}
|
|
14732
15309
|
|
|
14733
|
-
|
|
14734
|
-
|
|
14735
|
-
|
|
14736
|
-
|
|
14737
|
-
|
|
15310
|
+
// Prefer the cell cached by setActiveCell so arrow-key navigation does
|
|
15311
|
+
// not rebuild the full cell list on every keypress. Fall back to a
|
|
15312
|
+
// lookup when the cache is stale (e.g. detached after month re-render)
|
|
15313
|
+
// or absent (scrollToActiveCell called without a prior setActiveCell);
|
|
15314
|
+
// refresh the cache on the fallback path so a subsequent call reuses it.
|
|
15315
|
+
const activeDate = this.activeCellDate;
|
|
15316
|
+
const cached = this._activeCell;
|
|
15317
|
+
const cacheFresh = cached && cached.isConnected && cached.day && cached.day.date === activeDate;
|
|
15318
|
+
let activeCell = null;
|
|
15319
|
+
if (cacheFresh) {
|
|
15320
|
+
activeCell = cached;
|
|
15321
|
+
} else {
|
|
15322
|
+
activeCell = this.getAllFocusableCells().find((cell) => cell.day && cell.day.date === activeDate);
|
|
15323
|
+
this._activeCell = activeCell || null;
|
|
15324
|
+
}
|
|
15325
|
+
if (!activeCell) {
|
|
15326
|
+
return;
|
|
15327
|
+
}
|
|
15328
|
+
|
|
15329
|
+
// Scroll the button inside the cell — it has concrete dimensions,
|
|
15330
|
+
// which avoids quirks when the cell host has display: inline / contents
|
|
15331
|
+
// / flex-without-explicit-size.
|
|
15332
|
+
const target = activeCell._cachedButton ||
|
|
15333
|
+
activeCell.shadowRoot?.querySelector('button.day') ||
|
|
15334
|
+
activeCell;
|
|
15335
|
+
|
|
15336
|
+
// parentNode follows the authored DOM tree and steps over shadow roots
|
|
15337
|
+
// via slot projection. A slotted element's visual parent is its
|
|
15338
|
+
// assignedSlot's parent (inside the host's shadow tree), not the host
|
|
15339
|
+
// itself. Without this hop, the walk skips right past #bodyContainer
|
|
15340
|
+
// and <dialog> and finds no scrollable ancestor at all.
|
|
15341
|
+
const flatParent = (current) => {
|
|
15342
|
+
if (current.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
|
|
15343
|
+
return current.host || null;
|
|
15344
|
+
}
|
|
15345
|
+
if (current.assignedSlot) {
|
|
15346
|
+
return current.assignedSlot.parentNode;
|
|
15347
|
+
}
|
|
15348
|
+
return current.parentNode;
|
|
15349
|
+
};
|
|
14738
15350
|
|
|
14739
|
-
|
|
14740
|
-
|
|
14741
|
-
|
|
14742
|
-
|
|
15351
|
+
let node = flatParent(target);
|
|
15352
|
+
while (node && node !== document && node !== window) {
|
|
15353
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
15354
|
+
const { overflowY } = window.getComputedStyle(node);
|
|
15355
|
+
if (overflowY === 'auto' || overflowY === 'scroll') {
|
|
15356
|
+
const targetRect = target.getBoundingClientRect();
|
|
15357
|
+
const scrollerRect = node.getBoundingClientRect();
|
|
15358
|
+
let delta = 0;
|
|
15359
|
+
if (targetRect.top < scrollerRect.top) {
|
|
15360
|
+
delta = targetRect.top - scrollerRect.top;
|
|
15361
|
+
} else if (targetRect.bottom > scrollerRect.bottom) {
|
|
15362
|
+
delta = targetRect.bottom - scrollerRect.bottom;
|
|
15363
|
+
}
|
|
15364
|
+
if (delta !== 0) {
|
|
15365
|
+
node.scrollBy({
|
|
15366
|
+
top: delta,
|
|
15367
|
+
behavior: 'auto'
|
|
15368
|
+
});
|
|
15369
|
+
}
|
|
15370
|
+
}
|
|
15371
|
+
}
|
|
15372
|
+
node = flatParent(node);
|
|
14743
15373
|
}
|
|
14744
15374
|
}
|
|
14745
15375
|
|
|
@@ -14830,9 +15460,34 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14830
15460
|
// the last one.
|
|
14831
15461
|
if (this._announceRafId) {
|
|
14832
15462
|
cancelAnimationFrame(this._announceRafId);
|
|
15463
|
+
this._announceRafId = null;
|
|
14833
15464
|
}
|
|
15465
|
+
this._deliverAnnouncement(dateStr, 0);
|
|
15466
|
+
}
|
|
15467
|
+
|
|
15468
|
+
/**
|
|
15469
|
+
* Writes `dateStr` to the live region. If the dropdown's dialog hasn't
|
|
15470
|
+
* mounted yet (so getOrCreateLiveRegion can't attach), retries on the
|
|
15471
|
+
* next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
|
|
15472
|
+
* dropping the announcement. The retry uses the same `_announceRafId`
|
|
15473
|
+
* the double-rAF below uses, so a newer announceSelection call (or
|
|
15474
|
+
* disconnectedCallback) cancels any in-flight retry.
|
|
15475
|
+
* @private
|
|
15476
|
+
* @param {String} dateStr - The localized date string to announce.
|
|
15477
|
+
* @param {Number} attempts - Number of prior retry attempts.
|
|
15478
|
+
* @returns {void}
|
|
15479
|
+
*/
|
|
15480
|
+
_deliverAnnouncement(dateStr, attempts) {
|
|
14834
15481
|
const liveRegion = this.getOrCreateLiveRegion();
|
|
14835
15482
|
if (!liveRegion) {
|
|
15483
|
+
const MAX_LIVE_REGION_RETRIES = 10;
|
|
15484
|
+
if (attempts < MAX_LIVE_REGION_RETRIES) {
|
|
15485
|
+
this._announceRafId = requestAnimationFrame(() => {
|
|
15486
|
+
this._deliverAnnouncement(dateStr, attempts + 1);
|
|
15487
|
+
});
|
|
15488
|
+
} else {
|
|
15489
|
+
this._announceRafId = null;
|
|
15490
|
+
}
|
|
14836
15491
|
return;
|
|
14837
15492
|
}
|
|
14838
15493
|
|
|
@@ -14858,6 +15513,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14858
15513
|
* originally tried aria-live="polite" here, but VoiceOver treats
|
|
14859
15514
|
* polite as "wait until idle" — which never happens during active
|
|
14860
15515
|
* keyboard navigation — so the announcements were silently dropped.
|
|
15516
|
+
*
|
|
15517
|
+
* This is a documented deviation from WCAG 2.1 SC 4.1.3, which
|
|
15518
|
+
* prefers `polite` for status messages. See the "Documented
|
|
15519
|
+
* Deviation" section in components/datepicker/docs/pages/accessibility.md.
|
|
14861
15520
|
* @private
|
|
14862
15521
|
* @param {String} dateStr - The localized date string to announce.
|
|
14863
15522
|
* @returns {void}
|
|
@@ -15005,7 +15664,7 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
15005
15664
|
</div>
|
|
15006
15665
|
</div>
|
|
15007
15666
|
|
|
15008
|
-
<div class="calendarWrapper
|
|
15667
|
+
<div class="calendarWrapper">
|
|
15009
15668
|
<div class="calendarNavButtons">
|
|
15010
15669
|
${this.showPrevMonthBtn ? html$1`
|
|
15011
15670
|
<button tabIndex="0" class="calendarNavBtn prevMonth" aria-label="${this.datepicker?.navLabelPrevMonth || 'Previous month'}" @click="${this.handlePrevMonth}">
|
|
@@ -15018,7 +15677,7 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
15018
15677
|
</button>
|
|
15019
15678
|
` : undefined}
|
|
15020
15679
|
</div>
|
|
15021
|
-
<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}">
|
|
15680
|
+
<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}">
|
|
15022
15681
|
${this.renderAllCalendars()}
|
|
15023
15682
|
</div>
|
|
15024
15683
|
</div>
|
|
@@ -17287,12 +17946,40 @@ class AuroFloatingUI {
|
|
|
17287
17946
|
return;
|
|
17288
17947
|
}
|
|
17289
17948
|
|
|
17949
|
+
// Chrome-specific: during popover top-layer promotion after a click on a
|
|
17950
|
+
// slotted focusable, :focus-within can briefly evaluate false while the
|
|
17951
|
+
// active element is still structurally inside the trigger/bib. Fall back
|
|
17952
|
+
// to a shadow-piercing ancestry walk from the deep active element before
|
|
17953
|
+
// treating this as a real focus loss.
|
|
17954
|
+
try {
|
|
17955
|
+
let active = document.activeElement;
|
|
17956
|
+
while (active && active.shadowRoot && active.shadowRoot.activeElement) {
|
|
17957
|
+
active = active.shadowRoot.activeElement;
|
|
17958
|
+
}
|
|
17959
|
+
const targets = [element, element.trigger, element.bib].filter(Boolean);
|
|
17960
|
+
let node = active;
|
|
17961
|
+
while (node) {
|
|
17962
|
+
if (targets.includes(node)) {
|
|
17963
|
+
return;
|
|
17964
|
+
}
|
|
17965
|
+
node =
|
|
17966
|
+
node.parentElement ||
|
|
17967
|
+
(node.getRootNode && node.getRootNode().host) ||
|
|
17968
|
+
null;
|
|
17969
|
+
}
|
|
17970
|
+
} catch (e) {
|
|
17971
|
+
// Defensive: fall through to the existing close path if traversal fails.
|
|
17972
|
+
}
|
|
17973
|
+
|
|
17290
17974
|
// if fullscreen bib is in fullscreen mode, do not close
|
|
17291
17975
|
if (element.bib.hasAttribute("isfullscreen")) {
|
|
17292
17976
|
return;
|
|
17293
17977
|
}
|
|
17294
17978
|
|
|
17295
|
-
|
|
17979
|
+
// eventType "focusloss" distinguishes a Tab/click-driven close from an
|
|
17980
|
+
// Escape keydown close. Consumers use this to decide whether to restore
|
|
17981
|
+
// focus to the trigger (Escape) or let it advance naturally (Tab).
|
|
17982
|
+
this.hideBib("focusloss");
|
|
17296
17983
|
}
|
|
17297
17984
|
|
|
17298
17985
|
setupHideHandlers() {
|
|
@@ -17962,199 +18649,6 @@ function getFocusableElements(container) {
|
|
|
17962
18649
|
return tabIndexedUniqueElements;
|
|
17963
18650
|
}
|
|
17964
18651
|
|
|
17965
|
-
/**
|
|
17966
|
-
* FocusTrap manages keyboard focus within a specified container element, ensuring that focus does not leave the container when tabbing.
|
|
17967
|
-
* It is commonly used for modal dialogs or overlays to improve accessibility by trapping focus within interactive UI components.
|
|
17968
|
-
*/
|
|
17969
|
-
class FocusTrap {
|
|
17970
|
-
/**
|
|
17971
|
-
* Creates a new FocusTrap instance for the given container element.
|
|
17972
|
-
* Initializes event listeners and prepares the container for focus management.
|
|
17973
|
-
*
|
|
17974
|
-
* @param {HTMLElement} container The DOM element to trap focus within.
|
|
17975
|
-
* @param {boolean} [controlTabOrder=false] If true enables manual control of the tab order by the FocusTrap.
|
|
17976
|
-
* @throws {Error} If the provided container is not a valid HTMLElement.
|
|
17977
|
-
*/
|
|
17978
|
-
constructor(container, controlTabOrder = false) {
|
|
17979
|
-
if (!container || !(container instanceof HTMLElement)) {
|
|
17980
|
-
throw new Error("FocusTrap requires a valid HTMLElement.");
|
|
17981
|
-
}
|
|
17982
|
-
|
|
17983
|
-
this.container = container;
|
|
17984
|
-
this.tabDirection = "forward"; // or 'backward';
|
|
17985
|
-
this.controlTabOrder = controlTabOrder;
|
|
17986
|
-
|
|
17987
|
-
this._init();
|
|
17988
|
-
}
|
|
17989
|
-
|
|
17990
|
-
/**
|
|
17991
|
-
* Initializes the focus trap by setting up event listeners and attributes on the container.
|
|
17992
|
-
* Prepares the container for focus management, including support for shadow DOM and inert attributes.
|
|
17993
|
-
*
|
|
17994
|
-
* @private
|
|
17995
|
-
*/
|
|
17996
|
-
_init() {
|
|
17997
|
-
// Add inert attribute to prevent focusing programmatically as well (if supported)
|
|
17998
|
-
if ("inert" in HTMLElement.prototype) {
|
|
17999
|
-
this.container.inert = false; // Ensure the container isn't inert
|
|
18000
|
-
this.container.setAttribute("data-focus-trap-container", true); // Mark for identification
|
|
18001
|
-
}
|
|
18002
|
-
|
|
18003
|
-
// Track tab direction
|
|
18004
|
-
this.container.addEventListener("keydown", this._onKeydown);
|
|
18005
|
-
}
|
|
18006
|
-
|
|
18007
|
-
/**
|
|
18008
|
-
* Gets an array of currently active (focused) elements in the document and shadow DOM.
|
|
18009
|
-
* @returns {Array<HTMLElement>} An array of focusable elements within the container.
|
|
18010
|
-
* @private
|
|
18011
|
-
*/
|
|
18012
|
-
_getActiveElements() {
|
|
18013
|
-
// Get the active element(s) in the document and shadow root
|
|
18014
|
-
// This will include the active element in the shadow DOM if it exists
|
|
18015
|
-
// Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
|
|
18016
|
-
let { activeElement } = document;
|
|
18017
|
-
const actives = [activeElement];
|
|
18018
|
-
while (activeElement?.shadowRoot?.activeElement) {
|
|
18019
|
-
actives.push(activeElement.shadowRoot.activeElement);
|
|
18020
|
-
activeElement = activeElement.shadowRoot.activeElement;
|
|
18021
|
-
}
|
|
18022
|
-
return actives;
|
|
18023
|
-
}
|
|
18024
|
-
|
|
18025
|
-
/**
|
|
18026
|
-
* Gets the next focus index based on the current index and focusable elements.
|
|
18027
|
-
* @param {number} currentIndex The current index of the focused element.
|
|
18028
|
-
* @param {Array<HTMLElement>} focusables The array of focusable elements.
|
|
18029
|
-
* @returns {number|null} The next focus index or null if not determined.
|
|
18030
|
-
*/
|
|
18031
|
-
_getNextFocusIndex(currentIndex, focusables, actives) {
|
|
18032
|
-
if (this.controlTabOrder) {
|
|
18033
|
-
// Calculate the new index based on the current index and tab direction
|
|
18034
|
-
let newFocusIndex =
|
|
18035
|
-
currentIndex + (this.tabDirection === "forward" ? 1 : -1);
|
|
18036
|
-
|
|
18037
|
-
// Wrap-around logic
|
|
18038
|
-
if (newFocusIndex < 0) newFocusIndex = focusables.length - 1;
|
|
18039
|
-
if (newFocusIndex >= focusables.length) newFocusIndex = 0;
|
|
18040
|
-
|
|
18041
|
-
// Early return with the new index
|
|
18042
|
-
return newFocusIndex;
|
|
18043
|
-
}
|
|
18044
|
-
|
|
18045
|
-
// Determine if we need to wrap
|
|
18046
|
-
const atFirst =
|
|
18047
|
-
actives.includes(focusables[0]) || actives.includes(this.container);
|
|
18048
|
-
const atLast = actives.includes(focusables[focusables.length - 1]);
|
|
18049
|
-
|
|
18050
|
-
// Only wrap if at the ends
|
|
18051
|
-
if (this.tabDirection === "backward" && atFirst) {
|
|
18052
|
-
return focusables.length - 1;
|
|
18053
|
-
}
|
|
18054
|
-
|
|
18055
|
-
if (this.tabDirection === "forward" && atLast) {
|
|
18056
|
-
return 0;
|
|
18057
|
-
}
|
|
18058
|
-
|
|
18059
|
-
// No wrap, so don't change focus, return early
|
|
18060
|
-
return null;
|
|
18061
|
-
}
|
|
18062
|
-
|
|
18063
|
-
/**
|
|
18064
|
-
* Handles the Tab key press event to manage focus within the container.
|
|
18065
|
-
* @param {KeyboardEvent} e The keyboard event triggered by the user.
|
|
18066
|
-
* @returns {void}
|
|
18067
|
-
*/
|
|
18068
|
-
_handleTabKey(e) {
|
|
18069
|
-
// Update the focusable elements
|
|
18070
|
-
const focusables = this._getFocusableElements();
|
|
18071
|
-
|
|
18072
|
-
// If there are no focusable elements, exit
|
|
18073
|
-
if (!focusables.length) return;
|
|
18074
|
-
|
|
18075
|
-
// Set the tab direction based on the key pressed
|
|
18076
|
-
this.tabDirection = e.shiftKey ? "backward" : "forward";
|
|
18077
|
-
|
|
18078
|
-
// Get the active elements that are currently focused
|
|
18079
|
-
const actives = this._getActiveElements();
|
|
18080
|
-
|
|
18081
|
-
// If we're at either end of the focusable elements, wrap around to the other end
|
|
18082
|
-
let focusIndex = focusables.findIndex((el) => actives.includes(el));
|
|
18083
|
-
|
|
18084
|
-
// Fallback if we have no focused element
|
|
18085
|
-
if (focusIndex === -1) focusIndex = 0;
|
|
18086
|
-
|
|
18087
|
-
// Get the next focus index based on the current focus index, tab direction, and controlTabOrder setting
|
|
18088
|
-
// Is null if no new focus index is determined
|
|
18089
|
-
const newFocusIndex = this._getNextFocusIndex(
|
|
18090
|
-
focusIndex,
|
|
18091
|
-
focusables,
|
|
18092
|
-
actives,
|
|
18093
|
-
);
|
|
18094
|
-
|
|
18095
|
-
// If we have a new focus index, set focus to that element
|
|
18096
|
-
if (newFocusIndex !== null) {
|
|
18097
|
-
e.preventDefault();
|
|
18098
|
-
focusables[newFocusIndex].focus();
|
|
18099
|
-
}
|
|
18100
|
-
}
|
|
18101
|
-
|
|
18102
|
-
/**
|
|
18103
|
-
* Catches the keydown event
|
|
18104
|
-
* @param {KeyboardEvent} e The keyboard event triggered by user interaction.
|
|
18105
|
-
* @private
|
|
18106
|
-
*/
|
|
18107
|
-
_onKeydown = (e) => {
|
|
18108
|
-
// Handle tab
|
|
18109
|
-
if (e.key === "Tab") this._handleTabKey(e);
|
|
18110
|
-
};
|
|
18111
|
-
|
|
18112
|
-
/**
|
|
18113
|
-
* Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
|
|
18114
|
-
* Returns a unique, ordered array of elements that can receive focus.
|
|
18115
|
-
*
|
|
18116
|
-
* @returns {Array<HTMLElement>} An array of focusable elements within the container.
|
|
18117
|
-
* @private
|
|
18118
|
-
*/
|
|
18119
|
-
_getFocusableElements() {
|
|
18120
|
-
// Use the imported utility function to get focusable elements
|
|
18121
|
-
const elements = getFocusableElements(this.container);
|
|
18122
|
-
|
|
18123
|
-
// Return the elements found
|
|
18124
|
-
return elements;
|
|
18125
|
-
}
|
|
18126
|
-
|
|
18127
|
-
/**
|
|
18128
|
-
* Moves focus to the first focusable element within the container.
|
|
18129
|
-
* Useful for setting initial focus when activating the focus trap.
|
|
18130
|
-
*/
|
|
18131
|
-
focusFirstElement() {
|
|
18132
|
-
const focusables = this._getFocusableElements();
|
|
18133
|
-
if (focusables.length) focusables[0].focus();
|
|
18134
|
-
}
|
|
18135
|
-
|
|
18136
|
-
/**
|
|
18137
|
-
* Moves focus to the last focusable element within the container.
|
|
18138
|
-
* Useful for setting focus when deactivating or cycling focus in reverse.
|
|
18139
|
-
*/
|
|
18140
|
-
focusLastElement() {
|
|
18141
|
-
const focusables = this._getFocusableElements();
|
|
18142
|
-
if (focusables.length) focusables[focusables.length - 1].focus();
|
|
18143
|
-
}
|
|
18144
|
-
|
|
18145
|
-
/**
|
|
18146
|
-
* Removes event listeners and attributes added by the focus trap.
|
|
18147
|
-
* Call this method to clean up when the focus trap is no longer needed.
|
|
18148
|
-
*/
|
|
18149
|
-
disconnect() {
|
|
18150
|
-
if (this.container.hasAttribute("data-focus-trap-container")) {
|
|
18151
|
-
this.container.removeAttribute("data-focus-trap-container");
|
|
18152
|
-
}
|
|
18153
|
-
|
|
18154
|
-
this.container.removeEventListener("keydown", this._onKeydown);
|
|
18155
|
-
}
|
|
18156
|
-
}
|
|
18157
|
-
|
|
18158
18652
|
// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
|
|
18159
18653
|
// See LICENSE in the project root for license information.
|
|
18160
18654
|
|
|
@@ -18655,7 +19149,7 @@ class AuroDropdownBib extends LitElement {
|
|
|
18655
19149
|
classes[`shape-${this.shape}`] = true;
|
|
18656
19150
|
|
|
18657
19151
|
return html$1`
|
|
18658
|
-
<dialog class="${classMap(classes)}" part="bibContainer" role="${ifDefined(this.dialogRole)}" aria-labelledby="${ifDefined(this.dialogLabel ? 'dialogLabel' : undefined)}">
|
|
19152
|
+
<dialog tabindex="-1" class="${classMap(classes)}" part="bibContainer" role="${ifDefined(this.dialogRole)}" aria-labelledby="${ifDefined(this.dialogLabel ? 'dialogLabel' : undefined)}">
|
|
18659
19153
|
${this.dialogLabel ? html$1`<span id="dialogLabel" class="util_displayHiddenVisually">${this.dialogLabel}</span>` : ''}
|
|
18660
19154
|
<slot></slot>
|
|
18661
19155
|
<span id="srAnnouncement" class="util_displayHiddenVisually" aria-live="polite" role="status"></span>
|
|
@@ -18906,7 +19400,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
|
|
|
18906
19400
|
}
|
|
18907
19401
|
};
|
|
18908
19402
|
|
|
18909
|
-
var formkitVersion$1 = '
|
|
19403
|
+
var formkitVersion$1 = '202607221815';
|
|
18910
19404
|
|
|
18911
19405
|
let AuroElement$2 = class AuroElement extends LitElement {
|
|
18912
19406
|
static get properties() {
|
|
@@ -19035,7 +19529,6 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19035
19529
|
static get shadowRootOptions() {
|
|
19036
19530
|
return {
|
|
19037
19531
|
...AuroElement$2.shadowRootOptions,
|
|
19038
|
-
delegatesFocus: true,
|
|
19039
19532
|
};
|
|
19040
19533
|
}
|
|
19041
19534
|
|
|
@@ -19047,6 +19540,15 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19047
19540
|
this.matchWidth = false;
|
|
19048
19541
|
this.noHideOnThisFocusLoss = false;
|
|
19049
19542
|
|
|
19543
|
+
/**
|
|
19544
|
+
* When true, the dropdown skips its generic focus restoration on close.
|
|
19545
|
+
* Set by consumers (e.g. combobox) that manage their own focus routing
|
|
19546
|
+
* via setClearBtnFocus / setInputFocus / keyboard strategy.
|
|
19547
|
+
* Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
|
|
19548
|
+
* @private
|
|
19549
|
+
*/
|
|
19550
|
+
this.noFocusRestoreOnClose = false;
|
|
19551
|
+
|
|
19050
19552
|
this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
|
|
19051
19553
|
|
|
19052
19554
|
// Layout Config
|
|
@@ -19202,7 +19704,49 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19202
19704
|
focusables[0].focus();
|
|
19203
19705
|
}
|
|
19204
19706
|
} else {
|
|
19707
|
+
this.focusTrigger();
|
|
19708
|
+
}
|
|
19709
|
+
}
|
|
19710
|
+
|
|
19711
|
+
/**
|
|
19712
|
+
* Focus the trigger content. When the trigger wrapper itself is focusable
|
|
19713
|
+
* (has tabindex), focus it directly. Otherwise, focus the first focusable
|
|
19714
|
+
* element slotted into the trigger slot (e.g. the auro-input).
|
|
19715
|
+
* @private
|
|
19716
|
+
*/
|
|
19717
|
+
focusTrigger() {
|
|
19718
|
+
if (this.trigger.hasAttribute('tabindex')) {
|
|
19205
19719
|
this.trigger.focus();
|
|
19720
|
+
} else {
|
|
19721
|
+
// Slotted content isn't a DOM child of the trigger div, so
|
|
19722
|
+
// getFocusableElements can't find it. Query assigned nodes directly.
|
|
19723
|
+
const slot = this.trigger.querySelector('slot[name="trigger"]');
|
|
19724
|
+
if (slot) {
|
|
19725
|
+
const assigned = slot.assignedElements();
|
|
19726
|
+
for (const el of assigned) {
|
|
19727
|
+
if (el.hasAttribute('disabled')) {
|
|
19728
|
+
continue; // eslint-disable-line no-continue
|
|
19729
|
+
}
|
|
19730
|
+
// Try finding a focusable descendant first (handles non-focusable
|
|
19731
|
+
// wrappers like <div> containing a <button>). If none found, try
|
|
19732
|
+
// focusing the element directly (works for custom elements like
|
|
19733
|
+
// auro-input that have delegatesFocus or a custom focus() method).
|
|
19734
|
+
const descendants = getFocusableElements(el);
|
|
19735
|
+
if (descendants.length > 0) {
|
|
19736
|
+
descendants[0].focus();
|
|
19737
|
+
return;
|
|
19738
|
+
}
|
|
19739
|
+
el.focus();
|
|
19740
|
+
if (document.activeElement === el) {
|
|
19741
|
+
return;
|
|
19742
|
+
}
|
|
19743
|
+
}
|
|
19744
|
+
}
|
|
19745
|
+
// Fallback: try DOM children (non-slotted content)
|
|
19746
|
+
const focusables = getFocusableElements(this.trigger);
|
|
19747
|
+
if (focusables.length > 0) {
|
|
19748
|
+
focusables[0].focus();
|
|
19749
|
+
}
|
|
19206
19750
|
}
|
|
19207
19751
|
}
|
|
19208
19752
|
|
|
@@ -19578,10 +20122,17 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19578
20122
|
this.clearTriggerFocusEventBinding();
|
|
19579
20123
|
}
|
|
19580
20124
|
|
|
20125
|
+
// eslint-disable-next-line complexity
|
|
19581
20126
|
updated(changedProperties) {
|
|
19582
20127
|
super.updated(changedProperties);
|
|
19583
20128
|
this.floater.handleUpdate(changedProperties);
|
|
19584
20129
|
|
|
20130
|
+
// Close the dropdown if the disabled property is set to true
|
|
20131
|
+
if (changedProperties.has('disabled') && this.disabled && this.isPopoverVisible) {
|
|
20132
|
+
this.hide();
|
|
20133
|
+
this.isPopoverVisible = false;
|
|
20134
|
+
}
|
|
20135
|
+
|
|
19585
20136
|
// Note: `disabled` is not a breakpoint (it is not a screen size),
|
|
19586
20137
|
// so it looks like we never consume this - however, dropdownBib handles this in the setter as "undefined"
|
|
19587
20138
|
if (changedProperties.has('fullscreenBreakpoint')) {
|
|
@@ -19655,8 +20206,30 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19655
20206
|
}
|
|
19656
20207
|
|
|
19657
20208
|
const eventType = event.detail.eventType || "unknown";
|
|
19658
|
-
if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
|
|
19659
|
-
this.
|
|
20209
|
+
if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
|
|
20210
|
+
this.focusTrigger();
|
|
20211
|
+
}
|
|
20212
|
+
|
|
20213
|
+
|
|
20214
|
+
// On Tab-driven close (eventType "focusloss"), let focus advance naturally
|
|
20215
|
+
// — restoring to the trigger would trap the user on this dropdown, forcing
|
|
20216
|
+
// an extra Tab to move on. Escape and outside-click still restore.
|
|
20217
|
+
// When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
|
|
20218
|
+
// its own focus restoration — skip the generic trigger focus to avoid races.
|
|
20219
|
+
if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
|
|
20220
|
+
// wait til the bib gets fully closed and rendered
|
|
20221
|
+
setTimeout(() => {
|
|
20222
|
+
// Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
|
|
20223
|
+
// Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
|
|
20224
|
+
if (this.isPopoverVisible ||
|
|
20225
|
+
// eslint-disable-next-line no-extra-parens
|
|
20226
|
+
(!this.bibContent?.matches(':focus-within') &&
|
|
20227
|
+
document.activeElement !== document.body)) {
|
|
20228
|
+
return;
|
|
20229
|
+
}
|
|
20230
|
+
// Restore focus to the trigger.
|
|
20231
|
+
this.focusTrigger();
|
|
20232
|
+
});
|
|
19660
20233
|
}
|
|
19661
20234
|
}
|
|
19662
20235
|
|
|
@@ -19857,6 +20430,14 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19857
20430
|
};
|
|
19858
20431
|
this.addEventListener('keydown', this._bibTabHandler);
|
|
19859
20432
|
|
|
20433
|
+
// Suppress AuroFloatingUI's auto-hide-on-focus-loss while the
|
|
20434
|
+
// desktopModal trap owns focus management. Without this, the very
|
|
20435
|
+
// first focus move into the bib (from the RAF below) triggers
|
|
20436
|
+
// handleFocusLoss → hideBib, tearing down the trap before the
|
|
20437
|
+
// user can press Tab.
|
|
20438
|
+
this._priorNoHideOnFocusLoss = this.noHideOnThisFocusLoss;
|
|
20439
|
+
this.noHideOnThisFocusLoss = true;
|
|
20440
|
+
|
|
19860
20441
|
// Move initial focus into the bib content, matching FocusTrap behavior
|
|
19861
20442
|
requestAnimationFrame(() => {
|
|
19862
20443
|
const focusables = getFocusableElements(this.bibContent);
|
|
@@ -19865,15 +20446,16 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19865
20446
|
}
|
|
19866
20447
|
});
|
|
19867
20448
|
} else {
|
|
19868
|
-
// Normal desktop:
|
|
19869
|
-
//
|
|
19870
|
-
//
|
|
19871
|
-
//
|
|
19872
|
-
//
|
|
19873
|
-
|
|
20449
|
+
// Normal desktop (non-modal): move initial focus into the bib but
|
|
20450
|
+
// don't trap Tab. Tab should exit the bib and let the floater's
|
|
20451
|
+
// handleFocusLoss close it, matching native <select>/<details>
|
|
20452
|
+
// behavior. Deferred one frame because Floating UI positions the
|
|
20453
|
+
// popover asynchronously — a synchronous focus() would target
|
|
20454
|
+
// zero-dimension elements and be silently ignored.
|
|
19874
20455
|
requestAnimationFrame(() => {
|
|
19875
|
-
|
|
19876
|
-
|
|
20456
|
+
const focusables = getFocusableElements(this.bibContent);
|
|
20457
|
+
if (focusables.length) {
|
|
20458
|
+
focusables[0].focus();
|
|
19877
20459
|
}
|
|
19878
20460
|
});
|
|
19879
20461
|
}
|
|
@@ -20170,6 +20752,7 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
20170
20752
|
role="${ifDefined(this.triggerContentFocusable ? undefined : this.a11yRole)}"
|
|
20171
20753
|
aria-expanded="${ifDefined(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
|
|
20172
20754
|
aria-controls="${ifDefined(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
|
|
20755
|
+
aria-haspopup="${ifDefined(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
|
|
20173
20756
|
aria-labelledby="${ifDefined(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
|
|
20174
20757
|
aria-disabled="${ifDefined(this.disabled ? 'true' : undefined)}"
|
|
20175
20758
|
@focusin="${this.handleFocusin}"
|
|
@@ -20296,7 +20879,7 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
20296
20879
|
|
|
20297
20880
|
var shapeSizeCss = css`.shape-classic-xl,.shape-classic-lg,.shape-classic-md,.shape-classic-sm,.shape-classic-xs{min-height:56px;max-height:56px;border-style:solid;border-width:1px;border-radius:var(--ds-border-radius, 0.375rem)}.shape-classic-xl.simple,.shape-classic-lg.simple,.shape-classic-md.simple,.shape-classic-sm.simple,.shape-classic-xs.simple{border-width:0px;min-height:58px;max-height:58px;background-color:unset;box-shadow:none}.shape-classic-xl.thin,.shape-classic-lg.thin,.shape-classic-md.thin,.shape-classic-sm.thin,.shape-classic-xs.thin{border-width:1px;min-height:56px;max-height:56px;background-color:unset}.shape-classic-xl.parentBorder,.shape-classic-lg.parentBorder,.shape-classic-md.parentBorder,.shape-classic-sm.parentBorder,.shape-classic-xs.parentBorder{border:0;box-shadow:unset;min-height:54px;max-height:54px}.shape-snowflake-xl,.shape-snowflake-lg,.shape-snowflake-md,.shape-snowflake-sm,.shape-snowflake-xs{min-height:56px;max-height:56px;border-style:solid;border-width:2px;border-color:transparent;border-radius:30px}.shape-snowflake-xl.simple,.shape-snowflake-lg.simple,.shape-snowflake-md.simple,.shape-snowflake-sm.simple,.shape-snowflake-xs.simple{border-width:0px;min-height:60px;max-height:60px;background-color:unset;box-shadow:none}.shape-snowflake-xl.thin,.shape-snowflake-lg.thin,.shape-snowflake-md.thin,.shape-snowflake-sm.thin,.shape-snowflake-xs.thin{border-width:1px;min-height:58px;max-height:58px;background-color:unset}.shape-snowflake-xl.parentBorder,.shape-snowflake-lg.parentBorder,.shape-snowflake-md.parentBorder,.shape-snowflake-sm.parentBorder,.shape-snowflake-xs.parentBorder{border:0;box-shadow:unset;min-height:56px;max-height:56px}.shape-box-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-box-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-box-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-box-lg{min-height:52px;max-height:52px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-lg.simple{border-width:0px;min-height:56px;max-height:56px;background-color:unset;box-shadow:none}.shape-box-lg.thin{border-width:1px;min-height:54px;max-height:54px;background-color:unset}.shape-box-lg.parentBorder{border:0;box-shadow:unset;min-height:52px;max-height:52px}.shape-box-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-box-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-box-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}.shape-box-sm{min-height:32px;max-height:32px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-sm.simple{border-width:0px;min-height:36px;max-height:36px;background-color:unset;box-shadow:none}.shape-box-sm.thin{border-width:1px;min-height:34px;max-height:34px;background-color:unset}.shape-box-sm.parentBorder{border:0;box-shadow:unset;min-height:32px;max-height:32px}.shape-box-xs{min-height:20px;max-height:20px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-xs.simple{border-width:0px;min-height:24px;max-height:24px;background-color:unset;box-shadow:none}.shape-box-xs.thin{border-width:1px;min-height:22px;max-height:22px;background-color:unset}.shape-box-xs.parentBorder{border:0;box-shadow:unset;min-height:20px;max-height:20px}.shape-rounded-lg{min-height:56px;max-height:56px;border-style:solid;border-width:2px;border-color:transparent;border-radius:6px}.shape-rounded-lg.simple{border-width:0px;min-height:56px;max-height:56px;background-color:unset;box-shadow:none}.shape-rounded-lg.thin{border-width:1px;min-height:54px;max-height:54px;background-color:unset}.shape-rounded-lg.parentBorder{border:0;box-shadow:unset;min-height:52px;max-height:52px}.shape-pill-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px}.shape-pill-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-pill-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-pill-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-pill-left-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px 0 0 36px}.shape-pill-left-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-pill-left-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-pill-left-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-pill-right-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent;border-radius:0 36px 36px 0}.shape-pill-right-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-pill-right-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-pill-right-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-pill-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px}.shape-pill-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-pill-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-pill-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}.shape-pill-left-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px 0 0 36px}.shape-pill-left-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-pill-left-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-pill-left-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}.shape-pill-right-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent;border-radius:0 36px 36px 0}.shape-pill-right-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-pill-right-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-pill-right-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}`;
|
|
20298
20881
|
|
|
20299
|
-
var styleCss$1 = css`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );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-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, 300);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, 300);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, 0.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, 0.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, 0.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, 0.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, 0.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, 0.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(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:host{display:block}.wrapper:has(:enabled){cursor:text}.wrapper:has(:enabled) label{cursor:text}.helpTextClasses{cursor:default}input{overflow:clip !important;width:100%;padding:0;border:0;background:unset;outline:none;overflow-clip-margin:0 !important;text-overflow:ellipsis}input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.displayValue{display:none}.displayValue.hasContent:is(.withValue):not(.hasFocus){display:flex;align-items:center}.accents:not(.util_displayHidden){display:flex;flex-direction:row;align-items:center;justify-content:center;gap:8px}.wrapper:not(:focus-within):not(:hover) .notificationBtn.passwordBtn,.wrapper:not(:focus-within):not(:hover) .notification.clear{display:none}.notification{display:flex;align-items:center;justify-content:center}`;
|
|
20882
|
+
var styleCss$1 = css`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );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-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, 300);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, 300);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, 0.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, 0.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, 0.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, 0.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, 0.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, 0.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(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:host{display:block}.wrapper:has(:enabled){cursor:text}.wrapper:has(:enabled) label{cursor:text}.helpTextClasses{cursor:default}input{overflow:clip !important;width:100%;padding:0;border:0;background:unset;outline:none;overflow-clip-margin:0 !important;text-overflow:ellipsis}input[type=number]{appearance:textfield}input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.displayValue{display:none}.displayValue.hasContent:is(.withValue):not(.hasFocus){display:flex;align-items:center}.accents:not(.util_displayHidden){display:flex;flex-direction:row;align-items:center;justify-content:center;gap:8px}.wrapper:not(:focus-within):not(:hover) .notificationBtn.passwordBtn,.wrapper:not(:focus-within):not(:hover) .notification.clear{display:none}.notification{display:flex;align-items:center;justify-content:center}`;
|
|
20300
20883
|
|
|
20301
20884
|
var styleDefaultCss = css`.layoutDefault .typeIcon,:host(:not([layout])) .typeIcon{display:flex;flex-direction:row;align-items:center}.layoutDefault .typeIcon [auro-icon],:host(:not([layout])) .typeIcon [auro-icon]{--ds-auro-icon-size: var(--ds-size-300, 1.5rem);height:var(--ds-size-300, 1.5rem);margin-right:var(--ds-size-100, 0.5rem)}.layoutDefault .notificationIcons,:host(:not([layout])) .notificationIcons{display:flex;flex-direction:row;padding-right:var(--ds-size-100, 0.5rem)}:host([class=layoutDefault][bordered]) .typeIcon,:host(:not([layout])[bordered]) .typeIcon{padding-left:var(--ds-size-100, 0.5rem)}:host([class=layoutDefault][bordered]) .notificationIcons,:host(:not([layout])[bordered]) .notificationIcons{align-items:center}:host([class=layoutDefault][bordered]) .notification:not(:first-of-type),:host(:not([layout])[bordered]) .notification:not(:first-of-type){margin-left:var(--ds-size-100, 0.5rem)}:host([class=layoutDefault][bordered]) .alertNotification,:host(:not([layout])[bordered]) .alertNotification{width:calc(var(--ds-size-300, 1.5rem) + var(--ds-size-25, 0.125rem));height:calc(var(--ds-size-300, 1.5rem) + var(--ds-size-25, 0.125rem))}:host([class=layoutDefault][bordered]) .passwordBtn,:host(:not([layout])[bordered]) .passwordBtn{width:calc(var(--ds-size-300, 1.5rem));height:calc(var(--ds-size-300, 1.5rem))}:host([class=layoutDefault][bordered]) .notificationBtn,:host(:not([layout])[bordered]) .notificationBtn{display:block;width:var(--ds-size-300, 1.5rem);height:var(--ds-size-300, 1.5rem);padding:0;border:0;background:unset;cursor:pointer}:host([class=layoutDefault][bordered]) .notificationBtn [auro-icon],:host(:not([layout])[bordered]) .notificationBtn [auro-icon]{display:block;height:var(--ds-size-300, 1.5rem);--ds-auro-icon-size: var(--ds-size-300, 1.5rem)}:host([class=layoutDefault][bordered]) .notificationBtn [auro-icon][hidden],:host(:not([layout])[bordered]) .notificationBtn [auro-icon][hidden]{display:none}:host([class=layoutDefault]:not([bordered])) .typeIcon,:host([class=layoutDefault]:not([bordered])) .notificationIcons,:host(:not([layout]):not([bordered])) .typeIcon,:host(:not([layout]):not([bordered])) .notificationIcons{align-items:flex-end;padding-bottom:var(--ds-size-50, 0.25rem)}:host([class=layoutDefault]:not([bordered])) .clearBtn,:host(:not([layout]):not([bordered])) .clearBtn{transition:all .3s cubic-bezier(0.215, 0.61, 0.355, 1);overflow:hidden;width:0;opacity:0}.layoutDefault .wrapper:hover .clearBtn,.layoutDefault .wrapper:focus-within .clearBtn,:host(:not([layout])) .wrapper:hover .clearBtn,:host(:not([layout])) .wrapper:focus-within .clearBtn{width:calc(var(--ds-size-200, 1rem) + var(--ds-size-25, 0.125rem));height:calc(var(--ds-size-200, 1rem) + var(--ds-size-25, 0.125rem));opacity:1}:host([class=layoutDefault]:focus-within[type=password]) .notificationIcons[hasValue] .alertNotification,:host(:not([layout]):focus-within[type=password]) .notificationIcons[hasValue] .alertNotification{overflow:hidden;width:0;height:0;padding:0;margin:0;visibility:hidden}.layoutDefault input,:host(:not([layout])) input{border:unset}.layoutDefault .wrapper,:host(:not([layout])) .wrapper{position:relative;overflow:hidden;border-style:solid}:host([class=layoutDefault]:not([bordered],[borderless])) .wrapper,:host(:not([layout]):not([bordered],[borderless])) .wrapper{border-width:1px 0}:host([class=layoutDefault][bordered]) .wrapper,:host(:not([layout])[bordered]) .wrapper{border-width:1px;border-radius:var(--ds-border-radius, 0.375rem)}:host([class=layoutDefault]:not([borderless])) .wrapper:focus-within:before,:host(:not([layout]):not([borderless])) .wrapper:focus-within:before{position:absolute;display:block;border-bottom-width:1px;border-bottom-style:solid;content:"";inset:0;pointer-events:none}:host([class=layoutDefault][validity]:not([validity=valid])) .wrapper:before,:host(:not([layout])[validity]:not([validity=valid])) .wrapper:before{border-bottom:0}:focus:not(:focus-visible){outline:3px solid transparent}.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock,:host{display:block}.util_displayFlex{display:flex}.util_displayHidden,:host([hidden]:not(:focus):not(:active)){display:none}.util_displayHiddenVisually,:host([hiddenVisually]:not(:focus):not(:active)){position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{text-align:left}.layoutDefault :host,:host(:not([layout])) :host{position:relative;display:block}.layoutDefault .wrapper,:host(:not([layout])) .wrapper{display:flex;flex-direction:row}.layoutDefault .main,:host(:not([layout])) .main{display:flex;flex-direction:row;position:relative;flex:1}`;
|
|
20302
20885
|
|
|
@@ -24574,8 +25157,21 @@ class AuroFormValidation {
|
|
|
24574
25157
|
return;
|
|
24575
25158
|
}
|
|
24576
25159
|
|
|
24577
|
-
// Validate that the date passed was the correct format and is a valid date
|
|
25160
|
+
// Validate that the date passed was the correct format and is a valid date.
|
|
25161
|
+
// For partial date formats, valueObject is never populated; validate them directly.
|
|
24578
25162
|
if (elem.value && !elem.valueObject) {
|
|
25163
|
+
const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
|
|
25164
|
+
|
|
25165
|
+
if (isPartialDateFormat) {
|
|
25166
|
+
if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
|
|
25167
|
+
elem.validity = 'patternMismatch';
|
|
25168
|
+
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
25169
|
+
}
|
|
25170
|
+
// Partial date format — validate directly and skip max/min checks since valueObject is undefined.
|
|
25171
|
+
return;
|
|
25172
|
+
}
|
|
25173
|
+
|
|
25174
|
+
// Full date format with no valueObject means the value is not a valid calendar date.
|
|
24579
25175
|
elem.validity = 'patternMismatch';
|
|
24580
25176
|
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
24581
25177
|
return;
|
|
@@ -24672,15 +25268,17 @@ class AuroFormValidation {
|
|
|
24672
25268
|
);
|
|
24673
25269
|
}
|
|
24674
25270
|
|
|
24675
|
-
|
|
24676
|
-
|
|
24677
|
-
|
|
25271
|
+
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
25272
|
+
|
|
25273
|
+
// If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
|
|
25274
|
+
// Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
|
|
25275
|
+
// field (datepicker is the intended consumer — start/end are independently required).
|
|
25276
|
+
if (this.auroInputElements?.length === 2 && !isCombobox) {
|
|
25277
|
+
if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
|
|
24678
25278
|
hasValue = false;
|
|
24679
25279
|
}
|
|
24680
25280
|
}
|
|
24681
25281
|
|
|
24682
|
-
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
24683
|
-
|
|
24684
25282
|
if (isCombobox) {
|
|
24685
25283
|
|
|
24686
25284
|
if (!elem.persistInput || elem.behavior === "filter") {
|
|
@@ -24779,7 +25377,7 @@ class AuroFormValidation {
|
|
|
24779
25377
|
} else if (this.runtimeUtils.elementMatch(elem, 'auro-input') && elem.errorMessage === '') {
|
|
24780
25378
|
const input = elem.renderRoot.querySelector('input');
|
|
24781
25379
|
|
|
24782
|
-
if (input.validationMessage.length > 0) {
|
|
25380
|
+
if (input && input.validationMessage.length > 0) {
|
|
24783
25381
|
elem.errorMessage = input.validationMessage;
|
|
24784
25382
|
}
|
|
24785
25383
|
} else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox') && elem.errorMessage === '') {
|
|
@@ -30361,8 +30959,6 @@ function cleanEscapedString(input) {
|
|
|
30361
30959
|
return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'");
|
|
30362
30960
|
}
|
|
30363
30961
|
|
|
30364
|
-
/* eslint-disable max-lines */
|
|
30365
|
-
|
|
30366
30962
|
class AuroInputUtilities {
|
|
30367
30963
|
|
|
30368
30964
|
/**
|
|
@@ -30405,7 +31001,7 @@ class AuroInputUtilities {
|
|
|
30405
31001
|
/**
|
|
30406
31002
|
* Converts an IMask-style date mask to a date-fns compatible format string.
|
|
30407
31003
|
* @param {string} mask - IMask date mask (e.g. "MM/DD/YYYY").
|
|
30408
|
-
* @returns {string} date-fns format string (e.g. "MM/dd/yyyy").
|
|
31004
|
+
* @returns {string} A date-fns format string (e.g. "MM/dd/yyyy").
|
|
30409
31005
|
*/
|
|
30410
31006
|
toDateFnsMask(mask) {
|
|
30411
31007
|
return mask
|
|
@@ -30505,10 +31101,11 @@ class AuroInputUtilities {
|
|
|
30505
31101
|
const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
|
|
30506
31102
|
|
|
30507
31103
|
if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
|
|
30508
|
-
const
|
|
31104
|
+
const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
|
|
31105
|
+
const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
|
|
30509
31106
|
return {
|
|
30510
31107
|
mask: IMask.MaskedRange,
|
|
30511
|
-
from:
|
|
31108
|
+
from: fromValue,
|
|
30512
31109
|
to: maxValue,
|
|
30513
31110
|
lazy: true,
|
|
30514
31111
|
placeholderChar: '',
|
|
@@ -30516,7 +31113,8 @@ class AuroInputUtilities {
|
|
|
30516
31113
|
return value.toString().padStart(dateFormat.length, '0');
|
|
30517
31114
|
},
|
|
30518
31115
|
parse(str) {
|
|
30519
|
-
|
|
31116
|
+
const num = parseInt(str, 10);
|
|
31117
|
+
return isNaN(num) ? null : num;
|
|
30520
31118
|
}
|
|
30521
31119
|
};
|
|
30522
31120
|
}
|
|
@@ -30580,6 +31178,49 @@ class AuroInputUtilities {
|
|
|
30580
31178
|
return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
|
|
30581
31179
|
}
|
|
30582
31180
|
|
|
31181
|
+
/**
|
|
31182
|
+
* Validates a value against a partial date format (one that lacks yy/mm/dd all three).
|
|
31183
|
+
* Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
|
|
31184
|
+
* a date-fns parse + round-trip to confirm both validity and exact formatting.
|
|
31185
|
+
* @param {string} value - The user-facing display value.
|
|
31186
|
+
* @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
|
|
31187
|
+
* @returns {boolean}
|
|
31188
|
+
*/
|
|
31189
|
+
isValidPartialDate(value, format$1) {
|
|
31190
|
+
if (!value || !format$1) {
|
|
31191
|
+
return false;
|
|
31192
|
+
}
|
|
31193
|
+
const normalizedFormat = format$1.toLowerCase();
|
|
31194
|
+
|
|
31195
|
+
if (normalizedFormat === 'dd') {
|
|
31196
|
+
const num = Number(value);
|
|
31197
|
+
return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
|
|
31198
|
+
}
|
|
31199
|
+
if (normalizedFormat === 'yy') {
|
|
31200
|
+
const num = Number(value);
|
|
31201
|
+
return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
|
|
31202
|
+
}
|
|
31203
|
+
if (normalizedFormat === 'yyyy') {
|
|
31204
|
+
const num = Number(value);
|
|
31205
|
+
return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
|
|
31206
|
+
}
|
|
31207
|
+
|
|
31208
|
+
const dateFnsMask = this.toDateFnsMask(normalizedFormat);
|
|
31209
|
+
// Use the 1st of the current month as the reference so that formats
|
|
31210
|
+
// omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
|
|
31211
|
+
const referenceDate = new Date();
|
|
31212
|
+
referenceDate.setDate(1);
|
|
31213
|
+
const parsed = parse(value, dateFnsMask, referenceDate);
|
|
31214
|
+
if (!isValid(parsed) || format(parsed, dateFnsMask) !== value) {
|
|
31215
|
+
return false;
|
|
31216
|
+
}
|
|
31217
|
+
if (normalizedFormat.includes('yyyy')) {
|
|
31218
|
+
const year = parsed.getFullYear();
|
|
31219
|
+
return year >= 1900 && year <= 2100;
|
|
31220
|
+
}
|
|
31221
|
+
return true;
|
|
31222
|
+
}
|
|
31223
|
+
|
|
30583
31224
|
/**
|
|
30584
31225
|
* Converts a display string to its model value.
|
|
30585
31226
|
* For full date formats, converts the display string to an ISO date string.
|
|
@@ -30616,6 +31257,13 @@ class AuroInputUtilities {
|
|
|
30616
31257
|
* @returns {string | undefined}
|
|
30617
31258
|
*/
|
|
30618
31259
|
toFormattedValue(valueObject, format) {
|
|
31260
|
+
// Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
|
|
31261
|
+
// `format` argument has to fail gracefully rather than throw on
|
|
31262
|
+
// `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
|
|
31263
|
+
// as "no format → no display value".
|
|
31264
|
+
if (!format) {
|
|
31265
|
+
return undefined;
|
|
31266
|
+
}
|
|
30619
31267
|
const normalizedFormat = format.toLowerCase();
|
|
30620
31268
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
30621
31269
|
|
|
@@ -30754,9 +31402,10 @@ class DomHandler {
|
|
|
30754
31402
|
class BaseInput extends AuroElement$1 {
|
|
30755
31403
|
|
|
30756
31404
|
// Delegate focus to the native <input> inside the shadow root so that
|
|
30757
|
-
//
|
|
30758
|
-
//
|
|
30759
|
-
//
|
|
31405
|
+
// clicking anywhere on the input wrapper focuses the native input, and
|
|
31406
|
+
// programmatic .focus() calls on elements in the shadow DOM work correctly.
|
|
31407
|
+
// The initial-load focus theft was caused by the static `autofocus`
|
|
31408
|
+
// attribute on the bib input (now conditional), not by delegatesFocus.
|
|
30760
31409
|
static get shadowRootOptions() {
|
|
30761
31410
|
return {
|
|
30762
31411
|
...AuroElement$1.shadowRootOptions,
|
|
@@ -30767,79 +31416,19 @@ class BaseInput extends AuroElement$1 {
|
|
|
30767
31416
|
constructor() {
|
|
30768
31417
|
super();
|
|
30769
31418
|
|
|
30770
|
-
|
|
30771
|
-
|
|
30772
|
-
|
|
30773
|
-
|
|
30774
|
-
|
|
30775
|
-
|
|
30776
|
-
|
|
30777
|
-
|
|
30778
|
-
|
|
30779
|
-
|
|
30780
|
-
this.required = false;
|
|
30781
|
-
this.onDark = false;
|
|
30782
|
-
this.setCustomValidityForType = undefined;
|
|
30783
|
-
this.size = 'lg';
|
|
30784
|
-
this.shape = 'classic';
|
|
30785
|
-
this.value = undefined;
|
|
30786
|
-
this._valueObject = undefined;
|
|
30787
|
-
|
|
30788
|
-
this._initializePrivateDefaults();
|
|
30789
|
-
}
|
|
30790
|
-
|
|
30791
|
-
/**
|
|
30792
|
-
* Internal Defaults.
|
|
30793
|
-
* @private
|
|
30794
|
-
* @returns {void}
|
|
30795
|
-
*/
|
|
30796
|
-
_initializePrivateDefaults() {
|
|
31419
|
+
// Single-source initialization. Alphabetized so duplicate or stale
|
|
31420
|
+
// defaults are immediately obvious on a diff. Every field is assigned
|
|
31421
|
+
// exactly once here (previously the constructor + the old
|
|
31422
|
+
// `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
|
|
31423
|
+
// fields and double-allocated `util` and `validation`, discarding the
|
|
31424
|
+
// first instance). `validation` is now allocated exactly once; `util`
|
|
31425
|
+
// is seeded here with an en-US default and then rebuilt in
|
|
31426
|
+
// `connectedCallback` once the consumer-resolved locale is available,
|
|
31427
|
+
// so a parent (datepicker/combobox) calling `validate()` synchronously
|
|
31428
|
+
// during its own update cycle sees a populated util instance.
|
|
30797
31429
|
this.activeLabel = false;
|
|
30798
|
-
this.appearance = "default";
|
|
30799
|
-
this.icon = false;
|
|
30800
|
-
this.disabled = false;
|
|
30801
|
-
this.dvInputOnly = false;
|
|
30802
|
-
this.hideLabelVisually = false;
|
|
30803
|
-
this.max = undefined;
|
|
30804
|
-
this.maxLength = undefined;
|
|
30805
|
-
this.min = undefined;
|
|
30806
|
-
this.minLength = undefined;
|
|
30807
|
-
this.noValidate = false;
|
|
30808
|
-
this.onDark = false;
|
|
30809
|
-
this.required = false;
|
|
30810
|
-
this.setCustomValidityForType = undefined;
|
|
30811
|
-
|
|
30812
|
-
// Used for storing raw values returned from input mask.
|
|
30813
|
-
this._rawMaskValue = undefined;
|
|
30814
|
-
|
|
30815
|
-
/**
|
|
30816
|
-
* @private
|
|
30817
|
-
*/
|
|
30818
|
-
this.layout = 'classic';
|
|
30819
|
-
|
|
30820
|
-
/**
|
|
30821
|
-
* @private
|
|
30822
|
-
*/
|
|
30823
|
-
this.shape = 'classic';
|
|
30824
|
-
|
|
30825
|
-
/**
|
|
30826
|
-
* @private
|
|
30827
|
-
*/
|
|
30828
|
-
this.size = 'lg';
|
|
30829
|
-
|
|
30830
|
-
this.touched = false;
|
|
30831
|
-
this.util = new AuroInputUtilities({
|
|
30832
|
-
locale: "en-US",
|
|
30833
|
-
format: this.format
|
|
30834
|
-
});
|
|
30835
|
-
this.validation = new AuroFormValidation();
|
|
30836
|
-
this.inputIconName = undefined;
|
|
30837
|
-
this.showPassword = false;
|
|
30838
|
-
this.validationCCLength = undefined;
|
|
30839
|
-
this.hasValue = false;
|
|
30840
|
-
this.label = 'Input label is undefined';
|
|
30841
|
-
|
|
30842
31430
|
|
|
31431
|
+
/** @private */
|
|
30843
31432
|
this.allowedInputTypes = [
|
|
30844
31433
|
"text",
|
|
30845
31434
|
"number",
|
|
@@ -30848,7 +31437,9 @@ class BaseInput extends AuroElement$1 {
|
|
|
30848
31437
|
"credit-card",
|
|
30849
31438
|
"tel"
|
|
30850
31439
|
];
|
|
30851
|
-
this.
|
|
31440
|
+
this.appearance = "default";
|
|
31441
|
+
|
|
31442
|
+
/** @private */
|
|
30852
31443
|
this.dateFormatMap = {
|
|
30853
31444
|
'mm/dd/yyyy': 'dateMMDDYYYY',
|
|
30854
31445
|
'dd/mm/yyyy': 'dateDDMMYYYY',
|
|
@@ -30865,27 +31456,64 @@ class BaseInput extends AuroElement$1 {
|
|
|
30865
31456
|
'dd/mm': 'dateDDMM',
|
|
30866
31457
|
'mm/dd': 'dateMMDD'
|
|
30867
31458
|
};
|
|
31459
|
+
this.disabled = false;
|
|
31460
|
+
|
|
31461
|
+
/** @private */
|
|
30868
31462
|
this.domHandler = new DomHandler();
|
|
30869
31463
|
this.dvInputOnly = false;
|
|
30870
31464
|
this.hasValue = false;
|
|
31465
|
+
this.hideLabelVisually = false;
|
|
31466
|
+
this.icon = false;
|
|
31467
|
+
|
|
31468
|
+
/** @private */
|
|
30871
31469
|
this.inputIconName = undefined;
|
|
31470
|
+
|
|
31471
|
+
/** @private */
|
|
30872
31472
|
this.label = 'Input label is undefined';
|
|
31473
|
+
this.layout = 'classic';
|
|
31474
|
+
this.locale = 'en-US';
|
|
31475
|
+
this._format = undefined;
|
|
31476
|
+
|
|
31477
|
+
/** @private */
|
|
31478
|
+
this._userSetFormat = false;
|
|
31479
|
+
this.max = undefined;
|
|
31480
|
+
this.maxLength = undefined;
|
|
31481
|
+
this.min = undefined;
|
|
31482
|
+
this.minLength = undefined;
|
|
30873
31483
|
this.noValidate = false;
|
|
30874
|
-
this.
|
|
31484
|
+
this.onDark = false;
|
|
31485
|
+
this.required = false;
|
|
31486
|
+
this.setCustomValidityForType = undefined;
|
|
31487
|
+
// Credit Card is intentionally excluded — its mask manages the cursor
|
|
31488
|
+
// itself, and listing it here caused cursor placement issues in Safari.
|
|
31489
|
+
/** @private */
|
|
30875
31490
|
this.setSelectionInputTypes = [
|
|
30876
31491
|
"text",
|
|
30877
31492
|
"password",
|
|
30878
31493
|
"email"
|
|
30879
|
-
];
|
|
31494
|
+
];
|
|
31495
|
+
this.shape = 'classic';
|
|
31496
|
+
|
|
31497
|
+
/** @private */
|
|
30880
31498
|
this.showPassword = false;
|
|
31499
|
+
this.size = 'lg';
|
|
30881
31500
|
this.touched = false;
|
|
31501
|
+
|
|
31502
|
+
/** @private */
|
|
30882
31503
|
this.uniqueId = new UniqueId().create();
|
|
31504
|
+
|
|
31505
|
+
/** @private */
|
|
30883
31506
|
this.util = new AuroInputUtilities({
|
|
30884
31507
|
locale: this.locale,
|
|
30885
31508
|
format: this.format
|
|
30886
31509
|
});
|
|
31510
|
+
|
|
31511
|
+
/** @private */
|
|
30887
31512
|
this.validation = new AuroFormValidation();
|
|
31513
|
+
|
|
31514
|
+
/** @private */
|
|
30888
31515
|
this.validationCCLength = undefined;
|
|
31516
|
+
this.value = undefined;
|
|
30889
31517
|
}
|
|
30890
31518
|
|
|
30891
31519
|
// function to define props used within the scope of this component
|
|
@@ -31011,7 +31639,8 @@ class BaseInput extends AuroElement$1 {
|
|
|
31011
31639
|
*/
|
|
31012
31640
|
format: {
|
|
31013
31641
|
type: String,
|
|
31014
|
-
reflect: true
|
|
31642
|
+
reflect: true,
|
|
31643
|
+
noAccessor: true
|
|
31015
31644
|
},
|
|
31016
31645
|
|
|
31017
31646
|
/**
|
|
@@ -31215,6 +31844,13 @@ class BaseInput extends AuroElement$1 {
|
|
|
31215
31844
|
type: String
|
|
31216
31845
|
},
|
|
31217
31846
|
|
|
31847
|
+
/**
|
|
31848
|
+
* Custom help text message to display when validity = `patternMismatch`.
|
|
31849
|
+
*/
|
|
31850
|
+
setCustomValidityPatternMismatch: {
|
|
31851
|
+
type: String
|
|
31852
|
+
},
|
|
31853
|
+
|
|
31218
31854
|
/**
|
|
31219
31855
|
* Custom help text message to display when validity = `rangeOverflow`.
|
|
31220
31856
|
*/
|
|
@@ -31285,7 +31921,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31285
31921
|
|
|
31286
31922
|
/**
|
|
31287
31923
|
* Populates the `type` attribute on the input.
|
|
31288
|
-
* @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
|
|
31924
|
+
* @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
|
|
31289
31925
|
* @default 'text'
|
|
31290
31926
|
*/
|
|
31291
31927
|
type: {
|
|
@@ -31310,7 +31946,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31310
31946
|
|
|
31311
31947
|
/**
|
|
31312
31948
|
* Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
|
|
31313
|
-
*
|
|
31949
|
+
* For `date` type inputs using a full date format (year/month/day), the `value` should be ISO (YYYY-MM-DD). Partial date formats use the display format.
|
|
31314
31950
|
*/
|
|
31315
31951
|
value: {
|
|
31316
31952
|
type: String
|
|
@@ -31323,7 +31959,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31323
31959
|
* @returns {Date|undefined}
|
|
31324
31960
|
*/
|
|
31325
31961
|
get valueObject() {
|
|
31326
|
-
return this.
|
|
31962
|
+
return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
|
|
31327
31963
|
}
|
|
31328
31964
|
|
|
31329
31965
|
/**
|
|
@@ -31331,7 +31967,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31331
31967
|
* @returns {Date|undefined}
|
|
31332
31968
|
*/
|
|
31333
31969
|
get minObject() {
|
|
31334
|
-
return this.
|
|
31970
|
+
return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
|
|
31335
31971
|
}
|
|
31336
31972
|
|
|
31337
31973
|
/**
|
|
@@ -31339,33 +31975,63 @@ class BaseInput extends AuroElement$1 {
|
|
|
31339
31975
|
* @returns {Date|undefined}
|
|
31340
31976
|
*/
|
|
31341
31977
|
get maxObject() {
|
|
31342
|
-
return this.
|
|
31978
|
+
return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
|
|
31979
|
+
}
|
|
31980
|
+
|
|
31981
|
+
get format() {
|
|
31982
|
+
return this._format;
|
|
31343
31983
|
}
|
|
31344
31984
|
|
|
31345
31985
|
/**
|
|
31346
|
-
*
|
|
31347
|
-
*
|
|
31348
|
-
*
|
|
31349
|
-
* @param {Date|undefined} propertyValue - Value to assign.
|
|
31350
|
-
* @returns {void}
|
|
31986
|
+
* Overrides LitElement's generated accessor so we can track whether the
|
|
31987
|
+
* consumer explicitly set `format`. Locale-derived updates use
|
|
31988
|
+
* `_setFormatFromLocale` instead, which skips this flag.
|
|
31351
31989
|
*/
|
|
31352
|
-
|
|
31353
|
-
const
|
|
31354
|
-
|
|
31355
|
-
|
|
31356
|
-
|
|
31357
|
-
|
|
31358
|
-
}
|
|
31990
|
+
set format(value) {
|
|
31991
|
+
const oldValue = this._format;
|
|
31992
|
+
this._format = value ? value.toLowerCase() : value;
|
|
31993
|
+
this._userSetFormat = Boolean(value);
|
|
31994
|
+
this.requestUpdate('format', oldValue);
|
|
31995
|
+
}
|
|
31359
31996
|
|
|
31360
|
-
|
|
31361
|
-
|
|
31997
|
+
/**
|
|
31998
|
+
* Sets format without marking it as user-set. Used by locale auto-derive
|
|
31999
|
+
* so that a subsequent locale change can still update the format.
|
|
32000
|
+
* @private
|
|
32001
|
+
* @param {string} value
|
|
32002
|
+
*/
|
|
32003
|
+
_setFormatFromLocale(value) {
|
|
32004
|
+
const oldValue = this._format;
|
|
32005
|
+
this._format = value ? value.toLowerCase() : value;
|
|
32006
|
+
this.requestUpdate('format', oldValue);
|
|
31362
32007
|
}
|
|
31363
32008
|
|
|
31364
32009
|
connectedCallback() {
|
|
31365
32010
|
super.connectedCallback();
|
|
31366
32011
|
|
|
32012
|
+
// Mark for query selectors when registered under a versioned tag (e.g. inside
|
|
32013
|
+
// a datepicker/combobox). Must run before parent components call validate() on
|
|
32014
|
+
// their inner inputs — the validation framework matches via tag-or-attribute,
|
|
32015
|
+
// and parents trigger validation during their own updated() cycle, which can
|
|
32016
|
+
// precede this input's firstUpdated().
|
|
32017
|
+
if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
|
|
32018
|
+
this.setAttribute('auro-input', '');
|
|
32019
|
+
}
|
|
32020
|
+
|
|
31367
32021
|
this.locale = this.domHandler.getLocale(this);
|
|
31368
32022
|
notifyOnLangChange(this);
|
|
32023
|
+
|
|
32024
|
+
// Pre-compute lengthForType and date-object fields so a parent (e.g. datepicker)
|
|
32025
|
+
// calling our validate() synchronously during its own updated() cycle sees
|
|
32026
|
+
// populated values. Without this, range validation silently no-ops because
|
|
32027
|
+
// `max.length === lengthForType` fails when lengthForType is still undefined.
|
|
32028
|
+
// Rebuild util here (constructor seeded with en-US default) so configureDataForType's
|
|
32029
|
+
// locale-derived format lookup uses the actual locale just resolved above.
|
|
32030
|
+
this.util = new AuroInputUtilities({
|
|
32031
|
+
locale: this.locale,
|
|
32032
|
+
format: this.format
|
|
32033
|
+
});
|
|
32034
|
+
this.configureDataForType();
|
|
31369
32035
|
}
|
|
31370
32036
|
|
|
31371
32037
|
disconnectedCallback() {
|
|
@@ -31385,10 +32051,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31385
32051
|
this.wrapperElement.addEventListener('click', this.handleClick);
|
|
31386
32052
|
}
|
|
31387
32053
|
|
|
31388
|
-
// add attribute for query selectors when auro-input is registered under a custom name
|
|
31389
|
-
if (this.tagName.toLowerCase() !== 'auro-input') {
|
|
31390
|
-
this.setAttribute('auro-input', true);
|
|
31391
|
-
}
|
|
31392
32054
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
31393
32055
|
|
|
31394
32056
|
// use validity message override if declared when initializing the component
|
|
@@ -31399,7 +32061,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31399
32061
|
this.setCustomHelpTextMessage();
|
|
31400
32062
|
this.configureAutoFormatting();
|
|
31401
32063
|
this.configureDataForType();
|
|
31402
|
-
this.syncDateValues();
|
|
31403
32064
|
}
|
|
31404
32065
|
|
|
31405
32066
|
/**
|
|
@@ -31435,6 +32096,12 @@ class BaseInput extends AuroElement$1 {
|
|
|
31435
32096
|
return;
|
|
31436
32097
|
}
|
|
31437
32098
|
|
|
32099
|
+
// While configureAutoFormatting is running, imask's internal updateControl
|
|
32100
|
+
// writes el.value to align display with the masked value. A synthetic input
|
|
32101
|
+
// event from that write would re-enter handleInput → processCreditCard mid-setup
|
|
32102
|
+
// and clobber a Lit value that was just pushed by the parent combobox.
|
|
32103
|
+
if (component._configuringMask) return;
|
|
32104
|
+
|
|
31438
32105
|
// If all guard clauses are passed, dispatch the event
|
|
31439
32106
|
const inputEvent = new InputEvent('input', {
|
|
31440
32107
|
bubbles: true,
|
|
@@ -31451,7 +32118,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31451
32118
|
|
|
31452
32119
|
/**
|
|
31453
32120
|
* @private
|
|
31454
|
-
* @deprecated https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296
|
|
32121
|
+
* @deprecated See https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296.
|
|
31455
32122
|
* @returns {void} Sets the default help text for the input.
|
|
31456
32123
|
*/
|
|
31457
32124
|
setCustomHelpTextMessage() {
|
|
@@ -31469,6 +32136,13 @@ class BaseInput extends AuroElement$1 {
|
|
|
31469
32136
|
|
|
31470
32137
|
if (typeToI18n.includes(this.type)) {
|
|
31471
32138
|
this.setCustomValidityForType = i18n$1(this.lang, this.type);
|
|
32139
|
+
// COVERAGE: this `else if` branch is unreachable in WTR. connectedCallback
|
|
32140
|
+
// (L682) calls configureDataForType, which at L1266-1268 assigns
|
|
32141
|
+
// `this.format = this.util.getDateMaskFromLocale().toLowerCase()` for any
|
|
32142
|
+
// type=date input whose `format` attribute is unset. That runs before
|
|
32143
|
+
// firstUpdated invokes setCustomHelpTextMessage, so `!this.format` is
|
|
32144
|
+
// always false here. Retained as a defensive fallback; the whole function
|
|
32145
|
+
// is @deprecated per AB#1557296 and slated for removal.
|
|
31472
32146
|
} else if (!this.format && this.type === 'date') {
|
|
31473
32147
|
this.setCustomValidityForType = i18n$1(this.lang, 'dateMMDDYYYY');
|
|
31474
32148
|
} else if (this.dateFormatMap[this.format]) {
|
|
@@ -31485,12 +32159,10 @@ class BaseInput extends AuroElement$1 {
|
|
|
31485
32159
|
updated(changedProperties) {
|
|
31486
32160
|
super.updated(changedProperties);
|
|
31487
32161
|
|
|
31488
|
-
// When locale changes
|
|
31489
|
-
// Only runs if the current format is still the previous locale's default (not user-overridden).
|
|
32162
|
+
// When locale changes, auto-derive format unless the consumer explicitly set one.
|
|
31490
32163
|
if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
|
|
31491
|
-
|
|
31492
|
-
|
|
31493
|
-
this.format = getDateFormatFromLocale(this.locale);
|
|
32164
|
+
if (!this._userSetFormat) {
|
|
32165
|
+
this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
|
|
31494
32166
|
}
|
|
31495
32167
|
}
|
|
31496
32168
|
|
|
@@ -31530,8 +32202,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31530
32202
|
this.configureDataForType();
|
|
31531
32203
|
}
|
|
31532
32204
|
|
|
31533
|
-
this.syncDateValues(changedProperties);
|
|
31534
|
-
|
|
31535
32205
|
if (changedProperties.has('value')) {
|
|
31536
32206
|
if (this.value && this.value.length > 0) {
|
|
31537
32207
|
this.hasValue = true;
|
|
@@ -31553,7 +32223,16 @@ class BaseInput extends AuroElement$1 {
|
|
|
31553
32223
|
|
|
31554
32224
|
if (formattedValue !== this.inputElement.value) {
|
|
31555
32225
|
this.skipNextProgrammaticInputEvent = true;
|
|
31556
|
-
if (
|
|
32226
|
+
if (this.maskInstance && this.type !== 'date') {
|
|
32227
|
+
// Route through the mask so its _value and el.value stay in lock-step
|
|
32228
|
+
// (set value calls updateControl which writes el.value = displayValue).
|
|
32229
|
+
// Writing el.value directly leaves the mask thinking displayValue is
|
|
32230
|
+
// stale; _saveSelection on the next focus/click then warns. Date is
|
|
32231
|
+
// excluded because its formattedValue can be raw ISO when the calendar
|
|
32232
|
+
// is invalid, and re-masking through mm/dd/yyyy would truncate it and
|
|
32233
|
+
// flip validity from patternMismatch to tooShort.
|
|
32234
|
+
this.maskInstance.value = formattedValue || '';
|
|
32235
|
+
} else if (formattedValue) {
|
|
31557
32236
|
this.inputElement.value = formattedValue;
|
|
31558
32237
|
} else {
|
|
31559
32238
|
this.inputElement.value = '';
|
|
@@ -31593,127 +32272,85 @@ class BaseInput extends AuroElement$1 {
|
|
|
31593
32272
|
}));
|
|
31594
32273
|
}
|
|
31595
32274
|
|
|
31596
|
-
|
|
31597
|
-
/**
|
|
31598
|
-
* Synchronizes the ISO string values and Date object representations for date-related properties.
|
|
31599
|
-
* This keeps the model and display values aligned when either side changes.
|
|
31600
|
-
*
|
|
31601
|
-
* When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
|
|
31602
|
-
* Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
|
|
31603
|
-
* represents a full year/month/day date format.
|
|
31604
|
-
*
|
|
31605
|
-
* @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
|
|
31606
|
-
* @returns {void}
|
|
31607
|
-
* @private
|
|
31608
|
-
*/
|
|
31609
|
-
syncDateValues(changedProperties = undefined) {
|
|
31610
|
-
if (!this.util.isFullDateFormat(this.type, this.format)) {
|
|
31611
|
-
return;
|
|
31612
|
-
}
|
|
31613
|
-
|
|
31614
|
-
this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
|
|
31615
|
-
this.syncSingleDateValue(changedProperties, 'minObject', 'min');
|
|
31616
|
-
this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
|
|
31617
|
-
}
|
|
31618
|
-
|
|
31619
|
-
/**
|
|
31620
|
-
* Synchronizes one date object/string property pair.
|
|
31621
|
-
* @private
|
|
31622
|
-
* @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
|
|
31623
|
-
* @param {string} objectProperty - Date object property name.
|
|
31624
|
-
* @param {string} valueProperty - ISO string property name.
|
|
31625
|
-
* @returns {void}
|
|
31626
|
-
*/
|
|
31627
|
-
syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
|
|
31628
|
-
const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
|
|
31629
|
-
|
|
31630
|
-
// objectProperty wins over valueProperty when both changed
|
|
31631
|
-
if (objectPropertyChanged && this[objectProperty]) {
|
|
31632
|
-
this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
|
|
31633
|
-
return;
|
|
31634
|
-
}
|
|
31635
|
-
|
|
31636
|
-
const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
|
|
31637
|
-
if (!valuePropertyChanged) {
|
|
31638
|
-
return;
|
|
31639
|
-
}
|
|
31640
|
-
|
|
31641
|
-
// when value is newly set to the same ISO string that corresponds to the existing Date object, do not clear the Date object (avoid unnecessary updates)
|
|
31642
|
-
if (
|
|
31643
|
-
changedProperties &&
|
|
31644
|
-
valueProperty === 'value' &&
|
|
31645
|
-
changedProperties.get('value') === undefined &&
|
|
31646
|
-
this[objectProperty] instanceof Date &&
|
|
31647
|
-
this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
|
|
31648
|
-
) {
|
|
31649
|
-
return;
|
|
31650
|
-
}
|
|
31651
|
-
|
|
31652
|
-
if (dateFormatter.isValidDate(this[valueProperty])) {
|
|
31653
|
-
this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
|
|
31654
|
-
} else {
|
|
31655
|
-
this.setDateObjectProperty(objectProperty, undefined);
|
|
31656
|
-
}
|
|
31657
|
-
}
|
|
31658
|
-
|
|
31659
32275
|
/**
|
|
31660
32276
|
* Sets up IMasks and logic based on auto-formatting requirements.
|
|
31661
32277
|
* @private
|
|
31662
32278
|
* @returns {void}
|
|
31663
32279
|
*/
|
|
31664
32280
|
configureAutoFormatting() {
|
|
31665
|
-
|
|
31666
|
-
|
|
31667
|
-
|
|
32281
|
+
// _configuringMask gates two things: external re-entry into this method
|
|
32282
|
+
// while setup is mid-flight (from property changes that call back here),
|
|
32283
|
+
// and the accept/complete listeners below — both need to ignore the mask
|
|
32284
|
+
// events fired by our own value-restore step.
|
|
32285
|
+
if (this._configuringMask) return;
|
|
32286
|
+
this._configuringMask = true;
|
|
32287
|
+
try {
|
|
32288
|
+
// Destroy any prior mask so IMask can attach fresh under the new format.
|
|
32289
|
+
// Null the reference too — if the new maskOptions.mask is falsy (e.g.
|
|
32290
|
+
// type switched from credit-card to text) the IMask() reassignment
|
|
32291
|
+
// below is skipped, and downstream writes at line ~823 would otherwise
|
|
32292
|
+
// route through the destroyed instance.
|
|
32293
|
+
if (this.maskInstance) {
|
|
32294
|
+
this.maskInstance.destroy();
|
|
32295
|
+
this.maskInstance = null;
|
|
32296
|
+
}
|
|
31668
32297
|
|
|
31669
|
-
|
|
31670
|
-
this.util.updateFormat(this.format);
|
|
32298
|
+
this.util.updateFormat(this.format);
|
|
31671
32299
|
|
|
31672
|
-
|
|
32300
|
+
const maskOptions = this.util.getMaskOptions(this.type, this.format);
|
|
31673
32301
|
|
|
31674
|
-
|
|
32302
|
+
if (this.inputElement && maskOptions.mask) {
|
|
32303
|
+
// Capture the current display so it can be re-applied after IMask
|
|
32304
|
+
// attaches. The restore at the bottom goes through maskInstance.value
|
|
32305
|
+
// (not inputElement.value directly) so the mask's internal state and
|
|
32306
|
+
// the input's displayed text stay in lock-step.
|
|
32307
|
+
let existingValue = this.inputElement.value;
|
|
31675
32308
|
|
|
31676
|
-
|
|
31677
|
-
|
|
31678
|
-
|
|
31679
|
-
|
|
31680
|
-
|
|
31681
|
-
|
|
31682
|
-
|
|
31683
|
-
|
|
31684
|
-
|
|
31685
|
-
|
|
31686
|
-
|
|
31687
|
-
|
|
31688
|
-
|
|
31689
|
-
|
|
31690
|
-
|
|
31691
|
-
|
|
31692
|
-
|
|
32309
|
+
// Format-change case (e.g. locale switch): existingValue is the OLD
|
|
32310
|
+
// mask's display string and may not parse under the new mask. When
|
|
32311
|
+
// we have a valid date model, rebuild the display from valueObject
|
|
32312
|
+
// (the canonical source) using the new mask's format function.
|
|
32313
|
+
if (
|
|
32314
|
+
this.util.isFullDateFormat(this.type, this.format) &&
|
|
32315
|
+
this.value &&
|
|
32316
|
+
this.valueObject &&
|
|
32317
|
+
typeof maskOptions.format === 'function'
|
|
32318
|
+
) {
|
|
32319
|
+
existingValue = maskOptions.format(this.valueObject);
|
|
32320
|
+
}
|
|
32321
|
+
|
|
32322
|
+
// Clear before IMask attaches so the constructor seeds an empty
|
|
32323
|
+
// internal value. Otherwise IMask reads the stale unmasked string
|
|
32324
|
+
// and emits a spurious 'accept' before the restore below runs.
|
|
32325
|
+
this.skipNextProgrammaticInputEvent = true;
|
|
32326
|
+
this.inputElement.value = '';
|
|
31693
32327
|
|
|
31694
|
-
|
|
31695
|
-
this.inputElement.value = '';
|
|
32328
|
+
this.maskInstance = IMask(this.inputElement, maskOptions);
|
|
31696
32329
|
|
|
31697
|
-
|
|
32330
|
+
// Mask fires 'accept' on every value change, including the restore
|
|
32331
|
+
// step below. Skip events fired during configureAutoFormatting so
|
|
32332
|
+
// we don't overwrite a value the parent just pushed.
|
|
32333
|
+
this.maskInstance.on('accept', () => {
|
|
32334
|
+
if (this._configuringMask) return;
|
|
32335
|
+
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
32336
|
+
});
|
|
31698
32337
|
|
|
31699
|
-
|
|
31700
|
-
|
|
31701
|
-
|
|
31702
|
-
this.
|
|
31703
|
-
|
|
31704
|
-
|
|
32338
|
+
// Mask fires 'complete' on the restore step below for any value that
|
|
32339
|
+
// happens to be a complete match. Same setup-suppression as 'accept'.
|
|
32340
|
+
this.maskInstance.on('complete', () => {
|
|
32341
|
+
if (this._configuringMask) return;
|
|
32342
|
+
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
32343
|
+
});
|
|
31705
32344
|
|
|
31706
|
-
|
|
31707
|
-
|
|
31708
|
-
|
|
31709
|
-
|
|
32345
|
+
// Write existingValue through the mask (not the input directly) so
|
|
32346
|
+
// the mask reformats it under the new rules and keeps its internal
|
|
32347
|
+
// _value aligned with the input's displayed text.
|
|
32348
|
+
if (existingValue) {
|
|
32349
|
+
this.maskInstance.value = existingValue;
|
|
31710
32350
|
}
|
|
31711
|
-
});
|
|
31712
|
-
|
|
31713
|
-
// Restore the stashed value through IMask so it's properly masked
|
|
31714
|
-
if (existingValue) {
|
|
31715
|
-
this.maskInstance.value = existingValue;
|
|
31716
32351
|
}
|
|
32352
|
+
} finally {
|
|
32353
|
+
this._configuringMask = false;
|
|
31717
32354
|
}
|
|
31718
32355
|
}
|
|
31719
32356
|
|
|
@@ -31723,14 +32360,17 @@ class BaseInput extends AuroElement$1 {
|
|
|
31723
32360
|
* @returns {void}
|
|
31724
32361
|
*/
|
|
31725
32362
|
notifyValueChanged() {
|
|
31726
|
-
|
|
31727
|
-
|
|
31728
|
-
|
|
32363
|
+
// This echoes Lit's reactive value update (and handleClickClear's
|
|
32364
|
+
// programmatic clear) — it is NOT a fresh user-input event. Mark it
|
|
32365
|
+
// `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
|
|
32366
|
+
// it from genuine user typing and skip clobbering their own
|
|
32367
|
+
// programmatic state during init-time renders.
|
|
32368
|
+
const inputEvent = new Event('input', {
|
|
31729
32369
|
bubbles: true,
|
|
31730
32370
|
composed: true,
|
|
31731
32371
|
});
|
|
32372
|
+
inputEvent.isProgrammatic = true;
|
|
31732
32373
|
|
|
31733
|
-
// Dispatched event to alert outside shadow DOM context of event firing.
|
|
31734
32374
|
this.dispatchEvent(inputEvent);
|
|
31735
32375
|
}
|
|
31736
32376
|
|
|
@@ -31787,6 +32427,38 @@ class BaseInput extends AuroElement$1 {
|
|
|
31787
32427
|
this.touched = true;
|
|
31788
32428
|
this.validation.validate(this);
|
|
31789
32429
|
}
|
|
32430
|
+
|
|
32431
|
+
// Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
|
|
32432
|
+
// update that can re-render the input and reset the native cursor; we
|
|
32433
|
+
// capture the caret position before that update commits and restore it
|
|
32434
|
+
// via `setSelectionRange` once the update has flushed. Gated on
|
|
32435
|
+
// `setSelectionInputTypes` so credit-card (and other masked types whose
|
|
32436
|
+
// formatter manages the cursor itself) doesn't get a competing write.
|
|
32437
|
+
// Capture the caret position INSIDE the gate — reading `selectionStart`
|
|
32438
|
+
// on input types that don't support text selection (number, email in
|
|
32439
|
+
// some browsers) throws InvalidStateError, which would crash all input
|
|
32440
|
+
// handling. Wrap the read in try/catch belt-and-suspenders even though
|
|
32441
|
+
// the gated types currently support it, since the list is a public
|
|
32442
|
+
// property a consumer could mutate.
|
|
32443
|
+
if (this.setSelectionInputTypes.includes(this.type)) {
|
|
32444
|
+
let selectionStart = null;
|
|
32445
|
+
try {
|
|
32446
|
+
({ selectionStart } = this.inputElement);
|
|
32447
|
+
} catch {
|
|
32448
|
+
return;
|
|
32449
|
+
}
|
|
32450
|
+
if (typeof selectionStart !== 'number') {
|
|
32451
|
+
return;
|
|
32452
|
+
}
|
|
32453
|
+
this.updateComplete.then(() => {
|
|
32454
|
+
try {
|
|
32455
|
+
this.inputElement.setSelectionRange(selectionStart, selectionStart);
|
|
32456
|
+
} catch {
|
|
32457
|
+
// Some input types (number/email in certain UAs) throw on
|
|
32458
|
+
// setSelectionRange; swallow and let the native cursor stand.
|
|
32459
|
+
}
|
|
32460
|
+
});
|
|
32461
|
+
}
|
|
31790
32462
|
}
|
|
31791
32463
|
|
|
31792
32464
|
/**
|
|
@@ -31875,7 +32547,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31875
32547
|
*/
|
|
31876
32548
|
reset() {
|
|
31877
32549
|
this.value = undefined;
|
|
31878
|
-
this.setDateObjectProperty('valueObject', undefined);
|
|
31879
32550
|
this.validation.reset(this);
|
|
31880
32551
|
}
|
|
31881
32552
|
|
|
@@ -31884,7 +32555,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31884
32555
|
*/
|
|
31885
32556
|
clear() {
|
|
31886
32557
|
this.value = undefined;
|
|
31887
|
-
this.setDateObjectProperty('valueObject', undefined);
|
|
31888
32558
|
}
|
|
31889
32559
|
|
|
31890
32560
|
/**
|
|
@@ -31909,8 +32579,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31909
32579
|
|
|
31910
32580
|
// Set default date format if type=date and no format is defined
|
|
31911
32581
|
if (this.type === "date" && !this.format) {
|
|
31912
|
-
|
|
31913
|
-
this.format = this.util.getDateMaskFromLocale().toLowerCase();
|
|
32582
|
+
this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
|
|
31914
32583
|
this.util.updateFormat(this.format);
|
|
31915
32584
|
}
|
|
31916
32585
|
}
|
|
@@ -31922,7 +32591,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31922
32591
|
*/
|
|
31923
32592
|
get placeholderStr() {
|
|
31924
32593
|
if (!this.placeholder && this.type === 'date') {
|
|
31925
|
-
return this.format
|
|
32594
|
+
return this.format.toUpperCase();
|
|
31926
32595
|
}
|
|
31927
32596
|
return this.placeholder || "";
|
|
31928
32597
|
}
|
|
@@ -31939,7 +32608,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31939
32608
|
const creditCard = this.matchInputValueToCreditCard();
|
|
31940
32609
|
const previousFormat = this.format;
|
|
31941
32610
|
|
|
31942
|
-
this.
|
|
32611
|
+
this._setFormatFromLocale(creditCard.maskFormat);
|
|
31943
32612
|
|
|
31944
32613
|
this.maxLength = creditCard.formatLength;
|
|
31945
32614
|
this.minLength = creditCard.formatMinLength;
|
|
@@ -31959,7 +32628,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31959
32628
|
/**
|
|
31960
32629
|
* Function to support credit-card feature type.
|
|
31961
32630
|
* @private
|
|
31962
|
-
* @deprecated https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296
|
|
32631
|
+
* @deprecated See https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296.
|
|
31963
32632
|
* @returns {object} JSON with data for credit card formatting.
|
|
31964
32633
|
*/
|
|
31965
32634
|
matchInputValueToCreditCard() {
|
|
@@ -32000,10 +32669,10 @@ class BaseInput extends AuroElement$1 {
|
|
|
32000
32669
|
},
|
|
32001
32670
|
{
|
|
32002
32671
|
name: 'Diners club',
|
|
32003
|
-
regex: /^(?<num>36|38)\d{0}/u,
|
|
32672
|
+
regex: /^(?<num>30[0-5]|36|38)\d{0}/u,
|
|
32004
32673
|
formatLength: 16,
|
|
32005
32674
|
errorMessage: CreditCardValidationMessage,
|
|
32006
|
-
cardIcon: '
|
|
32675
|
+
cardIcon: 'cc-dinersclub',
|
|
32007
32676
|
maskFormat: "0000 000000 0000"
|
|
32008
32677
|
},
|
|
32009
32678
|
{
|
|
@@ -32413,7 +33082,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
32413
33082
|
}
|
|
32414
33083
|
};
|
|
32415
33084
|
|
|
32416
|
-
var formkitVersion = '
|
|
33085
|
+
var formkitVersion = '202607221815';
|
|
32417
33086
|
|
|
32418
33087
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
32419
33088
|
// See LICENSE in the project root for license information.
|
|
@@ -32699,20 +33368,50 @@ class AuroInput extends BaseInput {
|
|
|
32699
33368
|
* @returns {void}
|
|
32700
33369
|
*/
|
|
32701
33370
|
checkDisplayValueSlotChange() {
|
|
32702
|
-
|
|
32703
|
-
|
|
32704
|
-
|
|
32705
|
-
|
|
32706
|
-
|
|
33371
|
+
const slot = this.shadowRoot?.querySelector('slot[name="displayValue"]');
|
|
33372
|
+
if (!slot) {
|
|
33373
|
+
// Shadow slot not yet rendered — fall back to checking light-DOM
|
|
33374
|
+
// children so hasDisplayValueContent isn't stuck false when called
|
|
33375
|
+
// before firstUpdated (e.g. from auro-combobox during mount).
|
|
33376
|
+
// Check for any element (including custom elements like <auro-icon>
|
|
33377
|
+
// that render via shadow DOM with no text content).
|
|
33378
|
+
const lightDomNodes = Array.from(this.querySelectorAll('[slot="displayValue"]:not(slot)'));
|
|
33379
|
+
const hasContent = lightDomNodes.some((node) => (
|
|
33380
|
+
node.textContent.trim().length > 0 ||
|
|
33381
|
+
node.children.length > 0 ||
|
|
33382
|
+
node.shadowRoot !== null
|
|
33383
|
+
));
|
|
33384
|
+
if (this.hasDisplayValueContent !== hasContent) {
|
|
33385
|
+
this.hasDisplayValueContent = hasContent;
|
|
33386
|
+
this.requestUpdate();
|
|
33387
|
+
}
|
|
33388
|
+
return;
|
|
32707
33389
|
}
|
|
32708
|
-
|
|
32709
|
-
|
|
32710
|
-
|
|
32711
|
-
|
|
32712
|
-
|
|
33390
|
+
const nodes = slot.assignedNodes({ flatten: true });
|
|
33391
|
+
|
|
33392
|
+
// Check for actual visible content, not just node existence.
|
|
33393
|
+
// An empty <span slot="displayValue"></span> forwarded from the
|
|
33394
|
+
// consumer should not be treated as "has content" — it causes the
|
|
33395
|
+
// displayValue wrapper to render (with hasContent class) but show
|
|
33396
|
+
// nothing, blocking the combobox's synthetic displayValue from
|
|
33397
|
+
// being visible on preset/deeplink load.
|
|
33398
|
+
// Custom elements (e.g. <auro-icon>) that render via shadow DOM are
|
|
33399
|
+
// treated as content even when they have no text or light-DOM children.
|
|
33400
|
+
const hasContent = nodes.some((node) => {
|
|
33401
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
33402
|
+
return node.textContent.trim().length > 0;
|
|
33403
|
+
}
|
|
33404
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
33405
|
+
return node.textContent.trim().length > 0 ||
|
|
33406
|
+
node.children.length > 0 ||
|
|
33407
|
+
node.shadowRoot !== null;
|
|
33408
|
+
}
|
|
33409
|
+
return false;
|
|
33410
|
+
});
|
|
33411
|
+
if (this.hasDisplayValueContent !== hasContent) {
|
|
33412
|
+
this.hasDisplayValueContent = hasContent;
|
|
33413
|
+
this.requestUpdate();
|
|
32713
33414
|
}
|
|
32714
|
-
|
|
32715
|
-
this.hasDisplayValueContent = hasContent;
|
|
32716
33415
|
}
|
|
32717
33416
|
|
|
32718
33417
|
firstUpdated() {
|
|
@@ -32736,7 +33435,7 @@ class AuroInput extends BaseInput {
|
|
|
32736
33435
|
/**
|
|
32737
33436
|
* Determines default help text string.
|
|
32738
33437
|
* @private
|
|
32739
|
-
* @deprecated https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296
|
|
33438
|
+
* @deprecated See https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296.
|
|
32740
33439
|
* @returns {string} Evaluates pre-determined help text.
|
|
32741
33440
|
*/
|
|
32742
33441
|
getHelpText() {
|
|
@@ -32916,6 +33615,7 @@ class AuroInput extends BaseInput {
|
|
|
32916
33615
|
<${this.buttonTag}
|
|
32917
33616
|
@click="${this.handleClickShowPassword}"
|
|
32918
33617
|
appearance="${this.onDark ? 'inverse' : this.appearance}"
|
|
33618
|
+
aria-pressed="${this.showPassword ? 'true' : 'false'}"
|
|
32919
33619
|
class="notificationBtn passwordBtn"
|
|
32920
33620
|
shape="circle"
|
|
32921
33621
|
size="sm"
|
|
@@ -32989,25 +33689,29 @@ class AuroInput extends BaseInput {
|
|
|
32989
33689
|
* @returns {html} - Returns HTML for the help text and error message.
|
|
32990
33690
|
*/
|
|
32991
33691
|
renderHtmlHelpText() {
|
|
33692
|
+
// Single `<p>` with stable identity across validity transitions —
|
|
33693
|
+
// previously two distinct templates (valid vs invalid) caused Lit to
|
|
33694
|
+
// replace the node entirely on a flip, and VoiceOver wouldn't
|
|
33695
|
+
// re-announce because the live-region element it was watching had been
|
|
33696
|
+
// removed and a new one inserted. Keeping one node means the `role`,
|
|
33697
|
+
// `aria-live`, and text content all change in-place, which AT does
|
|
33698
|
+
// observe and announce.
|
|
33699
|
+
const isError = this.validity && this.validity !== 'valid';
|
|
32992
33700
|
return html$1`
|
|
32993
|
-
|
|
32994
|
-
?
|
|
32995
|
-
|
|
32996
|
-
|
|
32997
|
-
|
|
32998
|
-
|
|
32999
|
-
|
|
33000
|
-
|
|
33001
|
-
|
|
33002
|
-
|
|
33003
|
-
|
|
33004
|
-
|
|
33005
|
-
|
|
33006
|
-
|
|
33007
|
-
</p>
|
|
33008
|
-
</${this.helpTextTag}>
|
|
33009
|
-
`
|
|
33010
|
-
}
|
|
33701
|
+
<${this.helpTextTag}
|
|
33702
|
+
appearance="${this.onDark ? 'inverse' : this.appearance}"
|
|
33703
|
+
?error=${isError}>
|
|
33704
|
+
<p
|
|
33705
|
+
id="${this.uniqueId}"
|
|
33706
|
+
part="helpText"
|
|
33707
|
+
role="${ifDefined(isError ? 'alert' : undefined)}"
|
|
33708
|
+
aria-live="${ifDefined(isError ? 'assertive' : undefined)}">
|
|
33709
|
+
${isError
|
|
33710
|
+
? this.errorMessage
|
|
33711
|
+
: html$1`<slot name="helpText">${this.getHelpText()}</slot>`
|
|
33712
|
+
}
|
|
33713
|
+
</p>
|
|
33714
|
+
</${this.helpTextTag}>
|
|
33011
33715
|
`;
|
|
33012
33716
|
}
|
|
33013
33717
|
|
|
@@ -33154,6 +33858,15 @@ function formatISODate(isoStr, format) {
|
|
|
33154
33858
|
try {
|
|
33155
33859
|
const date = dateFormatter.stringToDateInstance(isoStr);
|
|
33156
33860
|
|
|
33861
|
+
// `stringToDateInstance` returns an `Invalid Date` for malformed strings
|
|
33862
|
+
// and `null` for non-string input — it does NOT throw. Without this
|
|
33863
|
+
// guard, `getFullYear()`/`getMonth()`/`getDate()` on an Invalid Date
|
|
33864
|
+
// yield `NaN`, and `String(NaN).padStart(4, '0')` produces literals
|
|
33865
|
+
// like "0NaN/0NaN/0NaN" instead of `undefined`.
|
|
33866
|
+
if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
|
|
33867
|
+
return undefined;
|
|
33868
|
+
}
|
|
33869
|
+
|
|
33157
33870
|
const year = String(date.getFullYear()).padStart(4, '0');
|
|
33158
33871
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
33159
33872
|
const day = String(date.getDate()).padStart(2, '0');
|
|
@@ -33164,7 +33877,10 @@ function formatISODate(isoStr, format) {
|
|
|
33164
33877
|
replace(/mm/iu, month).
|
|
33165
33878
|
replace(/dd/iu, day);
|
|
33166
33879
|
} catch (err) {
|
|
33167
|
-
//
|
|
33880
|
+
// Defensive: the Date-returning path is guarded above, but `parseDate`
|
|
33881
|
+
// (inside `stringToDateInstance`) could throw on pathological input
|
|
33882
|
+
// future-library-versions might introduce. Treat any thrown error as
|
|
33883
|
+
// "not a valid date" and return undefined.
|
|
33168
33884
|
return undefined;
|
|
33169
33885
|
}
|
|
33170
33886
|
}
|
|
@@ -33776,6 +34492,15 @@ const datepickerKeyboardStrategy = {
|
|
|
33776
34492
|
evt.stopPropagation();
|
|
33777
34493
|
evt.preventDefault();
|
|
33778
34494
|
|
|
34495
|
+
// Signal to the visibility-change handler in auro-datepicker.js that
|
|
34496
|
+
// focus should be restored to the trigger regardless of hasFocus.
|
|
34497
|
+
// hidePopover() (desktop non-modal path) does not auto-restore focus,
|
|
34498
|
+
// and hiding the grid's popover ancestor drops focus to <body>. That
|
|
34499
|
+
// synchronously fires focusout on the datepicker host — clearing
|
|
34500
|
+
// hasFocus — before updated() runs, which would otherwise skip the
|
|
34501
|
+
// input refocus. Native <dialog>.close() (modal path) restores focus
|
|
34502
|
+
// itself, but the flag is harmless there.
|
|
34503
|
+
component._restoreFocusOnClose = true;
|
|
33779
34504
|
component.hideBib();
|
|
33780
34505
|
},
|
|
33781
34506
|
|
|
@@ -33836,6 +34561,8 @@ const datepickerKeyboardStrategy = {
|
|
|
33836
34561
|
* @slot label - Defines the label content for the entire datepicker when `layout="snowflake"`.
|
|
33837
34562
|
* @slot toLabel - Defines the label content for the second input when the `range` attribute is used.
|
|
33838
34563
|
* @slot fromLabel - Defines the label content for the first input.
|
|
34564
|
+
* @slot optionalFromLabel - Overrides the "(optional)" text rendered next to the first input's label when the datepicker is not `required`.
|
|
34565
|
+
* @slot optionalToLabel - Overrides the "(optional)" text rendered next to the second input's label when `range` is set and the datepicker is not `required`.
|
|
33839
34566
|
* @slot date_YYYY_MM_DD - Defines the content to display in the auro-calendar-cell for the specified date. The content text is colored using the success state token when the `highlight` attribute is applied to the slot.
|
|
33840
34567
|
* @slot popover_YYYY_MM_DD - Defines the content to display in the auro-calendar-cell popover for the specified date.
|
|
33841
34568
|
* @csspart dropdown - Use for customizing the style of the dropdown.
|
|
@@ -33891,6 +34618,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
33891
34618
|
this.rangeLabelBeforeRange = 'before range';
|
|
33892
34619
|
this.rangeLabelInRange = 'in range';
|
|
33893
34620
|
this.rangeLabelAfterRange = 'after range';
|
|
34621
|
+
this.rangeLabelEndPreview = 'previewing range end';
|
|
33894
34622
|
this.blackoutDates = [];
|
|
33895
34623
|
this.blackoutLabel = 'unavailable';
|
|
33896
34624
|
this.navLabelPrevMonth = 'Previous month';
|
|
@@ -33990,6 +34718,22 @@ class AuroDatePicker extends AuroElement {
|
|
|
33990
34718
|
*/
|
|
33991
34719
|
this.handleClick = this.handleClick.bind(this);
|
|
33992
34720
|
|
|
34721
|
+
/**
|
|
34722
|
+
* Single AbortController shared by every listener registered in the
|
|
34723
|
+
* configure* methods. Lets disconnectedCallback tear all of them down
|
|
34724
|
+
* with one abort() call.
|
|
34725
|
+
*
|
|
34726
|
+
* The genuine leak risk is the listeners attached to children that can
|
|
34727
|
+
* outlive the host if they get reparented — `this.dropdown`,
|
|
34728
|
+
* `this.calendar`, and the inputs inside the dropdown's slot.
|
|
34729
|
+
* Listeners attached to `this` (e.g. focusin/focusout on the host)
|
|
34730
|
+
* form a self-contained reference graph that the GC can collect with
|
|
34731
|
+
* the host anyway, but they share the same signal so the cleanup
|
|
34732
|
+
* pattern stays uniform across all configure* sites.
|
|
34733
|
+
* @private
|
|
34734
|
+
*/
|
|
34735
|
+
this._listenerAbortController = new AbortController();
|
|
34736
|
+
|
|
33993
34737
|
/**
|
|
33994
34738
|
* @private
|
|
33995
34739
|
*/
|
|
@@ -34030,6 +34774,14 @@ class AuroDatePicker extends AuroElement {
|
|
|
34030
34774
|
|
|
34031
34775
|
/**
|
|
34032
34776
|
* Array of dates that cannot be selected. Dates should be in ISO format (YYYY-MM-DD).
|
|
34777
|
+
*
|
|
34778
|
+
* **Immutable update required.** The datepicker treats this array as
|
|
34779
|
+
* immutable and memoizes a lookup Set keyed on the array's reference
|
|
34780
|
+
* identity — matching Lit's own reactivity semantics for array
|
|
34781
|
+
* properties. In-place mutations (`blackoutDates.push(...)`,
|
|
34782
|
+
* `blackoutDates[i] = ...`, `blackoutDates.splice(...)`) will not
|
|
34783
|
+
* invalidate the cache and the new entries will be silently ignored.
|
|
34784
|
+
* To update, reassign the property: `el.blackoutDates = [...el.blackoutDates, '2024-12-25']`.
|
|
34033
34785
|
*/
|
|
34034
34786
|
blackoutDates: {
|
|
34035
34787
|
type: Array,
|
|
@@ -34038,6 +34790,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34038
34790
|
|
|
34039
34791
|
/**
|
|
34040
34792
|
* Label announced for blackout (disabled but in-range) date cells.
|
|
34793
|
+
* @default 'unavailable'
|
|
34041
34794
|
*/
|
|
34042
34795
|
blackoutLabel: {
|
|
34043
34796
|
type: String,
|
|
@@ -34054,6 +34807,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34054
34807
|
|
|
34055
34808
|
/**
|
|
34056
34809
|
* Accessible label for the calendar grid containing the days of the month.
|
|
34810
|
+
* @default 'Calendar days of the month'
|
|
34057
34811
|
*/
|
|
34058
34812
|
calendarGridLabel: {
|
|
34059
34813
|
type: String,
|
|
@@ -34216,6 +34970,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34216
34970
|
|
|
34217
34971
|
/**
|
|
34218
34972
|
* Accessible label for the next month navigation button.
|
|
34973
|
+
* @default 'Next month'
|
|
34219
34974
|
*/
|
|
34220
34975
|
navLabelNextMonth: {
|
|
34221
34976
|
type: String,
|
|
@@ -34224,6 +34979,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34224
34979
|
|
|
34225
34980
|
/**
|
|
34226
34981
|
* Accessible label for the previous month navigation button.
|
|
34982
|
+
* @default 'Previous month'
|
|
34227
34983
|
*/
|
|
34228
34984
|
navLabelPrevMonth: {
|
|
34229
34985
|
type: String,
|
|
@@ -34301,7 +35057,11 @@ class AuroDatePicker extends AuroElement {
|
|
|
34301
35057
|
},
|
|
34302
35058
|
|
|
34303
35059
|
/**
|
|
34304
|
-
* Label announced for cells after
|
|
35060
|
+
* Label announced for cells after a fully selected range (both
|
|
35061
|
+
* `dateFrom` and `dateTo` are set). While a range is still being
|
|
35062
|
+
* picked (`dateFrom` set, `dateTo` unset), focused cells past the
|
|
35063
|
+
* start use `rangeLabelEndPreview` instead.
|
|
35064
|
+
* @default 'after range'
|
|
34305
35065
|
*/
|
|
34306
35066
|
rangeLabelAfterRange: {
|
|
34307
35067
|
type: String,
|
|
@@ -34310,6 +35070,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34310
35070
|
|
|
34311
35071
|
/**
|
|
34312
35072
|
* Label announced for cells before the range start.
|
|
35073
|
+
* @default 'before range'
|
|
34313
35074
|
*/
|
|
34314
35075
|
rangeLabelBeforeRange: {
|
|
34315
35076
|
type: String,
|
|
@@ -34318,14 +35079,27 @@ class AuroDatePicker extends AuroElement {
|
|
|
34318
35079
|
|
|
34319
35080
|
/**
|
|
34320
35081
|
* Label announced for the range end date cell.
|
|
35082
|
+
* @default 'range end'
|
|
34321
35083
|
*/
|
|
34322
35084
|
rangeLabelEnd: {
|
|
34323
35085
|
type: String,
|
|
34324
35086
|
reflect: true
|
|
34325
35087
|
},
|
|
34326
35088
|
|
|
35089
|
+
/**
|
|
35090
|
+
* Label announced for the focused cell while previewing a range end
|
|
35091
|
+
* (dateFrom set, dateTo not yet selected). Tells AT users that
|
|
35092
|
+
* pressing Enter would commit this cell as the range end.
|
|
35093
|
+
* @default 'previewing range end'
|
|
35094
|
+
*/
|
|
35095
|
+
rangeLabelEndPreview: {
|
|
35096
|
+
type: String,
|
|
35097
|
+
reflect: true
|
|
35098
|
+
},
|
|
35099
|
+
|
|
34327
35100
|
/**
|
|
34328
35101
|
* Label announced for cells within the selected range.
|
|
35102
|
+
* @default 'in range'
|
|
34329
35103
|
*/
|
|
34330
35104
|
rangeLabelInRange: {
|
|
34331
35105
|
type: String,
|
|
@@ -34334,6 +35108,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34334
35108
|
|
|
34335
35109
|
/**
|
|
34336
35110
|
* Label announced for the range start date cell.
|
|
35111
|
+
* @default 'range start'
|
|
34337
35112
|
*/
|
|
34338
35113
|
rangeLabelStart: {
|
|
34339
35114
|
type: String,
|
|
@@ -34341,7 +35116,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34341
35116
|
},
|
|
34342
35117
|
|
|
34343
35118
|
/**
|
|
34344
|
-
* Dates that the user should have for reference as part of their decision
|
|
35119
|
+
* Dates that the user should have for reference as part of their decision-making when selecting a date.
|
|
34345
35120
|
* This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
|
|
34346
35121
|
*/
|
|
34347
35122
|
referenceDates: {
|
|
@@ -34698,10 +35473,26 @@ class AuroDatePicker extends AuroElement {
|
|
|
34698
35473
|
// ─── Vendor calendar time conversions ─────────────────────────────────────
|
|
34699
35474
|
|
|
34700
35475
|
/**
|
|
34701
|
-
* Converts a Unix timestamp (seconds) from the
|
|
35476
|
+
* Converts a Unix timestamp (seconds) from the vendored range-datepicker
|
|
35477
|
+
* (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
|
|
35478
|
+
*
|
|
35479
|
+
* Timezone contract:
|
|
35480
|
+
* - INPUT: `time` is assumed to be the seconds-since-epoch of **local
|
|
35481
|
+
* midnight** for the intended calendar day. The vendor's Day constructor
|
|
35482
|
+
* builds it via `date-fns format(date, 't')` from a locally-constructed
|
|
35483
|
+
* Date, so this assumption currently holds end-to-end.
|
|
35484
|
+
* - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
|
|
35485
|
+
* getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
|
|
35486
|
+
* string matches the local calendar day.
|
|
35487
|
+
*
|
|
35488
|
+
* If the vendor ever switches to emitting UTC-midnight timestamps, this
|
|
35489
|
+
* conversion will silently shift the returned date by one day in zones
|
|
35490
|
+
* west of UTC. Any vendor swap should re-verify this contract; the TZ
|
|
35491
|
+
* regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
|
|
35492
|
+
*
|
|
34702
35493
|
* @private
|
|
34703
|
-
* @param {number} time - Unix timestamp
|
|
34704
|
-
* @returns {string} ISO date string (yyyy-mm-dd).
|
|
35494
|
+
* @param {number} time - Unix timestamp (seconds), local midnight of the day.
|
|
35495
|
+
* @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
|
|
34705
35496
|
*/
|
|
34706
35497
|
convertWcTimeToDate(time) {
|
|
34707
35498
|
return dateFormatter$1.toISOFormatString(new Date(time * 1000));
|
|
@@ -34803,8 +35594,8 @@ class AuroDatePicker extends AuroElement {
|
|
|
34803
35594
|
}
|
|
34804
35595
|
}
|
|
34805
35596
|
|
|
34806
|
-
// Focus the calendar grid wrapper (
|
|
34807
|
-
// the SR announcement for the active cell
|
|
35597
|
+
// Focus the calendar grid wrapper. The live region (announced just
|
|
35598
|
+
// below) handles the SR announcement for the active cell.
|
|
34808
35599
|
if (activeCell) {
|
|
34809
35600
|
this.calendar.focusActiveCell();
|
|
34810
35601
|
|
|
@@ -34818,11 +35609,14 @@ class AuroDatePicker extends AuroElement {
|
|
|
34818
35609
|
this.calendar.announceSelection(announcement);
|
|
34819
35610
|
}, 500);
|
|
34820
35611
|
|
|
34821
|
-
// On mobile fullscreen
|
|
34822
|
-
//
|
|
34823
|
-
//
|
|
34824
|
-
|
|
35612
|
+
// On mobile fullscreen — or when an explicit focusDate change has
|
|
35613
|
+
// requested a forced scroll on the next render — scroll the active
|
|
35614
|
+
// cell into view. Doing this here (after activeCellDate has been
|
|
35615
|
+
// resolved by the rAF loop above) prevents a no-op scroll that
|
|
35616
|
+
// would happen if we tried to scroll before the cell was set.
|
|
35617
|
+
if (this.dropdown.isBibFullscreen || this.forceScrollOnNextMobileCalendarRender) {
|
|
34825
35618
|
this.calendar.scrollToActiveCell();
|
|
35619
|
+
this.forceScrollOnNextMobileCalendarRender = false;
|
|
34826
35620
|
}
|
|
34827
35621
|
} else if (attempts < MAX_ATTEMPTS) {
|
|
34828
35622
|
requestAnimationFrame(tryFocus);
|
|
@@ -34854,11 +35648,13 @@ class AuroDatePicker extends AuroElement {
|
|
|
34854
35648
|
this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
|
|
34855
35649
|
}
|
|
34856
35650
|
|
|
35651
|
+
const { signal } = this._listenerAbortController;
|
|
35652
|
+
|
|
34857
35653
|
this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
|
|
34858
35654
|
if (!this.isPopoverVisible) {
|
|
34859
35655
|
this.dropdown.show();
|
|
34860
35656
|
}
|
|
34861
|
-
});
|
|
35657
|
+
}, { signal });
|
|
34862
35658
|
|
|
34863
35659
|
this.dropdown.addEventListener('auroDropdown-toggled', () => {
|
|
34864
35660
|
this.notifyDatepickerToggled();
|
|
@@ -34870,13 +35666,17 @@ class AuroDatePicker extends AuroElement {
|
|
|
34870
35666
|
// what centralDate renders, causing all cells to have tabindex="-1".
|
|
34871
35667
|
this.calendar.activeCellDate = null;
|
|
34872
35668
|
|
|
34873
|
-
//
|
|
34874
|
-
// whichever month the user last navigated to.
|
|
34875
|
-
//
|
|
34876
|
-
|
|
34877
|
-
|
|
35669
|
+
// On open, reset the visible month to a predictable source rather than
|
|
35670
|
+
// whichever month the user last navigated to. Route through updateCentralDate
|
|
35671
|
+
// so centralDate stays first-of-month.
|
|
35672
|
+
// Priority: calendarFocusDate (when valid) -> value (when set) -> today (when neither is set).
|
|
35673
|
+
// Respect consumer-provided centralDate/calendarStartDate/minDate when neither calendarFocusDate nor value is set.
|
|
35674
|
+
if (this.calendarFocusDate && dateFormatter$1.isValidDate(this.calendarFocusDate)) {
|
|
35675
|
+
this.calendarRenderUtil.updateCentralDate(this, this.calendarFocusDateObject);
|
|
35676
|
+
} else if (this.valueObject) {
|
|
35677
|
+
this.calendarRenderUtil.updateCentralDate(this, this.value);
|
|
34878
35678
|
} else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
|
|
34879
|
-
this.
|
|
35679
|
+
this.calendarRenderUtil.updateCentralDate(this, new Date());
|
|
34880
35680
|
}
|
|
34881
35681
|
}
|
|
34882
35682
|
|
|
@@ -34934,8 +35734,15 @@ class AuroDatePicker extends AuroElement {
|
|
|
34934
35734
|
// Always clear the inert flag. Only restore focus to the input when the datepicker
|
|
34935
35735
|
// still has focus (e.g. Escape, date selected) — not when the user tabbed away,
|
|
34936
35736
|
// which would pull them back and require extra Tab presses to escape.
|
|
35737
|
+
//
|
|
35738
|
+
// `_restoreFocusOnClose` is set by the Escape handler in
|
|
35739
|
+
// datepickerKeyboardStrategy.js to force restore even when hasFocus
|
|
35740
|
+
// has already been cleared — hidePopover() (desktop non-modal path)
|
|
35741
|
+
// can drop focus to <body> before this update fires.
|
|
34937
35742
|
this.dropdown.trigger.inert = false;
|
|
34938
|
-
|
|
35743
|
+
const shouldRestoreFocus = this.hasFocus || this._restoreFocusOnClose;
|
|
35744
|
+
this._restoreFocusOnClose = false;
|
|
35745
|
+
if (shouldRestoreFocus) {
|
|
34939
35746
|
requestAnimationFrame(() => {
|
|
34940
35747
|
if (!this.dropdown.isPopoverVisible) {
|
|
34941
35748
|
this.inputList[0].focus();
|
|
@@ -34944,19 +35751,11 @@ class AuroDatePicker extends AuroElement {
|
|
|
34944
35751
|
}
|
|
34945
35752
|
}
|
|
34946
35753
|
|
|
34947
|
-
//
|
|
34948
|
-
|
|
34949
|
-
|
|
34950
|
-
|
|
34951
|
-
|
|
34952
|
-
// we need to wait until the next frame to ensure the calendar is fully rendered
|
|
34953
|
-
// and the area we're trying to scroll to is present in the DOM.
|
|
34954
|
-
setTimeout(() => {
|
|
34955
|
-
this.calendar.scrollMonthIntoView(this.calendarFocusDate);
|
|
34956
|
-
this.forceScrollOnNextMobileCalendarRender = false;
|
|
34957
|
-
}, 0);
|
|
34958
|
-
}
|
|
34959
|
-
});
|
|
35754
|
+
// Note: the forceScrollOnNextMobileCalendarRender scroll-into-view
|
|
35755
|
+
// happens inside focusActiveCellWhenReady() once activeCellDate has
|
|
35756
|
+
// been resolved by its rAF wait — not here in a setTimeout(0), which
|
|
35757
|
+
// fired before the active date was set and silently no-op'd.
|
|
35758
|
+
}, { signal });
|
|
34960
35759
|
|
|
34961
35760
|
// Handle responsive strategy changes while the dropdown is open
|
|
34962
35761
|
// (e.g. resizing from desktop → mobile or vice versa).
|
|
@@ -35003,7 +35802,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35003
35802
|
});
|
|
35004
35803
|
});
|
|
35005
35804
|
}
|
|
35006
|
-
});
|
|
35805
|
+
}, { signal });
|
|
35007
35806
|
}
|
|
35008
35807
|
|
|
35009
35808
|
/**
|
|
@@ -35016,6 +35815,8 @@ class AuroDatePicker extends AuroElement {
|
|
|
35016
35815
|
|
|
35017
35816
|
this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
|
|
35018
35817
|
|
|
35818
|
+
const { signal } = this._listenerAbortController;
|
|
35819
|
+
|
|
35019
35820
|
this.inputList.forEach((input, index) => {
|
|
35020
35821
|
input.addEventListener('input', (event) => {
|
|
35021
35822
|
event.stopPropagation();
|
|
@@ -35027,7 +35828,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35027
35828
|
}
|
|
35028
35829
|
|
|
35029
35830
|
this.notifyValueChanged();
|
|
35030
|
-
});
|
|
35831
|
+
}, { signal });
|
|
35031
35832
|
|
|
35032
35833
|
input.addEventListener('auroFormElement-validated', (evt) => {
|
|
35033
35834
|
// not to bubble up input's validated event.
|
|
@@ -35043,7 +35844,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35043
35844
|
this.validity = evt.detail.validity;
|
|
35044
35845
|
this.errorMessage = evt.detail.message;
|
|
35045
35846
|
}
|
|
35046
|
-
});
|
|
35847
|
+
}, { signal });
|
|
35047
35848
|
});
|
|
35048
35849
|
}
|
|
35049
35850
|
|
|
@@ -35057,19 +35858,32 @@ class AuroDatePicker extends AuroElement {
|
|
|
35057
35858
|
this.calendar.datepicker = this;
|
|
35058
35859
|
this.calendar.dropdown = this.dropdown;
|
|
35059
35860
|
|
|
35861
|
+
const { signal } = this._listenerAbortController;
|
|
35862
|
+
|
|
35060
35863
|
this.calendar.addEventListener('auroCalendar-dateSelected', () => {
|
|
35061
|
-
|
|
35062
|
-
|
|
35864
|
+
// Compare the input's ISO value against the *converted* calendar
|
|
35865
|
+
// timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
|
|
35866
|
+
// strings — comparing the input ISO directly against them would
|
|
35867
|
+
// never match, so the write would fire on every event and emit
|
|
35868
|
+
// redundant input/change activity).
|
|
35869
|
+
if (this.calendar.dateFrom !== undefined) {
|
|
35870
|
+
const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
|
|
35871
|
+
if (this.inputList[0].value !== fromIso) {
|
|
35872
|
+
this.inputList[0].value = fromIso;
|
|
35873
|
+
}
|
|
35063
35874
|
}
|
|
35064
35875
|
|
|
35065
|
-
if (this.inputList[1] && this.calendar.dateTo
|
|
35066
|
-
|
|
35876
|
+
if (this.inputList[1] && this.calendar.dateTo) {
|
|
35877
|
+
const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
|
|
35878
|
+
if (this.inputList[1].value !== toIso) {
|
|
35879
|
+
this.inputList[1].value = toIso;
|
|
35880
|
+
}
|
|
35067
35881
|
}
|
|
35068
|
-
});
|
|
35882
|
+
}, { signal });
|
|
35069
35883
|
|
|
35070
35884
|
this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
|
|
35071
35885
|
this.dropdown.hide();
|
|
35072
|
-
});
|
|
35886
|
+
}, { signal });
|
|
35073
35887
|
|
|
35074
35888
|
this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
|
|
35075
35889
|
const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
|
|
@@ -35079,7 +35893,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35079
35893
|
}
|
|
35080
35894
|
|
|
35081
35895
|
this.notifyMonthChanged(event);
|
|
35082
|
-
});
|
|
35896
|
+
}, { signal });
|
|
35083
35897
|
}
|
|
35084
35898
|
|
|
35085
35899
|
/**
|
|
@@ -35088,10 +35902,17 @@ class AuroDatePicker extends AuroElement {
|
|
|
35088
35902
|
* @returns {void}
|
|
35089
35903
|
*/
|
|
35090
35904
|
configureDatepicker() {
|
|
35905
|
+
// These listeners are on `this` (the host), so they would GC with the
|
|
35906
|
+
// host even without the abort signal — see the leak rationale on
|
|
35907
|
+
// `_listenerAbortController`. The signal is still passed for uniform
|
|
35908
|
+
// cleanup semantics with the child-element listeners in the other
|
|
35909
|
+
// configure* methods.
|
|
35910
|
+
const { signal } = this._listenerAbortController;
|
|
35911
|
+
|
|
35091
35912
|
this.addEventListener('focusin', () => {
|
|
35092
35913
|
this.touched = true;
|
|
35093
35914
|
this.hasFocus = true;
|
|
35094
|
-
});
|
|
35915
|
+
}, { signal });
|
|
35095
35916
|
|
|
35096
35917
|
this.addEventListener('focusout', () => {
|
|
35097
35918
|
this.hasFocus = false;
|
|
@@ -35103,7 +35924,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35103
35924
|
if (!this.matches(':focus-within')) {
|
|
35104
35925
|
this.validate();
|
|
35105
35926
|
}
|
|
35106
|
-
});
|
|
35927
|
+
}, { signal });
|
|
35107
35928
|
|
|
35108
35929
|
if (this.valueObject) {
|
|
35109
35930
|
this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
|
|
@@ -35301,6 +36122,41 @@ class AuroDatePicker extends AuroElement {
|
|
|
35301
36122
|
return this.validity !== undefined && this.validity !== 'valid';
|
|
35302
36123
|
}
|
|
35303
36124
|
|
|
36125
|
+
/**
|
|
36126
|
+
* Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
|
|
36127
|
+
* spans every datepicker instance on the page; lives on the class (not
|
|
36128
|
+
* at module scope) so it stays an encapsulated implementation detail of
|
|
36129
|
+
* this component and does not interfere with WCA's class-JSDoc
|
|
36130
|
+
* attachment.
|
|
36131
|
+
* @private
|
|
36132
|
+
*/
|
|
36133
|
+
static _warnedInvalidLocales = new Set();
|
|
36134
|
+
|
|
36135
|
+
/**
|
|
36136
|
+
* Logs a one-time `console.debug` when an unsupported locale falls back to
|
|
36137
|
+
* en-US. Deduped by the offending tag so noisy re-renders that resurface
|
|
36138
|
+
* the same bad value stay quiet, but each new bad value still signals so
|
|
36139
|
+
* consumers can spot the typo or missing tag.
|
|
36140
|
+
* @private
|
|
36141
|
+
* @param {string|undefined} badLocale - The locale value that failed.
|
|
36142
|
+
* @returns {void}
|
|
36143
|
+
*/
|
|
36144
|
+
_warnInvalidLocale(badLocale) {
|
|
36145
|
+
// Stringify without coalescing — `String(undefined)` / `String(null)`
|
|
36146
|
+
// surface the actual offending value in the log, instead of the
|
|
36147
|
+
// ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
|
|
36148
|
+
// Dedup still works correctly because each unique stringification
|
|
36149
|
+
// becomes its own Set entry.
|
|
36150
|
+
const key = String(badLocale);
|
|
36151
|
+
const seen = AuroDatePicker._warnedInvalidLocales;
|
|
36152
|
+
if (seen.has(key)) {
|
|
36153
|
+
return;
|
|
36154
|
+
}
|
|
36155
|
+
seen.add(key);
|
|
36156
|
+
// eslint-disable-next-line no-console
|
|
36157
|
+
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".`);
|
|
36158
|
+
}
|
|
36159
|
+
|
|
35304
36160
|
/**
|
|
35305
36161
|
* Lifecycle method to check if the locale is valid.
|
|
35306
36162
|
* @ignore
|
|
@@ -35311,10 +36167,15 @@ class AuroDatePicker extends AuroElement {
|
|
|
35311
36167
|
if (changedProperties.has('locale')) {
|
|
35312
36168
|
try {
|
|
35313
36169
|
const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
|
|
35314
|
-
|
|
36170
|
+
if (supported.length > 0) {
|
|
36171
|
+
this._validLocale = this.locale;
|
|
36172
|
+
} else {
|
|
36173
|
+
this._validLocale = 'en-US';
|
|
36174
|
+
this._warnInvalidLocale(this.locale);
|
|
36175
|
+
}
|
|
35315
36176
|
} catch {
|
|
35316
|
-
console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
|
|
35317
36177
|
this._validLocale = 'en-US';
|
|
36178
|
+
this._warnInvalidLocale(this.locale);
|
|
35318
36179
|
}
|
|
35319
36180
|
|
|
35320
36181
|
const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
|
|
@@ -35327,6 +36188,18 @@ class AuroDatePicker extends AuroElement {
|
|
|
35327
36188
|
this.calendar.requestUpdate();
|
|
35328
36189
|
this.dispatchEvent(new CustomEvent('auroDatePicker-newSlotContent'));
|
|
35329
36190
|
}
|
|
36191
|
+
|
|
36192
|
+
// Range invariant: if a value change (from click or programmatic) has
|
|
36193
|
+
// moved start past end, clear valueEnd here so both properties land in
|
|
36194
|
+
// the SAME reactive cycle. Doing it in updated() would schedule a
|
|
36195
|
+
// second cycle after cellClickActive/wasCellClick has already been
|
|
36196
|
+
// consumed by the value branch, leaving the valueEnd branch to run
|
|
36197
|
+
// with a stale handshake and racing with any intervening programmatic
|
|
36198
|
+
// value assignments.
|
|
36199
|
+
if ((changedProperties.has('value') || changedProperties.has('valueEnd')) &&
|
|
36200
|
+
this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
|
|
36201
|
+
this.valueEnd = undefined;
|
|
36202
|
+
}
|
|
35330
36203
|
}
|
|
35331
36204
|
|
|
35332
36205
|
updated(changedProperties) {
|
|
@@ -35341,10 +36214,6 @@ class AuroDatePicker extends AuroElement {
|
|
|
35341
36214
|
}
|
|
35342
36215
|
}
|
|
35343
36216
|
|
|
35344
|
-
if (changedProperties.has('calendarFocusDate')) {
|
|
35345
|
-
this.handleFocusDateChange();
|
|
35346
|
-
}
|
|
35347
|
-
|
|
35348
36217
|
if (changedProperties.has('calendarStartDate')) {
|
|
35349
36218
|
this.calendar.setAttribute('calendarStartDate', this.calendarStartDate || '');
|
|
35350
36219
|
}
|
|
@@ -35394,10 +36263,12 @@ class AuroDatePicker extends AuroElement {
|
|
|
35394
36263
|
|
|
35395
36264
|
if (this.value && this.value.length === this.inputList[0].lengthForType && !(this.wasCellClick && this.range)) {
|
|
35396
36265
|
// Skip centralDate update when user clicked a cell in range mode
|
|
35397
|
-
// to prevent the displayed months from shifting
|
|
35398
|
-
|
|
35399
|
-
//
|
|
35400
|
-
//
|
|
36266
|
+
// to prevent the displayed months from shifting. Route through
|
|
36267
|
+
// updateCentralDate so centralDate stays first-of-month — direct
|
|
36268
|
+
// assignment of the raw value briefly holds a mid-month string
|
|
36269
|
+
// and violates the invariant that observers (e.g. calendar sync)
|
|
36270
|
+
// rely on.
|
|
36271
|
+
this.calendarRenderUtil.updateCentralDate(this, this.value);
|
|
35401
36272
|
}
|
|
35402
36273
|
|
|
35403
36274
|
this.setHasValue();
|
|
@@ -35431,7 +36302,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35431
36302
|
// update the calendar
|
|
35432
36303
|
if (this.valueEndObject) {
|
|
35433
36304
|
this.calendar.dateTo = this.convertToWcValidTime(this.valueEndObject);
|
|
35434
|
-
if (!
|
|
36305
|
+
if (!this.wasCellClick) {
|
|
35435
36306
|
this.calendarRenderUtil.updateCentralDate(this, this.valueEndObject);
|
|
35436
36307
|
}
|
|
35437
36308
|
} else {
|
|
@@ -35455,16 +36326,23 @@ class AuroDatePicker extends AuroElement {
|
|
|
35455
36326
|
|
|
35456
36327
|
if (this.valueEnd && this.valueEnd.length === this.inputList[1].lengthForType && !this.wasCellClick) {
|
|
35457
36328
|
// Skip centralDate update when user clicked a cell in range mode
|
|
35458
|
-
// to prevent the displayed months from shifting
|
|
35459
|
-
|
|
35460
|
-
//
|
|
35461
|
-
|
|
36329
|
+
// to prevent the displayed months from shifting. Route through
|
|
36330
|
+
// updateCentralDate to preserve the first-of-month invariant
|
|
36331
|
+
// (see matching comment in the value branch above).
|
|
36332
|
+
this.calendarRenderUtil.updateCentralDate(this, this.valueEnd);
|
|
35462
36333
|
}
|
|
35463
36334
|
|
|
35464
36335
|
this.validate();
|
|
35465
36336
|
this.setHasValue();
|
|
35466
36337
|
}
|
|
35467
36338
|
|
|
36339
|
+
// Run focus-date handling AFTER value/valueEnd so that when a consumer sets
|
|
36340
|
+
// calendarFocusDate together with value, the focus date wins for the visible
|
|
36341
|
+
// month instead of being overwritten by the value branch's updateCentralDate.
|
|
36342
|
+
if (changedProperties.has('calendarFocusDate')) {
|
|
36343
|
+
this.handleFocusDateChange();
|
|
36344
|
+
}
|
|
36345
|
+
|
|
35468
36346
|
if (changedProperties.has('error')) {
|
|
35469
36347
|
// Error attribute is passed down to the last input in the list to control the error state
|
|
35470
36348
|
// This is done to prevent error icon from displaying on both inputs in range support
|
|
@@ -35482,10 +36360,6 @@ class AuroDatePicker extends AuroElement {
|
|
|
35482
36360
|
this.validation.validate(lastInput, true);
|
|
35483
36361
|
}
|
|
35484
36362
|
|
|
35485
|
-
if (this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
|
|
35486
|
-
this.valueEnd = undefined;
|
|
35487
|
-
}
|
|
35488
|
-
|
|
35489
36363
|
// This resets the datepicker when the minDate is set to a new value that is
|
|
35490
36364
|
// a later date than the current value date
|
|
35491
36365
|
if (changedProperties.has('minDate') && this.minDate) {
|
|
@@ -35577,9 +36451,28 @@ class AuroDatePicker extends AuroElement {
|
|
|
35577
36451
|
* @returns {void}
|
|
35578
36452
|
*/
|
|
35579
36453
|
handleClick(event) {
|
|
35580
|
-
|
|
35581
|
-
|
|
35582
|
-
const
|
|
36454
|
+
const path = event.composedPath();
|
|
36455
|
+
const [initTarget] = path;
|
|
36456
|
+
const pathIncludesBib = path.includes(this.dropdown?.bibContent);
|
|
36457
|
+
const triggerIsInert = this.dropdown?.trigger?.inert;
|
|
36458
|
+
|
|
36459
|
+
// When desktopModal is open, the datepicker marks the dropdown's #trigger
|
|
36460
|
+
// element inert to keep AT and Tab off the input. Inert also blocks pointer
|
|
36461
|
+
// events, so a click on the visible trigger area passes through to the
|
|
36462
|
+
// wrapper <div> that sits alongside #trigger in the dropdown's shadow root.
|
|
36463
|
+
// composedPath() then no longer contains #trigger, and the floater's
|
|
36464
|
+
// window-level click-outside handler treats the click as an outside click
|
|
36465
|
+
// and closes the bib. Suppress that misdetection here: if the click lands
|
|
36466
|
+
// inside the trigger's bounds and outside the bib, stop propagation before
|
|
36467
|
+
// it reaches the window listener.
|
|
36468
|
+
if (this.dropdown?.isPopoverVisible && triggerIsInert && !pathIncludesBib) {
|
|
36469
|
+
const triggerRect = this.dropdown.trigger?.getBoundingClientRect();
|
|
36470
|
+
if (triggerRect &&
|
|
36471
|
+
event.clientX >= triggerRect.left && event.clientX <= triggerRect.right &&
|
|
36472
|
+
event.clientY >= triggerRect.top && event.clientY <= triggerRect.bottom) {
|
|
36473
|
+
event.stopPropagation();
|
|
36474
|
+
}
|
|
36475
|
+
}
|
|
35583
36476
|
|
|
35584
36477
|
// Determine if the current layout requires special handling
|
|
35585
36478
|
const layoutRequiresHandling = ['snowflake'].includes(this.layout);
|
|
@@ -35588,7 +36481,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35588
36481
|
const targetIsInput = initTarget.tagName === 'INPUT';
|
|
35589
36482
|
const isFocusAlreadyOnInput = this.inputList.includes(this.shadowRoot.activeElement);
|
|
35590
36483
|
|
|
35591
|
-
if (layoutRequiresHandling && !targetIsInput && !isFocusAlreadyOnInput && !
|
|
36484
|
+
if (layoutRequiresHandling && !targetIsInput && !isFocusAlreadyOnInput && !pathIncludesBib) {
|
|
35592
36485
|
// Focus the first input
|
|
35593
36486
|
this.inputList[0].focus();
|
|
35594
36487
|
}
|
|
@@ -35600,7 +36493,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35600
36493
|
* @returns {void}
|
|
35601
36494
|
*/
|
|
35602
36495
|
configureClickHandler() {
|
|
35603
|
-
this.addEventListener('click', this.handleClick);
|
|
36496
|
+
this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
|
|
35604
36497
|
}
|
|
35605
36498
|
|
|
35606
36499
|
firstUpdated() {
|
|
@@ -35608,6 +36501,15 @@ class AuroDatePicker extends AuroElement {
|
|
|
35608
36501
|
// Add the tag name as an attribute if it is different than the component name
|
|
35609
36502
|
this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
|
|
35610
36503
|
|
|
36504
|
+
// If the element was disconnected before this first render finished,
|
|
36505
|
+
// disconnectedCallback's microtask already aborted the controller. The
|
|
36506
|
+
// connectedCallback reinit guard skips that case because `hasUpdated`
|
|
36507
|
+
// is still false. Mint a fresh controller here so configure* registers
|
|
36508
|
+
// listeners against a live signal.
|
|
36509
|
+
if (this._listenerAbortController.signal.aborted) {
|
|
36510
|
+
this._listenerAbortController = new AbortController();
|
|
36511
|
+
}
|
|
36512
|
+
|
|
35611
36513
|
this.configureDropdown();
|
|
35612
36514
|
this.configureInput();
|
|
35613
36515
|
this.configureCalendar();
|
|
@@ -35619,9 +36521,36 @@ class AuroDatePicker extends AuroElement {
|
|
|
35619
36521
|
connectedCallback() {
|
|
35620
36522
|
super.connectedCallback();
|
|
35621
36523
|
|
|
36524
|
+
// True reconnect after `disconnectedCallback` aborted our controller:
|
|
36525
|
+
// the existing signal is dead, so listeners registered against it
|
|
36526
|
+
// would never fire. Create a fresh controller and re-run the
|
|
36527
|
+
// configure* wiring (each method is idempotent — it just re-caches
|
|
36528
|
+
// child refs and re-registers listeners against the new signal).
|
|
36529
|
+
// `hasUpdated` gates this so the *first* connect (which precedes
|
|
36530
|
+
// firstUpdated) still falls through to firstUpdated's initial wiring.
|
|
36531
|
+
if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
|
|
36532
|
+
this._listenerAbortController = new AbortController();
|
|
36533
|
+
this.configureDropdown();
|
|
36534
|
+
this.configureInput();
|
|
36535
|
+
this.configureCalendar();
|
|
36536
|
+
this.configureDatepicker();
|
|
36537
|
+
this.configureClickHandler();
|
|
36538
|
+
}
|
|
36539
|
+
|
|
35622
36540
|
this.locale = this.domHandler.getLocale(this);
|
|
35623
36541
|
}
|
|
35624
36542
|
|
|
36543
|
+
disconnectedCallback() {
|
|
36544
|
+
super.disconnectedCallback();
|
|
36545
|
+
// Defer so that re-parenting (auro-drawer slotting it into a dialog,
|
|
36546
|
+
// for example) does not abort listeners we still need after reconnect.
|
|
36547
|
+
queueMicrotask(() => {
|
|
36548
|
+
if (!this.isConnected) {
|
|
36549
|
+
this._listenerAbortController.abort();
|
|
36550
|
+
}
|
|
36551
|
+
});
|
|
36552
|
+
}
|
|
36553
|
+
|
|
35625
36554
|
// layout render methods
|
|
35626
36555
|
// ------------------------------------
|
|
35627
36556
|
|
|
@@ -35828,6 +36757,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35828
36757
|
}
|
|
35829
36758
|
<span slot="ariaLabel.clear">${this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || i18n(this.lang, 'clearInput')}</span>
|
|
35830
36759
|
<span slot="label"><slot name="fromLabel"></slot></span>
|
|
36760
|
+
<slot name="optionalFromLabel" slot="optionalLabel"> (optional)</slot>
|
|
35831
36761
|
</${this.inputTag}>
|
|
35832
36762
|
</div>
|
|
35833
36763
|
|
|
@@ -35872,6 +36802,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35872
36802
|
}
|
|
35873
36803
|
<span slot="ariaLabel.clear">${this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || i18n(this.lang, 'clearInput')}</span>
|
|
35874
36804
|
<span slot="label"><slot name="toLabel"></slot></span>
|
|
36805
|
+
<slot name="optionalToLabel" slot="optionalLabel"> (optional)</slot>
|
|
35875
36806
|
</${this.inputTag}>
|
|
35876
36807
|
</div>
|
|
35877
36808
|
` : undefined}
|
|
@@ -36020,8 +36951,8 @@ class AuroDatePicker extends AuroElement {
|
|
|
36020
36951
|
<slot slot="bib.fullscreen.dateLabel" name="bib.fullscreen.dateLabel" @slotchange="${this.handleSlotToSlot}"></slot>
|
|
36021
36952
|
<slot slot="bib.fullscreen.toLabel" name="bib.fullscreen.toLabel" @slotchange="${this.handleSlotToSlot}"></slot>
|
|
36022
36953
|
<slot slot="bib.fullscreen.fromLabel" name="bib.fullscreen.fromLabel" @slotchange="${this.handleSlotToSlot}"></slot>
|
|
36023
|
-
<span slot="bib.fullscreen.fromStr">${AuroInputUtil.toFormattedValue(this.valueObject, this.format) || html$1`<span class="placeholderDate">${(this.format || 'mm/dd/yyyy').toUpperCase()}</span>`}</span>
|
|
36024
|
-
${this.range ? html$1`<span slot="bib.fullscreen.toStr">${AuroInputUtil.toFormattedValue(this.valueEndObject, this.format) || html$1`<span class="placeholderDate">${(this.format || 'mm/dd/yyyy').toUpperCase()}</span>`}</span>` : undefined}
|
|
36954
|
+
<span slot="bib.fullscreen.fromStr" class="body-default">${AuroInputUtil.toFormattedValue(this.valueObject, this.format) || html$1`<span class="placeholderDate">${(this.format || 'mm/dd/yyyy').toUpperCase()}</span>`}</span>
|
|
36955
|
+
${this.range ? html$1`<span slot="bib.fullscreen.toStr" class="body-default">${AuroInputUtil.toFormattedValue(this.valueEndObject, this.format) || html$1`<span class="placeholderDate">${(this.format || 'mm/dd/yyyy').toUpperCase()}</span>`}</span>` : undefined}
|
|
36025
36956
|
</auro-formkit-calendar>
|
|
36026
36957
|
`;
|
|
36027
36958
|
}
|