@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
|
@@ -559,8 +559,21 @@ let AuroFormValidation$1 = class AuroFormValidation {
|
|
|
559
559
|
return;
|
|
560
560
|
}
|
|
561
561
|
|
|
562
|
-
// Validate that the date passed was the correct format and is a valid date
|
|
562
|
+
// Validate that the date passed was the correct format and is a valid date.
|
|
563
|
+
// For partial date formats, valueObject is never populated; validate them directly.
|
|
563
564
|
if (elem.value && !elem.valueObject) {
|
|
565
|
+
const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
|
|
566
|
+
|
|
567
|
+
if (isPartialDateFormat) {
|
|
568
|
+
if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
|
|
569
|
+
elem.validity = 'patternMismatch';
|
|
570
|
+
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
571
|
+
}
|
|
572
|
+
// Partial date format — validate directly and skip max/min checks since valueObject is undefined.
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
// Full date format with no valueObject means the value is not a valid calendar date.
|
|
564
577
|
elem.validity = 'patternMismatch';
|
|
565
578
|
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
566
579
|
return;
|
|
@@ -657,15 +670,17 @@ let AuroFormValidation$1 = class AuroFormValidation {
|
|
|
657
670
|
);
|
|
658
671
|
}
|
|
659
672
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
673
|
+
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
674
|
+
|
|
675
|
+
// If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
|
|
676
|
+
// Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
|
|
677
|
+
// field (datepicker is the intended consumer — start/end are independently required).
|
|
678
|
+
if (this.auroInputElements?.length === 2 && !isCombobox) {
|
|
679
|
+
if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
|
|
663
680
|
hasValue = false;
|
|
664
681
|
}
|
|
665
682
|
}
|
|
666
683
|
|
|
667
|
-
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
668
|
-
|
|
669
684
|
if (isCombobox) {
|
|
670
685
|
|
|
671
686
|
if (!elem.persistInput || elem.behavior === "filter") {
|
|
@@ -764,7 +779,7 @@ let AuroFormValidation$1 = class AuroFormValidation {
|
|
|
764
779
|
} else if (this.runtimeUtils.elementMatch(elem, 'auro-input') && elem.errorMessage === '') {
|
|
765
780
|
const input = elem.renderRoot.querySelector('input');
|
|
766
781
|
|
|
767
|
-
if (input.validationMessage.length > 0) {
|
|
782
|
+
if (input && input.validationMessage.length > 0) {
|
|
768
783
|
elem.errorMessage = input.validationMessage;
|
|
769
784
|
}
|
|
770
785
|
} else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox') && elem.errorMessage === '') {
|
|
@@ -1373,7 +1388,7 @@ function normalizeDates$1(context, ...dates) {
|
|
|
1373
1388
|
* const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
|
|
1374
1389
|
* //=> Tue Sep 02 2014 00:00:00
|
|
1375
1390
|
*/
|
|
1376
|
-
function startOfDay$
|
|
1391
|
+
function startOfDay$1(date, options) {
|
|
1377
1392
|
const _date = toDate$1(date, options?.in);
|
|
1378
1393
|
_date.setHours(0, 0, 0, 0);
|
|
1379
1394
|
return _date;
|
|
@@ -1421,8 +1436,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
|
|
|
1421
1436
|
earlierDate,
|
|
1422
1437
|
);
|
|
1423
1438
|
|
|
1424
|
-
const laterStartOfDay = startOfDay$
|
|
1425
|
-
const earlierStartOfDay = startOfDay$
|
|
1439
|
+
const laterStartOfDay = startOfDay$1(laterDate_);
|
|
1440
|
+
const earlierStartOfDay = startOfDay$1(earlierDate_);
|
|
1426
1441
|
|
|
1427
1442
|
const laterTimestamp =
|
|
1428
1443
|
+laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
|
|
@@ -10269,8 +10284,6 @@ try {
|
|
|
10269
10284
|
globalThis.IMask = IMask$1;
|
|
10270
10285
|
} catch {}
|
|
10271
10286
|
|
|
10272
|
-
/* eslint-disable max-lines */
|
|
10273
|
-
|
|
10274
10287
|
let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
10275
10288
|
|
|
10276
10289
|
/**
|
|
@@ -10313,7 +10326,7 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10313
10326
|
/**
|
|
10314
10327
|
* Converts an IMask-style date mask to a date-fns compatible format string.
|
|
10315
10328
|
* @param {string} mask - IMask date mask (e.g. "MM/DD/YYYY").
|
|
10316
|
-
* @returns {string} date-fns format string (e.g. "MM/dd/yyyy").
|
|
10329
|
+
* @returns {string} A date-fns format string (e.g. "MM/dd/yyyy").
|
|
10317
10330
|
*/
|
|
10318
10331
|
toDateFnsMask(mask) {
|
|
10319
10332
|
return mask
|
|
@@ -10413,10 +10426,11 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10413
10426
|
const dateFormat = format || this.overrideFormat || pattern || 'mm/dd/yyyy';
|
|
10414
10427
|
|
|
10415
10428
|
if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
|
|
10416
|
-
const
|
|
10429
|
+
const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
|
|
10430
|
+
const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
|
|
10417
10431
|
return {
|
|
10418
10432
|
mask: IMask$1.MaskedRange,
|
|
10419
|
-
from:
|
|
10433
|
+
from: fromValue,
|
|
10420
10434
|
to: maxValue,
|
|
10421
10435
|
lazy: true,
|
|
10422
10436
|
placeholderChar: '',
|
|
@@ -10424,7 +10438,8 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10424
10438
|
return value.toString().padStart(dateFormat.length, '0');
|
|
10425
10439
|
},
|
|
10426
10440
|
parse(str) {
|
|
10427
|
-
|
|
10441
|
+
const num = parseInt(str, 10);
|
|
10442
|
+
return isNaN(num) ? null : num;
|
|
10428
10443
|
}
|
|
10429
10444
|
};
|
|
10430
10445
|
}
|
|
@@ -10488,6 +10503,49 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10488
10503
|
return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
|
|
10489
10504
|
}
|
|
10490
10505
|
|
|
10506
|
+
/**
|
|
10507
|
+
* Validates a value against a partial date format (one that lacks yy/mm/dd all three).
|
|
10508
|
+
* Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
|
|
10509
|
+
* a date-fns parse + round-trip to confirm both validity and exact formatting.
|
|
10510
|
+
* @param {string} value - The user-facing display value.
|
|
10511
|
+
* @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
|
|
10512
|
+
* @returns {boolean}
|
|
10513
|
+
*/
|
|
10514
|
+
isValidPartialDate(value, format) {
|
|
10515
|
+
if (!value || !format) {
|
|
10516
|
+
return false;
|
|
10517
|
+
}
|
|
10518
|
+
const normalizedFormat = format.toLowerCase();
|
|
10519
|
+
|
|
10520
|
+
if (normalizedFormat === 'dd') {
|
|
10521
|
+
const num = Number(value);
|
|
10522
|
+
return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
|
|
10523
|
+
}
|
|
10524
|
+
if (normalizedFormat === 'yy') {
|
|
10525
|
+
const num = Number(value);
|
|
10526
|
+
return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
|
|
10527
|
+
}
|
|
10528
|
+
if (normalizedFormat === 'yyyy') {
|
|
10529
|
+
const num = Number(value);
|
|
10530
|
+
return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
|
|
10531
|
+
}
|
|
10532
|
+
|
|
10533
|
+
const dateFnsMask = this.toDateFnsMask(normalizedFormat);
|
|
10534
|
+
// Use the 1st of the current month as the reference so that formats
|
|
10535
|
+
// omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
|
|
10536
|
+
const referenceDate = new Date();
|
|
10537
|
+
referenceDate.setDate(1);
|
|
10538
|
+
const parsed = parse$1(value, dateFnsMask, referenceDate);
|
|
10539
|
+
if (!isValid$1(parsed) || format$1(parsed, dateFnsMask) !== value) {
|
|
10540
|
+
return false;
|
|
10541
|
+
}
|
|
10542
|
+
if (normalizedFormat.includes('yyyy')) {
|
|
10543
|
+
const year = parsed.getFullYear();
|
|
10544
|
+
return year >= 1900 && year <= 2100;
|
|
10545
|
+
}
|
|
10546
|
+
return true;
|
|
10547
|
+
}
|
|
10548
|
+
|
|
10491
10549
|
/**
|
|
10492
10550
|
* Converts a display string to its model value.
|
|
10493
10551
|
* For full date formats, converts the display string to an ISO date string.
|
|
@@ -10524,6 +10582,13 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
|
|
|
10524
10582
|
* @returns {string | undefined}
|
|
10525
10583
|
*/
|
|
10526
10584
|
toFormattedValue(valueObject, format) {
|
|
10585
|
+
// Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
|
|
10586
|
+
// `format` argument has to fail gracefully rather than throw on
|
|
10587
|
+
// `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
|
|
10588
|
+
// as "no format → no display value".
|
|
10589
|
+
if (!format) {
|
|
10590
|
+
return undefined;
|
|
10591
|
+
}
|
|
10527
10592
|
const normalizedFormat = format.toLowerCase();
|
|
10528
10593
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
10529
10594
|
|
|
@@ -10803,11 +10868,11 @@ var snowflakeStyle = i$3`:host([layout*=snowflake]) [auro-input]{flex:1;text-ali
|
|
|
10803
10868
|
|
|
10804
10869
|
var snowflakeColors = i$3`:host([layout=snowflake]) [auro-dropdown]:not(:is([error],.hasFocus)){--ds-auro-dropdown-trigger-border-color: transparent}`;
|
|
10805
10870
|
|
|
10806
|
-
var styleCss$7 = i$3`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}: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}`;
|
|
10871
|
+
var styleCss$7 = i$3`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}: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}`;
|
|
10807
10872
|
|
|
10808
|
-
var colorCss$7 = i$3`.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)}}`;
|
|
10873
|
+
var colorCss$7 = i$3`.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)}}`;
|
|
10809
10874
|
|
|
10810
|
-
var styleCss$6 = i$3`: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)}`;
|
|
10875
|
+
var styleCss$6 = i$3`: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)}`;
|
|
10811
10876
|
|
|
10812
10877
|
var colorCss$6 = i$3`: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)}`;
|
|
10813
10878
|
|
|
@@ -10905,8 +10970,8 @@ class RangeDatepickerCell extends i$1 {
|
|
|
10905
10970
|
const parsedDateFrom = parseInt(dateFrom, 10);
|
|
10906
10971
|
const parsedDateTo = parseInt(dateTo, 10);
|
|
10907
10972
|
if (day) {
|
|
10908
|
-
if (getTime(startOfDay$
|
|
10909
|
-
getTime(startOfDay$
|
|
10973
|
+
if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
|
|
10974
|
+
getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
|
|
10910
10975
|
this.selected = true;
|
|
10911
10976
|
}
|
|
10912
10977
|
if (((hoveredDate === day.date || day.date < hoveredDate) &&
|
|
@@ -11094,7 +11159,7 @@ class RangeDatepickerCalendar extends i$1 {
|
|
|
11094
11159
|
this.dayNamesOfTheWeek = [];
|
|
11095
11160
|
this.daysOfMonth = [];
|
|
11096
11161
|
this._locale = null;
|
|
11097
|
-
this.currentDate = parseInt(format$1(startOfDay$
|
|
11162
|
+
this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
|
|
11098
11163
|
this.localeChanged();
|
|
11099
11164
|
this.yearAndMonthChanged(this.year, this.month);
|
|
11100
11165
|
}
|
|
@@ -11568,7 +11633,7 @@ __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "dayNamesO
|
|
|
11568
11633
|
__decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
|
|
11569
11634
|
AuroLibraryRuntimeUtils$5.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
|
|
11570
11635
|
|
|
11571
|
-
var styleCss$5 = i$3`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
|
|
11636
|
+
var styleCss$5 = i$3`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.rangeDepartDate.lastHoveredDate::before{border-radius:10px}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
|
|
11572
11637
|
|
|
11573
11638
|
var colorCss$5 = i$3`:host ::slotted([slot^=date_]){color:var(--ds-auro-calendar-cell-price-text-color)}:host ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success, #447a1f)}:host .day{border-color:var(--ds-auro-calendar-cell-border-color);background-color:var(--ds-auro-calendar-cell-container-color);color:var(--ds-auro-calendar-cell-text-color)}:host .day.activeCell:not(.selected){--ds-auro-calendar-cell-container-color: var(--ds-auro-calendar-cell-in-range-color);border-color:var(--ds-advanced-color-state-selected);outline-color:var(--ds-auro-calendar-cell-container-color)}:host .day.selected{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected, #01426a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.selected ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success-subtle, #d6eac7)}:host .day.selected:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected-hover, #00274a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.reference:after{border-color:var(--ds-basic-color-border-default, #959595);box-shadow:inset 0 0 0 2px var(--ds-basic-color-surface-default, #ffffff)}:host .day.reference:hover::after{box-shadow:inset 0 0 0 2px var(--ds-advanced-color-shared-background-muted, #f7f7f7)}:host .day:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host .day.disabled{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.blackout{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.inRange:before,:host .day.rangeDepartDate:before,:host .day.rangeReturnDate:before,:host .day.lastHoveredDate:before{background-color:var(--ds-auro-calendar-cell-in-range-color)}:host .day.sameDateTrip:before{--ds-auro-calendar-cell-in-range-color: transparent}`;
|
|
11574
11639
|
|
|
@@ -11593,13 +11658,108 @@ let s$2 = class s{registerComponent(e,t){customElements.get(e)||customElements.d
|
|
|
11593
11658
|
|
|
11594
11659
|
var popoverVersion = '6.0.1';
|
|
11595
11660
|
|
|
11596
|
-
|
|
11661
|
+
/**
|
|
11662
|
+
* Single source of truth for parsing and matching blackout dates across the
|
|
11663
|
+
* datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
|
|
11664
|
+
* pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
|
|
11665
|
+
* helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
|
|
11666
|
+
* `disabledDays` rules are defined exactly once.
|
|
11667
|
+
*/
|
|
11597
11668
|
|
|
11598
|
-
|
|
11599
|
-
|
|
11600
|
-
|
|
11601
|
-
|
|
11602
|
-
|
|
11669
|
+
/**
|
|
11670
|
+
* Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
|
|
11671
|
+
* representing local midnight on that calendar day. Returns `null` for
|
|
11672
|
+
* inputs that don't parse to a finite timestamp.
|
|
11673
|
+
*
|
|
11674
|
+
* Uses the `new Date(year, monthIndex, day)` constructor (NOT
|
|
11675
|
+
* `new Date(isoStr)`) so the result is local-midnight rather than UTC
|
|
11676
|
+
* midnight — required to keep the calendar grid aligned with the user's
|
|
11677
|
+
* local calendar day in negative-offset timezones.
|
|
11678
|
+
*
|
|
11679
|
+
* @param {string} isoStr - Date string in `YYYY-MM-DD` format.
|
|
11680
|
+
* @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
|
|
11681
|
+
*/
|
|
11682
|
+
function parseIsoToTimestamp(isoStr) {
|
|
11683
|
+
// Strict YYYY-MM-DD matcher with named groups. Rejects trailing garbage
|
|
11684
|
+
// ("2024x-01-01"), short segments ("2024-1-1"), and any non-digit
|
|
11685
|
+
// characters. `parseInt` alone accepted both because it stops at the
|
|
11686
|
+
// first non-digit and doesn't require a minimum length.
|
|
11687
|
+
const ISO_DATE_RE = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
|
|
11688
|
+
const MAX_MONTH = 12;
|
|
11689
|
+
const MAX_DAY = 31;
|
|
11690
|
+
|
|
11691
|
+
if (typeof isoStr !== 'string') {
|
|
11692
|
+
return null;
|
|
11693
|
+
}
|
|
11694
|
+
const match = ISO_DATE_RE.exec(isoStr);
|
|
11695
|
+
if (!match) {
|
|
11696
|
+
return null;
|
|
11697
|
+
}
|
|
11698
|
+
const year = Number(match.groups.year);
|
|
11699
|
+
const month = Number(match.groups.month);
|
|
11700
|
+
const day = Number(match.groups.day);
|
|
11701
|
+
// Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
|
|
11702
|
+
// silently normalizes those to a different calendar day, which would
|
|
11703
|
+
// disable the wrong date if we let the result through.
|
|
11704
|
+
if (month < 1 || month > MAX_MONTH || day < 1 || day > MAX_DAY) {
|
|
11705
|
+
return null;
|
|
11706
|
+
}
|
|
11707
|
+
const date = new Date(year, month - 1, day);
|
|
11708
|
+
// Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
|
|
11709
|
+
// After construction, getFullYear/getMonth/getDate should match the inputs.
|
|
11710
|
+
if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
|
|
11711
|
+
return null;
|
|
11712
|
+
}
|
|
11713
|
+
const ts = Math.floor(date.getTime() / 1000);
|
|
11714
|
+
return Number.isFinite(ts) ? ts : null;
|
|
11715
|
+
}
|
|
11716
|
+
|
|
11717
|
+
/**
|
|
11718
|
+
* Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
|
|
11719
|
+
* legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
|
|
11720
|
+
* array. Use this for O(1) membership checks in hot paths.
|
|
11721
|
+
*
|
|
11722
|
+
* @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
|
|
11723
|
+
* @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
|
|
11724
|
+
* @returns {Set<number>}
|
|
11725
|
+
*/
|
|
11726
|
+
function buildBlackoutSet(disabledDays, blackoutDates) {
|
|
11727
|
+
const set = new Set();
|
|
11728
|
+
if (Array.isArray(disabledDays)) {
|
|
11729
|
+
for (const day of disabledDays) {
|
|
11730
|
+
const ts = parseInt(day, 10);
|
|
11731
|
+
if (Number.isFinite(ts)) {
|
|
11732
|
+
set.add(ts);
|
|
11733
|
+
}
|
|
11734
|
+
}
|
|
11735
|
+
}
|
|
11736
|
+
if (Array.isArray(blackoutDates)) {
|
|
11737
|
+
for (const isoStr of blackoutDates) {
|
|
11738
|
+
const ts = parseIsoToTimestamp(isoStr);
|
|
11739
|
+
if (ts !== null) {
|
|
11740
|
+
set.add(ts);
|
|
11741
|
+
}
|
|
11742
|
+
}
|
|
11743
|
+
}
|
|
11744
|
+
return set;
|
|
11745
|
+
}
|
|
11746
|
+
|
|
11747
|
+
/**
|
|
11748
|
+
* One-shot membership test for a single timestamp against both blackout
|
|
11749
|
+
* sources. Allocates a Set on each call; only use this in cold paths
|
|
11750
|
+
* (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
|
|
11751
|
+
* Set returned from `buildBlackoutSet` and `.has(ts)` directly.
|
|
11752
|
+
*
|
|
11753
|
+
* @param {number} dateTs - Unix timestamp (seconds) to test.
|
|
11754
|
+
* @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
|
|
11755
|
+
* @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
|
|
11756
|
+
* @returns {boolean}
|
|
11757
|
+
*/
|
|
11758
|
+
function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
|
|
11759
|
+
return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
|
|
11760
|
+
}
|
|
11761
|
+
|
|
11762
|
+
/* 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 */
|
|
11603
11763
|
|
|
11604
11764
|
class AuroCalendarCell extends i$1 {
|
|
11605
11765
|
constructor() {
|
|
@@ -11647,6 +11807,14 @@ class AuroCalendarCell extends i$1 {
|
|
|
11647
11807
|
type: Boolean,
|
|
11648
11808
|
reflect: true
|
|
11649
11809
|
},
|
|
11810
|
+
/**
|
|
11811
|
+
* @deprecated Propagated from the legacy `auro-calendar.disabledDays`
|
|
11812
|
+
* Unix-timestamp array. The cell honors it for backward compatibility
|
|
11813
|
+
* (see the divergence-check fallback inside `isBlackout`), but
|
|
11814
|
+
* consumers should migrate to `auro-datepicker.blackoutDates`
|
|
11815
|
+
* (YYYY-MM-DD ISO strings). The calendar emits a one-time
|
|
11816
|
+
* deprecation warning the first time a non-empty value is observed.
|
|
11817
|
+
*/
|
|
11650
11818
|
disabledDays: { type: Array },
|
|
11651
11819
|
isCurrentDate: { type: Boolean },
|
|
11652
11820
|
locale: { type: String },
|
|
@@ -11692,8 +11860,8 @@ class AuroCalendarCell extends i$1 {
|
|
|
11692
11860
|
const parsedDateTo = parseInt(dateTo, 10);
|
|
11693
11861
|
|
|
11694
11862
|
if (day) {
|
|
11695
|
-
const departTimestamp =
|
|
11696
|
-
const returnTimestamp =
|
|
11863
|
+
const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11864
|
+
const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11697
11865
|
|
|
11698
11866
|
if (day.date === departTimestamp || day.date === returnTimestamp) {
|
|
11699
11867
|
this.selected = true;
|
|
@@ -11777,27 +11945,33 @@ class AuroCalendarCell extends i$1 {
|
|
|
11777
11945
|
return false;
|
|
11778
11946
|
}
|
|
11779
11947
|
|
|
11780
|
-
//
|
|
11781
|
-
|
|
11782
|
-
|
|
11783
|
-
|
|
11784
|
-
|
|
11785
|
-
|
|
11786
|
-
// Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
|
|
11787
|
-
const blackoutDates = this.datepicker?.blackoutDates;
|
|
11788
|
-
|
|
11789
|
-
if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
|
|
11790
|
-
const date = new Date(this.day.date * 1000);
|
|
11791
|
-
const yyyy = date.getFullYear();
|
|
11792
|
-
const mm = String(date.getMonth() + 1).padStart(2, '0');
|
|
11793
|
-
const dd = String(date.getDate()).padStart(2, '0');
|
|
11794
|
-
const cellDate = `${yyyy}-${mm}-${dd}`;
|
|
11795
|
-
if (blackoutDates.includes(cellDate)) {
|
|
11948
|
+
// Delegate to the calendar's memoized blackout Set for O(1) lookup
|
|
11949
|
+
// (instead of rescanning disabledDays + blackoutDates per render). The
|
|
11950
|
+
// Set is rebuilt only when either source array reference changes — see
|
|
11951
|
+
// auro-calendar.js#_getBlackoutSet.
|
|
11952
|
+
if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
|
|
11953
|
+
if (this.calendar._getBlackoutSet().has(this.day.date)) {
|
|
11796
11954
|
return true;
|
|
11797
11955
|
}
|
|
11956
|
+
// If the cell's local disabledDays diverged from the calendar's (a
|
|
11957
|
+
// consumer or test mutated cell.disabledDays directly), the Set does
|
|
11958
|
+
// not reflect that addition — fall through to the per-cell scan only
|
|
11959
|
+
// when the reference no longer matches. Production data flow keeps
|
|
11960
|
+
// these identical, so this branch stays cold. Guarded with
|
|
11961
|
+
// Array.isArray to match `_getBlackoutSet`'s contract: non-array
|
|
11962
|
+
// values are treated as empty rather than crashing on `.findIndex`.
|
|
11963
|
+
if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
|
|
11964
|
+
if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
|
|
11965
|
+
return true;
|
|
11966
|
+
}
|
|
11967
|
+
}
|
|
11968
|
+
return false;
|
|
11798
11969
|
}
|
|
11799
11970
|
|
|
11800
|
-
|
|
11971
|
+
// Pre-firstUpdated fallback — the cell may render once before the
|
|
11972
|
+
// ancestor calendar is wired up. Routes through the shared
|
|
11973
|
+
// blackoutUtils helper so the parsing rules stay in one place.
|
|
11974
|
+
return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
|
|
11801
11975
|
}
|
|
11802
11976
|
|
|
11803
11977
|
/**
|
|
@@ -11903,12 +12077,12 @@ class AuroCalendarCell extends i$1 {
|
|
|
11903
12077
|
const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
|
|
11904
12078
|
if (!Number.isFinite(parsedDateFrom)) return null;
|
|
11905
12079
|
|
|
11906
|
-
const departTimestamp =
|
|
12080
|
+
const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11907
12081
|
const dayDate = this.day.date;
|
|
11908
12082
|
|
|
11909
12083
|
const parsedDateTo = Number.parseInt(this.dateTo, 10);
|
|
11910
12084
|
const hasDateTo = Number.isFinite(parsedDateTo);
|
|
11911
|
-
const returnTimestamp = hasDateTo ?
|
|
12085
|
+
const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
|
|
11912
12086
|
|
|
11913
12087
|
if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
|
|
11914
12088
|
|
|
@@ -11918,7 +12092,9 @@ class AuroCalendarCell extends i$1 {
|
|
|
11918
12092
|
|
|
11919
12093
|
if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
|
|
11920
12094
|
|
|
11921
|
-
|
|
12095
|
+
if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
|
|
12096
|
+
|
|
12097
|
+
// After end date when both dateFrom and dateTo are set.
|
|
11922
12098
|
return this.datepicker.rangeLabelAfterRange || 'after range';
|
|
11923
12099
|
}
|
|
11924
12100
|
|
|
@@ -11931,7 +12107,7 @@ class AuroCalendarCell extends i$1 {
|
|
|
11931
12107
|
*/
|
|
11932
12108
|
isDepartDate(day, dateFrom) {
|
|
11933
12109
|
const parsedDateFrom = parseInt(dateFrom, 10);
|
|
11934
|
-
const departTimestamp =
|
|
12110
|
+
const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11935
12111
|
|
|
11936
12112
|
return this.selected && day.date === departTimestamp;
|
|
11937
12113
|
}
|
|
@@ -11946,7 +12122,7 @@ class AuroCalendarCell extends i$1 {
|
|
|
11946
12122
|
*/
|
|
11947
12123
|
isReturnDate(day, dateFrom, dateTo) {
|
|
11948
12124
|
const parsedDateTo = parseInt(dateTo, 10);
|
|
11949
|
-
const returnTimestamp =
|
|
12125
|
+
const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
11950
12126
|
|
|
11951
12127
|
return this.selected && day.date === returnTimestamp && dateFrom;
|
|
11952
12128
|
}
|
|
@@ -12103,13 +12279,37 @@ class AuroCalendarCell extends i$1 {
|
|
|
12103
12279
|
}
|
|
12104
12280
|
|
|
12105
12281
|
firstUpdated() {
|
|
12282
|
+
this._initFromAncestors();
|
|
12283
|
+
}
|
|
12284
|
+
|
|
12285
|
+
/**
|
|
12286
|
+
* Wires the cell to its ancestor calendar-month and calendar (and, via
|
|
12287
|
+
* the calendar, to the datepicker). Extracted from firstUpdated() so the
|
|
12288
|
+
* retry loop can re-attempt without recursively invoking a Lit lifecycle
|
|
12289
|
+
* method (which is outside the framework's contract).
|
|
12290
|
+
* @private
|
|
12291
|
+
* @returns {void}
|
|
12292
|
+
*/
|
|
12293
|
+
_initFromAncestors() {
|
|
12106
12294
|
const calendarMonth = this.runtimeUtils.closestElement('auro-formkit-calendar-month', this);
|
|
12107
12295
|
const calendar = this.runtimeUtils.closestElement('auro-formkit-calendar', calendarMonth);
|
|
12108
12296
|
|
|
12109
12297
|
if (!calendar) {
|
|
12110
|
-
|
|
12298
|
+
// Retry on the next event-loop turn to give the ancestor chain a chance
|
|
12299
|
+
// to attach — but cap attempts so a permanently detached cell doesn't
|
|
12300
|
+
// spin forever. 10 turns is far more than any observed race needs.
|
|
12301
|
+
this._firstUpdatedRetries = (this._firstUpdatedRetries || 0) + 1;
|
|
12302
|
+
if (this._firstUpdatedRetries > 10) {
|
|
12303
|
+
return;
|
|
12304
|
+
}
|
|
12305
|
+
this._firstUpdatedRetryTimer = setTimeout(() => {
|
|
12306
|
+
this._firstUpdatedRetryTimer = null;
|
|
12307
|
+
this._initFromAncestors();
|
|
12308
|
+
}, 0);
|
|
12111
12309
|
return;
|
|
12112
12310
|
}
|
|
12311
|
+
this._firstUpdatedRetries = 0;
|
|
12312
|
+
this.calendar = calendar;
|
|
12113
12313
|
this.datepicker = calendar.datepicker;
|
|
12114
12314
|
this._slotContentHandler = () => {
|
|
12115
12315
|
this.handleSlotContent();
|
|
@@ -12136,6 +12336,10 @@ class AuroCalendarCell extends i$1 {
|
|
|
12136
12336
|
if (this.datepicker && this._slotContentHandler) {
|
|
12137
12337
|
this.datepicker.removeEventListener('auroDatePicker-newSlotContent', this._slotContentHandler);
|
|
12138
12338
|
}
|
|
12339
|
+
if (this._firstUpdatedRetryTimer) {
|
|
12340
|
+
clearTimeout(this._firstUpdatedRetryTimer);
|
|
12341
|
+
this._firstUpdatedRetryTimer = null;
|
|
12342
|
+
}
|
|
12139
12343
|
}
|
|
12140
12344
|
|
|
12141
12345
|
/**
|
|
@@ -12167,15 +12371,28 @@ class AuroCalendarCell extends i$1 {
|
|
|
12167
12371
|
this._cachedButton = this.shadowRoot.querySelector('button.day');
|
|
12168
12372
|
});
|
|
12169
12373
|
|
|
12170
|
-
//
|
|
12374
|
+
// Keep the host's gridcell aria attributes in sync with the day data.
|
|
12171
12375
|
this.updateHostAria();
|
|
12172
12376
|
}
|
|
12173
12377
|
|
|
12174
12378
|
// Update host aria when selection changes (aria-selected, range labels)
|
|
12175
|
-
|
|
12379
|
+
// or when isCurrentDate flips (aria-current).
|
|
12380
|
+
if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
|
|
12176
12381
|
this.updateHostAria();
|
|
12177
12382
|
}
|
|
12178
12383
|
|
|
12384
|
+
// When the rendered range shifts (month nav, min/max change), a cell
|
|
12385
|
+
// host may be re-rendered for a new date that is now out-of-range —
|
|
12386
|
+
// but its imperatively-set `active` flag and `activeCell` ring class
|
|
12387
|
+
// from the previous date persist because setActiveCell only iterates
|
|
12388
|
+
// focusable (in-range) cells when clearing the prior active state.
|
|
12389
|
+
// Drop the active state here so the disabled cell isn't left visually
|
|
12390
|
+
// ringed.
|
|
12391
|
+
if ((properties.has('day') || properties.has('min') || properties.has('max')) &&
|
|
12392
|
+
this.active && this.isOutOfRange(this.day, this.min, this.max)) {
|
|
12393
|
+
this.clearActive();
|
|
12394
|
+
}
|
|
12395
|
+
|
|
12179
12396
|
// Configure popover when it first becomes rendered
|
|
12180
12397
|
if (properties.has('hasPopoverContent') && this.hasPopoverContent) {
|
|
12181
12398
|
this.updateComplete.then(() => this.configurePopover());
|
|
@@ -12183,8 +12400,8 @@ class AuroCalendarCell extends i$1 {
|
|
|
12183
12400
|
}
|
|
12184
12401
|
|
|
12185
12402
|
/**
|
|
12186
|
-
*
|
|
12187
|
-
*
|
|
12403
|
+
* Sets host-level ARIA so each cell exposes its date, selection state,
|
|
12404
|
+
* and blackout status to assistive tech browsing the month grid.
|
|
12188
12405
|
* @private
|
|
12189
12406
|
* @returns {void}
|
|
12190
12407
|
*/
|
|
@@ -12193,16 +12410,27 @@ class AuroCalendarCell extends i$1 {
|
|
|
12193
12410
|
|
|
12194
12411
|
const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
|
|
12195
12412
|
if (outOfRange) {
|
|
12413
|
+
// Strip every aria attribute the in-range branch may have set on a
|
|
12414
|
+
// previous render — if a cell flips from in-range to out-of-range
|
|
12415
|
+
// (calendar shifts months, minDate/maxDate change, etc.).
|
|
12196
12416
|
this.removeAttribute('role');
|
|
12197
12417
|
this.removeAttribute('aria-label');
|
|
12418
|
+
this.removeAttribute('aria-current');
|
|
12419
|
+
this.removeAttribute('aria-selected');
|
|
12420
|
+
this.removeAttribute('aria-disabled');
|
|
12198
12421
|
return;
|
|
12199
12422
|
}
|
|
12200
12423
|
|
|
12201
|
-
// The host acts as the gridcell for ariaActiveDescendantElement.
|
|
12202
12424
|
this.setAttribute('role', 'gridcell');
|
|
12203
12425
|
this.setAttribute('aria-label', this.getAriaLabel());
|
|
12204
12426
|
this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
|
|
12205
12427
|
|
|
12428
|
+
if (this.isCurrentDate) {
|
|
12429
|
+
this.setAttribute('aria-current', 'date');
|
|
12430
|
+
} else {
|
|
12431
|
+
this.removeAttribute('aria-current');
|
|
12432
|
+
}
|
|
12433
|
+
|
|
12206
12434
|
if (this.isBlackout()) {
|
|
12207
12435
|
this.setAttribute('aria-disabled', 'true');
|
|
12208
12436
|
} else {
|
|
@@ -12217,7 +12445,7 @@ class AuroCalendarCell extends i$1 {
|
|
|
12217
12445
|
* @returns {void}
|
|
12218
12446
|
*/
|
|
12219
12447
|
focusButton() {
|
|
12220
|
-
const button = this._cachedButton || this.shadowRoot.querySelector('button:not([
|
|
12448
|
+
const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
|
|
12221
12449
|
if (button) {
|
|
12222
12450
|
button.focus({ focusVisible: true });
|
|
12223
12451
|
}
|
|
@@ -12225,10 +12453,22 @@ class AuroCalendarCell extends i$1 {
|
|
|
12225
12453
|
|
|
12226
12454
|
/**
|
|
12227
12455
|
* Imperatively marks this cell as active without triggering a Lit re-render.
|
|
12228
|
-
*
|
|
12456
|
+
* Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper —
|
|
12457
|
+
* arrow keys move the active cell imperatively and the live region carries
|
|
12458
|
+
* the SR announcement.
|
|
12459
|
+
*
|
|
12460
|
+
* Refuses to activate out-of-range cells: those are aria-hidden, have no
|
|
12461
|
+
* click/focus handlers, and are filtered out of `getFocusableCells`. The
|
|
12462
|
+
* active class showing on a disabled cell would be visually misleading,
|
|
12463
|
+
* so this guard is the single source of truth across every code path
|
|
12464
|
+
* that might call setActive (keyboard nav, focus restore, cell click).
|
|
12229
12465
|
* @returns {void}
|
|
12230
12466
|
*/
|
|
12231
12467
|
setActive() {
|
|
12468
|
+
if (this.isOutOfRange(this.day, this.min, this.max)) {
|
|
12469
|
+
return;
|
|
12470
|
+
}
|
|
12471
|
+
|
|
12232
12472
|
this.active = true;
|
|
12233
12473
|
|
|
12234
12474
|
// Show the popover when this cell becomes active via keyboard navigation.
|
|
@@ -12267,10 +12507,13 @@ class AuroCalendarCell extends i$1 {
|
|
|
12267
12507
|
if (!btn || !this.day) return;
|
|
12268
12508
|
|
|
12269
12509
|
const dayDate = this.day.date;
|
|
12270
|
-
const departTimestamp =
|
|
12510
|
+
const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
12271
12511
|
const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
|
|
12272
|
-
|
|
12273
|
-
|
|
12512
|
+
// `>=` so hovering the depart cell itself (a same-day round-trip
|
|
12513
|
+
// preview) still surfaces a visual cue: the depart cell receives both
|
|
12514
|
+
// rangeDepartDate and lastHoveredDate.
|
|
12515
|
+
const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
|
|
12516
|
+
const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
|
|
12274
12517
|
|
|
12275
12518
|
btn.classList.toggle('inRange', isInRange);
|
|
12276
12519
|
btn.classList.toggle('lastHoveredDate', isLastHovered);
|
|
@@ -12289,6 +12532,41 @@ class AuroCalendarCell extends i$1 {
|
|
|
12289
12532
|
btn.classList.remove('inRange', 'lastHoveredDate', 'rangeDepartDate');
|
|
12290
12533
|
}
|
|
12291
12534
|
|
|
12535
|
+
/**
|
|
12536
|
+
* Re-applies the committed-range classes (inRange / rangeDepartDate /
|
|
12537
|
+
* rangeReturnDate) imperatively from the cell's current `day`,
|
|
12538
|
+
* `dateFrom`, and `dateTo`. Used after month navigation flushes:
|
|
12539
|
+
* classMap in `renderCellButton` tracks its own previous state, so a
|
|
12540
|
+
* preceding imperative `classList.remove` (from
|
|
12541
|
+
* `clearRangePreviewClasses`) leaves classMap thinking the class is
|
|
12542
|
+
* still applied. On re-render with the same class-value, classMap emits
|
|
12543
|
+
* no delta and the class stays missing in the DOM. Re-toggling
|
|
12544
|
+
* imperatively resyncs the DOM with the committed range.
|
|
12545
|
+
*
|
|
12546
|
+
* Delegates to the same `isInRange` / `isDepartDate` / `isReturnDate`
|
|
12547
|
+
* helpers `renderCellButton` uses, so the two code paths cannot drift
|
|
12548
|
+
* (including whatever timestamp normalization those helpers apply).
|
|
12549
|
+
* @returns {void}
|
|
12550
|
+
*/
|
|
12551
|
+
applyCommittedRangeClasses() {
|
|
12552
|
+
if (!this.day) return;
|
|
12553
|
+
// Fall back to a shadowRoot query when `_cachedButton` hasn't
|
|
12554
|
+
// populated yet — this method's whole job is recovering from stale
|
|
12555
|
+
// DOM after a month re-render, so no-oping on a cache miss defeats
|
|
12556
|
+
// the fix (mirrors the fallback in `clearActive()`).
|
|
12557
|
+
const btn = this._cachedButton || this.shadowRoot?.querySelector('button.day');
|
|
12558
|
+
if (!btn) return;
|
|
12559
|
+
|
|
12560
|
+
const hasRange = this.datepicker?.hasAttribute('range');
|
|
12561
|
+
const inRange = hasRange && this.dateTo && this.isInRange(this.day, this.dateFrom, this.dateTo);
|
|
12562
|
+
const isDepart = hasRange && this.isDepartDate(this.day, this.dateFrom) && this.dateTo;
|
|
12563
|
+
const isReturn = hasRange && this.isReturnDate(this.day, this.dateFrom, this.dateTo);
|
|
12564
|
+
|
|
12565
|
+
btn.classList.toggle('inRange', Boolean(inRange));
|
|
12566
|
+
btn.classList.toggle('rangeDepartDate', Boolean(isDepart));
|
|
12567
|
+
btn.classList.toggle('rangeReturnDate', Boolean(isReturn));
|
|
12568
|
+
}
|
|
12569
|
+
|
|
12292
12570
|
renderCellButton() {
|
|
12293
12571
|
const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
|
|
12294
12572
|
const blackout = this.isBlackout();
|
|
@@ -12328,7 +12606,6 @@ class AuroCalendarCell extends i$1 {
|
|
|
12328
12606
|
@focus="${outOfRange ? undefined : this.handleFocus}"
|
|
12329
12607
|
class="${e$4(buttonClasses)}"
|
|
12330
12608
|
?disabled="${outOfRange}"
|
|
12331
|
-
aria-hidden="${outOfRange ? 'true' : A$4}"
|
|
12332
12609
|
tabindex="-1">
|
|
12333
12610
|
<div class="buttonWrapper" aria-hidden="true">
|
|
12334
12611
|
<div class="currentDayMarker">${this.day?.title || A$4}</div>
|
|
@@ -13045,7 +13322,7 @@ class CalendarUtilities {
|
|
|
13045
13322
|
|
|
13046
13323
|
var colorCss$4 = i$3`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
|
|
13047
13324
|
|
|
13048
|
-
var styleCss$4 = i$3`#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))
|
|
13325
|
+
var styleCss$4 = i$3`#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)}`;
|
|
13049
13326
|
|
|
13050
13327
|
var tokenCss = i$3`: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)}`;
|
|
13051
13328
|
|
|
@@ -13440,7 +13717,7 @@ class AuroBibtemplate extends i$1 {
|
|
|
13440
13717
|
}
|
|
13441
13718
|
}
|
|
13442
13719
|
|
|
13443
|
-
var formkitVersion$2 = '
|
|
13720
|
+
var formkitVersion$2 = '202607221815';
|
|
13444
13721
|
|
|
13445
13722
|
let l$1 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$5`${s$5(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$4 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$3=i$3`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
|
|
13446
13723
|
`,u$6=i$3`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
|
|
@@ -13545,6 +13822,15 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13545
13822
|
*/
|
|
13546
13823
|
this.activeCellDate = null;
|
|
13547
13824
|
|
|
13825
|
+
/**
|
|
13826
|
+
* Cached reference to the active cell host. Set by setActiveCell and
|
|
13827
|
+
* refreshed by scrollToActiveCell when its cache check misses (stale
|
|
13828
|
+
* or missing). Lets scrollToActiveCell skip a full cell scan on each
|
|
13829
|
+
* arrow key.
|
|
13830
|
+
* @private
|
|
13831
|
+
*/
|
|
13832
|
+
this._activeCell = null;
|
|
13833
|
+
|
|
13548
13834
|
/**
|
|
13549
13835
|
* Whether the #calendarGrid wrapper currently has focus.
|
|
13550
13836
|
* Used to determine whether the visualFocus ring should be shown.
|
|
@@ -13563,10 +13849,17 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13563
13849
|
this.calendarRangeMonths = null;
|
|
13564
13850
|
|
|
13565
13851
|
/**
|
|
13566
|
-
*
|
|
13852
|
+
* @deprecated Use `auro-datepicker.blackoutDates` (an array of
|
|
13853
|
+
* `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
|
|
13854
|
+
* timestamps is still honored for backward compatibility but emits a
|
|
13855
|
+
* one-time `console.debug` the first time a non-empty value is observed.
|
|
13856
|
+
* Support will be removed in a future major release.
|
|
13567
13857
|
* @private
|
|
13568
13858
|
*/
|
|
13569
|
-
|
|
13859
|
+
// Initialize the backing field directly so the constructor's default
|
|
13860
|
+
// empty array doesn't trigger the deprecation warning. Assignments from
|
|
13861
|
+
// consumers still route through the setter below.
|
|
13862
|
+
this._disabledDays = [];
|
|
13570
13863
|
|
|
13571
13864
|
/**
|
|
13572
13865
|
* @private
|
|
@@ -13599,6 +13892,44 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13599
13892
|
this._calendarInstanceId = Date.now().toString(36);
|
|
13600
13893
|
}
|
|
13601
13894
|
|
|
13895
|
+
/**
|
|
13896
|
+
* @deprecated See constructor JSDoc — migrate to
|
|
13897
|
+
* `auro-datepicker.blackoutDates`. The getter/setter pair exists so the
|
|
13898
|
+
* one-time deprecation warning fires as soon as a consumer assigns a
|
|
13899
|
+
* non-empty array (empty assignments are ignored — an empty array is
|
|
13900
|
+
* indistinguishable from the constructor default and would produce a
|
|
13901
|
+
* spurious warning), rather than only when `_getBlackoutSet()` happens
|
|
13902
|
+
* to rebuild.
|
|
13903
|
+
* @returns {Array} The current legacy `disabledDays` array.
|
|
13904
|
+
*/
|
|
13905
|
+
get disabledDays() {
|
|
13906
|
+
return this._disabledDays;
|
|
13907
|
+
}
|
|
13908
|
+
|
|
13909
|
+
/**
|
|
13910
|
+
* @param {Array} value - The legacy `disabledDays` array to set.
|
|
13911
|
+
*/
|
|
13912
|
+
set disabledDays(value) {
|
|
13913
|
+
const oldValue = this._disabledDays;
|
|
13914
|
+
// Coerce non-arrays to `[]`. Consumers occasionally pass `null`
|
|
13915
|
+
// (Lit's Array attribute converter returns null for a missing/empty
|
|
13916
|
+
// attribute) or misuse the API; downstream code in
|
|
13917
|
+
// `auro-calendar-cell.isEnabled` calls `.findIndex()` on this value
|
|
13918
|
+
// without an Array.isArray guard, so a truthy non-array would throw
|
|
13919
|
+
// at render.
|
|
13920
|
+
const coerced = Array.isArray(value) ? value : [];
|
|
13921
|
+
if (coerced.length > 0) {
|
|
13922
|
+
this._warnDisabledDaysDeprecated();
|
|
13923
|
+
}
|
|
13924
|
+
this._disabledDays = coerced;
|
|
13925
|
+
// `disabledDays` is a Lit `@property({ type: Array })` on the
|
|
13926
|
+
// RangeDatepicker base class; Lit's generated setter (which we've
|
|
13927
|
+
// overridden here to insert the warning) is what normally invalidates
|
|
13928
|
+
// the reactive cycle. Re-invoke requestUpdate manually so consumer
|
|
13929
|
+
// assignments still re-render the calendar.
|
|
13930
|
+
this.requestUpdate('disabledDays', oldValue);
|
|
13931
|
+
}
|
|
13932
|
+
|
|
13602
13933
|
static get styles() {
|
|
13603
13934
|
return [
|
|
13604
13935
|
styleCss$7,
|
|
@@ -13772,6 +14103,11 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13772
14103
|
if (!opts.skipActiveUpdate) {
|
|
13773
14104
|
this.updateActiveCellForVisibleMonth();
|
|
13774
14105
|
}
|
|
14106
|
+
// clearRangePreview above strips classMap-managed range classes from
|
|
14107
|
+
// the DOM; classMap's private state still thinks they're applied, so
|
|
14108
|
+
// it won't re-add them on the post-nav re-render. Re-apply imperatively
|
|
14109
|
+
// after both months and their cell button caches have settled.
|
|
14110
|
+
this.scheduleCommittedRangeClassRefresh();
|
|
13775
14111
|
this.announceMonthChange();
|
|
13776
14112
|
}
|
|
13777
14113
|
|
|
@@ -13790,6 +14126,11 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13790
14126
|
if (!opts.skipActiveUpdate) {
|
|
13791
14127
|
this.updateActiveCellForVisibleMonth();
|
|
13792
14128
|
}
|
|
14129
|
+
// clearRangePreview above strips classMap-managed range classes from
|
|
14130
|
+
// the DOM; classMap's private state still thinks they're applied, so
|
|
14131
|
+
// it won't re-add them on the post-nav re-render. Re-apply imperatively
|
|
14132
|
+
// after both months and their cell button caches have settled.
|
|
14133
|
+
this.scheduleCommittedRangeClassRefresh();
|
|
13793
14134
|
this.announceMonthChange();
|
|
13794
14135
|
}
|
|
13795
14136
|
|
|
@@ -13820,17 +14161,44 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13820
14161
|
* @returns {void}
|
|
13821
14162
|
*/
|
|
13822
14163
|
updateActiveCellForVisibleMonth() {
|
|
13823
|
-
|
|
13824
|
-
|
|
13825
|
-
requestAnimationFrame(() => {
|
|
13826
|
-
requestAnimationFrame(() => {
|
|
13827
|
-
const newDate = this.computeActiveDate({ skipDateFrom: true });
|
|
14164
|
+
this._afterMonthRender(() => {
|
|
14165
|
+
const newDate = this.computeActiveDate({ skipDateFrom: true });
|
|
13828
14166
|
|
|
13829
|
-
|
|
13830
|
-
|
|
13831
|
-
|
|
13832
|
-
|
|
13833
|
-
|
|
14167
|
+
if (newDate !== null && newDate !== undefined) {
|
|
14168
|
+
this.activeCellDate = newDate;
|
|
14169
|
+
this.setActiveCell(this.activeCellDate);
|
|
14170
|
+
}
|
|
14171
|
+
});
|
|
14172
|
+
}
|
|
14173
|
+
|
|
14174
|
+
/**
|
|
14175
|
+
* Schedules `callback` two animation frames out, giving the child
|
|
14176
|
+
* `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
|
|
14177
|
+
* a full render-and-paint cycle to settle before the callback reads or
|
|
14178
|
+
* mutates DOM.
|
|
14179
|
+
*
|
|
14180
|
+
* Why two frames, not one:
|
|
14181
|
+
* 1. Lit batches property updates and renders in a microtask, so frame N
|
|
14182
|
+
* schedules the render but the new DOM may not be painted yet.
|
|
14183
|
+
* 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
|
|
14184
|
+
* which also lands a tick later. Reading buttons from frame N+1
|
|
14185
|
+
* (after both renders + cache refresh have flushed) reliably hits the
|
|
14186
|
+
* new month's cells.
|
|
14187
|
+
*
|
|
14188
|
+
* Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
|
|
14189
|
+
* and then needs to inspect the freshly-rendered cells (cross-month
|
|
14190
|
+
* keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
|
|
14191
|
+
* Do NOT collapse to a single rAF — it intermittently lands before
|
|
14192
|
+
* `_cachedButton` is refreshed, which silently breaks focus restoration
|
|
14193
|
+
* and `setActiveCell` lookups.
|
|
14194
|
+
* @private
|
|
14195
|
+
* @param {() => void} callback - Runs once after the month re-render and
|
|
14196
|
+
* the cells' button caches have refreshed.
|
|
14197
|
+
* @returns {void}
|
|
14198
|
+
*/
|
|
14199
|
+
_afterMonthRender(callback) {
|
|
14200
|
+
requestAnimationFrame(() => {
|
|
14201
|
+
requestAnimationFrame(callback);
|
|
13834
14202
|
});
|
|
13835
14203
|
}
|
|
13836
14204
|
|
|
@@ -13948,6 +14316,47 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13948
14316
|
return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
|
|
13949
14317
|
}
|
|
13950
14318
|
|
|
14319
|
+
/**
|
|
14320
|
+
* Picks the focusable cell whose date is closest to targetTs. Used as a
|
|
14321
|
+
* fallback after a month-boundary nav when the exact target date isn't
|
|
14322
|
+
* focusable — typically because the month re-render lagged or the date
|
|
14323
|
+
* was filtered out by isOutOfRange. When two cells are equidistant, the
|
|
14324
|
+
* navigation direction breaks the tie so the user moves the way they
|
|
14325
|
+
* pressed (forward → later cell, backward → earlier cell).
|
|
14326
|
+
* @private
|
|
14327
|
+
* @param {Array} cells - Focusable cells from getAllFocusableCells.
|
|
14328
|
+
* @param {Number} targetTs - Desired Unix timestamp (seconds).
|
|
14329
|
+
* @param {'next'|'prev'} direction - Navigation direction.
|
|
14330
|
+
* @returns {Object|null} The nearest cell, or null when cells is empty.
|
|
14331
|
+
*/
|
|
14332
|
+
pickNearestCell(cells, targetTs, direction) {
|
|
14333
|
+
if (!cells.length) {
|
|
14334
|
+
return null;
|
|
14335
|
+
}
|
|
14336
|
+
const forward = direction === 'next';
|
|
14337
|
+
let best = null;
|
|
14338
|
+
let bestDelta = Infinity;
|
|
14339
|
+
cells.forEach((cell) => {
|
|
14340
|
+
if (!cell.day) {
|
|
14341
|
+
return;
|
|
14342
|
+
}
|
|
14343
|
+
const distance = Math.abs(cell.day.date - targetTs);
|
|
14344
|
+
if (distance < bestDelta) {
|
|
14345
|
+
best = cell;
|
|
14346
|
+
bestDelta = distance;
|
|
14347
|
+
return;
|
|
14348
|
+
}
|
|
14349
|
+
if (distance === bestDelta && best) {
|
|
14350
|
+
if (forward && cell.day.date > best.day.date) {
|
|
14351
|
+
best = cell;
|
|
14352
|
+
} else if (!forward && cell.day.date < best.day.date) {
|
|
14353
|
+
best = cell;
|
|
14354
|
+
}
|
|
14355
|
+
}
|
|
14356
|
+
});
|
|
14357
|
+
return best;
|
|
14358
|
+
}
|
|
14359
|
+
|
|
13951
14360
|
/**
|
|
13952
14361
|
* Gets all focusable cells across all rendered months.
|
|
13953
14362
|
* @private
|
|
@@ -13964,9 +14373,9 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13964
14373
|
|
|
13965
14374
|
/**
|
|
13966
14375
|
* Sets the active cell across all months. Only one cell has tabindex="0" at a time.
|
|
13967
|
-
* Uses imperative DOM manipulation — no Lit re-render triggered.
|
|
13968
|
-
*
|
|
13969
|
-
*
|
|
14376
|
+
* Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
|
|
14377
|
+
* stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
|
|
14378
|
+
* is what announces the active cell to assistive tech.
|
|
13970
14379
|
* @param {Number} date - Unix timestamp of the cell to activate.
|
|
13971
14380
|
* @returns {void}
|
|
13972
14381
|
*/
|
|
@@ -13984,6 +14393,9 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13984
14393
|
});
|
|
13985
14394
|
|
|
13986
14395
|
this.activeCellDate = date;
|
|
14396
|
+
// Cache so scrollToActiveCell can scroll without re-querying all cells
|
|
14397
|
+
// on every arrow keypress.
|
|
14398
|
+
this._activeCell = newActiveCell;
|
|
13987
14399
|
|
|
13988
14400
|
// Apply activeCell ring only when the grid currently has focus.
|
|
13989
14401
|
if (newActiveCell && this._gridHasFocus) {
|
|
@@ -14015,10 +14427,23 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14015
14427
|
/**
|
|
14016
14428
|
* Shows the activeCell ring when the grid gains focus.
|
|
14017
14429
|
* @private
|
|
14430
|
+
* @param {FocusEvent} [event] - The focusin event.
|
|
14018
14431
|
* @returns {void}
|
|
14019
14432
|
*/
|
|
14020
|
-
handleGridFocusIn() {
|
|
14433
|
+
handleGridFocusIn(event) {
|
|
14021
14434
|
this._gridHasFocus = true;
|
|
14435
|
+
|
|
14436
|
+
// Only apply the activeCell ring when the grid wrapper itself receives focus
|
|
14437
|
+
// (Tab/programmatic). When focus moves into a cell button via mousedown,
|
|
14438
|
+
// event.target is the cell descendant — skip the ring here. The subsequent
|
|
14439
|
+
// click handler calls setActiveCell on the clicked cell, which applies the
|
|
14440
|
+
// ring there. Without this guard, mousedown briefly flashes the ring on the
|
|
14441
|
+
// previously-active cell (e.g. the 1st-of-month set by month navigation
|
|
14442
|
+
// when the grid was not focused).
|
|
14443
|
+
if (event && event.target !== event.currentTarget) {
|
|
14444
|
+
return;
|
|
14445
|
+
}
|
|
14446
|
+
|
|
14022
14447
|
const activeCell = this.getAllFocusableCells().find((cell) => cell.active);
|
|
14023
14448
|
if (activeCell) {
|
|
14024
14449
|
const btn = activeCell._cachedButton || activeCell.shadowRoot.querySelector('button.day');
|
|
@@ -14047,6 +14472,76 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14047
14472
|
this.clearRangePreview();
|
|
14048
14473
|
}
|
|
14049
14474
|
|
|
14475
|
+
/**
|
|
14476
|
+
* Returns a memoized Set of blackout timestamps (seconds) drawn from both
|
|
14477
|
+
* the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
|
|
14478
|
+
*
|
|
14479
|
+
* The cache invalidates on **reference identity** — only when the
|
|
14480
|
+
* consumer reassigns the array (`el.blackoutDates = [...]`), matching
|
|
14481
|
+
* Lit's own reactivity semantics for array properties. In-place mutations
|
|
14482
|
+
* on the existing array (`push`, `splice`, index assignment) will NOT
|
|
14483
|
+
* invalidate the cache and the new entries will be silently ignored.
|
|
14484
|
+
* Consumers must reassign to update — see the JSDoc on
|
|
14485
|
+
* `auro-datepicker.blackoutDates` for the recommended pattern.
|
|
14486
|
+
*
|
|
14487
|
+
* A shallow-equality tier was considered but rejected: it would run
|
|
14488
|
+
* O(N) work on every cell render (this method is called per-cell via
|
|
14489
|
+
* `isBlackout()`) and still wouldn't catch same-length value swaps,
|
|
14490
|
+
* offering a false sense of safety.
|
|
14491
|
+
* @private
|
|
14492
|
+
* @returns {Set<Number>}
|
|
14493
|
+
*/
|
|
14494
|
+
_getBlackoutSet() {
|
|
14495
|
+
// Normalize non-array values to a stable `null` sentinel rather than a
|
|
14496
|
+
// fresh `[]` per call — otherwise the reference-identity cache key
|
|
14497
|
+
// (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
|
|
14498
|
+
// subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
|
|
14499
|
+
// already treats null/non-array as "no legacy disabledDays" via its
|
|
14500
|
+
// own Array.isArray gate.
|
|
14501
|
+
const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
|
|
14502
|
+
const blackoutDates = this.datepicker?.blackoutDates;
|
|
14503
|
+
if (this._blackoutSet &&
|
|
14504
|
+
this._cachedBlackoutDisabledDays === disabledDays &&
|
|
14505
|
+
this._cachedBlackoutDates === blackoutDates) {
|
|
14506
|
+
return this._blackoutSet;
|
|
14507
|
+
}
|
|
14508
|
+
|
|
14509
|
+
if (disabledDays && disabledDays.length > 0) {
|
|
14510
|
+
this._warnDisabledDaysDeprecated();
|
|
14511
|
+
}
|
|
14512
|
+
|
|
14513
|
+
this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
|
|
14514
|
+
this._cachedBlackoutDisabledDays = disabledDays;
|
|
14515
|
+
this._cachedBlackoutDates = blackoutDates;
|
|
14516
|
+
return this._blackoutSet;
|
|
14517
|
+
}
|
|
14518
|
+
|
|
14519
|
+
/**
|
|
14520
|
+
* Per-class flag that gates the `disabledDays` deprecation warning so it
|
|
14521
|
+
* fires exactly once per page no matter how many calendars or rebuild
|
|
14522
|
+
* cycles encounter the legacy array.
|
|
14523
|
+
* @private
|
|
14524
|
+
*/
|
|
14525
|
+
static _warnedDisabledDaysDeprecation = false;
|
|
14526
|
+
|
|
14527
|
+
/**
|
|
14528
|
+
* One-time `console.debug` directing consumers from the legacy
|
|
14529
|
+
* `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
|
|
14530
|
+
* the first time `_getBlackoutSet` rebuilds from a non-empty
|
|
14531
|
+
* `disabledDays`; subsequent calls (on this or any other AuroCalendar
|
|
14532
|
+
* instance on the page) are silent.
|
|
14533
|
+
* @private
|
|
14534
|
+
* @returns {void}
|
|
14535
|
+
*/
|
|
14536
|
+
_warnDisabledDaysDeprecated() {
|
|
14537
|
+
if (AuroCalendar._warnedDisabledDaysDeprecation) {
|
|
14538
|
+
return;
|
|
14539
|
+
}
|
|
14540
|
+
AuroCalendar._warnedDisabledDaysDeprecation = true;
|
|
14541
|
+
// eslint-disable-next-line no-console
|
|
14542
|
+
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.');
|
|
14543
|
+
}
|
|
14544
|
+
|
|
14050
14545
|
/**
|
|
14051
14546
|
* Computes the initial active date from data properties alone — no DOM required.
|
|
14052
14547
|
* Priority:
|
|
@@ -14091,21 +14586,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14091
14586
|
const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
|
|
14092
14587
|
const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
|
|
14093
14588
|
|
|
14094
|
-
// Build a Set of blackout timestamps for O(1) lookup.
|
|
14095
|
-
|
|
14096
|
-
|
|
14097
|
-
|
|
14098
|
-
// Parse YYYY-MM-DD as local date to avoid UTC shift issues.
|
|
14099
|
-
const isoBlackouts = this.datepicker?.blackoutDates;
|
|
14100
|
-
if (Array.isArray(isoBlackouts)) {
|
|
14101
|
-
for (const isoStr of isoBlackouts) {
|
|
14102
|
-
const parts = isoStr.split('-');
|
|
14103
|
-
const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
|
|
14104
|
-
if (Number.isFinite(ts)) {
|
|
14105
|
-
blackoutSet.add(ts);
|
|
14106
|
-
}
|
|
14107
|
-
}
|
|
14108
|
-
}
|
|
14589
|
+
// Build a Set of blackout timestamps for O(1) lookup. Memoized by the
|
|
14590
|
+
// identity of the source arrays so rapid month nav doesn't rebuild the
|
|
14591
|
+
// Set (and re-parse every ISO string) on every keypress.
|
|
14592
|
+
const blackoutSet = this._getBlackoutSet();
|
|
14109
14593
|
|
|
14110
14594
|
/**
|
|
14111
14595
|
* A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
|
|
@@ -14184,7 +14668,24 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14184
14668
|
// rendered month(s) first so a single-month calendar does not pick a date
|
|
14185
14669
|
// that has no DOM cell. Determine the visible range based on centralDate and
|
|
14186
14670
|
// the number of rendered months.
|
|
14187
|
-
|
|
14671
|
+
//
|
|
14672
|
+
// numCalendars is assigned inside renderAllCalendars(), which runs during
|
|
14673
|
+
// render() — so by the time the visible-change handler in updated()
|
|
14674
|
+
// calls computeActiveDate() in the same cycle, numCalendars is normally
|
|
14675
|
+
// set. Guard against the pre-first-render path anyway (e.g. any future
|
|
14676
|
+
// caller that reaches computeActiveDate before render() has run):
|
|
14677
|
+
// Math.max(undefined, 1) is NaN, which would silently skip the
|
|
14678
|
+
// visible-month scan below. Fall back to maximumRenderableMonths'
|
|
14679
|
+
// desktop default (1 for non-range, 2 for range) so the scan window is
|
|
14680
|
+
// correctly sized whenever numCalendars is not yet populated.
|
|
14681
|
+
let renderedMonths = null;
|
|
14682
|
+
|
|
14683
|
+
if (Number.isFinite(this.numCalendars) && this.numCalendars > 0) {
|
|
14684
|
+
renderedMonths = this.numCalendars;
|
|
14685
|
+
} else {
|
|
14686
|
+
renderedMonths = this.noRange ? 1 : 2;
|
|
14687
|
+
}
|
|
14688
|
+
|
|
14188
14689
|
const visibleAnchor = this.centralDateObject ?? new Date(now * 1000);
|
|
14189
14690
|
const visMonthStart = new Date(visibleAnchor.getFullYear(), visibleAnchor.getMonth(), 1);
|
|
14190
14691
|
visMonthStart.setHours(0, 0, 0, 0);
|
|
@@ -14301,8 +14802,8 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14301
14802
|
|
|
14302
14803
|
/**
|
|
14303
14804
|
* Handles arrow key navigation on the calendar grid wrapper.
|
|
14304
|
-
* Focus stays on the grid wrapper; only
|
|
14305
|
-
*
|
|
14805
|
+
* Focus stays on the grid wrapper; only the visual active-cell indicator
|
|
14806
|
+
* changes. The live region announces the new active cell.
|
|
14306
14807
|
* @private
|
|
14307
14808
|
* @param {KeyboardEvent} event - The keyboard event.
|
|
14308
14809
|
* @returns {void}
|
|
@@ -14367,21 +14868,24 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14367
14868
|
} else {
|
|
14368
14869
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14369
14870
|
}
|
|
14370
|
-
|
|
14371
|
-
|
|
14372
|
-
|
|
14373
|
-
|
|
14374
|
-
|
|
14375
|
-
|
|
14376
|
-
|
|
14377
|
-
|
|
14378
|
-
|
|
14871
|
+
this._afterMonthRender(() => {
|
|
14872
|
+
const cells = this.getAllFocusableCells();
|
|
14873
|
+
const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
|
|
14874
|
+
if (target) {
|
|
14875
|
+
this.setActiveCell(target.day.date);
|
|
14876
|
+
this.handleCellFocused({ detail: { date: target.day.date } });
|
|
14877
|
+
} else {
|
|
14878
|
+
const fallback = this.pickNearestCell(cells, targetTs, navDir);
|
|
14879
|
+
if (fallback) {
|
|
14379
14880
|
this.setActiveCell(fallback.day.date);
|
|
14380
14881
|
this.handleCellFocused({ detail: { date: fallback.day.date } });
|
|
14381
14882
|
}
|
|
14382
|
-
|
|
14383
|
-
|
|
14384
|
-
|
|
14883
|
+
}
|
|
14884
|
+
// Scroll AFTER the cross-month setActiveCell so the freshly
|
|
14885
|
+
// activated cell is what gets scrolled into view.
|
|
14886
|
+
this.scrollToActiveCell();
|
|
14887
|
+
// Re-focus grid wrapper after month change re-render
|
|
14888
|
+
this.focusActiveCell();
|
|
14385
14889
|
});
|
|
14386
14890
|
}
|
|
14387
14891
|
}
|
|
@@ -14407,26 +14911,23 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14407
14911
|
} else {
|
|
14408
14912
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14409
14913
|
}
|
|
14410
|
-
|
|
14411
|
-
|
|
14412
|
-
|
|
14413
|
-
|
|
14414
|
-
|
|
14415
|
-
|
|
14416
|
-
|
|
14417
|
-
|
|
14418
|
-
|
|
14419
|
-
|
|
14420
|
-
if (navDirection === 'next') {
|
|
14421
|
-
[nearest] = cells;
|
|
14422
|
-
} else {
|
|
14423
|
-
nearest = cells[cells.length - 1];
|
|
14424
|
-
}
|
|
14914
|
+
this._afterMonthRender(() => {
|
|
14915
|
+
const cells = this.getAllFocusableCells();
|
|
14916
|
+
const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
|
|
14917
|
+
if (target) {
|
|
14918
|
+
this.setActiveCell(target.day.date);
|
|
14919
|
+
this.handleCellFocused({ detail: { date: target.day.date } });
|
|
14920
|
+
} else {
|
|
14921
|
+
const nearest = this.pickNearestCell(cells, targetDate, navDirection);
|
|
14922
|
+
if (nearest) {
|
|
14425
14923
|
this.setActiveCell(nearest.day.date);
|
|
14426
14924
|
this.handleCellFocused({ detail: { date: nearest.day.date } });
|
|
14427
14925
|
}
|
|
14428
|
-
|
|
14429
|
-
|
|
14926
|
+
}
|
|
14927
|
+
// Scroll AFTER the cross-month setActiveCell so the freshly
|
|
14928
|
+
// activated cell is what gets scrolled into view.
|
|
14929
|
+
this.scrollToActiveCell();
|
|
14930
|
+
this.focusActiveCell();
|
|
14430
14931
|
});
|
|
14431
14932
|
}
|
|
14432
14933
|
}
|
|
@@ -14454,12 +14955,16 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14454
14955
|
let targetIndex = -1;
|
|
14455
14956
|
if (direction === 'next') {
|
|
14456
14957
|
targetIndex = currentIndex + 1;
|
|
14958
|
+
} else if (direction === 'prev') {
|
|
14959
|
+
targetIndex = currentIndex - 1;
|
|
14457
14960
|
}
|
|
14458
14961
|
|
|
14459
14962
|
if (targetIndex >= 0 && targetIndex < allCells.length) {
|
|
14460
14963
|
const targetCell = allCells[targetIndex];
|
|
14461
14964
|
this.setActiveCell(targetCell.day.date);
|
|
14462
14965
|
this.scrollToActiveCell();
|
|
14966
|
+
// Match the cross-month branches: keep DOM focus on the grid wrapper
|
|
14967
|
+
// so subsequent arrow keys continue to land on this handler.
|
|
14463
14968
|
this.focusActiveCell();
|
|
14464
14969
|
} else if (direction === 'next' && this.showNextMonthBtn) {
|
|
14465
14970
|
// Navigate to next month and focus the computed next date.
|
|
@@ -14476,19 +14981,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14476
14981
|
}
|
|
14477
14982
|
|
|
14478
14983
|
this.handleNextMonth({ skipActiveUpdate: true });
|
|
14479
|
-
|
|
14480
|
-
|
|
14481
|
-
|
|
14482
|
-
|
|
14483
|
-
|
|
14484
|
-
|
|
14485
|
-
|
|
14486
|
-
|
|
14487
|
-
|
|
14488
|
-
|
|
14489
|
-
|
|
14984
|
+
this._afterMonthRender(() => {
|
|
14985
|
+
const cells = this.getAllFocusableCells();
|
|
14986
|
+
const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
|
|
14987
|
+
if (target) {
|
|
14988
|
+
this.setActiveCell(target.day.date);
|
|
14989
|
+
} else {
|
|
14990
|
+
// Same nearest-by-date fallback handleGridKeyDown uses — direct
|
|
14991
|
+
// `cells[length - 1]` would land on the end of the new month,
|
|
14992
|
+
// far from the user's intended `nextTs`.
|
|
14993
|
+
const fallback = this.pickNearestCell(cells, nextTs, 'next');
|
|
14994
|
+
if (fallback) {
|
|
14995
|
+
this.setActiveCell(fallback.day.date);
|
|
14490
14996
|
}
|
|
14491
|
-
}
|
|
14997
|
+
}
|
|
14998
|
+
this.scrollToActiveCell();
|
|
14999
|
+
this.focusActiveCell();
|
|
14492
15000
|
});
|
|
14493
15001
|
} else if (direction === 'prev' && this.showPrevMonthBtn) {
|
|
14494
15002
|
// Navigate to previous month and focus the computed previous date.
|
|
@@ -14502,19 +15010,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14502
15010
|
}
|
|
14503
15011
|
|
|
14504
15012
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14505
|
-
|
|
14506
|
-
|
|
14507
|
-
|
|
14508
|
-
|
|
14509
|
-
|
|
14510
|
-
|
|
14511
|
-
|
|
14512
|
-
|
|
14513
|
-
|
|
14514
|
-
|
|
14515
|
-
|
|
15013
|
+
this._afterMonthRender(() => {
|
|
15014
|
+
const cells = this.getAllFocusableCells();
|
|
15015
|
+
const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
|
|
15016
|
+
if (target) {
|
|
15017
|
+
this.setActiveCell(target.day.date);
|
|
15018
|
+
} else {
|
|
15019
|
+
// Same nearest-by-date fallback handleGridKeyDown uses — direct
|
|
15020
|
+
// `cells[0]` would land on the start of the previous month, far
|
|
15021
|
+
// from the user's intended `prevTs`.
|
|
15022
|
+
const fallback = this.pickNearestCell(cells, prevTs, 'prev');
|
|
15023
|
+
if (fallback) {
|
|
15024
|
+
this.setActiveCell(fallback.day.date);
|
|
14516
15025
|
}
|
|
14517
|
-
}
|
|
15026
|
+
}
|
|
15027
|
+
this.scrollToActiveCell();
|
|
15028
|
+
this.focusActiveCell();
|
|
14518
15029
|
});
|
|
14519
15030
|
}
|
|
14520
15031
|
} else if (key === 'ArrowDown' || key === 'ArrowUp') {
|
|
@@ -14542,20 +15053,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14542
15053
|
} else {
|
|
14543
15054
|
this.handlePrevMonth({ skipActiveUpdate: true });
|
|
14544
15055
|
}
|
|
14545
|
-
|
|
14546
|
-
|
|
14547
|
-
|
|
14548
|
-
|
|
14549
|
-
|
|
14550
|
-
|
|
14551
|
-
|
|
14552
|
-
|
|
14553
|
-
|
|
14554
|
-
|
|
15056
|
+
this._afterMonthRender(() => {
|
|
15057
|
+
const cells = this.getAllFocusableCells();
|
|
15058
|
+
const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
|
|
15059
|
+
if (target) {
|
|
15060
|
+
this.setActiveCell(target.day.date);
|
|
15061
|
+
} else {
|
|
15062
|
+
// Same nearest-by-date fallback handleGridKeyDown uses — the
|
|
15063
|
+
// old direction-based `cells[0]`/`cells[length-1]` clamp
|
|
15064
|
+
// could land 25+ days from the intended target.
|
|
15065
|
+
const nearest = this.pickNearestCell(cells, targetDate, navDirection);
|
|
15066
|
+
if (nearest) {
|
|
14555
15067
|
this.setActiveCell(nearest.day.date);
|
|
14556
|
-
this.focusActiveCell();
|
|
14557
15068
|
}
|
|
14558
|
-
}
|
|
15069
|
+
}
|
|
15070
|
+
this.scrollToActiveCell();
|
|
15071
|
+
this.focusActiveCell();
|
|
14559
15072
|
});
|
|
14560
15073
|
}
|
|
14561
15074
|
}
|
|
@@ -14594,8 +15107,9 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14594
15107
|
return;
|
|
14595
15108
|
}
|
|
14596
15109
|
|
|
14597
|
-
//
|
|
14598
|
-
// so
|
|
15110
|
+
// DOM focus stays on the grid wrapper while arrow keys move the active
|
|
15111
|
+
// cell, so cell buttons never receive native focus. The debounced live
|
|
15112
|
+
// region carries the full-context announcement instead.
|
|
14599
15113
|
const announcement = this.buildFocusAnnouncement(date);
|
|
14600
15114
|
this.announceFocusDebounced(announcement);
|
|
14601
15115
|
|
|
@@ -14665,10 +15179,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14665
15179
|
return null;
|
|
14666
15180
|
}
|
|
14667
15181
|
|
|
14668
|
-
const departTs =
|
|
15182
|
+
const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
|
|
14669
15183
|
const parsedTo = Number.parseInt(this.dateTo, 10);
|
|
14670
15184
|
const hasTo = Number.isFinite(parsedTo);
|
|
14671
|
-
const returnTs = hasTo ?
|
|
15185
|
+
const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
|
|
14672
15186
|
|
|
14673
15187
|
if (date === departTs) {
|
|
14674
15188
|
return this.datepicker.rangeLabelStart || 'range start';
|
|
@@ -14682,36 +15196,22 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14682
15196
|
if (hasTo && date > departTs && date < returnTs) {
|
|
14683
15197
|
return this.datepicker.rangeLabelInRange || 'in range';
|
|
14684
15198
|
}
|
|
15199
|
+
if (!hasTo && date > departTs) {
|
|
15200
|
+
return this.datepicker.rangeLabelEndPreview || 'previewing range end';
|
|
15201
|
+
}
|
|
14685
15202
|
return this.datepicker.rangeLabelAfterRange || 'after range';
|
|
14686
15203
|
}
|
|
14687
15204
|
|
|
14688
15205
|
/**
|
|
14689
|
-
* Checks whether a given date is a blackout date.
|
|
15206
|
+
* Checks whether a given date is a blackout date. Delegates to the
|
|
15207
|
+
* memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
|
|
15208
|
+
* legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
|
|
14690
15209
|
* @private
|
|
14691
15210
|
* @param {Number} dateTs - Unix timestamp (seconds).
|
|
14692
15211
|
* @returns {Boolean} True if the date is blacked out.
|
|
14693
15212
|
*/
|
|
14694
15213
|
isDateBlackout(dateTs) {
|
|
14695
|
-
|
|
14696
|
-
if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
|
|
14697
|
-
if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
|
|
14698
|
-
return true;
|
|
14699
|
-
}
|
|
14700
|
-
}
|
|
14701
|
-
|
|
14702
|
-
// Check ISO blackoutDates.
|
|
14703
|
-
const blackoutDates = this.datepicker?.blackoutDates;
|
|
14704
|
-
if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
|
|
14705
|
-
const date = new Date(dateTs * 1000);
|
|
14706
|
-
const yyyy = date.getFullYear();
|
|
14707
|
-
const mm = String(date.getMonth() + 1).padStart(2, '0');
|
|
14708
|
-
const dd = String(date.getDate()).padStart(2, '0');
|
|
14709
|
-
if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
|
|
14710
|
-
return true;
|
|
14711
|
-
}
|
|
14712
|
-
}
|
|
14713
|
-
|
|
14714
|
-
return false;
|
|
15214
|
+
return this._getBlackoutSet().has(dateTs);
|
|
14715
15215
|
}
|
|
14716
15216
|
|
|
14717
15217
|
/**
|
|
@@ -14739,9 +15239,14 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14739
15239
|
* @private
|
|
14740
15240
|
* @param {Object} [options] - Optional settings.
|
|
14741
15241
|
* @param {boolean} [options.force=false] - When true, clears classes even
|
|
14742
|
-
* when both dateFrom and dateTo are set. Used by month nav handlers
|
|
14743
|
-
*
|
|
14744
|
-
*
|
|
15242
|
+
* when both dateFrom and dateTo are set. Used by month nav handlers to
|
|
15243
|
+
* strip the imperative-only `lastHoveredDate` before the re-render.
|
|
15244
|
+
* The other two classes (`inRange`, `rangeDepartDate`) are classMap-
|
|
15245
|
+
* managed and get stripped as a side effect here; because classMap
|
|
15246
|
+
* remembers what it last emitted and does not diff against the actual
|
|
15247
|
+
* DOM, the following month re-render will NOT re-add them on its own.
|
|
15248
|
+
* Nav handlers must schedule `refreshCommittedRangeClasses` (via
|
|
15249
|
+
* `scheduleCommittedRangeClassRefresh`) to resync them.
|
|
14745
15250
|
* @returns {void}
|
|
14746
15251
|
*/
|
|
14747
15252
|
clearRangePreview(options) {
|
|
@@ -14756,6 +15261,57 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14756
15261
|
});
|
|
14757
15262
|
}
|
|
14758
15263
|
|
|
15264
|
+
/**
|
|
15265
|
+
* Re-applies the committed-range classes across every focusable cell
|
|
15266
|
+
* after a month navigation. classMap in the cell tracks its own
|
|
15267
|
+
* previous state: once `clearRangePreview({ force: true })` strips
|
|
15268
|
+
* `inRange`/`rangeDepartDate` imperatively before the re-render,
|
|
15269
|
+
* classMap's next diff sees the same class-value it emitted before and
|
|
15270
|
+
* produces no delta, leaving the DOM without the classes even though a
|
|
15271
|
+
* full range is committed. Re-applying imperatively resyncs the two
|
|
15272
|
+
* months' cells with `dateFrom`/`dateTo`.
|
|
15273
|
+
*
|
|
15274
|
+
* Iterates `getAllFocusableCells()` — out-of-range cells (blocked by
|
|
15275
|
+
* `min`/`max`) can never carry range classes anyway, so skipping them
|
|
15276
|
+
* is correct and cheaper than a whole-grid walk.
|
|
15277
|
+
*
|
|
15278
|
+
* The cell's `applyCommittedRangeClasses` reuses the same
|
|
15279
|
+
* `isInRange`/`isDepartDate`/`isReturnDate` helpers `renderCellButton`
|
|
15280
|
+
* uses, so we don't parse dateFrom/dateTo here — the helpers already
|
|
15281
|
+
* normalize their inputs (midnight-truncation, string→int) internally.
|
|
15282
|
+
* @private
|
|
15283
|
+
* @returns {void}
|
|
15284
|
+
*/
|
|
15285
|
+
refreshCommittedRangeClasses() {
|
|
15286
|
+
if (this.noRange || !this.dateFrom || !this.dateTo) {
|
|
15287
|
+
return;
|
|
15288
|
+
}
|
|
15289
|
+
|
|
15290
|
+
const allCells = this.getAllFocusableCells();
|
|
15291
|
+
allCells.forEach((cell) => {
|
|
15292
|
+
cell.applyCommittedRangeClasses();
|
|
15293
|
+
});
|
|
15294
|
+
}
|
|
15295
|
+
|
|
15296
|
+
/**
|
|
15297
|
+
* Schedules `refreshCommittedRangeClasses` to run after the month
|
|
15298
|
+
* re-render has flushed and the cells' button caches have refreshed.
|
|
15299
|
+
* Both `handlePrevMonth` and `handleNextMonth` need this exact call
|
|
15300
|
+
* shape; keeping it in one place prevents them from drifting apart.
|
|
15301
|
+
*
|
|
15302
|
+
* Bails synchronously when a full committed range isn't set — otherwise
|
|
15303
|
+
* every prev/next click in single-date mode (or before the user picks
|
|
15304
|
+
* both dates in range mode) pays for an unused double-rAF hop.
|
|
15305
|
+
* @private
|
|
15306
|
+
* @returns {void}
|
|
15307
|
+
*/
|
|
15308
|
+
scheduleCommittedRangeClassRefresh() {
|
|
15309
|
+
if (this.noRange || !this.dateFrom || !this.dateTo) {
|
|
15310
|
+
return;
|
|
15311
|
+
}
|
|
15312
|
+
this._afterMonthRender(() => this.refreshCommittedRangeClasses());
|
|
15313
|
+
}
|
|
15314
|
+
|
|
14759
15315
|
/**
|
|
14760
15316
|
* Overrides the base class handler to prevent setting `this.hoveredDate`
|
|
14761
15317
|
* as a reactive property. Instead, handles the range preview imperatively.
|
|
@@ -14769,7 +15325,28 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14769
15325
|
}
|
|
14770
15326
|
|
|
14771
15327
|
/**
|
|
14772
|
-
* Scrolls the calendar
|
|
15328
|
+
* Scrolls the calendar so the active cell is visible.
|
|
15329
|
+
*
|
|
15330
|
+
* Walks the flat tree (rendered, slot-aware) outward from the active
|
|
15331
|
+
* cell's button and calls `scrollBy` on every vertically-scrollable
|
|
15332
|
+
* ancestor by whatever delta still separates the cell from that
|
|
15333
|
+
* ancestor's viewport. Native `scrollIntoView` is not used because the
|
|
15334
|
+
* cell sits inside multiple nested scroll containers (the dropdown bib's
|
|
15335
|
+
* `<dialog>`, the bibtemplate's `#bodyContainer`) and the algorithm only
|
|
15336
|
+
* scrolls one of them on its own, leaving the cell short of the
|
|
15337
|
+
* viewport in mobile fullscreen.
|
|
15338
|
+
*
|
|
15339
|
+
* Uses `behavior: 'auto'` (the spec's universally-supported non-animated
|
|
15340
|
+
* value) so each `scrollBy` resolves synchronously and the next
|
|
15341
|
+
* iteration's `getBoundingClientRect` reads post-scroll positions
|
|
15342
|
+
* accurately. This also satisfies `prefers-reduced-motion` users — the
|
|
15343
|
+
* scroll containers do not set CSS `scroll-behavior: smooth`, so `auto`
|
|
15344
|
+
* is effectively instant.
|
|
15345
|
+
*
|
|
15346
|
+
* The active cell is looked up from the cache populated by
|
|
15347
|
+
* `setActiveCell`. On a cache miss (stale or absent) the cache is
|
|
15348
|
+
* refreshed from a single full scan so subsequent calls stay on the
|
|
15349
|
+
* fast path.
|
|
14773
15350
|
* @private
|
|
14774
15351
|
* @returns {void}
|
|
14775
15352
|
*/
|
|
@@ -14778,16 +15355,69 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14778
15355
|
return;
|
|
14779
15356
|
}
|
|
14780
15357
|
|
|
14781
|
-
|
|
14782
|
-
|
|
14783
|
-
|
|
14784
|
-
|
|
14785
|
-
|
|
15358
|
+
// Prefer the cell cached by setActiveCell so arrow-key navigation does
|
|
15359
|
+
// not rebuild the full cell list on every keypress. Fall back to a
|
|
15360
|
+
// lookup when the cache is stale (e.g. detached after month re-render)
|
|
15361
|
+
// or absent (scrollToActiveCell called without a prior setActiveCell);
|
|
15362
|
+
// refresh the cache on the fallback path so a subsequent call reuses it.
|
|
15363
|
+
const activeDate = this.activeCellDate;
|
|
15364
|
+
const cached = this._activeCell;
|
|
15365
|
+
const cacheFresh = cached && cached.isConnected && cached.day && cached.day.date === activeDate;
|
|
15366
|
+
let activeCell = null;
|
|
15367
|
+
if (cacheFresh) {
|
|
15368
|
+
activeCell = cached;
|
|
15369
|
+
} else {
|
|
15370
|
+
activeCell = this.getAllFocusableCells().find((cell) => cell.day && cell.day.date === activeDate);
|
|
15371
|
+
this._activeCell = activeCell || null;
|
|
15372
|
+
}
|
|
15373
|
+
if (!activeCell) {
|
|
15374
|
+
return;
|
|
15375
|
+
}
|
|
15376
|
+
|
|
15377
|
+
// Scroll the button inside the cell — it has concrete dimensions,
|
|
15378
|
+
// which avoids quirks when the cell host has display: inline / contents
|
|
15379
|
+
// / flex-without-explicit-size.
|
|
15380
|
+
const target = activeCell._cachedButton ||
|
|
15381
|
+
activeCell.shadowRoot?.querySelector('button.day') ||
|
|
15382
|
+
activeCell;
|
|
15383
|
+
|
|
15384
|
+
// parentNode follows the authored DOM tree and steps over shadow roots
|
|
15385
|
+
// via slot projection. A slotted element's visual parent is its
|
|
15386
|
+
// assignedSlot's parent (inside the host's shadow tree), not the host
|
|
15387
|
+
// itself. Without this hop, the walk skips right past #bodyContainer
|
|
15388
|
+
// and <dialog> and finds no scrollable ancestor at all.
|
|
15389
|
+
const flatParent = (current) => {
|
|
15390
|
+
if (current.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
|
|
15391
|
+
return current.host || null;
|
|
15392
|
+
}
|
|
15393
|
+
if (current.assignedSlot) {
|
|
15394
|
+
return current.assignedSlot.parentNode;
|
|
15395
|
+
}
|
|
15396
|
+
return current.parentNode;
|
|
15397
|
+
};
|
|
14786
15398
|
|
|
14787
|
-
|
|
14788
|
-
|
|
14789
|
-
|
|
14790
|
-
|
|
15399
|
+
let node = flatParent(target);
|
|
15400
|
+
while (node && node !== document && node !== window) {
|
|
15401
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
15402
|
+
const { overflowY } = window.getComputedStyle(node);
|
|
15403
|
+
if (overflowY === 'auto' || overflowY === 'scroll') {
|
|
15404
|
+
const targetRect = target.getBoundingClientRect();
|
|
15405
|
+
const scrollerRect = node.getBoundingClientRect();
|
|
15406
|
+
let delta = 0;
|
|
15407
|
+
if (targetRect.top < scrollerRect.top) {
|
|
15408
|
+
delta = targetRect.top - scrollerRect.top;
|
|
15409
|
+
} else if (targetRect.bottom > scrollerRect.bottom) {
|
|
15410
|
+
delta = targetRect.bottom - scrollerRect.bottom;
|
|
15411
|
+
}
|
|
15412
|
+
if (delta !== 0) {
|
|
15413
|
+
node.scrollBy({
|
|
15414
|
+
top: delta,
|
|
15415
|
+
behavior: 'auto'
|
|
15416
|
+
});
|
|
15417
|
+
}
|
|
15418
|
+
}
|
|
15419
|
+
}
|
|
15420
|
+
node = flatParent(node);
|
|
14791
15421
|
}
|
|
14792
15422
|
}
|
|
14793
15423
|
|
|
@@ -14878,9 +15508,34 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14878
15508
|
// the last one.
|
|
14879
15509
|
if (this._announceRafId) {
|
|
14880
15510
|
cancelAnimationFrame(this._announceRafId);
|
|
15511
|
+
this._announceRafId = null;
|
|
14881
15512
|
}
|
|
15513
|
+
this._deliverAnnouncement(dateStr, 0);
|
|
15514
|
+
}
|
|
15515
|
+
|
|
15516
|
+
/**
|
|
15517
|
+
* Writes `dateStr` to the live region. If the dropdown's dialog hasn't
|
|
15518
|
+
* mounted yet (so getOrCreateLiveRegion can't attach), retries on the
|
|
15519
|
+
* next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
|
|
15520
|
+
* dropping the announcement. The retry uses the same `_announceRafId`
|
|
15521
|
+
* the double-rAF below uses, so a newer announceSelection call (or
|
|
15522
|
+
* disconnectedCallback) cancels any in-flight retry.
|
|
15523
|
+
* @private
|
|
15524
|
+
* @param {String} dateStr - The localized date string to announce.
|
|
15525
|
+
* @param {Number} attempts - Number of prior retry attempts.
|
|
15526
|
+
* @returns {void}
|
|
15527
|
+
*/
|
|
15528
|
+
_deliverAnnouncement(dateStr, attempts) {
|
|
14882
15529
|
const liveRegion = this.getOrCreateLiveRegion();
|
|
14883
15530
|
if (!liveRegion) {
|
|
15531
|
+
const MAX_LIVE_REGION_RETRIES = 10;
|
|
15532
|
+
if (attempts < MAX_LIVE_REGION_RETRIES) {
|
|
15533
|
+
this._announceRafId = requestAnimationFrame(() => {
|
|
15534
|
+
this._deliverAnnouncement(dateStr, attempts + 1);
|
|
15535
|
+
});
|
|
15536
|
+
} else {
|
|
15537
|
+
this._announceRafId = null;
|
|
15538
|
+
}
|
|
14884
15539
|
return;
|
|
14885
15540
|
}
|
|
14886
15541
|
|
|
@@ -14906,6 +15561,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14906
15561
|
* originally tried aria-live="polite" here, but VoiceOver treats
|
|
14907
15562
|
* polite as "wait until idle" — which never happens during active
|
|
14908
15563
|
* keyboard navigation — so the announcements were silently dropped.
|
|
15564
|
+
*
|
|
15565
|
+
* This is a documented deviation from WCAG 2.1 SC 4.1.3, which
|
|
15566
|
+
* prefers `polite` for status messages. See the "Documented
|
|
15567
|
+
* Deviation" section in components/datepicker/docs/pages/accessibility.md.
|
|
14909
15568
|
* @private
|
|
14910
15569
|
* @param {String} dateStr - The localized date string to announce.
|
|
14911
15570
|
* @returns {void}
|
|
@@ -15053,7 +15712,7 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
15053
15712
|
</div>
|
|
15054
15713
|
</div>
|
|
15055
15714
|
|
|
15056
|
-
<div class="calendarWrapper
|
|
15715
|
+
<div class="calendarWrapper">
|
|
15057
15716
|
<div class="calendarNavButtons">
|
|
15058
15717
|
${this.showPrevMonthBtn ? u$a`
|
|
15059
15718
|
<button tabIndex="0" class="calendarNavBtn prevMonth" aria-label="${this.datepicker?.navLabelPrevMonth || 'Previous month'}" @click="${this.handlePrevMonth}">
|
|
@@ -15066,7 +15725,7 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
15066
15725
|
</button>
|
|
15067
15726
|
` : undefined}
|
|
15068
15727
|
</div>
|
|
15069
|
-
<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}">
|
|
15728
|
+
<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}">
|
|
15070
15729
|
${this.renderAllCalendars()}
|
|
15071
15730
|
</div>
|
|
15072
15731
|
</div>
|
|
@@ -17359,12 +18018,40 @@ class AuroFloatingUI {
|
|
|
17359
18018
|
return;
|
|
17360
18019
|
}
|
|
17361
18020
|
|
|
18021
|
+
// Chrome-specific: during popover top-layer promotion after a click on a
|
|
18022
|
+
// slotted focusable, :focus-within can briefly evaluate false while the
|
|
18023
|
+
// active element is still structurally inside the trigger/bib. Fall back
|
|
18024
|
+
// to a shadow-piercing ancestry walk from the deep active element before
|
|
18025
|
+
// treating this as a real focus loss.
|
|
18026
|
+
try {
|
|
18027
|
+
let active = document.activeElement;
|
|
18028
|
+
while (active && active.shadowRoot && active.shadowRoot.activeElement) {
|
|
18029
|
+
active = active.shadowRoot.activeElement;
|
|
18030
|
+
}
|
|
18031
|
+
const targets = [element, element.trigger, element.bib].filter(Boolean);
|
|
18032
|
+
let node = active;
|
|
18033
|
+
while (node) {
|
|
18034
|
+
if (targets.includes(node)) {
|
|
18035
|
+
return;
|
|
18036
|
+
}
|
|
18037
|
+
node =
|
|
18038
|
+
node.parentElement ||
|
|
18039
|
+
(node.getRootNode && node.getRootNode().host) ||
|
|
18040
|
+
null;
|
|
18041
|
+
}
|
|
18042
|
+
} catch (e) {
|
|
18043
|
+
// Defensive: fall through to the existing close path if traversal fails.
|
|
18044
|
+
}
|
|
18045
|
+
|
|
17362
18046
|
// if fullscreen bib is in fullscreen mode, do not close
|
|
17363
18047
|
if (element.bib.hasAttribute("isfullscreen")) {
|
|
17364
18048
|
return;
|
|
17365
18049
|
}
|
|
17366
18050
|
|
|
17367
|
-
|
|
18051
|
+
// eventType "focusloss" distinguishes a Tab/click-driven close from an
|
|
18052
|
+
// Escape keydown close. Consumers use this to decide whether to restore
|
|
18053
|
+
// focus to the trigger (Escape) or let it advance naturally (Tab).
|
|
18054
|
+
this.hideBib("focusloss");
|
|
17368
18055
|
}
|
|
17369
18056
|
|
|
17370
18057
|
setupHideHandlers() {
|
|
@@ -18034,199 +18721,6 @@ function getFocusableElements(container) {
|
|
|
18034
18721
|
return tabIndexedUniqueElements;
|
|
18035
18722
|
}
|
|
18036
18723
|
|
|
18037
|
-
/**
|
|
18038
|
-
* FocusTrap manages keyboard focus within a specified container element, ensuring that focus does not leave the container when tabbing.
|
|
18039
|
-
* It is commonly used for modal dialogs or overlays to improve accessibility by trapping focus within interactive UI components.
|
|
18040
|
-
*/
|
|
18041
|
-
class FocusTrap {
|
|
18042
|
-
/**
|
|
18043
|
-
* Creates a new FocusTrap instance for the given container element.
|
|
18044
|
-
* Initializes event listeners and prepares the container for focus management.
|
|
18045
|
-
*
|
|
18046
|
-
* @param {HTMLElement} container The DOM element to trap focus within.
|
|
18047
|
-
* @param {boolean} [controlTabOrder=false] If true enables manual control of the tab order by the FocusTrap.
|
|
18048
|
-
* @throws {Error} If the provided container is not a valid HTMLElement.
|
|
18049
|
-
*/
|
|
18050
|
-
constructor(container, controlTabOrder = false) {
|
|
18051
|
-
if (!container || !(container instanceof HTMLElement)) {
|
|
18052
|
-
throw new Error("FocusTrap requires a valid HTMLElement.");
|
|
18053
|
-
}
|
|
18054
|
-
|
|
18055
|
-
this.container = container;
|
|
18056
|
-
this.tabDirection = "forward"; // or 'backward';
|
|
18057
|
-
this.controlTabOrder = controlTabOrder;
|
|
18058
|
-
|
|
18059
|
-
this._init();
|
|
18060
|
-
}
|
|
18061
|
-
|
|
18062
|
-
/**
|
|
18063
|
-
* Initializes the focus trap by setting up event listeners and attributes on the container.
|
|
18064
|
-
* Prepares the container for focus management, including support for shadow DOM and inert attributes.
|
|
18065
|
-
*
|
|
18066
|
-
* @private
|
|
18067
|
-
*/
|
|
18068
|
-
_init() {
|
|
18069
|
-
// Add inert attribute to prevent focusing programmatically as well (if supported)
|
|
18070
|
-
if ("inert" in HTMLElement.prototype) {
|
|
18071
|
-
this.container.inert = false; // Ensure the container isn't inert
|
|
18072
|
-
this.container.setAttribute("data-focus-trap-container", true); // Mark for identification
|
|
18073
|
-
}
|
|
18074
|
-
|
|
18075
|
-
// Track tab direction
|
|
18076
|
-
this.container.addEventListener("keydown", this._onKeydown);
|
|
18077
|
-
}
|
|
18078
|
-
|
|
18079
|
-
/**
|
|
18080
|
-
* Gets an array of currently active (focused) elements in the document and shadow DOM.
|
|
18081
|
-
* @returns {Array<HTMLElement>} An array of focusable elements within the container.
|
|
18082
|
-
* @private
|
|
18083
|
-
*/
|
|
18084
|
-
_getActiveElements() {
|
|
18085
|
-
// Get the active element(s) in the document and shadow root
|
|
18086
|
-
// This will include the active element in the shadow DOM if it exists
|
|
18087
|
-
// Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
|
|
18088
|
-
let { activeElement } = document;
|
|
18089
|
-
const actives = [activeElement];
|
|
18090
|
-
while (activeElement?.shadowRoot?.activeElement) {
|
|
18091
|
-
actives.push(activeElement.shadowRoot.activeElement);
|
|
18092
|
-
activeElement = activeElement.shadowRoot.activeElement;
|
|
18093
|
-
}
|
|
18094
|
-
return actives;
|
|
18095
|
-
}
|
|
18096
|
-
|
|
18097
|
-
/**
|
|
18098
|
-
* Gets the next focus index based on the current index and focusable elements.
|
|
18099
|
-
* @param {number} currentIndex The current index of the focused element.
|
|
18100
|
-
* @param {Array<HTMLElement>} focusables The array of focusable elements.
|
|
18101
|
-
* @returns {number|null} The next focus index or null if not determined.
|
|
18102
|
-
*/
|
|
18103
|
-
_getNextFocusIndex(currentIndex, focusables, actives) {
|
|
18104
|
-
if (this.controlTabOrder) {
|
|
18105
|
-
// Calculate the new index based on the current index and tab direction
|
|
18106
|
-
let newFocusIndex =
|
|
18107
|
-
currentIndex + (this.tabDirection === "forward" ? 1 : -1);
|
|
18108
|
-
|
|
18109
|
-
// Wrap-around logic
|
|
18110
|
-
if (newFocusIndex < 0) newFocusIndex = focusables.length - 1;
|
|
18111
|
-
if (newFocusIndex >= focusables.length) newFocusIndex = 0;
|
|
18112
|
-
|
|
18113
|
-
// Early return with the new index
|
|
18114
|
-
return newFocusIndex;
|
|
18115
|
-
}
|
|
18116
|
-
|
|
18117
|
-
// Determine if we need to wrap
|
|
18118
|
-
const atFirst =
|
|
18119
|
-
actives.includes(focusables[0]) || actives.includes(this.container);
|
|
18120
|
-
const atLast = actives.includes(focusables[focusables.length - 1]);
|
|
18121
|
-
|
|
18122
|
-
// Only wrap if at the ends
|
|
18123
|
-
if (this.tabDirection === "backward" && atFirst) {
|
|
18124
|
-
return focusables.length - 1;
|
|
18125
|
-
}
|
|
18126
|
-
|
|
18127
|
-
if (this.tabDirection === "forward" && atLast) {
|
|
18128
|
-
return 0;
|
|
18129
|
-
}
|
|
18130
|
-
|
|
18131
|
-
// No wrap, so don't change focus, return early
|
|
18132
|
-
return null;
|
|
18133
|
-
}
|
|
18134
|
-
|
|
18135
|
-
/**
|
|
18136
|
-
* Handles the Tab key press event to manage focus within the container.
|
|
18137
|
-
* @param {KeyboardEvent} e The keyboard event triggered by the user.
|
|
18138
|
-
* @returns {void}
|
|
18139
|
-
*/
|
|
18140
|
-
_handleTabKey(e) {
|
|
18141
|
-
// Update the focusable elements
|
|
18142
|
-
const focusables = this._getFocusableElements();
|
|
18143
|
-
|
|
18144
|
-
// If there are no focusable elements, exit
|
|
18145
|
-
if (!focusables.length) return;
|
|
18146
|
-
|
|
18147
|
-
// Set the tab direction based on the key pressed
|
|
18148
|
-
this.tabDirection = e.shiftKey ? "backward" : "forward";
|
|
18149
|
-
|
|
18150
|
-
// Get the active elements that are currently focused
|
|
18151
|
-
const actives = this._getActiveElements();
|
|
18152
|
-
|
|
18153
|
-
// If we're at either end of the focusable elements, wrap around to the other end
|
|
18154
|
-
let focusIndex = focusables.findIndex((el) => actives.includes(el));
|
|
18155
|
-
|
|
18156
|
-
// Fallback if we have no focused element
|
|
18157
|
-
if (focusIndex === -1) focusIndex = 0;
|
|
18158
|
-
|
|
18159
|
-
// Get the next focus index based on the current focus index, tab direction, and controlTabOrder setting
|
|
18160
|
-
// Is null if no new focus index is determined
|
|
18161
|
-
const newFocusIndex = this._getNextFocusIndex(
|
|
18162
|
-
focusIndex,
|
|
18163
|
-
focusables,
|
|
18164
|
-
actives,
|
|
18165
|
-
);
|
|
18166
|
-
|
|
18167
|
-
// If we have a new focus index, set focus to that element
|
|
18168
|
-
if (newFocusIndex !== null) {
|
|
18169
|
-
e.preventDefault();
|
|
18170
|
-
focusables[newFocusIndex].focus();
|
|
18171
|
-
}
|
|
18172
|
-
}
|
|
18173
|
-
|
|
18174
|
-
/**
|
|
18175
|
-
* Catches the keydown event
|
|
18176
|
-
* @param {KeyboardEvent} e The keyboard event triggered by user interaction.
|
|
18177
|
-
* @private
|
|
18178
|
-
*/
|
|
18179
|
-
_onKeydown = (e) => {
|
|
18180
|
-
// Handle tab
|
|
18181
|
-
if (e.key === "Tab") this._handleTabKey(e);
|
|
18182
|
-
};
|
|
18183
|
-
|
|
18184
|
-
/**
|
|
18185
|
-
* Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
|
|
18186
|
-
* Returns a unique, ordered array of elements that can receive focus.
|
|
18187
|
-
*
|
|
18188
|
-
* @returns {Array<HTMLElement>} An array of focusable elements within the container.
|
|
18189
|
-
* @private
|
|
18190
|
-
*/
|
|
18191
|
-
_getFocusableElements() {
|
|
18192
|
-
// Use the imported utility function to get focusable elements
|
|
18193
|
-
const elements = getFocusableElements(this.container);
|
|
18194
|
-
|
|
18195
|
-
// Return the elements found
|
|
18196
|
-
return elements;
|
|
18197
|
-
}
|
|
18198
|
-
|
|
18199
|
-
/**
|
|
18200
|
-
* Moves focus to the first focusable element within the container.
|
|
18201
|
-
* Useful for setting initial focus when activating the focus trap.
|
|
18202
|
-
*/
|
|
18203
|
-
focusFirstElement() {
|
|
18204
|
-
const focusables = this._getFocusableElements();
|
|
18205
|
-
if (focusables.length) focusables[0].focus();
|
|
18206
|
-
}
|
|
18207
|
-
|
|
18208
|
-
/**
|
|
18209
|
-
* Moves focus to the last focusable element within the container.
|
|
18210
|
-
* Useful for setting focus when deactivating or cycling focus in reverse.
|
|
18211
|
-
*/
|
|
18212
|
-
focusLastElement() {
|
|
18213
|
-
const focusables = this._getFocusableElements();
|
|
18214
|
-
if (focusables.length) focusables[focusables.length - 1].focus();
|
|
18215
|
-
}
|
|
18216
|
-
|
|
18217
|
-
/**
|
|
18218
|
-
* Removes event listeners and attributes added by the focus trap.
|
|
18219
|
-
* Call this method to clean up when the focus trap is no longer needed.
|
|
18220
|
-
*/
|
|
18221
|
-
disconnect() {
|
|
18222
|
-
if (this.container.hasAttribute("data-focus-trap-container")) {
|
|
18223
|
-
this.container.removeAttribute("data-focus-trap-container");
|
|
18224
|
-
}
|
|
18225
|
-
|
|
18226
|
-
this.container.removeEventListener("keydown", this._onKeydown);
|
|
18227
|
-
}
|
|
18228
|
-
}
|
|
18229
|
-
|
|
18230
18724
|
// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
|
|
18231
18725
|
// See LICENSE in the project root for license information.
|
|
18232
18726
|
|
|
@@ -18727,7 +19221,7 @@ class AuroDropdownBib extends i$1 {
|
|
|
18727
19221
|
classes[`shape-${this.shape}`] = true;
|
|
18728
19222
|
|
|
18729
19223
|
return u$a`
|
|
18730
|
-
<dialog class="${e$4(classes)}" part="bibContainer" role="${o$2(this.dialogRole)}" aria-labelledby="${o$2(this.dialogLabel ? 'dialogLabel' : undefined)}">
|
|
19224
|
+
<dialog tabindex="-1" class="${e$4(classes)}" part="bibContainer" role="${o$2(this.dialogRole)}" aria-labelledby="${o$2(this.dialogLabel ? 'dialogLabel' : undefined)}">
|
|
18731
19225
|
${this.dialogLabel ? u$a`<span id="dialogLabel" class="util_displayHiddenVisually">${this.dialogLabel}</span>` : ''}
|
|
18732
19226
|
<slot></slot>
|
|
18733
19227
|
<span id="srAnnouncement" class="util_displayHiddenVisually" aria-live="polite" role="status"></span>
|
|
@@ -18978,7 +19472,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
|
|
|
18978
19472
|
}
|
|
18979
19473
|
};
|
|
18980
19474
|
|
|
18981
|
-
var formkitVersion$1 = '
|
|
19475
|
+
var formkitVersion$1 = '202607221815';
|
|
18982
19476
|
|
|
18983
19477
|
let AuroElement$2 = class AuroElement extends i$1 {
|
|
18984
19478
|
static get properties() {
|
|
@@ -19107,7 +19601,6 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19107
19601
|
static get shadowRootOptions() {
|
|
19108
19602
|
return {
|
|
19109
19603
|
...AuroElement$2.shadowRootOptions,
|
|
19110
|
-
delegatesFocus: true,
|
|
19111
19604
|
};
|
|
19112
19605
|
}
|
|
19113
19606
|
|
|
@@ -19119,6 +19612,15 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19119
19612
|
this.matchWidth = false;
|
|
19120
19613
|
this.noHideOnThisFocusLoss = false;
|
|
19121
19614
|
|
|
19615
|
+
/**
|
|
19616
|
+
* When true, the dropdown skips its generic focus restoration on close.
|
|
19617
|
+
* Set by consumers (e.g. combobox) that manage their own focus routing
|
|
19618
|
+
* via setClearBtnFocus / setInputFocus / keyboard strategy.
|
|
19619
|
+
* Separate from noHideOnThisFocusLoss (which controls auto-close behavior).
|
|
19620
|
+
* @private
|
|
19621
|
+
*/
|
|
19622
|
+
this.noFocusRestoreOnClose = false;
|
|
19623
|
+
|
|
19122
19624
|
this.errorMessage = undefined; // TODO - check with Doug if there is still more to do here
|
|
19123
19625
|
|
|
19124
19626
|
// Layout Config
|
|
@@ -19274,7 +19776,49 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19274
19776
|
focusables[0].focus();
|
|
19275
19777
|
}
|
|
19276
19778
|
} else {
|
|
19779
|
+
this.focusTrigger();
|
|
19780
|
+
}
|
|
19781
|
+
}
|
|
19782
|
+
|
|
19783
|
+
/**
|
|
19784
|
+
* Focus the trigger content. When the trigger wrapper itself is focusable
|
|
19785
|
+
* (has tabindex), focus it directly. Otherwise, focus the first focusable
|
|
19786
|
+
* element slotted into the trigger slot (e.g. the auro-input).
|
|
19787
|
+
* @private
|
|
19788
|
+
*/
|
|
19789
|
+
focusTrigger() {
|
|
19790
|
+
if (this.trigger.hasAttribute('tabindex')) {
|
|
19277
19791
|
this.trigger.focus();
|
|
19792
|
+
} else {
|
|
19793
|
+
// Slotted content isn't a DOM child of the trigger div, so
|
|
19794
|
+
// getFocusableElements can't find it. Query assigned nodes directly.
|
|
19795
|
+
const slot = this.trigger.querySelector('slot[name="trigger"]');
|
|
19796
|
+
if (slot) {
|
|
19797
|
+
const assigned = slot.assignedElements();
|
|
19798
|
+
for (const el of assigned) {
|
|
19799
|
+
if (el.hasAttribute('disabled')) {
|
|
19800
|
+
continue; // eslint-disable-line no-continue
|
|
19801
|
+
}
|
|
19802
|
+
// Try finding a focusable descendant first (handles non-focusable
|
|
19803
|
+
// wrappers like <div> containing a <button>). If none found, try
|
|
19804
|
+
// focusing the element directly (works for custom elements like
|
|
19805
|
+
// auro-input that have delegatesFocus or a custom focus() method).
|
|
19806
|
+
const descendants = getFocusableElements(el);
|
|
19807
|
+
if (descendants.length > 0) {
|
|
19808
|
+
descendants[0].focus();
|
|
19809
|
+
return;
|
|
19810
|
+
}
|
|
19811
|
+
el.focus();
|
|
19812
|
+
if (document.activeElement === el) {
|
|
19813
|
+
return;
|
|
19814
|
+
}
|
|
19815
|
+
}
|
|
19816
|
+
}
|
|
19817
|
+
// Fallback: try DOM children (non-slotted content)
|
|
19818
|
+
const focusables = getFocusableElements(this.trigger);
|
|
19819
|
+
if (focusables.length > 0) {
|
|
19820
|
+
focusables[0].focus();
|
|
19821
|
+
}
|
|
19278
19822
|
}
|
|
19279
19823
|
}
|
|
19280
19824
|
|
|
@@ -19650,10 +20194,17 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19650
20194
|
this.clearTriggerFocusEventBinding();
|
|
19651
20195
|
}
|
|
19652
20196
|
|
|
20197
|
+
// eslint-disable-next-line complexity
|
|
19653
20198
|
updated(changedProperties) {
|
|
19654
20199
|
super.updated(changedProperties);
|
|
19655
20200
|
this.floater.handleUpdate(changedProperties);
|
|
19656
20201
|
|
|
20202
|
+
// Close the dropdown if the disabled property is set to true
|
|
20203
|
+
if (changedProperties.has('disabled') && this.disabled && this.isPopoverVisible) {
|
|
20204
|
+
this.hide();
|
|
20205
|
+
this.isPopoverVisible = false;
|
|
20206
|
+
}
|
|
20207
|
+
|
|
19657
20208
|
// Note: `disabled` is not a breakpoint (it is not a screen size),
|
|
19658
20209
|
// so it looks like we never consume this - however, dropdownBib handles this in the setter as "undefined"
|
|
19659
20210
|
if (changedProperties.has('fullscreenBreakpoint')) {
|
|
@@ -19727,8 +20278,30 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19727
20278
|
}
|
|
19728
20279
|
|
|
19729
20280
|
const eventType = event.detail.eventType || "unknown";
|
|
19730
|
-
if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
|
|
19731
|
-
this.
|
|
20281
|
+
if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown" && !this.noFocusRestoreOnClose) {
|
|
20282
|
+
this.focusTrigger();
|
|
20283
|
+
}
|
|
20284
|
+
|
|
20285
|
+
|
|
20286
|
+
// On Tab-driven close (eventType "focusloss"), let focus advance naturally
|
|
20287
|
+
// — restoring to the trigger would trap the user on this dropdown, forcing
|
|
20288
|
+
// an extra Tab to move on. Escape and outside-click still restore.
|
|
20289
|
+
// When noFocusRestoreOnClose is true, the consumer (e.g. combobox) manages
|
|
20290
|
+
// its own focus restoration — skip the generic trigger focus to avoid races.
|
|
20291
|
+
if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noFocusRestoreOnClose) {
|
|
20292
|
+
// wait til the bib gets fully closed and rendered
|
|
20293
|
+
setTimeout(() => {
|
|
20294
|
+
// Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
|
|
20295
|
+
// Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
|
|
20296
|
+
if (this.isPopoverVisible ||
|
|
20297
|
+
// eslint-disable-next-line no-extra-parens
|
|
20298
|
+
(!this.bibContent?.matches(':focus-within') &&
|
|
20299
|
+
document.activeElement !== document.body)) {
|
|
20300
|
+
return;
|
|
20301
|
+
}
|
|
20302
|
+
// Restore focus to the trigger.
|
|
20303
|
+
this.focusTrigger();
|
|
20304
|
+
});
|
|
19732
20305
|
}
|
|
19733
20306
|
}
|
|
19734
20307
|
|
|
@@ -19929,6 +20502,14 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19929
20502
|
};
|
|
19930
20503
|
this.addEventListener('keydown', this._bibTabHandler);
|
|
19931
20504
|
|
|
20505
|
+
// Suppress AuroFloatingUI's auto-hide-on-focus-loss while the
|
|
20506
|
+
// desktopModal trap owns focus management. Without this, the very
|
|
20507
|
+
// first focus move into the bib (from the RAF below) triggers
|
|
20508
|
+
// handleFocusLoss → hideBib, tearing down the trap before the
|
|
20509
|
+
// user can press Tab.
|
|
20510
|
+
this._priorNoHideOnFocusLoss = this.noHideOnThisFocusLoss;
|
|
20511
|
+
this.noHideOnThisFocusLoss = true;
|
|
20512
|
+
|
|
19932
20513
|
// Move initial focus into the bib content, matching FocusTrap behavior
|
|
19933
20514
|
requestAnimationFrame(() => {
|
|
19934
20515
|
const focusables = getFocusableElements(this.bibContent);
|
|
@@ -19937,15 +20518,16 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
19937
20518
|
}
|
|
19938
20519
|
});
|
|
19939
20520
|
} else {
|
|
19940
|
-
// Normal desktop:
|
|
19941
|
-
//
|
|
19942
|
-
//
|
|
19943
|
-
//
|
|
19944
|
-
//
|
|
19945
|
-
|
|
20521
|
+
// Normal desktop (non-modal): move initial focus into the bib but
|
|
20522
|
+
// don't trap Tab. Tab should exit the bib and let the floater's
|
|
20523
|
+
// handleFocusLoss close it, matching native <select>/<details>
|
|
20524
|
+
// behavior. Deferred one frame because Floating UI positions the
|
|
20525
|
+
// popover asynchronously — a synchronous focus() would target
|
|
20526
|
+
// zero-dimension elements and be silently ignored.
|
|
19946
20527
|
requestAnimationFrame(() => {
|
|
19947
|
-
|
|
19948
|
-
|
|
20528
|
+
const focusables = getFocusableElements(this.bibContent);
|
|
20529
|
+
if (focusables.length) {
|
|
20530
|
+
focusables[0].focus();
|
|
19949
20531
|
}
|
|
19950
20532
|
});
|
|
19951
20533
|
}
|
|
@@ -20242,6 +20824,7 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
20242
20824
|
role="${o$2(this.triggerContentFocusable ? undefined : this.a11yRole)}"
|
|
20243
20825
|
aria-expanded="${o$2(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
|
|
20244
20826
|
aria-controls="${o$2(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
|
|
20827
|
+
aria-haspopup="${o$2(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
|
|
20245
20828
|
aria-labelledby="${o$2(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
|
|
20246
20829
|
aria-disabled="${o$2(this.disabled ? 'true' : undefined)}"
|
|
20247
20830
|
@focusin="${this.handleFocusin}"
|
|
@@ -20375,7 +20958,7 @@ const u$3=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r}
|
|
|
20375
20958
|
|
|
20376
20959
|
var shapeSizeCss = i$3`.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}`;
|
|
20377
20960
|
|
|
20378
|
-
var styleCss$1 = i$3`.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}`;
|
|
20961
|
+
var styleCss$1 = i$3`.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}`;
|
|
20379
20962
|
|
|
20380
20963
|
var styleDefaultCss = i$3`.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}`;
|
|
20381
20964
|
|
|
@@ -24653,8 +25236,21 @@ class AuroFormValidation {
|
|
|
24653
25236
|
return;
|
|
24654
25237
|
}
|
|
24655
25238
|
|
|
24656
|
-
// Validate that the date passed was the correct format and is a valid date
|
|
25239
|
+
// Validate that the date passed was the correct format and is a valid date.
|
|
25240
|
+
// For partial date formats, valueObject is never populated; validate them directly.
|
|
24657
25241
|
if (elem.value && !elem.valueObject) {
|
|
25242
|
+
const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
|
|
25243
|
+
|
|
25244
|
+
if (isPartialDateFormat) {
|
|
25245
|
+
if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
|
|
25246
|
+
elem.validity = 'patternMismatch';
|
|
25247
|
+
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
25248
|
+
}
|
|
25249
|
+
// Partial date format — validate directly and skip max/min checks since valueObject is undefined.
|
|
25250
|
+
return;
|
|
25251
|
+
}
|
|
25252
|
+
|
|
25253
|
+
// Full date format with no valueObject means the value is not a valid calendar date.
|
|
24658
25254
|
elem.validity = 'patternMismatch';
|
|
24659
25255
|
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
24660
25256
|
return;
|
|
@@ -24751,15 +25347,17 @@ class AuroFormValidation {
|
|
|
24751
25347
|
);
|
|
24752
25348
|
}
|
|
24753
25349
|
|
|
24754
|
-
|
|
24755
|
-
|
|
24756
|
-
|
|
25350
|
+
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
25351
|
+
|
|
25352
|
+
// If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
|
|
25353
|
+
// Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
|
|
25354
|
+
// field (datepicker is the intended consumer — start/end are independently required).
|
|
25355
|
+
if (this.auroInputElements?.length === 2 && !isCombobox) {
|
|
25356
|
+
if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
|
|
24757
25357
|
hasValue = false;
|
|
24758
25358
|
}
|
|
24759
25359
|
}
|
|
24760
25360
|
|
|
24761
|
-
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
24762
|
-
|
|
24763
25361
|
if (isCombobox) {
|
|
24764
25362
|
|
|
24765
25363
|
if (!elem.persistInput || elem.behavior === "filter") {
|
|
@@ -24858,7 +25456,7 @@ class AuroFormValidation {
|
|
|
24858
25456
|
} else if (this.runtimeUtils.elementMatch(elem, 'auro-input') && elem.errorMessage === '') {
|
|
24859
25457
|
const input = elem.renderRoot.querySelector('input');
|
|
24860
25458
|
|
|
24861
|
-
if (input.validationMessage.length > 0) {
|
|
25459
|
+
if (input && input.validationMessage.length > 0) {
|
|
24862
25460
|
elem.errorMessage = input.validationMessage;
|
|
24863
25461
|
}
|
|
24864
25462
|
} else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox') && elem.errorMessage === '') {
|
|
@@ -30440,8 +31038,6 @@ function cleanEscapedString(input) {
|
|
|
30440
31038
|
return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'");
|
|
30441
31039
|
}
|
|
30442
31040
|
|
|
30443
|
-
/* eslint-disable max-lines */
|
|
30444
|
-
|
|
30445
31041
|
class AuroInputUtilities {
|
|
30446
31042
|
|
|
30447
31043
|
/**
|
|
@@ -30484,7 +31080,7 @@ class AuroInputUtilities {
|
|
|
30484
31080
|
/**
|
|
30485
31081
|
* Converts an IMask-style date mask to a date-fns compatible format string.
|
|
30486
31082
|
* @param {string} mask - IMask date mask (e.g. "MM/DD/YYYY").
|
|
30487
|
-
* @returns {string} date-fns format string (e.g. "MM/dd/yyyy").
|
|
31083
|
+
* @returns {string} A date-fns format string (e.g. "MM/dd/yyyy").
|
|
30488
31084
|
*/
|
|
30489
31085
|
toDateFnsMask(mask) {
|
|
30490
31086
|
return mask
|
|
@@ -30584,10 +31180,11 @@ class AuroInputUtilities {
|
|
|
30584
31180
|
const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
|
|
30585
31181
|
|
|
30586
31182
|
if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
|
|
30587
|
-
const
|
|
31183
|
+
const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
|
|
31184
|
+
const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
|
|
30588
31185
|
return {
|
|
30589
31186
|
mask: IMask.MaskedRange,
|
|
30590
|
-
from:
|
|
31187
|
+
from: fromValue,
|
|
30591
31188
|
to: maxValue,
|
|
30592
31189
|
lazy: true,
|
|
30593
31190
|
placeholderChar: '',
|
|
@@ -30595,7 +31192,8 @@ class AuroInputUtilities {
|
|
|
30595
31192
|
return value.toString().padStart(dateFormat.length, '0');
|
|
30596
31193
|
},
|
|
30597
31194
|
parse(str) {
|
|
30598
|
-
|
|
31195
|
+
const num = parseInt(str, 10);
|
|
31196
|
+
return isNaN(num) ? null : num;
|
|
30599
31197
|
}
|
|
30600
31198
|
};
|
|
30601
31199
|
}
|
|
@@ -30659,6 +31257,49 @@ class AuroInputUtilities {
|
|
|
30659
31257
|
return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
|
|
30660
31258
|
}
|
|
30661
31259
|
|
|
31260
|
+
/**
|
|
31261
|
+
* Validates a value against a partial date format (one that lacks yy/mm/dd all three).
|
|
31262
|
+
* Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
|
|
31263
|
+
* a date-fns parse + round-trip to confirm both validity and exact formatting.
|
|
31264
|
+
* @param {string} value - The user-facing display value.
|
|
31265
|
+
* @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
|
|
31266
|
+
* @returns {boolean}
|
|
31267
|
+
*/
|
|
31268
|
+
isValidPartialDate(value, format$1) {
|
|
31269
|
+
if (!value || !format$1) {
|
|
31270
|
+
return false;
|
|
31271
|
+
}
|
|
31272
|
+
const normalizedFormat = format$1.toLowerCase();
|
|
31273
|
+
|
|
31274
|
+
if (normalizedFormat === 'dd') {
|
|
31275
|
+
const num = Number(value);
|
|
31276
|
+
return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
|
|
31277
|
+
}
|
|
31278
|
+
if (normalizedFormat === 'yy') {
|
|
31279
|
+
const num = Number(value);
|
|
31280
|
+
return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
|
|
31281
|
+
}
|
|
31282
|
+
if (normalizedFormat === 'yyyy') {
|
|
31283
|
+
const num = Number(value);
|
|
31284
|
+
return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
|
|
31285
|
+
}
|
|
31286
|
+
|
|
31287
|
+
const dateFnsMask = this.toDateFnsMask(normalizedFormat);
|
|
31288
|
+
// Use the 1st of the current month as the reference so that formats
|
|
31289
|
+
// omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
|
|
31290
|
+
const referenceDate = new Date();
|
|
31291
|
+
referenceDate.setDate(1);
|
|
31292
|
+
const parsed = parse(value, dateFnsMask, referenceDate);
|
|
31293
|
+
if (!isValid(parsed) || format(parsed, dateFnsMask) !== value) {
|
|
31294
|
+
return false;
|
|
31295
|
+
}
|
|
31296
|
+
if (normalizedFormat.includes('yyyy')) {
|
|
31297
|
+
const year = parsed.getFullYear();
|
|
31298
|
+
return year >= 1900 && year <= 2100;
|
|
31299
|
+
}
|
|
31300
|
+
return true;
|
|
31301
|
+
}
|
|
31302
|
+
|
|
30662
31303
|
/**
|
|
30663
31304
|
* Converts a display string to its model value.
|
|
30664
31305
|
* For full date formats, converts the display string to an ISO date string.
|
|
@@ -30695,6 +31336,13 @@ class AuroInputUtilities {
|
|
|
30695
31336
|
* @returns {string | undefined}
|
|
30696
31337
|
*/
|
|
30697
31338
|
toFormattedValue(valueObject, format) {
|
|
31339
|
+
// Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
|
|
31340
|
+
// `format` argument has to fail gracefully rather than throw on
|
|
31341
|
+
// `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
|
|
31342
|
+
// as "no format → no display value".
|
|
31343
|
+
if (!format) {
|
|
31344
|
+
return undefined;
|
|
31345
|
+
}
|
|
30698
31346
|
const normalizedFormat = format.toLowerCase();
|
|
30699
31347
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
30700
31348
|
|
|
@@ -30833,9 +31481,10 @@ class DomHandler {
|
|
|
30833
31481
|
class BaseInput extends AuroElement$1 {
|
|
30834
31482
|
|
|
30835
31483
|
// Delegate focus to the native <input> inside the shadow root so that
|
|
30836
|
-
//
|
|
30837
|
-
//
|
|
30838
|
-
//
|
|
31484
|
+
// clicking anywhere on the input wrapper focuses the native input, and
|
|
31485
|
+
// programmatic .focus() calls on elements in the shadow DOM work correctly.
|
|
31486
|
+
// The initial-load focus theft was caused by the static `autofocus`
|
|
31487
|
+
// attribute on the bib input (now conditional), not by delegatesFocus.
|
|
30839
31488
|
static get shadowRootOptions() {
|
|
30840
31489
|
return {
|
|
30841
31490
|
...AuroElement$1.shadowRootOptions,
|
|
@@ -30846,79 +31495,19 @@ class BaseInput extends AuroElement$1 {
|
|
|
30846
31495
|
constructor() {
|
|
30847
31496
|
super();
|
|
30848
31497
|
|
|
30849
|
-
|
|
30850
|
-
|
|
30851
|
-
|
|
30852
|
-
|
|
30853
|
-
|
|
30854
|
-
|
|
30855
|
-
|
|
30856
|
-
|
|
30857
|
-
|
|
30858
|
-
|
|
30859
|
-
this.required = false;
|
|
30860
|
-
this.onDark = false;
|
|
30861
|
-
this.setCustomValidityForType = undefined;
|
|
30862
|
-
this.size = 'lg';
|
|
30863
|
-
this.shape = 'classic';
|
|
30864
|
-
this.value = undefined;
|
|
30865
|
-
this._valueObject = undefined;
|
|
30866
|
-
|
|
30867
|
-
this._initializePrivateDefaults();
|
|
30868
|
-
}
|
|
30869
|
-
|
|
30870
|
-
/**
|
|
30871
|
-
* Internal Defaults.
|
|
30872
|
-
* @private
|
|
30873
|
-
* @returns {void}
|
|
30874
|
-
*/
|
|
30875
|
-
_initializePrivateDefaults() {
|
|
31498
|
+
// Single-source initialization. Alphabetized so duplicate or stale
|
|
31499
|
+
// defaults are immediately obvious on a diff. Every field is assigned
|
|
31500
|
+
// exactly once here (previously the constructor + the old
|
|
31501
|
+
// `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
|
|
31502
|
+
// fields and double-allocated `util` and `validation`, discarding the
|
|
31503
|
+
// first instance). `validation` is now allocated exactly once; `util`
|
|
31504
|
+
// is seeded here with an en-US default and then rebuilt in
|
|
31505
|
+
// `connectedCallback` once the consumer-resolved locale is available,
|
|
31506
|
+
// so a parent (datepicker/combobox) calling `validate()` synchronously
|
|
31507
|
+
// during its own update cycle sees a populated util instance.
|
|
30876
31508
|
this.activeLabel = false;
|
|
30877
|
-
this.appearance = "default";
|
|
30878
|
-
this.icon = false;
|
|
30879
|
-
this.disabled = false;
|
|
30880
|
-
this.dvInputOnly = false;
|
|
30881
|
-
this.hideLabelVisually = false;
|
|
30882
|
-
this.max = undefined;
|
|
30883
|
-
this.maxLength = undefined;
|
|
30884
|
-
this.min = undefined;
|
|
30885
|
-
this.minLength = undefined;
|
|
30886
|
-
this.noValidate = false;
|
|
30887
|
-
this.onDark = false;
|
|
30888
|
-
this.required = false;
|
|
30889
|
-
this.setCustomValidityForType = undefined;
|
|
30890
|
-
|
|
30891
|
-
// Used for storing raw values returned from input mask.
|
|
30892
|
-
this._rawMaskValue = undefined;
|
|
30893
|
-
|
|
30894
|
-
/**
|
|
30895
|
-
* @private
|
|
30896
|
-
*/
|
|
30897
|
-
this.layout = 'classic';
|
|
30898
|
-
|
|
30899
|
-
/**
|
|
30900
|
-
* @private
|
|
30901
|
-
*/
|
|
30902
|
-
this.shape = 'classic';
|
|
30903
|
-
|
|
30904
|
-
/**
|
|
30905
|
-
* @private
|
|
30906
|
-
*/
|
|
30907
|
-
this.size = 'lg';
|
|
30908
|
-
|
|
30909
|
-
this.touched = false;
|
|
30910
|
-
this.util = new AuroInputUtilities({
|
|
30911
|
-
locale: "en-US",
|
|
30912
|
-
format: this.format
|
|
30913
|
-
});
|
|
30914
|
-
this.validation = new AuroFormValidation();
|
|
30915
|
-
this.inputIconName = undefined;
|
|
30916
|
-
this.showPassword = false;
|
|
30917
|
-
this.validationCCLength = undefined;
|
|
30918
|
-
this.hasValue = false;
|
|
30919
|
-
this.label = 'Input label is undefined';
|
|
30920
|
-
|
|
30921
31509
|
|
|
31510
|
+
/** @private */
|
|
30922
31511
|
this.allowedInputTypes = [
|
|
30923
31512
|
"text",
|
|
30924
31513
|
"number",
|
|
@@ -30927,7 +31516,9 @@ class BaseInput extends AuroElement$1 {
|
|
|
30927
31516
|
"credit-card",
|
|
30928
31517
|
"tel"
|
|
30929
31518
|
];
|
|
30930
|
-
this.
|
|
31519
|
+
this.appearance = "default";
|
|
31520
|
+
|
|
31521
|
+
/** @private */
|
|
30931
31522
|
this.dateFormatMap = {
|
|
30932
31523
|
'mm/dd/yyyy': 'dateMMDDYYYY',
|
|
30933
31524
|
'dd/mm/yyyy': 'dateDDMMYYYY',
|
|
@@ -30944,27 +31535,64 @@ class BaseInput extends AuroElement$1 {
|
|
|
30944
31535
|
'dd/mm': 'dateDDMM',
|
|
30945
31536
|
'mm/dd': 'dateMMDD'
|
|
30946
31537
|
};
|
|
31538
|
+
this.disabled = false;
|
|
31539
|
+
|
|
31540
|
+
/** @private */
|
|
30947
31541
|
this.domHandler = new DomHandler();
|
|
30948
31542
|
this.dvInputOnly = false;
|
|
30949
31543
|
this.hasValue = false;
|
|
31544
|
+
this.hideLabelVisually = false;
|
|
31545
|
+
this.icon = false;
|
|
31546
|
+
|
|
31547
|
+
/** @private */
|
|
30950
31548
|
this.inputIconName = undefined;
|
|
31549
|
+
|
|
31550
|
+
/** @private */
|
|
30951
31551
|
this.label = 'Input label is undefined';
|
|
31552
|
+
this.layout = 'classic';
|
|
31553
|
+
this.locale = 'en-US';
|
|
31554
|
+
this._format = undefined;
|
|
31555
|
+
|
|
31556
|
+
/** @private */
|
|
31557
|
+
this._userSetFormat = false;
|
|
31558
|
+
this.max = undefined;
|
|
31559
|
+
this.maxLength = undefined;
|
|
31560
|
+
this.min = undefined;
|
|
31561
|
+
this.minLength = undefined;
|
|
30952
31562
|
this.noValidate = false;
|
|
30953
|
-
this.
|
|
31563
|
+
this.onDark = false;
|
|
31564
|
+
this.required = false;
|
|
31565
|
+
this.setCustomValidityForType = undefined;
|
|
31566
|
+
// Credit Card is intentionally excluded — its mask manages the cursor
|
|
31567
|
+
// itself, and listing it here caused cursor placement issues in Safari.
|
|
31568
|
+
/** @private */
|
|
30954
31569
|
this.setSelectionInputTypes = [
|
|
30955
31570
|
"text",
|
|
30956
31571
|
"password",
|
|
30957
31572
|
"email"
|
|
30958
|
-
];
|
|
31573
|
+
];
|
|
31574
|
+
this.shape = 'classic';
|
|
31575
|
+
|
|
31576
|
+
/** @private */
|
|
30959
31577
|
this.showPassword = false;
|
|
31578
|
+
this.size = 'lg';
|
|
30960
31579
|
this.touched = false;
|
|
31580
|
+
|
|
31581
|
+
/** @private */
|
|
30961
31582
|
this.uniqueId = new UniqueId().create();
|
|
31583
|
+
|
|
31584
|
+
/** @private */
|
|
30962
31585
|
this.util = new AuroInputUtilities({
|
|
30963
31586
|
locale: this.locale,
|
|
30964
31587
|
format: this.format
|
|
30965
31588
|
});
|
|
31589
|
+
|
|
31590
|
+
/** @private */
|
|
30966
31591
|
this.validation = new AuroFormValidation();
|
|
31592
|
+
|
|
31593
|
+
/** @private */
|
|
30967
31594
|
this.validationCCLength = undefined;
|
|
31595
|
+
this.value = undefined;
|
|
30968
31596
|
}
|
|
30969
31597
|
|
|
30970
31598
|
// function to define props used within the scope of this component
|
|
@@ -31090,7 +31718,8 @@ class BaseInput extends AuroElement$1 {
|
|
|
31090
31718
|
*/
|
|
31091
31719
|
format: {
|
|
31092
31720
|
type: String,
|
|
31093
|
-
reflect: true
|
|
31721
|
+
reflect: true,
|
|
31722
|
+
noAccessor: true
|
|
31094
31723
|
},
|
|
31095
31724
|
|
|
31096
31725
|
/**
|
|
@@ -31294,6 +31923,13 @@ class BaseInput extends AuroElement$1 {
|
|
|
31294
31923
|
type: String
|
|
31295
31924
|
},
|
|
31296
31925
|
|
|
31926
|
+
/**
|
|
31927
|
+
* Custom help text message to display when validity = `patternMismatch`.
|
|
31928
|
+
*/
|
|
31929
|
+
setCustomValidityPatternMismatch: {
|
|
31930
|
+
type: String
|
|
31931
|
+
},
|
|
31932
|
+
|
|
31297
31933
|
/**
|
|
31298
31934
|
* Custom help text message to display when validity = `rangeOverflow`.
|
|
31299
31935
|
*/
|
|
@@ -31364,7 +32000,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31364
32000
|
|
|
31365
32001
|
/**
|
|
31366
32002
|
* Populates the `type` attribute on the input.
|
|
31367
|
-
* @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
|
|
32003
|
+
* @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
|
|
31368
32004
|
* @default 'text'
|
|
31369
32005
|
*/
|
|
31370
32006
|
type: {
|
|
@@ -31389,7 +32025,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31389
32025
|
|
|
31390
32026
|
/**
|
|
31391
32027
|
* Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
|
|
31392
|
-
*
|
|
32028
|
+
* 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.
|
|
31393
32029
|
*/
|
|
31394
32030
|
value: {
|
|
31395
32031
|
type: String
|
|
@@ -31402,7 +32038,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31402
32038
|
* @returns {Date|undefined}
|
|
31403
32039
|
*/
|
|
31404
32040
|
get valueObject() {
|
|
31405
|
-
return this.
|
|
32041
|
+
return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
|
|
31406
32042
|
}
|
|
31407
32043
|
|
|
31408
32044
|
/**
|
|
@@ -31410,7 +32046,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31410
32046
|
* @returns {Date|undefined}
|
|
31411
32047
|
*/
|
|
31412
32048
|
get minObject() {
|
|
31413
|
-
return this.
|
|
32049
|
+
return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
|
|
31414
32050
|
}
|
|
31415
32051
|
|
|
31416
32052
|
/**
|
|
@@ -31418,33 +32054,63 @@ class BaseInput extends AuroElement$1 {
|
|
|
31418
32054
|
* @returns {Date|undefined}
|
|
31419
32055
|
*/
|
|
31420
32056
|
get maxObject() {
|
|
31421
|
-
return this.
|
|
32057
|
+
return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
|
|
32058
|
+
}
|
|
32059
|
+
|
|
32060
|
+
get format() {
|
|
32061
|
+
return this._format;
|
|
31422
32062
|
}
|
|
31423
32063
|
|
|
31424
32064
|
/**
|
|
31425
|
-
*
|
|
31426
|
-
*
|
|
31427
|
-
*
|
|
31428
|
-
* @param {Date|undefined} propertyValue - Value to assign.
|
|
31429
|
-
* @returns {void}
|
|
32065
|
+
* Overrides LitElement's generated accessor so we can track whether the
|
|
32066
|
+
* consumer explicitly set `format`. Locale-derived updates use
|
|
32067
|
+
* `_setFormatFromLocale` instead, which skips this flag.
|
|
31430
32068
|
*/
|
|
31431
|
-
|
|
31432
|
-
const
|
|
31433
|
-
|
|
31434
|
-
|
|
31435
|
-
|
|
31436
|
-
|
|
31437
|
-
}
|
|
32069
|
+
set format(value) {
|
|
32070
|
+
const oldValue = this._format;
|
|
32071
|
+
this._format = value ? value.toLowerCase() : value;
|
|
32072
|
+
this._userSetFormat = Boolean(value);
|
|
32073
|
+
this.requestUpdate('format', oldValue);
|
|
32074
|
+
}
|
|
31438
32075
|
|
|
31439
|
-
|
|
31440
|
-
|
|
32076
|
+
/**
|
|
32077
|
+
* Sets format without marking it as user-set. Used by locale auto-derive
|
|
32078
|
+
* so that a subsequent locale change can still update the format.
|
|
32079
|
+
* @private
|
|
32080
|
+
* @param {string} value
|
|
32081
|
+
*/
|
|
32082
|
+
_setFormatFromLocale(value) {
|
|
32083
|
+
const oldValue = this._format;
|
|
32084
|
+
this._format = value ? value.toLowerCase() : value;
|
|
32085
|
+
this.requestUpdate('format', oldValue);
|
|
31441
32086
|
}
|
|
31442
32087
|
|
|
31443
32088
|
connectedCallback() {
|
|
31444
32089
|
super.connectedCallback();
|
|
31445
32090
|
|
|
32091
|
+
// Mark for query selectors when registered under a versioned tag (e.g. inside
|
|
32092
|
+
// a datepicker/combobox). Must run before parent components call validate() on
|
|
32093
|
+
// their inner inputs — the validation framework matches via tag-or-attribute,
|
|
32094
|
+
// and parents trigger validation during their own updated() cycle, which can
|
|
32095
|
+
// precede this input's firstUpdated().
|
|
32096
|
+
if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
|
|
32097
|
+
this.setAttribute('auro-input', '');
|
|
32098
|
+
}
|
|
32099
|
+
|
|
31446
32100
|
this.locale = this.domHandler.getLocale(this);
|
|
31447
32101
|
notifyOnLangChange(this);
|
|
32102
|
+
|
|
32103
|
+
// Pre-compute lengthForType and date-object fields so a parent (e.g. datepicker)
|
|
32104
|
+
// calling our validate() synchronously during its own updated() cycle sees
|
|
32105
|
+
// populated values. Without this, range validation silently no-ops because
|
|
32106
|
+
// `max.length === lengthForType` fails when lengthForType is still undefined.
|
|
32107
|
+
// Rebuild util here (constructor seeded with en-US default) so configureDataForType's
|
|
32108
|
+
// locale-derived format lookup uses the actual locale just resolved above.
|
|
32109
|
+
this.util = new AuroInputUtilities({
|
|
32110
|
+
locale: this.locale,
|
|
32111
|
+
format: this.format
|
|
32112
|
+
});
|
|
32113
|
+
this.configureDataForType();
|
|
31448
32114
|
}
|
|
31449
32115
|
|
|
31450
32116
|
disconnectedCallback() {
|
|
@@ -31464,10 +32130,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31464
32130
|
this.wrapperElement.addEventListener('click', this.handleClick);
|
|
31465
32131
|
}
|
|
31466
32132
|
|
|
31467
|
-
// add attribute for query selectors when auro-input is registered under a custom name
|
|
31468
|
-
if (this.tagName.toLowerCase() !== 'auro-input') {
|
|
31469
|
-
this.setAttribute('auro-input', true);
|
|
31470
|
-
}
|
|
31471
32133
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
31472
32134
|
|
|
31473
32135
|
// use validity message override if declared when initializing the component
|
|
@@ -31478,7 +32140,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31478
32140
|
this.setCustomHelpTextMessage();
|
|
31479
32141
|
this.configureAutoFormatting();
|
|
31480
32142
|
this.configureDataForType();
|
|
31481
|
-
this.syncDateValues();
|
|
31482
32143
|
}
|
|
31483
32144
|
|
|
31484
32145
|
/**
|
|
@@ -31514,6 +32175,12 @@ class BaseInput extends AuroElement$1 {
|
|
|
31514
32175
|
return;
|
|
31515
32176
|
}
|
|
31516
32177
|
|
|
32178
|
+
// While configureAutoFormatting is running, imask's internal updateControl
|
|
32179
|
+
// writes el.value to align display with the masked value. A synthetic input
|
|
32180
|
+
// event from that write would re-enter handleInput → processCreditCard mid-setup
|
|
32181
|
+
// and clobber a Lit value that was just pushed by the parent combobox.
|
|
32182
|
+
if (component._configuringMask) return;
|
|
32183
|
+
|
|
31517
32184
|
// If all guard clauses are passed, dispatch the event
|
|
31518
32185
|
const inputEvent = new InputEvent('input', {
|
|
31519
32186
|
bubbles: true,
|
|
@@ -31530,7 +32197,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31530
32197
|
|
|
31531
32198
|
/**
|
|
31532
32199
|
* @private
|
|
31533
|
-
* @deprecated https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296
|
|
32200
|
+
* @deprecated See https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296.
|
|
31534
32201
|
* @returns {void} Sets the default help text for the input.
|
|
31535
32202
|
*/
|
|
31536
32203
|
setCustomHelpTextMessage() {
|
|
@@ -31548,6 +32215,13 @@ class BaseInput extends AuroElement$1 {
|
|
|
31548
32215
|
|
|
31549
32216
|
if (typeToI18n.includes(this.type)) {
|
|
31550
32217
|
this.setCustomValidityForType = i18n$1(this.lang, this.type);
|
|
32218
|
+
// COVERAGE: this `else if` branch is unreachable in WTR. connectedCallback
|
|
32219
|
+
// (L682) calls configureDataForType, which at L1266-1268 assigns
|
|
32220
|
+
// `this.format = this.util.getDateMaskFromLocale().toLowerCase()` for any
|
|
32221
|
+
// type=date input whose `format` attribute is unset. That runs before
|
|
32222
|
+
// firstUpdated invokes setCustomHelpTextMessage, so `!this.format` is
|
|
32223
|
+
// always false here. Retained as a defensive fallback; the whole function
|
|
32224
|
+
// is @deprecated per AB#1557296 and slated for removal.
|
|
31551
32225
|
} else if (!this.format && this.type === 'date') {
|
|
31552
32226
|
this.setCustomValidityForType = i18n$1(this.lang, 'dateMMDDYYYY');
|
|
31553
32227
|
} else if (this.dateFormatMap[this.format]) {
|
|
@@ -31564,12 +32238,10 @@ class BaseInput extends AuroElement$1 {
|
|
|
31564
32238
|
updated(changedProperties) {
|
|
31565
32239
|
super.updated(changedProperties);
|
|
31566
32240
|
|
|
31567
|
-
// When locale changes
|
|
31568
|
-
// Only runs if the current format is still the previous locale's default (not user-overridden).
|
|
32241
|
+
// When locale changes, auto-derive format unless the consumer explicitly set one.
|
|
31569
32242
|
if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
|
|
31570
|
-
|
|
31571
|
-
|
|
31572
|
-
this.format = getDateFormatFromLocale(this.locale);
|
|
32243
|
+
if (!this._userSetFormat) {
|
|
32244
|
+
this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
|
|
31573
32245
|
}
|
|
31574
32246
|
}
|
|
31575
32247
|
|
|
@@ -31609,8 +32281,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31609
32281
|
this.configureDataForType();
|
|
31610
32282
|
}
|
|
31611
32283
|
|
|
31612
|
-
this.syncDateValues(changedProperties);
|
|
31613
|
-
|
|
31614
32284
|
if (changedProperties.has('value')) {
|
|
31615
32285
|
if (this.value && this.value.length > 0) {
|
|
31616
32286
|
this.hasValue = true;
|
|
@@ -31632,7 +32302,16 @@ class BaseInput extends AuroElement$1 {
|
|
|
31632
32302
|
|
|
31633
32303
|
if (formattedValue !== this.inputElement.value) {
|
|
31634
32304
|
this.skipNextProgrammaticInputEvent = true;
|
|
31635
|
-
if (
|
|
32305
|
+
if (this.maskInstance && this.type !== 'date') {
|
|
32306
|
+
// Route through the mask so its _value and el.value stay in lock-step
|
|
32307
|
+
// (set value calls updateControl which writes el.value = displayValue).
|
|
32308
|
+
// Writing el.value directly leaves the mask thinking displayValue is
|
|
32309
|
+
// stale; _saveSelection on the next focus/click then warns. Date is
|
|
32310
|
+
// excluded because its formattedValue can be raw ISO when the calendar
|
|
32311
|
+
// is invalid, and re-masking through mm/dd/yyyy would truncate it and
|
|
32312
|
+
// flip validity from patternMismatch to tooShort.
|
|
32313
|
+
this.maskInstance.value = formattedValue || '';
|
|
32314
|
+
} else if (formattedValue) {
|
|
31636
32315
|
this.inputElement.value = formattedValue;
|
|
31637
32316
|
} else {
|
|
31638
32317
|
this.inputElement.value = '';
|
|
@@ -31672,127 +32351,85 @@ class BaseInput extends AuroElement$1 {
|
|
|
31672
32351
|
}));
|
|
31673
32352
|
}
|
|
31674
32353
|
|
|
31675
|
-
|
|
31676
|
-
/**
|
|
31677
|
-
* Synchronizes the ISO string values and Date object representations for date-related properties.
|
|
31678
|
-
* This keeps the model and display values aligned when either side changes.
|
|
31679
|
-
*
|
|
31680
|
-
* When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
|
|
31681
|
-
* Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
|
|
31682
|
-
* represents a full year/month/day date format.
|
|
31683
|
-
*
|
|
31684
|
-
* @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
|
|
31685
|
-
* @returns {void}
|
|
31686
|
-
* @private
|
|
31687
|
-
*/
|
|
31688
|
-
syncDateValues(changedProperties = undefined) {
|
|
31689
|
-
if (!this.util.isFullDateFormat(this.type, this.format)) {
|
|
31690
|
-
return;
|
|
31691
|
-
}
|
|
31692
|
-
|
|
31693
|
-
this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
|
|
31694
|
-
this.syncSingleDateValue(changedProperties, 'minObject', 'min');
|
|
31695
|
-
this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
|
|
31696
|
-
}
|
|
31697
|
-
|
|
31698
|
-
/**
|
|
31699
|
-
* Synchronizes one date object/string property pair.
|
|
31700
|
-
* @private
|
|
31701
|
-
* @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
|
|
31702
|
-
* @param {string} objectProperty - Date object property name.
|
|
31703
|
-
* @param {string} valueProperty - ISO string property name.
|
|
31704
|
-
* @returns {void}
|
|
31705
|
-
*/
|
|
31706
|
-
syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
|
|
31707
|
-
const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
|
|
31708
|
-
|
|
31709
|
-
// objectProperty wins over valueProperty when both changed
|
|
31710
|
-
if (objectPropertyChanged && this[objectProperty]) {
|
|
31711
|
-
this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
|
|
31712
|
-
return;
|
|
31713
|
-
}
|
|
31714
|
-
|
|
31715
|
-
const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
|
|
31716
|
-
if (!valuePropertyChanged) {
|
|
31717
|
-
return;
|
|
31718
|
-
}
|
|
31719
|
-
|
|
31720
|
-
// 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)
|
|
31721
|
-
if (
|
|
31722
|
-
changedProperties &&
|
|
31723
|
-
valueProperty === 'value' &&
|
|
31724
|
-
changedProperties.get('value') === undefined &&
|
|
31725
|
-
this[objectProperty] instanceof Date &&
|
|
31726
|
-
this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
|
|
31727
|
-
) {
|
|
31728
|
-
return;
|
|
31729
|
-
}
|
|
31730
|
-
|
|
31731
|
-
if (dateFormatter.isValidDate(this[valueProperty])) {
|
|
31732
|
-
this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
|
|
31733
|
-
} else {
|
|
31734
|
-
this.setDateObjectProperty(objectProperty, undefined);
|
|
31735
|
-
}
|
|
31736
|
-
}
|
|
31737
|
-
|
|
31738
32354
|
/**
|
|
31739
32355
|
* Sets up IMasks and logic based on auto-formatting requirements.
|
|
31740
32356
|
* @private
|
|
31741
32357
|
* @returns {void}
|
|
31742
32358
|
*/
|
|
31743
32359
|
configureAutoFormatting() {
|
|
31744
|
-
|
|
31745
|
-
|
|
31746
|
-
|
|
32360
|
+
// _configuringMask gates two things: external re-entry into this method
|
|
32361
|
+
// while setup is mid-flight (from property changes that call back here),
|
|
32362
|
+
// and the accept/complete listeners below — both need to ignore the mask
|
|
32363
|
+
// events fired by our own value-restore step.
|
|
32364
|
+
if (this._configuringMask) return;
|
|
32365
|
+
this._configuringMask = true;
|
|
32366
|
+
try {
|
|
32367
|
+
// Destroy any prior mask so IMask can attach fresh under the new format.
|
|
32368
|
+
// Null the reference too — if the new maskOptions.mask is falsy (e.g.
|
|
32369
|
+
// type switched from credit-card to text) the IMask() reassignment
|
|
32370
|
+
// below is skipped, and downstream writes at line ~823 would otherwise
|
|
32371
|
+
// route through the destroyed instance.
|
|
32372
|
+
if (this.maskInstance) {
|
|
32373
|
+
this.maskInstance.destroy();
|
|
32374
|
+
this.maskInstance = null;
|
|
32375
|
+
}
|
|
31747
32376
|
|
|
31748
|
-
|
|
31749
|
-
this.util.updateFormat(this.format);
|
|
32377
|
+
this.util.updateFormat(this.format);
|
|
31750
32378
|
|
|
31751
|
-
|
|
32379
|
+
const maskOptions = this.util.getMaskOptions(this.type, this.format);
|
|
31752
32380
|
|
|
31753
|
-
|
|
32381
|
+
if (this.inputElement && maskOptions.mask) {
|
|
32382
|
+
// Capture the current display so it can be re-applied after IMask
|
|
32383
|
+
// attaches. The restore at the bottom goes through maskInstance.value
|
|
32384
|
+
// (not inputElement.value directly) so the mask's internal state and
|
|
32385
|
+
// the input's displayed text stay in lock-step.
|
|
32386
|
+
let existingValue = this.inputElement.value;
|
|
31754
32387
|
|
|
31755
|
-
|
|
31756
|
-
|
|
31757
|
-
|
|
31758
|
-
|
|
31759
|
-
|
|
31760
|
-
|
|
31761
|
-
|
|
31762
|
-
|
|
31763
|
-
|
|
31764
|
-
|
|
31765
|
-
|
|
31766
|
-
|
|
31767
|
-
|
|
31768
|
-
|
|
31769
|
-
|
|
31770
|
-
|
|
31771
|
-
|
|
32388
|
+
// Format-change case (e.g. locale switch): existingValue is the OLD
|
|
32389
|
+
// mask's display string and may not parse under the new mask. When
|
|
32390
|
+
// we have a valid date model, rebuild the display from valueObject
|
|
32391
|
+
// (the canonical source) using the new mask's format function.
|
|
32392
|
+
if (
|
|
32393
|
+
this.util.isFullDateFormat(this.type, this.format) &&
|
|
32394
|
+
this.value &&
|
|
32395
|
+
this.valueObject &&
|
|
32396
|
+
typeof maskOptions.format === 'function'
|
|
32397
|
+
) {
|
|
32398
|
+
existingValue = maskOptions.format(this.valueObject);
|
|
32399
|
+
}
|
|
32400
|
+
|
|
32401
|
+
// Clear before IMask attaches so the constructor seeds an empty
|
|
32402
|
+
// internal value. Otherwise IMask reads the stale unmasked string
|
|
32403
|
+
// and emits a spurious 'accept' before the restore below runs.
|
|
32404
|
+
this.skipNextProgrammaticInputEvent = true;
|
|
32405
|
+
this.inputElement.value = '';
|
|
31772
32406
|
|
|
31773
|
-
|
|
31774
|
-
this.inputElement.value = '';
|
|
32407
|
+
this.maskInstance = IMask(this.inputElement, maskOptions);
|
|
31775
32408
|
|
|
31776
|
-
|
|
32409
|
+
// Mask fires 'accept' on every value change, including the restore
|
|
32410
|
+
// step below. Skip events fired during configureAutoFormatting so
|
|
32411
|
+
// we don't overwrite a value the parent just pushed.
|
|
32412
|
+
this.maskInstance.on('accept', () => {
|
|
32413
|
+
if (this._configuringMask) return;
|
|
32414
|
+
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
32415
|
+
});
|
|
31777
32416
|
|
|
31778
|
-
|
|
31779
|
-
|
|
31780
|
-
|
|
31781
|
-
this.
|
|
31782
|
-
|
|
31783
|
-
|
|
32417
|
+
// Mask fires 'complete' on the restore step below for any value that
|
|
32418
|
+
// happens to be a complete match. Same setup-suppression as 'accept'.
|
|
32419
|
+
this.maskInstance.on('complete', () => {
|
|
32420
|
+
if (this._configuringMask) return;
|
|
32421
|
+
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
32422
|
+
});
|
|
31784
32423
|
|
|
31785
|
-
|
|
31786
|
-
|
|
31787
|
-
|
|
31788
|
-
|
|
32424
|
+
// Write existingValue through the mask (not the input directly) so
|
|
32425
|
+
// the mask reformats it under the new rules and keeps its internal
|
|
32426
|
+
// _value aligned with the input's displayed text.
|
|
32427
|
+
if (existingValue) {
|
|
32428
|
+
this.maskInstance.value = existingValue;
|
|
31789
32429
|
}
|
|
31790
|
-
});
|
|
31791
|
-
|
|
31792
|
-
// Restore the stashed value through IMask so it's properly masked
|
|
31793
|
-
if (existingValue) {
|
|
31794
|
-
this.maskInstance.value = existingValue;
|
|
31795
32430
|
}
|
|
32431
|
+
} finally {
|
|
32432
|
+
this._configuringMask = false;
|
|
31796
32433
|
}
|
|
31797
32434
|
}
|
|
31798
32435
|
|
|
@@ -31802,14 +32439,17 @@ class BaseInput extends AuroElement$1 {
|
|
|
31802
32439
|
* @returns {void}
|
|
31803
32440
|
*/
|
|
31804
32441
|
notifyValueChanged() {
|
|
31805
|
-
|
|
31806
|
-
|
|
31807
|
-
|
|
32442
|
+
// This echoes Lit's reactive value update (and handleClickClear's
|
|
32443
|
+
// programmatic clear) — it is NOT a fresh user-input event. Mark it
|
|
32444
|
+
// `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
|
|
32445
|
+
// it from genuine user typing and skip clobbering their own
|
|
32446
|
+
// programmatic state during init-time renders.
|
|
32447
|
+
const inputEvent = new Event('input', {
|
|
31808
32448
|
bubbles: true,
|
|
31809
32449
|
composed: true,
|
|
31810
32450
|
});
|
|
32451
|
+
inputEvent.isProgrammatic = true;
|
|
31811
32452
|
|
|
31812
|
-
// Dispatched event to alert outside shadow DOM context of event firing.
|
|
31813
32453
|
this.dispatchEvent(inputEvent);
|
|
31814
32454
|
}
|
|
31815
32455
|
|
|
@@ -31866,6 +32506,38 @@ class BaseInput extends AuroElement$1 {
|
|
|
31866
32506
|
this.touched = true;
|
|
31867
32507
|
this.validation.validate(this);
|
|
31868
32508
|
}
|
|
32509
|
+
|
|
32510
|
+
// Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
|
|
32511
|
+
// update that can re-render the input and reset the native cursor; we
|
|
32512
|
+
// capture the caret position before that update commits and restore it
|
|
32513
|
+
// via `setSelectionRange` once the update has flushed. Gated on
|
|
32514
|
+
// `setSelectionInputTypes` so credit-card (and other masked types whose
|
|
32515
|
+
// formatter manages the cursor itself) doesn't get a competing write.
|
|
32516
|
+
// Capture the caret position INSIDE the gate — reading `selectionStart`
|
|
32517
|
+
// on input types that don't support text selection (number, email in
|
|
32518
|
+
// some browsers) throws InvalidStateError, which would crash all input
|
|
32519
|
+
// handling. Wrap the read in try/catch belt-and-suspenders even though
|
|
32520
|
+
// the gated types currently support it, since the list is a public
|
|
32521
|
+
// property a consumer could mutate.
|
|
32522
|
+
if (this.setSelectionInputTypes.includes(this.type)) {
|
|
32523
|
+
let selectionStart = null;
|
|
32524
|
+
try {
|
|
32525
|
+
({ selectionStart } = this.inputElement);
|
|
32526
|
+
} catch {
|
|
32527
|
+
return;
|
|
32528
|
+
}
|
|
32529
|
+
if (typeof selectionStart !== 'number') {
|
|
32530
|
+
return;
|
|
32531
|
+
}
|
|
32532
|
+
this.updateComplete.then(() => {
|
|
32533
|
+
try {
|
|
32534
|
+
this.inputElement.setSelectionRange(selectionStart, selectionStart);
|
|
32535
|
+
} catch {
|
|
32536
|
+
// Some input types (number/email in certain UAs) throw on
|
|
32537
|
+
// setSelectionRange; swallow and let the native cursor stand.
|
|
32538
|
+
}
|
|
32539
|
+
});
|
|
32540
|
+
}
|
|
31869
32541
|
}
|
|
31870
32542
|
|
|
31871
32543
|
/**
|
|
@@ -31954,7 +32626,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31954
32626
|
*/
|
|
31955
32627
|
reset() {
|
|
31956
32628
|
this.value = undefined;
|
|
31957
|
-
this.setDateObjectProperty('valueObject', undefined);
|
|
31958
32629
|
this.validation.reset(this);
|
|
31959
32630
|
}
|
|
31960
32631
|
|
|
@@ -31963,7 +32634,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
31963
32634
|
*/
|
|
31964
32635
|
clear() {
|
|
31965
32636
|
this.value = undefined;
|
|
31966
|
-
this.setDateObjectProperty('valueObject', undefined);
|
|
31967
32637
|
}
|
|
31968
32638
|
|
|
31969
32639
|
/**
|
|
@@ -31988,8 +32658,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31988
32658
|
|
|
31989
32659
|
// Set default date format if type=date and no format is defined
|
|
31990
32660
|
if (this.type === "date" && !this.format) {
|
|
31991
|
-
|
|
31992
|
-
this.format = this.util.getDateMaskFromLocale().toLowerCase();
|
|
32661
|
+
this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
|
|
31993
32662
|
this.util.updateFormat(this.format);
|
|
31994
32663
|
}
|
|
31995
32664
|
}
|
|
@@ -32001,7 +32670,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
32001
32670
|
*/
|
|
32002
32671
|
get placeholderStr() {
|
|
32003
32672
|
if (!this.placeholder && this.type === 'date') {
|
|
32004
|
-
return this.format
|
|
32673
|
+
return this.format.toUpperCase();
|
|
32005
32674
|
}
|
|
32006
32675
|
return this.placeholder || "";
|
|
32007
32676
|
}
|
|
@@ -32018,7 +32687,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
32018
32687
|
const creditCard = this.matchInputValueToCreditCard();
|
|
32019
32688
|
const previousFormat = this.format;
|
|
32020
32689
|
|
|
32021
|
-
this.
|
|
32690
|
+
this._setFormatFromLocale(creditCard.maskFormat);
|
|
32022
32691
|
|
|
32023
32692
|
this.maxLength = creditCard.formatLength;
|
|
32024
32693
|
this.minLength = creditCard.formatMinLength;
|
|
@@ -32038,7 +32707,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
32038
32707
|
/**
|
|
32039
32708
|
* Function to support credit-card feature type.
|
|
32040
32709
|
* @private
|
|
32041
|
-
* @deprecated https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296
|
|
32710
|
+
* @deprecated See https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296.
|
|
32042
32711
|
* @returns {object} JSON with data for credit card formatting.
|
|
32043
32712
|
*/
|
|
32044
32713
|
matchInputValueToCreditCard() {
|
|
@@ -32079,10 +32748,10 @@ class BaseInput extends AuroElement$1 {
|
|
|
32079
32748
|
},
|
|
32080
32749
|
{
|
|
32081
32750
|
name: 'Diners club',
|
|
32082
|
-
regex: /^(?<num>36|38)\d{0}/u,
|
|
32751
|
+
regex: /^(?<num>30[0-5]|36|38)\d{0}/u,
|
|
32083
32752
|
formatLength: 16,
|
|
32084
32753
|
errorMessage: CreditCardValidationMessage,
|
|
32085
|
-
cardIcon: '
|
|
32754
|
+
cardIcon: 'cc-dinersclub',
|
|
32086
32755
|
maskFormat: "0000 000000 0000"
|
|
32087
32756
|
},
|
|
32088
32757
|
{
|
|
@@ -32492,7 +33161,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
|
|
|
32492
33161
|
}
|
|
32493
33162
|
};
|
|
32494
33163
|
|
|
32495
|
-
var formkitVersion = '
|
|
33164
|
+
var formkitVersion = '202607221815';
|
|
32496
33165
|
|
|
32497
33166
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
32498
33167
|
// See LICENSE in the project root for license information.
|
|
@@ -32778,20 +33447,50 @@ class AuroInput extends BaseInput {
|
|
|
32778
33447
|
* @returns {void}
|
|
32779
33448
|
*/
|
|
32780
33449
|
checkDisplayValueSlotChange() {
|
|
32781
|
-
|
|
32782
|
-
|
|
32783
|
-
|
|
32784
|
-
|
|
32785
|
-
|
|
33450
|
+
const slot = this.shadowRoot?.querySelector('slot[name="displayValue"]');
|
|
33451
|
+
if (!slot) {
|
|
33452
|
+
// Shadow slot not yet rendered — fall back to checking light-DOM
|
|
33453
|
+
// children so hasDisplayValueContent isn't stuck false when called
|
|
33454
|
+
// before firstUpdated (e.g. from auro-combobox during mount).
|
|
33455
|
+
// Check for any element (including custom elements like <auro-icon>
|
|
33456
|
+
// that render via shadow DOM with no text content).
|
|
33457
|
+
const lightDomNodes = Array.from(this.querySelectorAll('[slot="displayValue"]:not(slot)'));
|
|
33458
|
+
const hasContent = lightDomNodes.some((node) => (
|
|
33459
|
+
node.textContent.trim().length > 0 ||
|
|
33460
|
+
node.children.length > 0 ||
|
|
33461
|
+
node.shadowRoot !== null
|
|
33462
|
+
));
|
|
33463
|
+
if (this.hasDisplayValueContent !== hasContent) {
|
|
33464
|
+
this.hasDisplayValueContent = hasContent;
|
|
33465
|
+
this.requestUpdate();
|
|
33466
|
+
}
|
|
33467
|
+
return;
|
|
32786
33468
|
}
|
|
32787
|
-
|
|
32788
|
-
|
|
32789
|
-
|
|
32790
|
-
|
|
32791
|
-
|
|
33469
|
+
const nodes = slot.assignedNodes({ flatten: true });
|
|
33470
|
+
|
|
33471
|
+
// Check for actual visible content, not just node existence.
|
|
33472
|
+
// An empty <span slot="displayValue"></span> forwarded from the
|
|
33473
|
+
// consumer should not be treated as "has content" — it causes the
|
|
33474
|
+
// displayValue wrapper to render (with hasContent class) but show
|
|
33475
|
+
// nothing, blocking the combobox's synthetic displayValue from
|
|
33476
|
+
// being visible on preset/deeplink load.
|
|
33477
|
+
// Custom elements (e.g. <auro-icon>) that render via shadow DOM are
|
|
33478
|
+
// treated as content even when they have no text or light-DOM children.
|
|
33479
|
+
const hasContent = nodes.some((node) => {
|
|
33480
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
33481
|
+
return node.textContent.trim().length > 0;
|
|
33482
|
+
}
|
|
33483
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
33484
|
+
return node.textContent.trim().length > 0 ||
|
|
33485
|
+
node.children.length > 0 ||
|
|
33486
|
+
node.shadowRoot !== null;
|
|
33487
|
+
}
|
|
33488
|
+
return false;
|
|
33489
|
+
});
|
|
33490
|
+
if (this.hasDisplayValueContent !== hasContent) {
|
|
33491
|
+
this.hasDisplayValueContent = hasContent;
|
|
33492
|
+
this.requestUpdate();
|
|
32792
33493
|
}
|
|
32793
|
-
|
|
32794
|
-
this.hasDisplayValueContent = hasContent;
|
|
32795
33494
|
}
|
|
32796
33495
|
|
|
32797
33496
|
firstUpdated() {
|
|
@@ -32815,7 +33514,7 @@ class AuroInput extends BaseInput {
|
|
|
32815
33514
|
/**
|
|
32816
33515
|
* Determines default help text string.
|
|
32817
33516
|
* @private
|
|
32818
|
-
* @deprecated https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296
|
|
33517
|
+
* @deprecated See https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296.
|
|
32819
33518
|
* @returns {string} Evaluates pre-determined help text.
|
|
32820
33519
|
*/
|
|
32821
33520
|
getHelpText() {
|
|
@@ -32995,6 +33694,7 @@ class AuroInput extends BaseInput {
|
|
|
32995
33694
|
<${this.buttonTag}
|
|
32996
33695
|
@click="${this.handleClickShowPassword}"
|
|
32997
33696
|
appearance="${this.onDark ? 'inverse' : this.appearance}"
|
|
33697
|
+
aria-pressed="${this.showPassword ? 'true' : 'false'}"
|
|
32998
33698
|
class="notificationBtn passwordBtn"
|
|
32999
33699
|
shape="circle"
|
|
33000
33700
|
size="sm"
|
|
@@ -33068,25 +33768,29 @@ class AuroInput extends BaseInput {
|
|
|
33068
33768
|
* @returns {html} - Returns HTML for the help text and error message.
|
|
33069
33769
|
*/
|
|
33070
33770
|
renderHtmlHelpText() {
|
|
33771
|
+
// Single `<p>` with stable identity across validity transitions —
|
|
33772
|
+
// previously two distinct templates (valid vs invalid) caused Lit to
|
|
33773
|
+
// replace the node entirely on a flip, and VoiceOver wouldn't
|
|
33774
|
+
// re-announce because the live-region element it was watching had been
|
|
33775
|
+
// removed and a new one inserted. Keeping one node means the `role`,
|
|
33776
|
+
// `aria-live`, and text content all change in-place, which AT does
|
|
33777
|
+
// observe and announce.
|
|
33778
|
+
const isError = this.validity && this.validity !== 'valid';
|
|
33071
33779
|
return u$a`
|
|
33072
|
-
|
|
33073
|
-
?
|
|
33074
|
-
|
|
33075
|
-
|
|
33076
|
-
|
|
33077
|
-
|
|
33078
|
-
|
|
33079
|
-
|
|
33080
|
-
|
|
33081
|
-
|
|
33082
|
-
|
|
33083
|
-
|
|
33084
|
-
|
|
33085
|
-
|
|
33086
|
-
</p>
|
|
33087
|
-
</${this.helpTextTag}>
|
|
33088
|
-
`
|
|
33089
|
-
}
|
|
33780
|
+
<${this.helpTextTag}
|
|
33781
|
+
appearance="${this.onDark ? 'inverse' : this.appearance}"
|
|
33782
|
+
?error=${isError}>
|
|
33783
|
+
<p
|
|
33784
|
+
id="${this.uniqueId}"
|
|
33785
|
+
part="helpText"
|
|
33786
|
+
role="${o$2(isError ? 'alert' : undefined)}"
|
|
33787
|
+
aria-live="${o$2(isError ? 'assertive' : undefined)}">
|
|
33788
|
+
${isError
|
|
33789
|
+
? this.errorMessage
|
|
33790
|
+
: u$a`<slot name="helpText">${this.getHelpText()}</slot>`
|
|
33791
|
+
}
|
|
33792
|
+
</p>
|
|
33793
|
+
</${this.helpTextTag}>
|
|
33090
33794
|
`;
|
|
33091
33795
|
}
|
|
33092
33796
|
|
|
@@ -33233,6 +33937,15 @@ function formatISODate(isoStr, format) {
|
|
|
33233
33937
|
try {
|
|
33234
33938
|
const date = dateFormatter.stringToDateInstance(isoStr);
|
|
33235
33939
|
|
|
33940
|
+
// `stringToDateInstance` returns an `Invalid Date` for malformed strings
|
|
33941
|
+
// and `null` for non-string input — it does NOT throw. Without this
|
|
33942
|
+
// guard, `getFullYear()`/`getMonth()`/`getDate()` on an Invalid Date
|
|
33943
|
+
// yield `NaN`, and `String(NaN).padStart(4, '0')` produces literals
|
|
33944
|
+
// like "0NaN/0NaN/0NaN" instead of `undefined`.
|
|
33945
|
+
if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
|
|
33946
|
+
return undefined;
|
|
33947
|
+
}
|
|
33948
|
+
|
|
33236
33949
|
const year = String(date.getFullYear()).padStart(4, '0');
|
|
33237
33950
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
33238
33951
|
const day = String(date.getDate()).padStart(2, '0');
|
|
@@ -33243,7 +33956,10 @@ function formatISODate(isoStr, format) {
|
|
|
33243
33956
|
replace(/mm/iu, month).
|
|
33244
33957
|
replace(/dd/iu, day);
|
|
33245
33958
|
} catch (err) {
|
|
33246
|
-
//
|
|
33959
|
+
// Defensive: the Date-returning path is guarded above, but `parseDate`
|
|
33960
|
+
// (inside `stringToDateInstance`) could throw on pathological input
|
|
33961
|
+
// future-library-versions might introduce. Treat any thrown error as
|
|
33962
|
+
// "not a valid date" and return undefined.
|
|
33247
33963
|
return undefined;
|
|
33248
33964
|
}
|
|
33249
33965
|
}
|
|
@@ -33855,6 +34571,15 @@ const datepickerKeyboardStrategy = {
|
|
|
33855
34571
|
evt.stopPropagation();
|
|
33856
34572
|
evt.preventDefault();
|
|
33857
34573
|
|
|
34574
|
+
// Signal to the visibility-change handler in auro-datepicker.js that
|
|
34575
|
+
// focus should be restored to the trigger regardless of hasFocus.
|
|
34576
|
+
// hidePopover() (desktop non-modal path) does not auto-restore focus,
|
|
34577
|
+
// and hiding the grid's popover ancestor drops focus to <body>. That
|
|
34578
|
+
// synchronously fires focusout on the datepicker host — clearing
|
|
34579
|
+
// hasFocus — before updated() runs, which would otherwise skip the
|
|
34580
|
+
// input refocus. Native <dialog>.close() (modal path) restores focus
|
|
34581
|
+
// itself, but the flag is harmless there.
|
|
34582
|
+
component._restoreFocusOnClose = true;
|
|
33858
34583
|
component.hideBib();
|
|
33859
34584
|
},
|
|
33860
34585
|
|
|
@@ -33915,6 +34640,8 @@ const datepickerKeyboardStrategy = {
|
|
|
33915
34640
|
* @slot label - Defines the label content for the entire datepicker when `layout="snowflake"`.
|
|
33916
34641
|
* @slot toLabel - Defines the label content for the second input when the `range` attribute is used.
|
|
33917
34642
|
* @slot fromLabel - Defines the label content for the first input.
|
|
34643
|
+
* @slot optionalFromLabel - Overrides the "(optional)" text rendered next to the first input's label when the datepicker is not `required`.
|
|
34644
|
+
* @slot optionalToLabel - Overrides the "(optional)" text rendered next to the second input's label when `range` is set and the datepicker is not `required`.
|
|
33918
34645
|
* @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.
|
|
33919
34646
|
* @slot popover_YYYY_MM_DD - Defines the content to display in the auro-calendar-cell popover for the specified date.
|
|
33920
34647
|
* @csspart dropdown - Use for customizing the style of the dropdown.
|
|
@@ -33970,6 +34697,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
33970
34697
|
this.rangeLabelBeforeRange = 'before range';
|
|
33971
34698
|
this.rangeLabelInRange = 'in range';
|
|
33972
34699
|
this.rangeLabelAfterRange = 'after range';
|
|
34700
|
+
this.rangeLabelEndPreview = 'previewing range end';
|
|
33973
34701
|
this.blackoutDates = [];
|
|
33974
34702
|
this.blackoutLabel = 'unavailable';
|
|
33975
34703
|
this.navLabelPrevMonth = 'Previous month';
|
|
@@ -34069,6 +34797,22 @@ class AuroDatePicker extends AuroElement {
|
|
|
34069
34797
|
*/
|
|
34070
34798
|
this.handleClick = this.handleClick.bind(this);
|
|
34071
34799
|
|
|
34800
|
+
/**
|
|
34801
|
+
* Single AbortController shared by every listener registered in the
|
|
34802
|
+
* configure* methods. Lets disconnectedCallback tear all of them down
|
|
34803
|
+
* with one abort() call.
|
|
34804
|
+
*
|
|
34805
|
+
* The genuine leak risk is the listeners attached to children that can
|
|
34806
|
+
* outlive the host if they get reparented — `this.dropdown`,
|
|
34807
|
+
* `this.calendar`, and the inputs inside the dropdown's slot.
|
|
34808
|
+
* Listeners attached to `this` (e.g. focusin/focusout on the host)
|
|
34809
|
+
* form a self-contained reference graph that the GC can collect with
|
|
34810
|
+
* the host anyway, but they share the same signal so the cleanup
|
|
34811
|
+
* pattern stays uniform across all configure* sites.
|
|
34812
|
+
* @private
|
|
34813
|
+
*/
|
|
34814
|
+
this._listenerAbortController = new AbortController();
|
|
34815
|
+
|
|
34072
34816
|
/**
|
|
34073
34817
|
* @private
|
|
34074
34818
|
*/
|
|
@@ -34109,6 +34853,14 @@ class AuroDatePicker extends AuroElement {
|
|
|
34109
34853
|
|
|
34110
34854
|
/**
|
|
34111
34855
|
* Array of dates that cannot be selected. Dates should be in ISO format (YYYY-MM-DD).
|
|
34856
|
+
*
|
|
34857
|
+
* **Immutable update required.** The datepicker treats this array as
|
|
34858
|
+
* immutable and memoizes a lookup Set keyed on the array's reference
|
|
34859
|
+
* identity — matching Lit's own reactivity semantics for array
|
|
34860
|
+
* properties. In-place mutations (`blackoutDates.push(...)`,
|
|
34861
|
+
* `blackoutDates[i] = ...`, `blackoutDates.splice(...)`) will not
|
|
34862
|
+
* invalidate the cache and the new entries will be silently ignored.
|
|
34863
|
+
* To update, reassign the property: `el.blackoutDates = [...el.blackoutDates, '2024-12-25']`.
|
|
34112
34864
|
*/
|
|
34113
34865
|
blackoutDates: {
|
|
34114
34866
|
type: Array,
|
|
@@ -34117,6 +34869,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34117
34869
|
|
|
34118
34870
|
/**
|
|
34119
34871
|
* Label announced for blackout (disabled but in-range) date cells.
|
|
34872
|
+
* @default 'unavailable'
|
|
34120
34873
|
*/
|
|
34121
34874
|
blackoutLabel: {
|
|
34122
34875
|
type: String,
|
|
@@ -34133,6 +34886,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34133
34886
|
|
|
34134
34887
|
/**
|
|
34135
34888
|
* Accessible label for the calendar grid containing the days of the month.
|
|
34889
|
+
* @default 'Calendar days of the month'
|
|
34136
34890
|
*/
|
|
34137
34891
|
calendarGridLabel: {
|
|
34138
34892
|
type: String,
|
|
@@ -34295,6 +35049,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34295
35049
|
|
|
34296
35050
|
/**
|
|
34297
35051
|
* Accessible label for the next month navigation button.
|
|
35052
|
+
* @default 'Next month'
|
|
34298
35053
|
*/
|
|
34299
35054
|
navLabelNextMonth: {
|
|
34300
35055
|
type: String,
|
|
@@ -34303,6 +35058,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34303
35058
|
|
|
34304
35059
|
/**
|
|
34305
35060
|
* Accessible label for the previous month navigation button.
|
|
35061
|
+
* @default 'Previous month'
|
|
34306
35062
|
*/
|
|
34307
35063
|
navLabelPrevMonth: {
|
|
34308
35064
|
type: String,
|
|
@@ -34380,7 +35136,11 @@ class AuroDatePicker extends AuroElement {
|
|
|
34380
35136
|
},
|
|
34381
35137
|
|
|
34382
35138
|
/**
|
|
34383
|
-
* Label announced for cells after
|
|
35139
|
+
* Label announced for cells after a fully selected range (both
|
|
35140
|
+
* `dateFrom` and `dateTo` are set). While a range is still being
|
|
35141
|
+
* picked (`dateFrom` set, `dateTo` unset), focused cells past the
|
|
35142
|
+
* start use `rangeLabelEndPreview` instead.
|
|
35143
|
+
* @default 'after range'
|
|
34384
35144
|
*/
|
|
34385
35145
|
rangeLabelAfterRange: {
|
|
34386
35146
|
type: String,
|
|
@@ -34389,6 +35149,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34389
35149
|
|
|
34390
35150
|
/**
|
|
34391
35151
|
* Label announced for cells before the range start.
|
|
35152
|
+
* @default 'before range'
|
|
34392
35153
|
*/
|
|
34393
35154
|
rangeLabelBeforeRange: {
|
|
34394
35155
|
type: String,
|
|
@@ -34397,14 +35158,27 @@ class AuroDatePicker extends AuroElement {
|
|
|
34397
35158
|
|
|
34398
35159
|
/**
|
|
34399
35160
|
* Label announced for the range end date cell.
|
|
35161
|
+
* @default 'range end'
|
|
34400
35162
|
*/
|
|
34401
35163
|
rangeLabelEnd: {
|
|
34402
35164
|
type: String,
|
|
34403
35165
|
reflect: true
|
|
34404
35166
|
},
|
|
34405
35167
|
|
|
35168
|
+
/**
|
|
35169
|
+
* Label announced for the focused cell while previewing a range end
|
|
35170
|
+
* (dateFrom set, dateTo not yet selected). Tells AT users that
|
|
35171
|
+
* pressing Enter would commit this cell as the range end.
|
|
35172
|
+
* @default 'previewing range end'
|
|
35173
|
+
*/
|
|
35174
|
+
rangeLabelEndPreview: {
|
|
35175
|
+
type: String,
|
|
35176
|
+
reflect: true
|
|
35177
|
+
},
|
|
35178
|
+
|
|
34406
35179
|
/**
|
|
34407
35180
|
* Label announced for cells within the selected range.
|
|
35181
|
+
* @default 'in range'
|
|
34408
35182
|
*/
|
|
34409
35183
|
rangeLabelInRange: {
|
|
34410
35184
|
type: String,
|
|
@@ -34413,6 +35187,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34413
35187
|
|
|
34414
35188
|
/**
|
|
34415
35189
|
* Label announced for the range start date cell.
|
|
35190
|
+
* @default 'range start'
|
|
34416
35191
|
*/
|
|
34417
35192
|
rangeLabelStart: {
|
|
34418
35193
|
type: String,
|
|
@@ -34420,7 +35195,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
34420
35195
|
},
|
|
34421
35196
|
|
|
34422
35197
|
/**
|
|
34423
|
-
* Dates that the user should have for reference as part of their decision
|
|
35198
|
+
* Dates that the user should have for reference as part of their decision-making when selecting a date.
|
|
34424
35199
|
* This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
|
|
34425
35200
|
*/
|
|
34426
35201
|
referenceDates: {
|
|
@@ -34777,10 +35552,26 @@ class AuroDatePicker extends AuroElement {
|
|
|
34777
35552
|
// ─── Vendor calendar time conversions ─────────────────────────────────────
|
|
34778
35553
|
|
|
34779
35554
|
/**
|
|
34780
|
-
* Converts a Unix timestamp (seconds) from the
|
|
35555
|
+
* Converts a Unix timestamp (seconds) from the vendored range-datepicker
|
|
35556
|
+
* (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
|
|
35557
|
+
*
|
|
35558
|
+
* Timezone contract:
|
|
35559
|
+
* - INPUT: `time` is assumed to be the seconds-since-epoch of **local
|
|
35560
|
+
* midnight** for the intended calendar day. The vendor's Day constructor
|
|
35561
|
+
* builds it via `date-fns format(date, 't')` from a locally-constructed
|
|
35562
|
+
* Date, so this assumption currently holds end-to-end.
|
|
35563
|
+
* - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
|
|
35564
|
+
* getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
|
|
35565
|
+
* string matches the local calendar day.
|
|
35566
|
+
*
|
|
35567
|
+
* If the vendor ever switches to emitting UTC-midnight timestamps, this
|
|
35568
|
+
* conversion will silently shift the returned date by one day in zones
|
|
35569
|
+
* west of UTC. Any vendor swap should re-verify this contract; the TZ
|
|
35570
|
+
* regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
|
|
35571
|
+
*
|
|
34781
35572
|
* @private
|
|
34782
|
-
* @param {number} time - Unix timestamp
|
|
34783
|
-
* @returns {string} ISO date string (yyyy-mm-dd).
|
|
35573
|
+
* @param {number} time - Unix timestamp (seconds), local midnight of the day.
|
|
35574
|
+
* @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
|
|
34784
35575
|
*/
|
|
34785
35576
|
convertWcTimeToDate(time) {
|
|
34786
35577
|
return dateFormatter$1.toISOFormatString(new Date(time * 1000));
|
|
@@ -34882,8 +35673,8 @@ class AuroDatePicker extends AuroElement {
|
|
|
34882
35673
|
}
|
|
34883
35674
|
}
|
|
34884
35675
|
|
|
34885
|
-
// Focus the calendar grid wrapper (
|
|
34886
|
-
// the SR announcement for the active cell
|
|
35676
|
+
// Focus the calendar grid wrapper. The live region (announced just
|
|
35677
|
+
// below) handles the SR announcement for the active cell.
|
|
34887
35678
|
if (activeCell) {
|
|
34888
35679
|
this.calendar.focusActiveCell();
|
|
34889
35680
|
|
|
@@ -34897,11 +35688,14 @@ class AuroDatePicker extends AuroElement {
|
|
|
34897
35688
|
this.calendar.announceSelection(announcement);
|
|
34898
35689
|
}, 500);
|
|
34899
35690
|
|
|
34900
|
-
// On mobile fullscreen
|
|
34901
|
-
//
|
|
34902
|
-
//
|
|
34903
|
-
|
|
35691
|
+
// On mobile fullscreen — or when an explicit focusDate change has
|
|
35692
|
+
// requested a forced scroll on the next render — scroll the active
|
|
35693
|
+
// cell into view. Doing this here (after activeCellDate has been
|
|
35694
|
+
// resolved by the rAF loop above) prevents a no-op scroll that
|
|
35695
|
+
// would happen if we tried to scroll before the cell was set.
|
|
35696
|
+
if (this.dropdown.isBibFullscreen || this.forceScrollOnNextMobileCalendarRender) {
|
|
34904
35697
|
this.calendar.scrollToActiveCell();
|
|
35698
|
+
this.forceScrollOnNextMobileCalendarRender = false;
|
|
34905
35699
|
}
|
|
34906
35700
|
} else if (attempts < MAX_ATTEMPTS) {
|
|
34907
35701
|
requestAnimationFrame(tryFocus);
|
|
@@ -34933,11 +35727,13 @@ class AuroDatePicker extends AuroElement {
|
|
|
34933
35727
|
this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
|
|
34934
35728
|
}
|
|
34935
35729
|
|
|
35730
|
+
const { signal } = this._listenerAbortController;
|
|
35731
|
+
|
|
34936
35732
|
this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
|
|
34937
35733
|
if (!this.isPopoverVisible) {
|
|
34938
35734
|
this.dropdown.show();
|
|
34939
35735
|
}
|
|
34940
|
-
});
|
|
35736
|
+
}, { signal });
|
|
34941
35737
|
|
|
34942
35738
|
this.dropdown.addEventListener('auroDropdown-toggled', () => {
|
|
34943
35739
|
this.notifyDatepickerToggled();
|
|
@@ -34949,13 +35745,17 @@ class AuroDatePicker extends AuroElement {
|
|
|
34949
35745
|
// what centralDate renders, causing all cells to have tabindex="-1".
|
|
34950
35746
|
this.calendar.activeCellDate = null;
|
|
34951
35747
|
|
|
34952
|
-
//
|
|
34953
|
-
// whichever month the user last navigated to.
|
|
34954
|
-
//
|
|
34955
|
-
|
|
34956
|
-
|
|
35748
|
+
// On open, reset the visible month to a predictable source rather than
|
|
35749
|
+
// whichever month the user last navigated to. Route through updateCentralDate
|
|
35750
|
+
// so centralDate stays first-of-month.
|
|
35751
|
+
// Priority: calendarFocusDate (when valid) -> value (when set) -> today (when neither is set).
|
|
35752
|
+
// Respect consumer-provided centralDate/calendarStartDate/minDate when neither calendarFocusDate nor value is set.
|
|
35753
|
+
if (this.calendarFocusDate && dateFormatter$1.isValidDate(this.calendarFocusDate)) {
|
|
35754
|
+
this.calendarRenderUtil.updateCentralDate(this, this.calendarFocusDateObject);
|
|
35755
|
+
} else if (this.valueObject) {
|
|
35756
|
+
this.calendarRenderUtil.updateCentralDate(this, this.value);
|
|
34957
35757
|
} else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
|
|
34958
|
-
this.
|
|
35758
|
+
this.calendarRenderUtil.updateCentralDate(this, new Date());
|
|
34959
35759
|
}
|
|
34960
35760
|
}
|
|
34961
35761
|
|
|
@@ -35013,8 +35813,15 @@ class AuroDatePicker extends AuroElement {
|
|
|
35013
35813
|
// Always clear the inert flag. Only restore focus to the input when the datepicker
|
|
35014
35814
|
// still has focus (e.g. Escape, date selected) — not when the user tabbed away,
|
|
35015
35815
|
// which would pull them back and require extra Tab presses to escape.
|
|
35816
|
+
//
|
|
35817
|
+
// `_restoreFocusOnClose` is set by the Escape handler in
|
|
35818
|
+
// datepickerKeyboardStrategy.js to force restore even when hasFocus
|
|
35819
|
+
// has already been cleared — hidePopover() (desktop non-modal path)
|
|
35820
|
+
// can drop focus to <body> before this update fires.
|
|
35016
35821
|
this.dropdown.trigger.inert = false;
|
|
35017
|
-
|
|
35822
|
+
const shouldRestoreFocus = this.hasFocus || this._restoreFocusOnClose;
|
|
35823
|
+
this._restoreFocusOnClose = false;
|
|
35824
|
+
if (shouldRestoreFocus) {
|
|
35018
35825
|
requestAnimationFrame(() => {
|
|
35019
35826
|
if (!this.dropdown.isPopoverVisible) {
|
|
35020
35827
|
this.inputList[0].focus();
|
|
@@ -35023,19 +35830,11 @@ class AuroDatePicker extends AuroElement {
|
|
|
35023
35830
|
}
|
|
35024
35831
|
}
|
|
35025
35832
|
|
|
35026
|
-
//
|
|
35027
|
-
|
|
35028
|
-
|
|
35029
|
-
|
|
35030
|
-
|
|
35031
|
-
// we need to wait until the next frame to ensure the calendar is fully rendered
|
|
35032
|
-
// and the area we're trying to scroll to is present in the DOM.
|
|
35033
|
-
setTimeout(() => {
|
|
35034
|
-
this.calendar.scrollMonthIntoView(this.calendarFocusDate);
|
|
35035
|
-
this.forceScrollOnNextMobileCalendarRender = false;
|
|
35036
|
-
}, 0);
|
|
35037
|
-
}
|
|
35038
|
-
});
|
|
35833
|
+
// Note: the forceScrollOnNextMobileCalendarRender scroll-into-view
|
|
35834
|
+
// happens inside focusActiveCellWhenReady() once activeCellDate has
|
|
35835
|
+
// been resolved by its rAF wait — not here in a setTimeout(0), which
|
|
35836
|
+
// fired before the active date was set and silently no-op'd.
|
|
35837
|
+
}, { signal });
|
|
35039
35838
|
|
|
35040
35839
|
// Handle responsive strategy changes while the dropdown is open
|
|
35041
35840
|
// (e.g. resizing from desktop → mobile or vice versa).
|
|
@@ -35082,7 +35881,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35082
35881
|
});
|
|
35083
35882
|
});
|
|
35084
35883
|
}
|
|
35085
|
-
});
|
|
35884
|
+
}, { signal });
|
|
35086
35885
|
}
|
|
35087
35886
|
|
|
35088
35887
|
/**
|
|
@@ -35095,6 +35894,8 @@ class AuroDatePicker extends AuroElement {
|
|
|
35095
35894
|
|
|
35096
35895
|
this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
|
|
35097
35896
|
|
|
35897
|
+
const { signal } = this._listenerAbortController;
|
|
35898
|
+
|
|
35098
35899
|
this.inputList.forEach((input, index) => {
|
|
35099
35900
|
input.addEventListener('input', (event) => {
|
|
35100
35901
|
event.stopPropagation();
|
|
@@ -35106,7 +35907,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35106
35907
|
}
|
|
35107
35908
|
|
|
35108
35909
|
this.notifyValueChanged();
|
|
35109
|
-
});
|
|
35910
|
+
}, { signal });
|
|
35110
35911
|
|
|
35111
35912
|
input.addEventListener('auroFormElement-validated', (evt) => {
|
|
35112
35913
|
// not to bubble up input's validated event.
|
|
@@ -35122,7 +35923,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35122
35923
|
this.validity = evt.detail.validity;
|
|
35123
35924
|
this.errorMessage = evt.detail.message;
|
|
35124
35925
|
}
|
|
35125
|
-
});
|
|
35926
|
+
}, { signal });
|
|
35126
35927
|
});
|
|
35127
35928
|
}
|
|
35128
35929
|
|
|
@@ -35136,19 +35937,32 @@ class AuroDatePicker extends AuroElement {
|
|
|
35136
35937
|
this.calendar.datepicker = this;
|
|
35137
35938
|
this.calendar.dropdown = this.dropdown;
|
|
35138
35939
|
|
|
35940
|
+
const { signal } = this._listenerAbortController;
|
|
35941
|
+
|
|
35139
35942
|
this.calendar.addEventListener('auroCalendar-dateSelected', () => {
|
|
35140
|
-
|
|
35141
|
-
|
|
35943
|
+
// Compare the input's ISO value against the *converted* calendar
|
|
35944
|
+
// timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
|
|
35945
|
+
// strings — comparing the input ISO directly against them would
|
|
35946
|
+
// never match, so the write would fire on every event and emit
|
|
35947
|
+
// redundant input/change activity).
|
|
35948
|
+
if (this.calendar.dateFrom !== undefined) {
|
|
35949
|
+
const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
|
|
35950
|
+
if (this.inputList[0].value !== fromIso) {
|
|
35951
|
+
this.inputList[0].value = fromIso;
|
|
35952
|
+
}
|
|
35142
35953
|
}
|
|
35143
35954
|
|
|
35144
|
-
if (this.inputList[1] && this.calendar.dateTo
|
|
35145
|
-
|
|
35955
|
+
if (this.inputList[1] && this.calendar.dateTo) {
|
|
35956
|
+
const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
|
|
35957
|
+
if (this.inputList[1].value !== toIso) {
|
|
35958
|
+
this.inputList[1].value = toIso;
|
|
35959
|
+
}
|
|
35146
35960
|
}
|
|
35147
|
-
});
|
|
35961
|
+
}, { signal });
|
|
35148
35962
|
|
|
35149
35963
|
this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
|
|
35150
35964
|
this.dropdown.hide();
|
|
35151
|
-
});
|
|
35965
|
+
}, { signal });
|
|
35152
35966
|
|
|
35153
35967
|
this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
|
|
35154
35968
|
const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
|
|
@@ -35158,7 +35972,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35158
35972
|
}
|
|
35159
35973
|
|
|
35160
35974
|
this.notifyMonthChanged(event);
|
|
35161
|
-
});
|
|
35975
|
+
}, { signal });
|
|
35162
35976
|
}
|
|
35163
35977
|
|
|
35164
35978
|
/**
|
|
@@ -35167,10 +35981,17 @@ class AuroDatePicker extends AuroElement {
|
|
|
35167
35981
|
* @returns {void}
|
|
35168
35982
|
*/
|
|
35169
35983
|
configureDatepicker() {
|
|
35984
|
+
// These listeners are on `this` (the host), so they would GC with the
|
|
35985
|
+
// host even without the abort signal — see the leak rationale on
|
|
35986
|
+
// `_listenerAbortController`. The signal is still passed for uniform
|
|
35987
|
+
// cleanup semantics with the child-element listeners in the other
|
|
35988
|
+
// configure* methods.
|
|
35989
|
+
const { signal } = this._listenerAbortController;
|
|
35990
|
+
|
|
35170
35991
|
this.addEventListener('focusin', () => {
|
|
35171
35992
|
this.touched = true;
|
|
35172
35993
|
this.hasFocus = true;
|
|
35173
|
-
});
|
|
35994
|
+
}, { signal });
|
|
35174
35995
|
|
|
35175
35996
|
this.addEventListener('focusout', () => {
|
|
35176
35997
|
this.hasFocus = false;
|
|
@@ -35182,7 +36003,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35182
36003
|
if (!this.matches(':focus-within')) {
|
|
35183
36004
|
this.validate();
|
|
35184
36005
|
}
|
|
35185
|
-
});
|
|
36006
|
+
}, { signal });
|
|
35186
36007
|
|
|
35187
36008
|
if (this.valueObject) {
|
|
35188
36009
|
this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
|
|
@@ -35380,6 +36201,41 @@ class AuroDatePicker extends AuroElement {
|
|
|
35380
36201
|
return this.validity !== undefined && this.validity !== 'valid';
|
|
35381
36202
|
}
|
|
35382
36203
|
|
|
36204
|
+
/**
|
|
36205
|
+
* Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
|
|
36206
|
+
* spans every datepicker instance on the page; lives on the class (not
|
|
36207
|
+
* at module scope) so it stays an encapsulated implementation detail of
|
|
36208
|
+
* this component and does not interfere with WCA's class-JSDoc
|
|
36209
|
+
* attachment.
|
|
36210
|
+
* @private
|
|
36211
|
+
*/
|
|
36212
|
+
static _warnedInvalidLocales = new Set();
|
|
36213
|
+
|
|
36214
|
+
/**
|
|
36215
|
+
* Logs a one-time `console.debug` when an unsupported locale falls back to
|
|
36216
|
+
* en-US. Deduped by the offending tag so noisy re-renders that resurface
|
|
36217
|
+
* the same bad value stay quiet, but each new bad value still signals so
|
|
36218
|
+
* consumers can spot the typo or missing tag.
|
|
36219
|
+
* @private
|
|
36220
|
+
* @param {string|undefined} badLocale - The locale value that failed.
|
|
36221
|
+
* @returns {void}
|
|
36222
|
+
*/
|
|
36223
|
+
_warnInvalidLocale(badLocale) {
|
|
36224
|
+
// Stringify without coalescing — `String(undefined)` / `String(null)`
|
|
36225
|
+
// surface the actual offending value in the log, instead of the
|
|
36226
|
+
// ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
|
|
36227
|
+
// Dedup still works correctly because each unique stringification
|
|
36228
|
+
// becomes its own Set entry.
|
|
36229
|
+
const key = String(badLocale);
|
|
36230
|
+
const seen = AuroDatePicker._warnedInvalidLocales;
|
|
36231
|
+
if (seen.has(key)) {
|
|
36232
|
+
return;
|
|
36233
|
+
}
|
|
36234
|
+
seen.add(key);
|
|
36235
|
+
// eslint-disable-next-line no-console
|
|
36236
|
+
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".`);
|
|
36237
|
+
}
|
|
36238
|
+
|
|
35383
36239
|
/**
|
|
35384
36240
|
* Lifecycle method to check if the locale is valid.
|
|
35385
36241
|
* @ignore
|
|
@@ -35390,10 +36246,15 @@ class AuroDatePicker extends AuroElement {
|
|
|
35390
36246
|
if (changedProperties.has('locale')) {
|
|
35391
36247
|
try {
|
|
35392
36248
|
const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
|
|
35393
|
-
|
|
36249
|
+
if (supported.length > 0) {
|
|
36250
|
+
this._validLocale = this.locale;
|
|
36251
|
+
} else {
|
|
36252
|
+
this._validLocale = 'en-US';
|
|
36253
|
+
this._warnInvalidLocale(this.locale);
|
|
36254
|
+
}
|
|
35394
36255
|
} catch {
|
|
35395
|
-
console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
|
|
35396
36256
|
this._validLocale = 'en-US';
|
|
36257
|
+
this._warnInvalidLocale(this.locale);
|
|
35397
36258
|
}
|
|
35398
36259
|
|
|
35399
36260
|
const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
|
|
@@ -35406,6 +36267,18 @@ class AuroDatePicker extends AuroElement {
|
|
|
35406
36267
|
this.calendar.requestUpdate();
|
|
35407
36268
|
this.dispatchEvent(new CustomEvent('auroDatePicker-newSlotContent'));
|
|
35408
36269
|
}
|
|
36270
|
+
|
|
36271
|
+
// Range invariant: if a value change (from click or programmatic) has
|
|
36272
|
+
// moved start past end, clear valueEnd here so both properties land in
|
|
36273
|
+
// the SAME reactive cycle. Doing it in updated() would schedule a
|
|
36274
|
+
// second cycle after cellClickActive/wasCellClick has already been
|
|
36275
|
+
// consumed by the value branch, leaving the valueEnd branch to run
|
|
36276
|
+
// with a stale handshake and racing with any intervening programmatic
|
|
36277
|
+
// value assignments.
|
|
36278
|
+
if ((changedProperties.has('value') || changedProperties.has('valueEnd')) &&
|
|
36279
|
+
this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
|
|
36280
|
+
this.valueEnd = undefined;
|
|
36281
|
+
}
|
|
35409
36282
|
}
|
|
35410
36283
|
|
|
35411
36284
|
updated(changedProperties) {
|
|
@@ -35420,10 +36293,6 @@ class AuroDatePicker extends AuroElement {
|
|
|
35420
36293
|
}
|
|
35421
36294
|
}
|
|
35422
36295
|
|
|
35423
|
-
if (changedProperties.has('calendarFocusDate')) {
|
|
35424
|
-
this.handleFocusDateChange();
|
|
35425
|
-
}
|
|
35426
|
-
|
|
35427
36296
|
if (changedProperties.has('calendarStartDate')) {
|
|
35428
36297
|
this.calendar.setAttribute('calendarStartDate', this.calendarStartDate || '');
|
|
35429
36298
|
}
|
|
@@ -35473,10 +36342,12 @@ class AuroDatePicker extends AuroElement {
|
|
|
35473
36342
|
|
|
35474
36343
|
if (this.value && this.value.length === this.inputList[0].lengthForType && !(this.wasCellClick && this.range)) {
|
|
35475
36344
|
// Skip centralDate update when user clicked a cell in range mode
|
|
35476
|
-
// to prevent the displayed months from shifting
|
|
35477
|
-
|
|
35478
|
-
//
|
|
35479
|
-
//
|
|
36345
|
+
// to prevent the displayed months from shifting. Route through
|
|
36346
|
+
// updateCentralDate so centralDate stays first-of-month — direct
|
|
36347
|
+
// assignment of the raw value briefly holds a mid-month string
|
|
36348
|
+
// and violates the invariant that observers (e.g. calendar sync)
|
|
36349
|
+
// rely on.
|
|
36350
|
+
this.calendarRenderUtil.updateCentralDate(this, this.value);
|
|
35480
36351
|
}
|
|
35481
36352
|
|
|
35482
36353
|
this.setHasValue();
|
|
@@ -35510,7 +36381,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35510
36381
|
// update the calendar
|
|
35511
36382
|
if (this.valueEndObject) {
|
|
35512
36383
|
this.calendar.dateTo = this.convertToWcValidTime(this.valueEndObject);
|
|
35513
|
-
if (!
|
|
36384
|
+
if (!this.wasCellClick) {
|
|
35514
36385
|
this.calendarRenderUtil.updateCentralDate(this, this.valueEndObject);
|
|
35515
36386
|
}
|
|
35516
36387
|
} else {
|
|
@@ -35534,16 +36405,23 @@ class AuroDatePicker extends AuroElement {
|
|
|
35534
36405
|
|
|
35535
36406
|
if (this.valueEnd && this.valueEnd.length === this.inputList[1].lengthForType && !this.wasCellClick) {
|
|
35536
36407
|
// Skip centralDate update when user clicked a cell in range mode
|
|
35537
|
-
// to prevent the displayed months from shifting
|
|
35538
|
-
|
|
35539
|
-
//
|
|
35540
|
-
|
|
36408
|
+
// to prevent the displayed months from shifting. Route through
|
|
36409
|
+
// updateCentralDate to preserve the first-of-month invariant
|
|
36410
|
+
// (see matching comment in the value branch above).
|
|
36411
|
+
this.calendarRenderUtil.updateCentralDate(this, this.valueEnd);
|
|
35541
36412
|
}
|
|
35542
36413
|
|
|
35543
36414
|
this.validate();
|
|
35544
36415
|
this.setHasValue();
|
|
35545
36416
|
}
|
|
35546
36417
|
|
|
36418
|
+
// Run focus-date handling AFTER value/valueEnd so that when a consumer sets
|
|
36419
|
+
// calendarFocusDate together with value, the focus date wins for the visible
|
|
36420
|
+
// month instead of being overwritten by the value branch's updateCentralDate.
|
|
36421
|
+
if (changedProperties.has('calendarFocusDate')) {
|
|
36422
|
+
this.handleFocusDateChange();
|
|
36423
|
+
}
|
|
36424
|
+
|
|
35547
36425
|
if (changedProperties.has('error')) {
|
|
35548
36426
|
// Error attribute is passed down to the last input in the list to control the error state
|
|
35549
36427
|
// This is done to prevent error icon from displaying on both inputs in range support
|
|
@@ -35561,10 +36439,6 @@ class AuroDatePicker extends AuroElement {
|
|
|
35561
36439
|
this.validation.validate(lastInput, true);
|
|
35562
36440
|
}
|
|
35563
36441
|
|
|
35564
|
-
if (this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
|
|
35565
|
-
this.valueEnd = undefined;
|
|
35566
|
-
}
|
|
35567
|
-
|
|
35568
36442
|
// This resets the datepicker when the minDate is set to a new value that is
|
|
35569
36443
|
// a later date than the current value date
|
|
35570
36444
|
if (changedProperties.has('minDate') && this.minDate) {
|
|
@@ -35656,9 +36530,28 @@ class AuroDatePicker extends AuroElement {
|
|
|
35656
36530
|
* @returns {void}
|
|
35657
36531
|
*/
|
|
35658
36532
|
handleClick(event) {
|
|
35659
|
-
|
|
35660
|
-
|
|
35661
|
-
const
|
|
36533
|
+
const path = event.composedPath();
|
|
36534
|
+
const [initTarget] = path;
|
|
36535
|
+
const pathIncludesBib = path.includes(this.dropdown?.bibContent);
|
|
36536
|
+
const triggerIsInert = this.dropdown?.trigger?.inert;
|
|
36537
|
+
|
|
36538
|
+
// When desktopModal is open, the datepicker marks the dropdown's #trigger
|
|
36539
|
+
// element inert to keep AT and Tab off the input. Inert also blocks pointer
|
|
36540
|
+
// events, so a click on the visible trigger area passes through to the
|
|
36541
|
+
// wrapper <div> that sits alongside #trigger in the dropdown's shadow root.
|
|
36542
|
+
// composedPath() then no longer contains #trigger, and the floater's
|
|
36543
|
+
// window-level click-outside handler treats the click as an outside click
|
|
36544
|
+
// and closes the bib. Suppress that misdetection here: if the click lands
|
|
36545
|
+
// inside the trigger's bounds and outside the bib, stop propagation before
|
|
36546
|
+
// it reaches the window listener.
|
|
36547
|
+
if (this.dropdown?.isPopoverVisible && triggerIsInert && !pathIncludesBib) {
|
|
36548
|
+
const triggerRect = this.dropdown.trigger?.getBoundingClientRect();
|
|
36549
|
+
if (triggerRect &&
|
|
36550
|
+
event.clientX >= triggerRect.left && event.clientX <= triggerRect.right &&
|
|
36551
|
+
event.clientY >= triggerRect.top && event.clientY <= triggerRect.bottom) {
|
|
36552
|
+
event.stopPropagation();
|
|
36553
|
+
}
|
|
36554
|
+
}
|
|
35662
36555
|
|
|
35663
36556
|
// Determine if the current layout requires special handling
|
|
35664
36557
|
const layoutRequiresHandling = ['snowflake'].includes(this.layout);
|
|
@@ -35667,7 +36560,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35667
36560
|
const targetIsInput = initTarget.tagName === 'INPUT';
|
|
35668
36561
|
const isFocusAlreadyOnInput = this.inputList.includes(this.shadowRoot.activeElement);
|
|
35669
36562
|
|
|
35670
|
-
if (layoutRequiresHandling && !targetIsInput && !isFocusAlreadyOnInput && !
|
|
36563
|
+
if (layoutRequiresHandling && !targetIsInput && !isFocusAlreadyOnInput && !pathIncludesBib) {
|
|
35671
36564
|
// Focus the first input
|
|
35672
36565
|
this.inputList[0].focus();
|
|
35673
36566
|
}
|
|
@@ -35679,7 +36572,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35679
36572
|
* @returns {void}
|
|
35680
36573
|
*/
|
|
35681
36574
|
configureClickHandler() {
|
|
35682
|
-
this.addEventListener('click', this.handleClick);
|
|
36575
|
+
this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
|
|
35683
36576
|
}
|
|
35684
36577
|
|
|
35685
36578
|
firstUpdated() {
|
|
@@ -35687,6 +36580,15 @@ class AuroDatePicker extends AuroElement {
|
|
|
35687
36580
|
// Add the tag name as an attribute if it is different than the component name
|
|
35688
36581
|
this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
|
|
35689
36582
|
|
|
36583
|
+
// If the element was disconnected before this first render finished,
|
|
36584
|
+
// disconnectedCallback's microtask already aborted the controller. The
|
|
36585
|
+
// connectedCallback reinit guard skips that case because `hasUpdated`
|
|
36586
|
+
// is still false. Mint a fresh controller here so configure* registers
|
|
36587
|
+
// listeners against a live signal.
|
|
36588
|
+
if (this._listenerAbortController.signal.aborted) {
|
|
36589
|
+
this._listenerAbortController = new AbortController();
|
|
36590
|
+
}
|
|
36591
|
+
|
|
35690
36592
|
this.configureDropdown();
|
|
35691
36593
|
this.configureInput();
|
|
35692
36594
|
this.configureCalendar();
|
|
@@ -35698,9 +36600,36 @@ class AuroDatePicker extends AuroElement {
|
|
|
35698
36600
|
connectedCallback() {
|
|
35699
36601
|
super.connectedCallback();
|
|
35700
36602
|
|
|
36603
|
+
// True reconnect after `disconnectedCallback` aborted our controller:
|
|
36604
|
+
// the existing signal is dead, so listeners registered against it
|
|
36605
|
+
// would never fire. Create a fresh controller and re-run the
|
|
36606
|
+
// configure* wiring (each method is idempotent — it just re-caches
|
|
36607
|
+
// child refs and re-registers listeners against the new signal).
|
|
36608
|
+
// `hasUpdated` gates this so the *first* connect (which precedes
|
|
36609
|
+
// firstUpdated) still falls through to firstUpdated's initial wiring.
|
|
36610
|
+
if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
|
|
36611
|
+
this._listenerAbortController = new AbortController();
|
|
36612
|
+
this.configureDropdown();
|
|
36613
|
+
this.configureInput();
|
|
36614
|
+
this.configureCalendar();
|
|
36615
|
+
this.configureDatepicker();
|
|
36616
|
+
this.configureClickHandler();
|
|
36617
|
+
}
|
|
36618
|
+
|
|
35701
36619
|
this.locale = this.domHandler.getLocale(this);
|
|
35702
36620
|
}
|
|
35703
36621
|
|
|
36622
|
+
disconnectedCallback() {
|
|
36623
|
+
super.disconnectedCallback();
|
|
36624
|
+
// Defer so that re-parenting (auro-drawer slotting it into a dialog,
|
|
36625
|
+
// for example) does not abort listeners we still need after reconnect.
|
|
36626
|
+
queueMicrotask(() => {
|
|
36627
|
+
if (!this.isConnected) {
|
|
36628
|
+
this._listenerAbortController.abort();
|
|
36629
|
+
}
|
|
36630
|
+
});
|
|
36631
|
+
}
|
|
36632
|
+
|
|
35704
36633
|
// layout render methods
|
|
35705
36634
|
// ------------------------------------
|
|
35706
36635
|
|
|
@@ -35907,6 +36836,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35907
36836
|
}
|
|
35908
36837
|
<span slot="ariaLabel.clear">${this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || i18n(this.lang, 'clearInput')}</span>
|
|
35909
36838
|
<span slot="label"><slot name="fromLabel"></slot></span>
|
|
36839
|
+
<slot name="optionalFromLabel" slot="optionalLabel"> (optional)</slot>
|
|
35910
36840
|
</${this.inputTag}>
|
|
35911
36841
|
</div>
|
|
35912
36842
|
|
|
@@ -35951,6 +36881,7 @@ class AuroDatePicker extends AuroElement {
|
|
|
35951
36881
|
}
|
|
35952
36882
|
<span slot="ariaLabel.clear">${this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || i18n(this.lang, 'clearInput')}</span>
|
|
35953
36883
|
<span slot="label"><slot name="toLabel"></slot></span>
|
|
36884
|
+
<slot name="optionalToLabel" slot="optionalLabel"> (optional)</slot>
|
|
35954
36885
|
</${this.inputTag}>
|
|
35955
36886
|
</div>
|
|
35956
36887
|
` : undefined}
|
|
@@ -36099,8 +37030,8 @@ class AuroDatePicker extends AuroElement {
|
|
|
36099
37030
|
<slot slot="bib.fullscreen.dateLabel" name="bib.fullscreen.dateLabel" @slotchange="${this.handleSlotToSlot}"></slot>
|
|
36100
37031
|
<slot slot="bib.fullscreen.toLabel" name="bib.fullscreen.toLabel" @slotchange="${this.handleSlotToSlot}"></slot>
|
|
36101
37032
|
<slot slot="bib.fullscreen.fromLabel" name="bib.fullscreen.fromLabel" @slotchange="${this.handleSlotToSlot}"></slot>
|
|
36102
|
-
<span slot="bib.fullscreen.fromStr">${AuroInputUtil.toFormattedValue(this.valueObject, this.format) || u$a`<span class="placeholderDate">${(this.format || 'mm/dd/yyyy').toUpperCase()}</span>`}</span>
|
|
36103
|
-
${this.range ? u$a`<span slot="bib.fullscreen.toStr">${AuroInputUtil.toFormattedValue(this.valueEndObject, this.format) || u$a`<span class="placeholderDate">${(this.format || 'mm/dd/yyyy').toUpperCase()}</span>`}</span>` : undefined}
|
|
37033
|
+
<span slot="bib.fullscreen.fromStr" class="body-default">${AuroInputUtil.toFormattedValue(this.valueObject, this.format) || u$a`<span class="placeholderDate">${(this.format || 'mm/dd/yyyy').toUpperCase()}</span>`}</span>
|
|
37034
|
+
${this.range ? u$a`<span slot="bib.fullscreen.toStr" class="body-default">${AuroInputUtil.toFormattedValue(this.valueEndObject, this.format) || u$a`<span class="placeholderDate">${(this.format || 'mm/dd/yyyy').toUpperCase()}</span>`}</span>` : undefined}
|
|
36104
37035
|
</auro-formkit-calendar>
|
|
36105
37036
|
`;
|
|
36106
37037
|
}
|