@aurodesignsystem-dev/auro-formkit 0.0.0-pr1522.1 → 0.0.0-pr1522.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/checkbox/demo/customize.min.js +15 -2
- package/components/checkbox/demo/getting-started.min.js +15 -2
- package/components/checkbox/demo/index.min.js +15 -2
- package/components/checkbox/dist/index.js +15 -2
- package/components/checkbox/dist/registered.js +15 -2
- package/components/combobox/demo/customize.min.js +105 -10
- package/components/combobox/demo/getting-started.min.js +105 -10
- package/components/combobox/demo/index.min.js +105 -10
- package/components/combobox/dist/index.js +105 -10
- package/components/combobox/dist/registered.js +105 -10
- package/components/counter/demo/customize.min.js +33 -3
- package/components/counter/demo/index.min.js +33 -3
- package/components/counter/dist/index.js +33 -3
- package/components/counter/dist/registered.js +33 -3
- package/components/datepicker/demo/customize.min.js +257 -16
- package/components/datepicker/demo/index.min.js +257 -16
- package/components/datepicker/dist/auro-calendar-cell.d.ts +17 -0
- package/components/datepicker/dist/auro-calendar.d.ts +43 -3
- package/components/datepicker/dist/index.js +257 -16
- package/components/datepicker/dist/registered.js +257 -16
- package/components/dropdown/demo/customize.min.js +18 -1
- package/components/dropdown/demo/getting-started.min.js +18 -1
- package/components/dropdown/demo/index.min.js +18 -1
- package/components/dropdown/dist/index.js +18 -1
- package/components/dropdown/dist/registered.js +18 -1
- package/components/form/demo/customize.min.js +530 -43
- package/components/form/demo/getting-started.min.js +530 -43
- package/components/form/demo/index.min.js +530 -43
- package/components/form/demo/registerDemoDeps.min.js +530 -43
- package/components/input/demo/api.md +58 -57
- package/components/input/demo/customize.min.js +72 -7
- package/components/input/demo/getting-started.min.js +72 -7
- package/components/input/demo/index.min.js +72 -7
- package/components/input/dist/base-input.d.ts +9 -3
- package/components/input/dist/index.js +72 -7
- package/components/input/dist/registered.js +72 -7
- package/components/input/dist/utilities.d.ts +9 -0
- package/components/radio/demo/customize.min.js +15 -2
- package/components/radio/demo/getting-started.min.js +15 -2
- package/components/radio/demo/index.min.js +15 -2
- package/components/radio/dist/index.js +15 -2
- package/components/radio/dist/registered.js +15 -2
- package/components/select/demo/customize.md +6 -4
- package/components/select/demo/customize.min.js +33 -3
- package/components/select/demo/getting-started.min.js +33 -3
- package/components/select/demo/index.min.js +33 -3
- package/components/select/dist/index.js +33 -3
- package/components/select/dist/registered.js +33 -3
- package/custom-elements.json +1622 -1520
- package/package.json +1 -1
|
@@ -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;
|
|
@@ -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.
|
|
@@ -12442,6 +12500,41 @@ class AuroCalendarCell extends i$1 {
|
|
|
12442
12500
|
btn.classList.remove('inRange', 'lastHoveredDate', 'rangeDepartDate');
|
|
12443
12501
|
}
|
|
12444
12502
|
|
|
12503
|
+
/**
|
|
12504
|
+
* Re-applies the committed-range classes (inRange / rangeDepartDate /
|
|
12505
|
+
* rangeReturnDate) imperatively from the cell's current `day`,
|
|
12506
|
+
* `dateFrom`, and `dateTo`. Used after month navigation flushes:
|
|
12507
|
+
* classMap in `renderCellButton` tracks its own previous state, so a
|
|
12508
|
+
* preceding imperative `classList.remove` (from
|
|
12509
|
+
* `clearRangePreviewClasses`) leaves classMap thinking the class is
|
|
12510
|
+
* still applied. On re-render with the same class-value, classMap emits
|
|
12511
|
+
* no delta and the class stays missing in the DOM. Re-toggling
|
|
12512
|
+
* imperatively resyncs the DOM with the committed range.
|
|
12513
|
+
*
|
|
12514
|
+
* Delegates to the same `isInRange` / `isDepartDate` / `isReturnDate`
|
|
12515
|
+
* helpers `renderCellButton` uses, so the two code paths cannot drift
|
|
12516
|
+
* (including whatever timestamp normalization those helpers apply).
|
|
12517
|
+
* @returns {void}
|
|
12518
|
+
*/
|
|
12519
|
+
applyCommittedRangeClasses() {
|
|
12520
|
+
if (!this.day) return;
|
|
12521
|
+
// Fall back to a shadowRoot query when `_cachedButton` hasn't
|
|
12522
|
+
// populated yet — this method's whole job is recovering from stale
|
|
12523
|
+
// DOM after a month re-render, so no-oping on a cache miss defeats
|
|
12524
|
+
// the fix (mirrors the fallback in `clearActive()`).
|
|
12525
|
+
const btn = this._cachedButton || this.shadowRoot?.querySelector('button.day');
|
|
12526
|
+
if (!btn) return;
|
|
12527
|
+
|
|
12528
|
+
const hasRange = this.datepicker?.hasAttribute('range');
|
|
12529
|
+
const inRange = hasRange && this.dateTo && this.isInRange(this.day, this.dateFrom, this.dateTo);
|
|
12530
|
+
const isDepart = hasRange && this.isDepartDate(this.day, this.dateFrom) && this.dateTo;
|
|
12531
|
+
const isReturn = hasRange && this.isReturnDate(this.day, this.dateFrom, this.dateTo);
|
|
12532
|
+
|
|
12533
|
+
btn.classList.toggle('inRange', Boolean(inRange));
|
|
12534
|
+
btn.classList.toggle('rangeDepartDate', Boolean(isDepart));
|
|
12535
|
+
btn.classList.toggle('rangeReturnDate', Boolean(isReturn));
|
|
12536
|
+
}
|
|
12537
|
+
|
|
12445
12538
|
renderCellButton() {
|
|
12446
12539
|
const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
|
|
12447
12540
|
const blackout = this.isBlackout();
|
|
@@ -13592,7 +13685,7 @@ class AuroBibtemplate extends i$1 {
|
|
|
13592
13685
|
}
|
|
13593
13686
|
}
|
|
13594
13687
|
|
|
13595
|
-
var formkitVersion$2 = '
|
|
13688
|
+
var formkitVersion$2 = '202607012057';
|
|
13596
13689
|
|
|
13597
13690
|
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}
|
|
13598
13691
|
`,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}}
|
|
@@ -13937,6 +14030,11 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13937
14030
|
if (!opts.skipActiveUpdate) {
|
|
13938
14031
|
this.updateActiveCellForVisibleMonth();
|
|
13939
14032
|
}
|
|
14033
|
+
// clearRangePreview above strips classMap-managed range classes from
|
|
14034
|
+
// the DOM; classMap's private state still thinks they're applied, so
|
|
14035
|
+
// it won't re-add them on the post-nav re-render. Re-apply imperatively
|
|
14036
|
+
// after both months and their cell button caches have settled.
|
|
14037
|
+
this.scheduleCommittedRangeClassRefresh();
|
|
13940
14038
|
this.announceMonthChange();
|
|
13941
14039
|
}
|
|
13942
14040
|
|
|
@@ -13955,6 +14053,11 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13955
14053
|
if (!opts.skipActiveUpdate) {
|
|
13956
14054
|
this.updateActiveCellForVisibleMonth();
|
|
13957
14055
|
}
|
|
14056
|
+
// clearRangePreview above strips classMap-managed range classes from
|
|
14057
|
+
// the DOM; classMap's private state still thinks they're applied, so
|
|
14058
|
+
// it won't re-add them on the post-nav re-render. Re-apply imperatively
|
|
14059
|
+
// after both months and their cell button caches have settled.
|
|
14060
|
+
this.scheduleCommittedRangeClassRefresh();
|
|
13958
14061
|
this.announceMonthChange();
|
|
13959
14062
|
}
|
|
13960
14063
|
|
|
@@ -15033,9 +15136,14 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
15033
15136
|
* @private
|
|
15034
15137
|
* @param {Object} [options] - Optional settings.
|
|
15035
15138
|
* @param {boolean} [options.force=false] - When true, clears classes even
|
|
15036
|
-
* when both dateFrom and dateTo are set. Used by month nav handlers
|
|
15037
|
-
*
|
|
15038
|
-
*
|
|
15139
|
+
* when both dateFrom and dateTo are set. Used by month nav handlers to
|
|
15140
|
+
* strip the imperative-only `lastHoveredDate` before the re-render.
|
|
15141
|
+
* The other two classes (`inRange`, `rangeDepartDate`) are classMap-
|
|
15142
|
+
* managed and get stripped as a side effect here; because classMap
|
|
15143
|
+
* remembers what it last emitted and does not diff against the actual
|
|
15144
|
+
* DOM, the following month re-render will NOT re-add them on its own.
|
|
15145
|
+
* Nav handlers must schedule `refreshCommittedRangeClasses` (via
|
|
15146
|
+
* `scheduleCommittedRangeClassRefresh`) to resync them.
|
|
15039
15147
|
* @returns {void}
|
|
15040
15148
|
*/
|
|
15041
15149
|
clearRangePreview(options) {
|
|
@@ -15050,6 +15158,57 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
15050
15158
|
});
|
|
15051
15159
|
}
|
|
15052
15160
|
|
|
15161
|
+
/**
|
|
15162
|
+
* Re-applies the committed-range classes across every focusable cell
|
|
15163
|
+
* after a month navigation. classMap in the cell tracks its own
|
|
15164
|
+
* previous state: once `clearRangePreview({ force: true })` strips
|
|
15165
|
+
* `inRange`/`rangeDepartDate` imperatively before the re-render,
|
|
15166
|
+
* classMap's next diff sees the same class-value it emitted before and
|
|
15167
|
+
* produces no delta, leaving the DOM without the classes even though a
|
|
15168
|
+
* full range is committed. Re-applying imperatively resyncs the two
|
|
15169
|
+
* months' cells with `dateFrom`/`dateTo`.
|
|
15170
|
+
*
|
|
15171
|
+
* Iterates `getAllFocusableCells()` — out-of-range cells (blocked by
|
|
15172
|
+
* `min`/`max`) can never carry range classes anyway, so skipping them
|
|
15173
|
+
* is correct and cheaper than a whole-grid walk.
|
|
15174
|
+
*
|
|
15175
|
+
* The cell's `applyCommittedRangeClasses` reuses the same
|
|
15176
|
+
* `isInRange`/`isDepartDate`/`isReturnDate` helpers `renderCellButton`
|
|
15177
|
+
* uses, so we don't parse dateFrom/dateTo here — the helpers already
|
|
15178
|
+
* normalize their inputs (midnight-truncation, string→int) internally.
|
|
15179
|
+
* @private
|
|
15180
|
+
* @returns {void}
|
|
15181
|
+
*/
|
|
15182
|
+
refreshCommittedRangeClasses() {
|
|
15183
|
+
if (this.noRange || !this.dateFrom || !this.dateTo) {
|
|
15184
|
+
return;
|
|
15185
|
+
}
|
|
15186
|
+
|
|
15187
|
+
const allCells = this.getAllFocusableCells();
|
|
15188
|
+
allCells.forEach((cell) => {
|
|
15189
|
+
cell.applyCommittedRangeClasses();
|
|
15190
|
+
});
|
|
15191
|
+
}
|
|
15192
|
+
|
|
15193
|
+
/**
|
|
15194
|
+
* Schedules `refreshCommittedRangeClasses` to run after the month
|
|
15195
|
+
* re-render has flushed and the cells' button caches have refreshed.
|
|
15196
|
+
* Both `handlePrevMonth` and `handleNextMonth` need this exact call
|
|
15197
|
+
* shape; keeping it in one place prevents them from drifting apart.
|
|
15198
|
+
*
|
|
15199
|
+
* Bails synchronously when a full committed range isn't set — otherwise
|
|
15200
|
+
* every prev/next click in single-date mode (or before the user picks
|
|
15201
|
+
* both dates in range mode) pays for an unused double-rAF hop.
|
|
15202
|
+
* @private
|
|
15203
|
+
* @returns {void}
|
|
15204
|
+
*/
|
|
15205
|
+
scheduleCommittedRangeClassRefresh() {
|
|
15206
|
+
if (this.noRange || !this.dateFrom || !this.dateTo) {
|
|
15207
|
+
return;
|
|
15208
|
+
}
|
|
15209
|
+
this._afterMonthRender(() => this.refreshCommittedRangeClasses());
|
|
15210
|
+
}
|
|
15211
|
+
|
|
15053
15212
|
/**
|
|
15054
15213
|
* Overrides the base class handler to prevent setting `this.hoveredDate`
|
|
15055
15214
|
* as a reactive property. Instead, handles the range preview imperatively.
|
|
@@ -19368,7 +19527,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
|
|
|
19368
19527
|
}
|
|
19369
19528
|
};
|
|
19370
19529
|
|
|
19371
|
-
var formkitVersion$1 = '
|
|
19530
|
+
var formkitVersion$1 = '202607012057';
|
|
19372
19531
|
|
|
19373
19532
|
let AuroElement$2 = class AuroElement extends i$1 {
|
|
19374
19533
|
static get properties() {
|
|
@@ -20120,6 +20279,23 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
20120
20279
|
if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
|
|
20121
20280
|
this.trigger.focus();
|
|
20122
20281
|
}
|
|
20282
|
+
|
|
20283
|
+
|
|
20284
|
+
if (!this.isPopoverVisible) {
|
|
20285
|
+
// wait til the bib gets fully closed and rendered
|
|
20286
|
+
setTimeout(() => {
|
|
20287
|
+
// Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
|
|
20288
|
+
// Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
|
|
20289
|
+
if (this.isPopoverVisible ||
|
|
20290
|
+
// eslint-disable-next-line no-extra-parens
|
|
20291
|
+
(!this.bibContent?.matches(':focus-within') &&
|
|
20292
|
+
document.activeElement !== document.body)) {
|
|
20293
|
+
return;
|
|
20294
|
+
}
|
|
20295
|
+
// Restore focus to the trigger.
|
|
20296
|
+
this.trigger.focus();
|
|
20297
|
+
});
|
|
20298
|
+
}
|
|
20123
20299
|
}
|
|
20124
20300
|
|
|
20125
20301
|
firstUpdated() {
|
|
@@ -25052,8 +25228,21 @@ class AuroFormValidation {
|
|
|
25052
25228
|
return;
|
|
25053
25229
|
}
|
|
25054
25230
|
|
|
25055
|
-
// Validate that the date passed was the correct format and is a valid date
|
|
25231
|
+
// Validate that the date passed was the correct format and is a valid date.
|
|
25232
|
+
// For partial date formats, valueObject is never populated; validate them directly.
|
|
25056
25233
|
if (elem.value && !elem.valueObject) {
|
|
25234
|
+
const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
|
|
25235
|
+
|
|
25236
|
+
if (isPartialDateFormat) {
|
|
25237
|
+
if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
|
|
25238
|
+
elem.validity = 'patternMismatch';
|
|
25239
|
+
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
25240
|
+
}
|
|
25241
|
+
// Partial date format — validate directly and skip max/min checks since valueObject is undefined.
|
|
25242
|
+
return;
|
|
25243
|
+
}
|
|
25244
|
+
|
|
25245
|
+
// Full date format with no valueObject means the value is not a valid calendar date.
|
|
25057
25246
|
elem.validity = 'patternMismatch';
|
|
25058
25247
|
elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
|
|
25059
25248
|
return;
|
|
@@ -30983,10 +31172,11 @@ class AuroInputUtilities {
|
|
|
30983
31172
|
const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
|
|
30984
31173
|
|
|
30985
31174
|
if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
|
|
30986
|
-
const
|
|
31175
|
+
const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
|
|
31176
|
+
const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
|
|
30987
31177
|
return {
|
|
30988
31178
|
mask: IMask.MaskedRange,
|
|
30989
|
-
from:
|
|
31179
|
+
from: fromValue,
|
|
30990
31180
|
to: maxValue,
|
|
30991
31181
|
lazy: true,
|
|
30992
31182
|
placeholderChar: '',
|
|
@@ -30994,7 +31184,8 @@ class AuroInputUtilities {
|
|
|
30994
31184
|
return value.toString().padStart(dateFormat.length, '0');
|
|
30995
31185
|
},
|
|
30996
31186
|
parse(str) {
|
|
30997
|
-
|
|
31187
|
+
const num = parseInt(str, 10);
|
|
31188
|
+
return isNaN(num) ? null : num;
|
|
30998
31189
|
}
|
|
30999
31190
|
};
|
|
31000
31191
|
}
|
|
@@ -31058,6 +31249,49 @@ class AuroInputUtilities {
|
|
|
31058
31249
|
return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
|
|
31059
31250
|
}
|
|
31060
31251
|
|
|
31252
|
+
/**
|
|
31253
|
+
* Validates a value against a partial date format (one that lacks yy/mm/dd all three).
|
|
31254
|
+
* Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
|
|
31255
|
+
* a date-fns parse + round-trip to confirm both validity and exact formatting.
|
|
31256
|
+
* @param {string} value - The user-facing display value.
|
|
31257
|
+
* @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
|
|
31258
|
+
* @returns {boolean}
|
|
31259
|
+
*/
|
|
31260
|
+
isValidPartialDate(value, format$1) {
|
|
31261
|
+
if (!value || !format$1) {
|
|
31262
|
+
return false;
|
|
31263
|
+
}
|
|
31264
|
+
const normalizedFormat = format$1.toLowerCase();
|
|
31265
|
+
|
|
31266
|
+
if (normalizedFormat === 'dd') {
|
|
31267
|
+
const num = Number(value);
|
|
31268
|
+
return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
|
|
31269
|
+
}
|
|
31270
|
+
if (normalizedFormat === 'yy') {
|
|
31271
|
+
const num = Number(value);
|
|
31272
|
+
return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
|
|
31273
|
+
}
|
|
31274
|
+
if (normalizedFormat === 'yyyy') {
|
|
31275
|
+
const num = Number(value);
|
|
31276
|
+
return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
|
|
31277
|
+
}
|
|
31278
|
+
|
|
31279
|
+
const dateFnsMask = this.toDateFnsMask(normalizedFormat);
|
|
31280
|
+
// Use the 1st of the current month as the reference so that formats
|
|
31281
|
+
// omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
|
|
31282
|
+
const referenceDate = new Date();
|
|
31283
|
+
referenceDate.setDate(1);
|
|
31284
|
+
const parsed = parse(value, dateFnsMask, referenceDate);
|
|
31285
|
+
if (!isValid(parsed) || format(parsed, dateFnsMask) !== value) {
|
|
31286
|
+
return false;
|
|
31287
|
+
}
|
|
31288
|
+
if (normalizedFormat.includes('yyyy')) {
|
|
31289
|
+
const year = parsed.getFullYear();
|
|
31290
|
+
return year >= 1900 && year <= 2100;
|
|
31291
|
+
}
|
|
31292
|
+
return true;
|
|
31293
|
+
}
|
|
31294
|
+
|
|
31061
31295
|
/**
|
|
31062
31296
|
* Converts a display string to its model value.
|
|
31063
31297
|
* For full date formats, converts the display string to an ISO date string.
|
|
@@ -31677,6 +31911,13 @@ class BaseInput extends AuroElement$1 {
|
|
|
31677
31911
|
type: String
|
|
31678
31912
|
},
|
|
31679
31913
|
|
|
31914
|
+
/**
|
|
31915
|
+
* Custom help text message to display when validity = `patternMismatch`.
|
|
31916
|
+
*/
|
|
31917
|
+
setCustomValidityPatternMismatch: {
|
|
31918
|
+
type: String
|
|
31919
|
+
},
|
|
31920
|
+
|
|
31680
31921
|
/**
|
|
31681
31922
|
* Custom help text message to display when validity = `rangeOverflow`.
|
|
31682
31923
|
*/
|
|
@@ -31747,7 +31988,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31747
31988
|
|
|
31748
31989
|
/**
|
|
31749
31990
|
* Populates the `type` attribute on the input.
|
|
31750
|
-
* @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
|
|
31991
|
+
* @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
|
|
31751
31992
|
* @default 'text'
|
|
31752
31993
|
*/
|
|
31753
31994
|
type: {
|
|
@@ -31772,7 +32013,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
31772
32013
|
|
|
31773
32014
|
/**
|
|
31774
32015
|
* Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
|
|
31775
|
-
*
|
|
32016
|
+
* 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.
|
|
31776
32017
|
*/
|
|
31777
32018
|
value: {
|
|
31778
32019
|
type: String
|
|
@@ -32895,7 +33136,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
|
|
|
32895
33136
|
}
|
|
32896
33137
|
};
|
|
32897
33138
|
|
|
32898
|
-
var formkitVersion = '
|
|
33139
|
+
var formkitVersion = '202607012057';
|
|
32899
33140
|
|
|
32900
33141
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
32901
33142
|
// See LICENSE in the project root for license information.
|
|
@@ -282,6 +282,23 @@ export class AuroCalendarCell extends LitElement {
|
|
|
282
282
|
* @returns {void}
|
|
283
283
|
*/
|
|
284
284
|
clearRangePreviewClasses(): void;
|
|
285
|
+
/**
|
|
286
|
+
* Re-applies the committed-range classes (inRange / rangeDepartDate /
|
|
287
|
+
* rangeReturnDate) imperatively from the cell's current `day`,
|
|
288
|
+
* `dateFrom`, and `dateTo`. Used after month navigation flushes:
|
|
289
|
+
* classMap in `renderCellButton` tracks its own previous state, so a
|
|
290
|
+
* preceding imperative `classList.remove` (from
|
|
291
|
+
* `clearRangePreviewClasses`) leaves classMap thinking the class is
|
|
292
|
+
* still applied. On re-render with the same class-value, classMap emits
|
|
293
|
+
* no delta and the class stays missing in the DOM. Re-toggling
|
|
294
|
+
* imperatively resyncs the DOM with the committed range.
|
|
295
|
+
*
|
|
296
|
+
* Delegates to the same `isInRange` / `isDepartDate` / `isReturnDate`
|
|
297
|
+
* helpers `renderCellButton` uses, so the two code paths cannot drift
|
|
298
|
+
* (including whatever timestamp normalization those helpers apply).
|
|
299
|
+
* @returns {void}
|
|
300
|
+
*/
|
|
301
|
+
applyCommittedRangeClasses(): void;
|
|
285
302
|
renderCellButton(): import("lit-html").TemplateResult;
|
|
286
303
|
render(): import("lit-html").TemplateResult;
|
|
287
304
|
}
|
|
@@ -456,12 +456,52 @@ export class AuroCalendar extends RangeDatepicker {
|
|
|
456
456
|
* @private
|
|
457
457
|
* @param {Object} [options] - Optional settings.
|
|
458
458
|
* @param {boolean} [options.force=false] - When true, clears classes even
|
|
459
|
-
* when both dateFrom and dateTo are set. Used by month nav handlers
|
|
460
|
-
*
|
|
461
|
-
*
|
|
459
|
+
* when both dateFrom and dateTo are set. Used by month nav handlers to
|
|
460
|
+
* strip the imperative-only `lastHoveredDate` before the re-render.
|
|
461
|
+
* The other two classes (`inRange`, `rangeDepartDate`) are classMap-
|
|
462
|
+
* managed and get stripped as a side effect here; because classMap
|
|
463
|
+
* remembers what it last emitted and does not diff against the actual
|
|
464
|
+
* DOM, the following month re-render will NOT re-add them on its own.
|
|
465
|
+
* Nav handlers must schedule `refreshCommittedRangeClasses` (via
|
|
466
|
+
* `scheduleCommittedRangeClassRefresh`) to resync them.
|
|
462
467
|
* @returns {void}
|
|
463
468
|
*/
|
|
464
469
|
private clearRangePreview;
|
|
470
|
+
/**
|
|
471
|
+
* Re-applies the committed-range classes across every focusable cell
|
|
472
|
+
* after a month navigation. classMap in the cell tracks its own
|
|
473
|
+
* previous state: once `clearRangePreview({ force: true })` strips
|
|
474
|
+
* `inRange`/`rangeDepartDate` imperatively before the re-render,
|
|
475
|
+
* classMap's next diff sees the same class-value it emitted before and
|
|
476
|
+
* produces no delta, leaving the DOM without the classes even though a
|
|
477
|
+
* full range is committed. Re-applying imperatively resyncs the two
|
|
478
|
+
* months' cells with `dateFrom`/`dateTo`.
|
|
479
|
+
*
|
|
480
|
+
* Iterates `getAllFocusableCells()` — out-of-range cells (blocked by
|
|
481
|
+
* `min`/`max`) can never carry range classes anyway, so skipping them
|
|
482
|
+
* is correct and cheaper than a whole-grid walk.
|
|
483
|
+
*
|
|
484
|
+
* The cell's `applyCommittedRangeClasses` reuses the same
|
|
485
|
+
* `isInRange`/`isDepartDate`/`isReturnDate` helpers `renderCellButton`
|
|
486
|
+
* uses, so we don't parse dateFrom/dateTo here — the helpers already
|
|
487
|
+
* normalize their inputs (midnight-truncation, string→int) internally.
|
|
488
|
+
* @private
|
|
489
|
+
* @returns {void}
|
|
490
|
+
*/
|
|
491
|
+
private refreshCommittedRangeClasses;
|
|
492
|
+
/**
|
|
493
|
+
* Schedules `refreshCommittedRangeClasses` to run after the month
|
|
494
|
+
* re-render has flushed and the cells' button caches have refreshed.
|
|
495
|
+
* Both `handlePrevMonth` and `handleNextMonth` need this exact call
|
|
496
|
+
* shape; keeping it in one place prevents them from drifting apart.
|
|
497
|
+
*
|
|
498
|
+
* Bails synchronously when a full committed range isn't set — otherwise
|
|
499
|
+
* every prev/next click in single-date mode (or before the user picks
|
|
500
|
+
* both dates in range mode) pays for an unused double-rAF hop.
|
|
501
|
+
* @private
|
|
502
|
+
* @returns {void}
|
|
503
|
+
*/
|
|
504
|
+
private scheduleCommittedRangeClassRefresh;
|
|
465
505
|
/**
|
|
466
506
|
* Overrides the base class handler to prevent setting `this.hoveredDate`
|
|
467
507
|
* as a reactive property. Instead, handles the range preview imperatively.
|