@aurodesignsystem-dev/auro-formkit 0.0.0-pr1532.1 → 0.0.0-pr1534.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/checkbox/demo/customize.min.js +1 -1
- package/components/checkbox/demo/getting-started.min.js +1 -1
- package/components/checkbox/demo/index.min.js +1 -1
- package/components/checkbox/dist/index.js +1 -1
- package/components/checkbox/dist/registered.js +1 -1
- package/components/combobox/demo/customize.min.js +118 -50
- package/components/combobox/demo/getting-started.min.js +118 -50
- package/components/combobox/demo/index.min.js +118 -50
- package/components/combobox/dist/auro-combobox.d.ts +10 -0
- package/components/combobox/dist/index.js +118 -50
- package/components/combobox/dist/registered.js +118 -50
- package/components/counter/demo/customize.min.js +2 -2
- package/components/counter/demo/index.min.js +2 -2
- package/components/counter/dist/index.js +2 -2
- package/components/counter/dist/registered.js +2 -2
- package/components/datepicker/demo/accessibility.md +17 -8
- package/components/datepicker/demo/api.md +1 -1
- package/components/datepicker/demo/customize.min.js +229 -72
- package/components/datepicker/demo/index.min.js +229 -72
- 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/auro-calendar-cell.d.ts +11 -0
- package/components/datepicker/dist/auro-calendar.d.ts +26 -2
- package/components/datepicker/dist/auro-datepicker.d.ts +9 -1
- package/components/datepicker/dist/index.js +229 -72
- package/components/datepicker/dist/registered.js +229 -72
- package/components/dropdown/demo/customize.min.js +1 -1
- package/components/dropdown/demo/getting-started.min.js +1 -1
- package/components/dropdown/demo/index.min.js +1 -1
- package/components/dropdown/dist/index.js +1 -1
- package/components/dropdown/dist/registered.js +1 -1
- package/components/form/demo/customize.min.js +408 -172
- package/components/form/demo/getting-started.min.js +408 -172
- package/components/form/demo/index.min.js +408 -172
- package/components/form/demo/registerDemoDeps.min.js +408 -172
- package/components/input/demo/customize.min.js +56 -45
- package/components/input/demo/getting-started.min.js +56 -45
- package/components/input/demo/index.min.js +56 -45
- package/components/input/dist/base-input.d.ts +20 -4
- package/components/input/dist/index.js +56 -45
- package/components/input/dist/registered.js +56 -45
- package/components/radio/demo/customize.min.js +1 -1
- package/components/radio/demo/getting-started.min.js +1 -1
- package/components/radio/demo/index.min.js +1 -1
- package/components/radio/dist/index.js +1 -1
- package/components/radio/dist/registered.js +1 -1
- package/components/select/demo/customize.min.js +2 -2
- package/components/select/demo/getting-started.min.js +2 -2
- package/components/select/demo/index.min.js +2 -2
- package/components/select/dist/index.js +2 -2
- package/components/select/dist/registered.js +2 -2
- package/custom-elements.json +4349 -4251
- package/package.json +1 -1
|
@@ -11638,23 +11638,28 @@ var popoverVersion = '6.0.1';
|
|
|
11638
11638
|
* @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
|
|
11639
11639
|
*/
|
|
11640
11640
|
function parseIsoToTimestamp(isoStr) {
|
|
11641
|
+
// Strict YYYY-MM-DD matcher with named groups. Rejects trailing garbage
|
|
11642
|
+
// ("2024x-01-01"), short segments ("2024-1-1"), and any non-digit
|
|
11643
|
+
// characters. `parseInt` alone accepted both because it stops at the
|
|
11644
|
+
// first non-digit and doesn't require a minimum length.
|
|
11645
|
+
const ISO_DATE_RE = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
|
|
11646
|
+
const MAX_MONTH = 12;
|
|
11647
|
+
const MAX_DAY = 31;
|
|
11648
|
+
|
|
11641
11649
|
if (typeof isoStr !== 'string') {
|
|
11642
11650
|
return null;
|
|
11643
11651
|
}
|
|
11644
|
-
const
|
|
11645
|
-
if (
|
|
11646
|
-
return null;
|
|
11647
|
-
}
|
|
11648
|
-
const year = parseInt(parts[0], 10);
|
|
11649
|
-
const month = parseInt(parts[1], 10);
|
|
11650
|
-
const day = parseInt(parts[2], 10);
|
|
11651
|
-
if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
|
|
11652
|
+
const match = ISO_DATE_RE.exec(isoStr);
|
|
11653
|
+
if (!match) {
|
|
11652
11654
|
return null;
|
|
11653
11655
|
}
|
|
11656
|
+
const year = Number(match.groups.year);
|
|
11657
|
+
const month = Number(match.groups.month);
|
|
11658
|
+
const day = Number(match.groups.day);
|
|
11654
11659
|
// Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
|
|
11655
11660
|
// silently normalizes those to a different calendar day, which would
|
|
11656
11661
|
// disable the wrong date if we let the result through.
|
|
11657
|
-
if (month < 1 || month >
|
|
11662
|
+
if (month < 1 || month > MAX_MONTH || day < 1 || day > MAX_DAY) {
|
|
11658
11663
|
return null;
|
|
11659
11664
|
}
|
|
11660
11665
|
const date = new Date(year, month - 1, day);
|
|
@@ -12232,13 +12237,36 @@ class AuroCalendarCell extends LitElement {
|
|
|
12232
12237
|
}
|
|
12233
12238
|
|
|
12234
12239
|
firstUpdated() {
|
|
12240
|
+
this._initFromAncestors();
|
|
12241
|
+
}
|
|
12242
|
+
|
|
12243
|
+
/**
|
|
12244
|
+
* Wires the cell to its ancestor calendar-month and calendar (and, via
|
|
12245
|
+
* the calendar, to the datepicker). Extracted from firstUpdated() so the
|
|
12246
|
+
* retry loop can re-attempt without recursively invoking a Lit lifecycle
|
|
12247
|
+
* method (which is outside the framework's contract).
|
|
12248
|
+
* @private
|
|
12249
|
+
* @returns {void}
|
|
12250
|
+
*/
|
|
12251
|
+
_initFromAncestors() {
|
|
12235
12252
|
const calendarMonth = this.runtimeUtils.closestElement('auro-formkit-calendar-month', this);
|
|
12236
12253
|
const calendar = this.runtimeUtils.closestElement('auro-formkit-calendar', calendarMonth);
|
|
12237
12254
|
|
|
12238
12255
|
if (!calendar) {
|
|
12239
|
-
|
|
12256
|
+
// Retry on the next event-loop turn to give the ancestor chain a chance
|
|
12257
|
+
// to attach — but cap attempts so a permanently detached cell doesn't
|
|
12258
|
+
// spin forever. 10 turns is far more than any observed race needs.
|
|
12259
|
+
this._firstUpdatedRetries = (this._firstUpdatedRetries || 0) + 1;
|
|
12260
|
+
if (this._firstUpdatedRetries > 10) {
|
|
12261
|
+
return;
|
|
12262
|
+
}
|
|
12263
|
+
this._firstUpdatedRetryTimer = setTimeout(() => {
|
|
12264
|
+
this._firstUpdatedRetryTimer = null;
|
|
12265
|
+
this._initFromAncestors();
|
|
12266
|
+
}, 0);
|
|
12240
12267
|
return;
|
|
12241
12268
|
}
|
|
12269
|
+
this._firstUpdatedRetries = 0;
|
|
12242
12270
|
this.calendar = calendar;
|
|
12243
12271
|
this.datepicker = calendar.datepicker;
|
|
12244
12272
|
this._slotContentHandler = () => {
|
|
@@ -12266,6 +12294,10 @@ class AuroCalendarCell extends LitElement {
|
|
|
12266
12294
|
if (this.datepicker && this._slotContentHandler) {
|
|
12267
12295
|
this.datepicker.removeEventListener('auroDatePicker-newSlotContent', this._slotContentHandler);
|
|
12268
12296
|
}
|
|
12297
|
+
if (this._firstUpdatedRetryTimer) {
|
|
12298
|
+
clearTimeout(this._firstUpdatedRetryTimer);
|
|
12299
|
+
this._firstUpdatedRetryTimer = null;
|
|
12300
|
+
}
|
|
12269
12301
|
}
|
|
12270
12302
|
|
|
12271
12303
|
/**
|
|
@@ -13637,7 +13669,7 @@ class AuroBibtemplate extends LitElement {
|
|
|
13637
13669
|
}
|
|
13638
13670
|
}
|
|
13639
13671
|
|
|
13640
|
-
var formkitVersion$2 = '
|
|
13672
|
+
var formkitVersion$2 = '202607061916';
|
|
13641
13673
|
|
|
13642
13674
|
let l$1 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=literal`${unsafeStatic(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1=css`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
|
|
13643
13675
|
`,u$4=css`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
|
|
@@ -13776,7 +13808,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13776
13808
|
* Support will be removed in a future major release.
|
|
13777
13809
|
* @private
|
|
13778
13810
|
*/
|
|
13779
|
-
|
|
13811
|
+
// Initialize the backing field directly so the constructor's default
|
|
13812
|
+
// empty array doesn't trigger the deprecation warning. Assignments from
|
|
13813
|
+
// consumers still route through the setter below.
|
|
13814
|
+
this._disabledDays = [];
|
|
13780
13815
|
|
|
13781
13816
|
/**
|
|
13782
13817
|
* @private
|
|
@@ -13809,6 +13844,44 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
13809
13844
|
this._calendarInstanceId = Date.now().toString(36);
|
|
13810
13845
|
}
|
|
13811
13846
|
|
|
13847
|
+
/**
|
|
13848
|
+
* @deprecated See constructor JSDoc — migrate to
|
|
13849
|
+
* `auro-datepicker.blackoutDates`. The getter/setter pair exists so the
|
|
13850
|
+
* one-time deprecation warning fires as soon as a consumer assigns a
|
|
13851
|
+
* non-empty array (empty assignments are ignored — an empty array is
|
|
13852
|
+
* indistinguishable from the constructor default and would produce a
|
|
13853
|
+
* spurious warning), rather than only when `_getBlackoutSet()` happens
|
|
13854
|
+
* to rebuild.
|
|
13855
|
+
* @returns {Array} The current legacy `disabledDays` array.
|
|
13856
|
+
*/
|
|
13857
|
+
get disabledDays() {
|
|
13858
|
+
return this._disabledDays;
|
|
13859
|
+
}
|
|
13860
|
+
|
|
13861
|
+
/**
|
|
13862
|
+
* @param {Array} value - The legacy `disabledDays` array to set.
|
|
13863
|
+
*/
|
|
13864
|
+
set disabledDays(value) {
|
|
13865
|
+
const oldValue = this._disabledDays;
|
|
13866
|
+
// Coerce non-arrays to `[]`. Consumers occasionally pass `null`
|
|
13867
|
+
// (Lit's Array attribute converter returns null for a missing/empty
|
|
13868
|
+
// attribute) or misuse the API; downstream code in
|
|
13869
|
+
// `auro-calendar-cell.isEnabled` calls `.findIndex()` on this value
|
|
13870
|
+
// without an Array.isArray guard, so a truthy non-array would throw
|
|
13871
|
+
// at render.
|
|
13872
|
+
const coerced = Array.isArray(value) ? value : [];
|
|
13873
|
+
if (coerced.length > 0) {
|
|
13874
|
+
this._warnDisabledDaysDeprecated();
|
|
13875
|
+
}
|
|
13876
|
+
this._disabledDays = coerced;
|
|
13877
|
+
// `disabledDays` is a Lit `@property({ type: Array })` on the
|
|
13878
|
+
// RangeDatepicker base class; Lit's generated setter (which we've
|
|
13879
|
+
// overridden here to insert the warning) is what normally invalidates
|
|
13880
|
+
// the reactive cycle. Re-invoke requestUpdate manually so consumer
|
|
13881
|
+
// assignments still re-render the calendar.
|
|
13882
|
+
this.requestUpdate('disabledDays', oldValue);
|
|
13883
|
+
}
|
|
13884
|
+
|
|
13812
13885
|
static get styles() {
|
|
13813
13886
|
return [
|
|
13814
13887
|
styleCss$7,
|
|
@@ -14354,8 +14427,19 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14354
14427
|
/**
|
|
14355
14428
|
* Returns a memoized Set of blackout timestamps (seconds) drawn from both
|
|
14356
14429
|
* the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
|
|
14357
|
-
*
|
|
14358
|
-
*
|
|
14430
|
+
*
|
|
14431
|
+
* The cache invalidates on **reference identity** — only when the
|
|
14432
|
+
* consumer reassigns the array (`el.blackoutDates = [...]`), matching
|
|
14433
|
+
* Lit's own reactivity semantics for array properties. In-place mutations
|
|
14434
|
+
* on the existing array (`push`, `splice`, index assignment) will NOT
|
|
14435
|
+
* invalidate the cache and the new entries will be silently ignored.
|
|
14436
|
+
* Consumers must reassign to update — see the JSDoc on
|
|
14437
|
+
* `auro-datepicker.blackoutDates` for the recommended pattern.
|
|
14438
|
+
*
|
|
14439
|
+
* A shallow-equality tier was considered but rejected: it would run
|
|
14440
|
+
* O(N) work on every cell render (this method is called per-cell via
|
|
14441
|
+
* `isBlackout()`) and still wouldn't catch same-length value swaps,
|
|
14442
|
+
* offering a false sense of safety.
|
|
14359
14443
|
* @private
|
|
14360
14444
|
* @returns {Set<Number>}
|
|
14361
14445
|
*/
|
|
@@ -14536,7 +14620,24 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14536
14620
|
// rendered month(s) first so a single-month calendar does not pick a date
|
|
14537
14621
|
// that has no DOM cell. Determine the visible range based on centralDate and
|
|
14538
14622
|
// the number of rendered months.
|
|
14539
|
-
|
|
14623
|
+
//
|
|
14624
|
+
// numCalendars is assigned inside renderAllCalendars(), which runs during
|
|
14625
|
+
// render() — so by the time the visible-change handler in updated()
|
|
14626
|
+
// calls computeActiveDate() in the same cycle, numCalendars is normally
|
|
14627
|
+
// set. Guard against the pre-first-render path anyway (e.g. any future
|
|
14628
|
+
// caller that reaches computeActiveDate before render() has run):
|
|
14629
|
+
// Math.max(undefined, 1) is NaN, which would silently skip the
|
|
14630
|
+
// visible-month scan below. Fall back to maximumRenderableMonths'
|
|
14631
|
+
// desktop default (1 for non-range, 2 for range) so the scan window is
|
|
14632
|
+
// correctly sized whenever numCalendars is not yet populated.
|
|
14633
|
+
let renderedMonths = null;
|
|
14634
|
+
|
|
14635
|
+
if (Number.isFinite(this.numCalendars) && this.numCalendars > 0) {
|
|
14636
|
+
renderedMonths = this.numCalendars;
|
|
14637
|
+
} else {
|
|
14638
|
+
renderedMonths = this.noRange ? 1 : 2;
|
|
14639
|
+
}
|
|
14640
|
+
|
|
14540
14641
|
const visibleAnchor = this.centralDateObject ?? new Date(now * 1000);
|
|
14541
14642
|
const visMonthStart = new Date(visibleAnchor.getFullYear(), visibleAnchor.getMonth(), 1);
|
|
14542
14643
|
visMonthStart.setHours(0, 0, 0, 0);
|
|
@@ -14806,6 +14907,8 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
14806
14907
|
let targetIndex = -1;
|
|
14807
14908
|
if (direction === 'next') {
|
|
14808
14909
|
targetIndex = currentIndex + 1;
|
|
14910
|
+
} else if (direction === 'prev') {
|
|
14911
|
+
targetIndex = currentIndex - 1;
|
|
14809
14912
|
}
|
|
14810
14913
|
|
|
14811
14914
|
if (targetIndex >= 0 && targetIndex < allCells.length) {
|
|
@@ -15410,6 +15513,10 @@ class AuroCalendar extends RangeDatepicker {
|
|
|
15410
15513
|
* originally tried aria-live="polite" here, but VoiceOver treats
|
|
15411
15514
|
* polite as "wait until idle" — which never happens during active
|
|
15412
15515
|
* keyboard navigation — so the announcements were silently dropped.
|
|
15516
|
+
*
|
|
15517
|
+
* This is a documented deviation from WCAG 2.1 SC 4.1.3, which
|
|
15518
|
+
* prefers `polite` for status messages. See the "Documented
|
|
15519
|
+
* Deviation" section in components/datepicker/docs/pages/accessibility.md.
|
|
15413
15520
|
* @private
|
|
15414
15521
|
* @param {String} dateStr - The localized date string to announce.
|
|
15415
15522
|
* @returns {void}
|
|
@@ -19455,7 +19562,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
|
|
|
19455
19562
|
}
|
|
19456
19563
|
};
|
|
19457
19564
|
|
|
19458
|
-
var formkitVersion$1 = '
|
|
19565
|
+
var formkitVersion$1 = '202607061916';
|
|
19459
19566
|
|
|
19460
19567
|
let AuroElement$2 = class AuroElement extends LitElement {
|
|
19461
19568
|
static get properties() {
|
|
@@ -31463,14 +31570,16 @@ class BaseInput extends AuroElement$1 {
|
|
|
31463
31570
|
this.label = 'Input label is undefined';
|
|
31464
31571
|
this.layout = 'classic';
|
|
31465
31572
|
this.locale = 'en-US';
|
|
31573
|
+
this._format = undefined;
|
|
31574
|
+
|
|
31575
|
+
/** @private */
|
|
31576
|
+
this._userSetFormat = false;
|
|
31466
31577
|
this.max = undefined;
|
|
31467
31578
|
this.maxLength = undefined;
|
|
31468
31579
|
this.min = undefined;
|
|
31469
31580
|
this.minLength = undefined;
|
|
31470
31581
|
this.noValidate = false;
|
|
31471
31582
|
this.onDark = false;
|
|
31472
|
-
// Raw values returned from the input mask before model normalization.
|
|
31473
|
-
this._rawMaskValue = undefined;
|
|
31474
31583
|
this.required = false;
|
|
31475
31584
|
this.setCustomValidityForType = undefined;
|
|
31476
31585
|
// Credit Card is intentionally excluded — its mask manages the cursor
|
|
@@ -31628,7 +31737,8 @@ class BaseInput extends AuroElement$1 {
|
|
|
31628
31737
|
*/
|
|
31629
31738
|
format: {
|
|
31630
31739
|
type: String,
|
|
31631
|
-
reflect: true
|
|
31740
|
+
reflect: true,
|
|
31741
|
+
noAccessor: true
|
|
31632
31742
|
},
|
|
31633
31743
|
|
|
31634
31744
|
/**
|
|
@@ -31966,6 +32076,34 @@ class BaseInput extends AuroElement$1 {
|
|
|
31966
32076
|
return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
|
|
31967
32077
|
}
|
|
31968
32078
|
|
|
32079
|
+
get format() {
|
|
32080
|
+
return this._format;
|
|
32081
|
+
}
|
|
32082
|
+
|
|
32083
|
+
/**
|
|
32084
|
+
* Overrides LitElement's generated accessor so we can track whether the
|
|
32085
|
+
* consumer explicitly set `format`. Locale-derived updates use
|
|
32086
|
+
* `_setFormatFromLocale` instead, which skips this flag.
|
|
32087
|
+
*/
|
|
32088
|
+
set format(value) {
|
|
32089
|
+
const oldValue = this._format;
|
|
32090
|
+
this._format = value ? value.toLowerCase() : value;
|
|
32091
|
+
this._userSetFormat = Boolean(value);
|
|
32092
|
+
this.requestUpdate('format', oldValue);
|
|
32093
|
+
}
|
|
32094
|
+
|
|
32095
|
+
/**
|
|
32096
|
+
* Sets format without marking it as user-set. Used by locale auto-derive
|
|
32097
|
+
* so that a subsequent locale change can still update the format.
|
|
32098
|
+
* @private
|
|
32099
|
+
* @param {string} value
|
|
32100
|
+
*/
|
|
32101
|
+
_setFormatFromLocale(value) {
|
|
32102
|
+
const oldValue = this._format;
|
|
32103
|
+
this._format = value ? value.toLowerCase() : value;
|
|
32104
|
+
this.requestUpdate('format', oldValue);
|
|
32105
|
+
}
|
|
32106
|
+
|
|
31969
32107
|
connectedCallback() {
|
|
31970
32108
|
super.connectedCallback();
|
|
31971
32109
|
|
|
@@ -32013,15 +32151,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
32013
32151
|
|
|
32014
32152
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
32015
32153
|
|
|
32016
|
-
// Normalize the format token to lowercase so case-mixed values supplied
|
|
32017
|
-
// via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
|
|
32018
|
-
// lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
|
|
32019
|
-
// format silently misses the map and leaves `setCustomValidityForType`
|
|
32020
|
-
// unset.
|
|
32021
|
-
if (this.format) {
|
|
32022
|
-
this.format = this.format.toLowerCase();
|
|
32023
|
-
}
|
|
32024
|
-
|
|
32025
32154
|
// use validity message override if declared when initializing the component
|
|
32026
32155
|
if (this.hasAttribute('setCustomValidity')) {
|
|
32027
32156
|
this.ValidityMessageOverride = this.setCustomValidity;
|
|
@@ -32128,12 +32257,10 @@ class BaseInput extends AuroElement$1 {
|
|
|
32128
32257
|
updated(changedProperties) {
|
|
32129
32258
|
super.updated(changedProperties);
|
|
32130
32259
|
|
|
32131
|
-
// When locale changes
|
|
32132
|
-
// Only runs if the current format is still the previous locale's default (not user-overridden).
|
|
32260
|
+
// When locale changes, auto-derive format unless the consumer explicitly set one.
|
|
32133
32261
|
if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
|
|
32134
|
-
|
|
32135
|
-
|
|
32136
|
-
this.format = getDateFormatFromLocale(this.locale);
|
|
32262
|
+
if (!this._userSetFormat) {
|
|
32263
|
+
this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
|
|
32137
32264
|
}
|
|
32138
32265
|
}
|
|
32139
32266
|
|
|
@@ -32304,9 +32431,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
32304
32431
|
this.maskInstance.on('accept', () => {
|
|
32305
32432
|
if (this._configuringMask) return;
|
|
32306
32433
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
32307
|
-
if (this.type === "date") {
|
|
32308
|
-
this._rawMaskValue = this.maskInstance.value;
|
|
32309
|
-
}
|
|
32310
32434
|
});
|
|
32311
32435
|
|
|
32312
32436
|
// Mask fires 'complete' on the restore step below for any value that
|
|
@@ -32314,9 +32438,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
32314
32438
|
this.maskInstance.on('complete', () => {
|
|
32315
32439
|
if (this._configuringMask) return;
|
|
32316
32440
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
32317
|
-
if (this.type === "date") {
|
|
32318
|
-
this._rawMaskValue = this.maskInstance.value;
|
|
32319
|
-
}
|
|
32320
32441
|
});
|
|
32321
32442
|
|
|
32322
32443
|
// Write existingValue through the mask (not the input directly) so
|
|
@@ -32337,14 +32458,17 @@ class BaseInput extends AuroElement$1 {
|
|
|
32337
32458
|
* @returns {void}
|
|
32338
32459
|
*/
|
|
32339
32460
|
notifyValueChanged() {
|
|
32340
|
-
|
|
32341
|
-
|
|
32342
|
-
|
|
32461
|
+
// This echoes Lit's reactive value update (and handleClickClear's
|
|
32462
|
+
// programmatic clear) — it is NOT a fresh user-input event. Mark it
|
|
32463
|
+
// `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
|
|
32464
|
+
// it from genuine user typing and skip clobbering their own
|
|
32465
|
+
// programmatic state during init-time renders.
|
|
32466
|
+
const inputEvent = new Event('input', {
|
|
32343
32467
|
bubbles: true,
|
|
32344
32468
|
composed: true,
|
|
32345
32469
|
});
|
|
32470
|
+
inputEvent.isProgrammatic = true;
|
|
32346
32471
|
|
|
32347
|
-
// Dispatched event to alert outside shadow DOM context of event firing.
|
|
32348
32472
|
this.dispatchEvent(inputEvent);
|
|
32349
32473
|
}
|
|
32350
32474
|
|
|
@@ -32553,8 +32677,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
32553
32677
|
|
|
32554
32678
|
// Set default date format if type=date and no format is defined
|
|
32555
32679
|
if (this.type === "date" && !this.format) {
|
|
32556
|
-
|
|
32557
|
-
this.format = this.util.getDateMaskFromLocale().toLowerCase();
|
|
32680
|
+
this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
|
|
32558
32681
|
this.util.updateFormat(this.format);
|
|
32559
32682
|
}
|
|
32560
32683
|
}
|
|
@@ -32583,7 +32706,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
32583
32706
|
const creditCard = this.matchInputValueToCreditCard();
|
|
32584
32707
|
const previousFormat = this.format;
|
|
32585
32708
|
|
|
32586
|
-
this.
|
|
32709
|
+
this._setFormatFromLocale(creditCard.maskFormat);
|
|
32587
32710
|
|
|
32588
32711
|
this.maxLength = creditCard.formatLength;
|
|
32589
32712
|
this.minLength = creditCard.formatMinLength;
|
|
@@ -33057,7 +33180,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
33057
33180
|
}
|
|
33058
33181
|
};
|
|
33059
33182
|
|
|
33060
|
-
var formkitVersion = '
|
|
33183
|
+
var formkitVersion = '202607061916';
|
|
33061
33184
|
|
|
33062
33185
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
33063
33186
|
// See LICENSE in the project root for license information.
|
|
@@ -33343,20 +33466,15 @@ class AuroInput extends BaseInput {
|
|
|
33343
33466
|
* @returns {void}
|
|
33344
33467
|
*/
|
|
33345
33468
|
checkDisplayValueSlotChange() {
|
|
33346
|
-
|
|
33469
|
+
// flatten:true resolves through auro-combobox's forwarding slot
|
|
33470
|
+
// (<slot name="displayValue" slot="displayValue">) so a clone appended
|
|
33471
|
+
// directly to auro-input's light DOM alongside the forwarder still
|
|
33472
|
+
// counts as content. The prior nodes[0].tagName === 'SLOT' recursion
|
|
33473
|
+
// discarded any siblings past the forwarder.
|
|
33474
|
+
const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
|
|
33475
|
+
const nodes = slot.assignedNodes({ flatten: true });
|
|
33347
33476
|
|
|
33348
|
-
|
|
33349
|
-
if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
|
|
33350
|
-
nodes = nodes[0].assignedNodes();
|
|
33351
|
-
}
|
|
33352
|
-
|
|
33353
|
-
let hasContent = false;
|
|
33354
|
-
|
|
33355
|
-
if (nodes.length > 0) {
|
|
33356
|
-
hasContent = true;
|
|
33357
|
-
}
|
|
33358
|
-
|
|
33359
|
-
this.hasDisplayValueContent = hasContent;
|
|
33477
|
+
this.hasDisplayValueContent = nodes.length > 0;
|
|
33360
33478
|
}
|
|
33361
33479
|
|
|
33362
33480
|
firstUpdated() {
|
|
@@ -34434,6 +34552,15 @@ const datepickerKeyboardStrategy = {
|
|
|
34434
34552
|
evt.stopPropagation();
|
|
34435
34553
|
evt.preventDefault();
|
|
34436
34554
|
|
|
34555
|
+
// Signal to the visibility-change handler in auro-datepicker.js that
|
|
34556
|
+
// focus should be restored to the trigger regardless of hasFocus.
|
|
34557
|
+
// hidePopover() (desktop non-modal path) does not auto-restore focus,
|
|
34558
|
+
// and hiding the grid's popover ancestor drops focus to <body>. That
|
|
34559
|
+
// synchronously fires focusout on the datepicker host — clearing
|
|
34560
|
+
// hasFocus — before updated() runs, which would otherwise skip the
|
|
34561
|
+
// input refocus. Native <dialog>.close() (modal path) restores focus
|
|
34562
|
+
// itself, but the flag is harmless there.
|
|
34563
|
+
component._restoreFocusOnClose = true;
|
|
34437
34564
|
component.hideBib();
|
|
34438
34565
|
},
|
|
34439
34566
|
|
|
@@ -34707,6 +34834,14 @@ class AuroDatePicker extends AuroElement {
|
|
|
34707
34834
|
|
|
34708
34835
|
/**
|
|
34709
34836
|
* Array of dates that cannot be selected. Dates should be in ISO format (YYYY-MM-DD).
|
|
34837
|
+
*
|
|
34838
|
+
* **Immutable update required.** The datepicker treats this array as
|
|
34839
|
+
* immutable and memoizes a lookup Set keyed on the array's reference
|
|
34840
|
+
* identity — matching Lit's own reactivity semantics for array
|
|
34841
|
+
* properties. In-place mutations (`blackoutDates.push(...)`,
|
|
34842
|
+
* `blackoutDates[i] = ...`, `blackoutDates.splice(...)`) will not
|
|
34843
|
+
* invalidate the cache and the new entries will be silently ignored.
|
|
34844
|
+
* To update, reassign the property: `el.blackoutDates = [...el.blackoutDates, '2024-12-25']`.
|
|
34710
34845
|
*/
|
|
34711
34846
|
blackoutDates: {
|
|
34712
34847
|
type: Array,
|
|
@@ -35592,12 +35727,13 @@ class AuroDatePicker extends AuroElement {
|
|
|
35592
35727
|
this.calendar.activeCellDate = null;
|
|
35593
35728
|
|
|
35594
35729
|
// Show the month containing the selected date (or today) instead of
|
|
35595
|
-
// whichever month the user last navigated to.
|
|
35730
|
+
// whichever month the user last navigated to. Route through
|
|
35731
|
+
// updateCentralDate so centralDate stays first-of-month.
|
|
35596
35732
|
// Respect consumer-provided centralDate/calendarStartDate if no value is set.
|
|
35597
35733
|
if (this.valueObject) {
|
|
35598
|
-
this.
|
|
35734
|
+
this.calendarRenderUtil.updateCentralDate(this, this.value);
|
|
35599
35735
|
} else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
|
|
35600
|
-
this.
|
|
35736
|
+
this.calendarRenderUtil.updateCentralDate(this, new Date());
|
|
35601
35737
|
}
|
|
35602
35738
|
}
|
|
35603
35739
|
|
|
@@ -35655,8 +35791,15 @@ class AuroDatePicker extends AuroElement {
|
|
|
35655
35791
|
// Always clear the inert flag. Only restore focus to the input when the datepicker
|
|
35656
35792
|
// still has focus (e.g. Escape, date selected) — not when the user tabbed away,
|
|
35657
35793
|
// which would pull them back and require extra Tab presses to escape.
|
|
35794
|
+
//
|
|
35795
|
+
// `_restoreFocusOnClose` is set by the Escape handler in
|
|
35796
|
+
// datepickerKeyboardStrategy.js to force restore even when hasFocus
|
|
35797
|
+
// has already been cleared — hidePopover() (desktop non-modal path)
|
|
35798
|
+
// can drop focus to <body> before this update fires.
|
|
35658
35799
|
this.dropdown.trigger.inert = false;
|
|
35659
|
-
|
|
35800
|
+
const shouldRestoreFocus = this.hasFocus || this._restoreFocusOnClose;
|
|
35801
|
+
this._restoreFocusOnClose = false;
|
|
35802
|
+
if (shouldRestoreFocus) {
|
|
35660
35803
|
requestAnimationFrame(() => {
|
|
35661
35804
|
if (!this.dropdown.isPopoverVisible) {
|
|
35662
35805
|
this.inputList[0].focus();
|
|
@@ -36102,6 +36245,18 @@ class AuroDatePicker extends AuroElement {
|
|
|
36102
36245
|
this.calendar.requestUpdate();
|
|
36103
36246
|
this.dispatchEvent(new CustomEvent('auroDatePicker-newSlotContent'));
|
|
36104
36247
|
}
|
|
36248
|
+
|
|
36249
|
+
// Range invariant: if a value change (from click or programmatic) has
|
|
36250
|
+
// moved start past end, clear valueEnd here so both properties land in
|
|
36251
|
+
// the SAME reactive cycle. Doing it in updated() would schedule a
|
|
36252
|
+
// second cycle after cellClickActive/wasCellClick has already been
|
|
36253
|
+
// consumed by the value branch, leaving the valueEnd branch to run
|
|
36254
|
+
// with a stale handshake and racing with any intervening programmatic
|
|
36255
|
+
// value assignments.
|
|
36256
|
+
if ((changedProperties.has('value') || changedProperties.has('valueEnd')) &&
|
|
36257
|
+
this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
|
|
36258
|
+
this.valueEnd = undefined;
|
|
36259
|
+
}
|
|
36105
36260
|
}
|
|
36106
36261
|
|
|
36107
36262
|
updated(changedProperties) {
|
|
@@ -36169,8 +36324,12 @@ class AuroDatePicker extends AuroElement {
|
|
|
36169
36324
|
|
|
36170
36325
|
if (this.value && this.value.length === this.inputList[0].lengthForType && !(this.wasCellClick && this.range)) {
|
|
36171
36326
|
// Skip centralDate update when user clicked a cell in range mode
|
|
36172
|
-
// to prevent the displayed months from shifting
|
|
36173
|
-
|
|
36327
|
+
// to prevent the displayed months from shifting. Route through
|
|
36328
|
+
// updateCentralDate so centralDate stays first-of-month — direct
|
|
36329
|
+
// assignment of the raw value briefly holds a mid-month string
|
|
36330
|
+
// and violates the invariant that observers (e.g. calendar sync)
|
|
36331
|
+
// rely on.
|
|
36332
|
+
this.calendarRenderUtil.updateCentralDate(this, this.value);
|
|
36174
36333
|
}
|
|
36175
36334
|
|
|
36176
36335
|
this.setHasValue();
|
|
@@ -36228,8 +36387,10 @@ class AuroDatePicker extends AuroElement {
|
|
|
36228
36387
|
|
|
36229
36388
|
if (this.valueEnd && this.valueEnd.length === this.inputList[1].lengthForType && !this.wasCellClick) {
|
|
36230
36389
|
// Skip centralDate update when user clicked a cell in range mode
|
|
36231
|
-
// to prevent the displayed months from shifting
|
|
36232
|
-
|
|
36390
|
+
// to prevent the displayed months from shifting. Route through
|
|
36391
|
+
// updateCentralDate to preserve the first-of-month invariant
|
|
36392
|
+
// (see matching comment in the value branch above).
|
|
36393
|
+
this.calendarRenderUtil.updateCentralDate(this, this.valueEnd);
|
|
36233
36394
|
}
|
|
36234
36395
|
|
|
36235
36396
|
this.validate();
|
|
@@ -36253,10 +36414,6 @@ class AuroDatePicker extends AuroElement {
|
|
|
36253
36414
|
this.validation.validate(lastInput, true);
|
|
36254
36415
|
}
|
|
36255
36416
|
|
|
36256
|
-
if (this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
|
|
36257
|
-
this.valueEnd = undefined;
|
|
36258
|
-
}
|
|
36259
|
-
|
|
36260
36417
|
// This resets the datepicker when the minDate is set to a new value that is
|
|
36261
36418
|
// a later date than the current value date
|
|
36262
36419
|
if (changedProperties.has('minDate') && this.minDate) {
|