@aurodesignsystem-dev/auro-formkit 0.0.0-pr1508.0 → 0.0.0-pr1509.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +279 -142
  7. package/components/combobox/demo/getting-started.min.js +279 -142
  8. package/components/combobox/demo/index.min.js +279 -142
  9. package/components/combobox/dist/auro-combobox.d.ts +0 -9
  10. package/components/combobox/dist/index.js +279 -142
  11. package/components/combobox/dist/registered.js +279 -142
  12. package/components/counter/demo/customize.min.js +2 -2
  13. package/components/counter/demo/index.min.js +2 -2
  14. package/components/counter/dist/index.js +2 -2
  15. package/components/counter/dist/registered.js +2 -2
  16. package/components/datepicker/demo/customize.min.js +153 -45
  17. package/components/datepicker/demo/index.min.js +153 -45
  18. package/components/datepicker/dist/index.js +153 -45
  19. package/components/datepicker/dist/registered.js +153 -45
  20. package/components/dropdown/demo/customize.min.js +1 -1
  21. package/components/dropdown/demo/getting-started.min.js +1 -1
  22. package/components/dropdown/demo/index.min.js +1 -1
  23. package/components/dropdown/dist/index.js +1 -1
  24. package/components/dropdown/dist/registered.js +1 -1
  25. package/components/form/demo/customize.min.js +589 -235
  26. package/components/form/demo/getting-started.min.js +589 -235
  27. package/components/form/demo/index.min.js +589 -235
  28. package/components/form/demo/registerDemoDeps.min.js +589 -235
  29. package/components/input/demo/customize.min.js +151 -42
  30. package/components/input/demo/getting-started.min.js +151 -42
  31. package/components/input/demo/index.min.js +151 -42
  32. package/components/input/dist/base-input.d.ts +49 -1
  33. package/components/input/dist/index.js +151 -42
  34. package/components/input/dist/registered.js +151 -42
  35. package/components/radio/demo/customize.min.js +1 -1
  36. package/components/radio/demo/getting-started.min.js +1 -1
  37. package/components/radio/demo/index.min.js +1 -1
  38. package/components/radio/dist/index.js +1 -1
  39. package/components/radio/dist/registered.js +1 -1
  40. package/components/select/demo/customize.min.js +2 -2
  41. package/components/select/demo/getting-started.min.js +2 -2
  42. package/components/select/demo/index.min.js +2 -2
  43. package/components/select/dist/index.js +2 -2
  44. package/components/select/dist/registered.js +2 -2
  45. package/custom-elements.json +264 -20
  46. package/package.json +1 -1
@@ -11501,7 +11501,6 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
11501
11501
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
11502
11502
 
11503
11503
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
11504
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
11505
11504
  return undefined;
11506
11505
  }
11507
11506
 
@@ -11653,8 +11652,10 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11653
11652
  this.layout = 'classic';
11654
11653
  this.locale = 'en-US';
11655
11654
  this.max = undefined;
11655
+ this._maxObject = undefined;
11656
11656
  this.maxLength = undefined;
11657
11657
  this.min = undefined;
11658
+ this._minObject = undefined;
11658
11659
  this.minLength = undefined;
11659
11660
  this.required = false;
11660
11661
  this.onDark = false;
@@ -11662,6 +11663,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11662
11663
  this.size = 'lg';
11663
11664
  this.shape = 'classic';
11664
11665
  this.value = undefined;
11666
+ this._valueObject = undefined;
11665
11667
 
11666
11668
  this._initializePrivateDefaults();
11667
11669
  }
@@ -12201,7 +12203,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12201
12203
  * @returns {Date|undefined}
12202
12204
  */
12203
12205
  get valueObject() {
12204
- return this.value && dateFormatter$3.isValidDate(this.value) ? dateFormatter$3.stringToDateInstance(this.value) : undefined;
12206
+ return this._valueObject || this._computeDateObjectFallback(this.value);
12205
12207
  }
12206
12208
 
12207
12209
  /**
@@ -12209,7 +12211,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12209
12211
  * @returns {Date|undefined}
12210
12212
  */
12211
12213
  get minObject() {
12212
- return this.min && dateFormatter$3.isValidDate(this.min) ? dateFormatter$3.stringToDateInstance(this.min) : undefined;
12214
+ return this._minObject || this._computeDateObjectFallback(this.min);
12213
12215
  }
12214
12216
 
12215
12217
  /**
@@ -12217,7 +12219,50 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12217
12219
  * @returns {Date|undefined}
12218
12220
  */
12219
12221
  get maxObject() {
12220
- return this.max && dateFormatter$3.isValidDate(this.max) ? dateFormatter$3.stringToDateInstance(this.max) : undefined;
12222
+ return this._maxObject || this._computeDateObjectFallback(this.max);
12223
+ }
12224
+
12225
+ /**
12226
+ * Parses a date string into a Date object when the corresponding `_*Object`
12227
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
12228
+ * input type/format isn't a full date or the string is not a valid date.
12229
+ *
12230
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
12231
+ * inside its own `updated()` before this input's `updated()` has run
12232
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
12233
+ * and range checks would otherwise silently no-op (flipping the result to
12234
+ * `valid` or `patternMismatch`).
12235
+ * @private
12236
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
12237
+ * @returns {Date|undefined}
12238
+ */
12239
+ _computeDateObjectFallback(dateStr) {
12240
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
12241
+ return undefined;
12242
+ }
12243
+ if (!dateFormatter$3.isValidDate(dateStr)) {
12244
+ return undefined;
12245
+ }
12246
+ return dateFormatter$3.stringToDateInstance(dateStr);
12247
+ }
12248
+
12249
+ /**
12250
+ * Internal setter for readonly date object properties.
12251
+ * @private
12252
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
12253
+ * @param {Date|undefined} propertyValue - Value to assign.
12254
+ * @returns {void}
12255
+ */
12256
+ setDateObjectProperty(propertyName, propertyValue) {
12257
+ const internalPropertyName = `_${propertyName}`;
12258
+ const previousValue = this[internalPropertyName];
12259
+
12260
+ if (previousValue === propertyValue) {
12261
+ return;
12262
+ }
12263
+
12264
+ this[internalPropertyName] = propertyValue;
12265
+ this.requestUpdate(propertyName, previousValue);
12221
12266
  }
12222
12267
 
12223
12268
  connectedCallback() {
@@ -12246,6 +12291,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12246
12291
  format: this.format
12247
12292
  });
12248
12293
  this.configureDataForType();
12294
+ this.syncDateValues();
12249
12295
  }
12250
12296
 
12251
12297
  disconnectedCallback() {
@@ -12275,6 +12321,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12275
12321
  this.setCustomHelpTextMessage();
12276
12322
  this.configureAutoFormatting();
12277
12323
  this.configureDataForType();
12324
+ this.syncDateValues();
12278
12325
  }
12279
12326
 
12280
12327
  /**
@@ -12350,6 +12397,13 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12350
12397
 
12351
12398
  if (typeToI18n.includes(this.type)) {
12352
12399
  this.setCustomValidityForType = i18n$3(this.lang, this.type);
12400
+ // COVERAGE: this `else if` branch is unreachable in WTR. connectedCallback
12401
+ // (L682) calls configureDataForType, which at L1266-1268 assigns
12402
+ // `this.format = this.util.getDateMaskFromLocale().toLowerCase()` for any
12403
+ // type=date input whose `format` attribute is unset. That runs before
12404
+ // firstUpdated invokes setCustomHelpTextMessage, so `!this.format` is
12405
+ // always false here. Retained as a defensive fallback; the whole function
12406
+ // is @deprecated per AB#1557296 and slated for removal.
12353
12407
  } else if (!this.format && this.type === 'date') {
12354
12408
  this.setCustomValidityForType = i18n$3(this.lang, 'dateMMDDYYYY');
12355
12409
  } else if (this.dateFormatMap[this.format]) {
@@ -12411,6 +12465,8 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12411
12465
  this.configureDataForType();
12412
12466
  }
12413
12467
 
12468
+ this.syncDateValues(changedProperties);
12469
+
12414
12470
  if (changedProperties.has('value')) {
12415
12471
  if (this.value && this.value.length > 0) {
12416
12472
  this.hasValue = true;
@@ -12432,14 +12488,14 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12432
12488
 
12433
12489
  if (formattedValue !== this.inputElement.value) {
12434
12490
  this.skipNextProgrammaticInputEvent = true;
12435
- if (this.maskInstance && this.type !== 'date') {
12491
+ if (this.maskInstance && this.type === 'credit-card') {
12436
12492
  // Route through the mask so its _value and el.value stay in lock-step
12437
12493
  // (set value calls updateControl which writes el.value = displayValue).
12438
12494
  // Writing el.value directly leaves the mask thinking displayValue is
12439
- // stale; _saveSelection on the next focus/click then warns. Date is
12440
- // excluded because its formattedValue can be raw ISO when the calendar
12441
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
12442
- // flip validity from patternMismatch to tooShort.
12495
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
12496
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
12497
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
12498
+ // and flip validity from patternMismatch to tooShort.
12443
12499
  this.maskInstance.value = formattedValue || '';
12444
12500
  } else if (formattedValue) {
12445
12501
  this.inputElement.value = formattedValue;
@@ -12481,65 +12537,120 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12481
12537
  }));
12482
12538
  }
12483
12539
 
12540
+
12541
+ /**
12542
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
12543
+ * This keeps the model and display values aligned when either side changes.
12544
+ *
12545
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
12546
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
12547
+ * represents a full year/month/day date format.
12548
+ *
12549
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
12550
+ * @returns {void}
12551
+ * @private
12552
+ */
12553
+ syncDateValues(changedProperties = undefined) {
12554
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
12555
+ return;
12556
+ }
12557
+
12558
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
12559
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
12560
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
12561
+ }
12562
+
12563
+ /**
12564
+ * Synchronizes one date object/string property pair.
12565
+ * @private
12566
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
12567
+ * @param {string} objectProperty - Date object property name.
12568
+ * @param {string} valueProperty - ISO string property name.
12569
+ * @returns {void}
12570
+ */
12571
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
12572
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
12573
+
12574
+ // objectProperty wins over valueProperty when both changed
12575
+ if (objectPropertyChanged && this[objectProperty]) {
12576
+ this[valueProperty] = dateFormatter$3.toISOFormatString(this[objectProperty]);
12577
+ return;
12578
+ }
12579
+
12580
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
12581
+ if (!valuePropertyChanged) {
12582
+ return;
12583
+ }
12584
+
12585
+ // 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)
12586
+ if (
12587
+ changedProperties &&
12588
+ valueProperty === 'value' &&
12589
+ changedProperties.get('value') === undefined &&
12590
+ this[objectProperty] instanceof Date &&
12591
+ this[valueProperty] === dateFormatter$3.toISOFormatString(this[objectProperty])
12592
+ ) {
12593
+ return;
12594
+ }
12595
+
12596
+ if (dateFormatter$3.isValidDate(this[valueProperty])) {
12597
+ this.setDateObjectProperty(objectProperty, dateFormatter$3.stringToDateInstance(this[valueProperty]));
12598
+ } else {
12599
+ this.setDateObjectProperty(objectProperty, undefined);
12600
+ }
12601
+ }
12602
+
12484
12603
  /**
12485
12604
  * Sets up IMasks and logic based on auto-formatting requirements.
12486
12605
  * @private
12487
12606
  * @returns {void}
12488
12607
  */
12489
12608
  configureAutoFormatting() {
12490
- // _configuringMask gates two things: external re-entry into this method
12491
- // while setup is mid-flight (from property changes that call back here),
12492
- // and the accept/complete listeners below both need to ignore the mask
12493
- // events fired by our own value-restore step.
12609
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
12610
+ // by _configuringMask above) could otherwise trigger handleInput
12611
+ // processCreditCard configureAutoFormatting before the outer call's
12612
+ // set value has finished its alignCursor pass.
12494
12613
  if (this._configuringMask) return;
12495
12614
  this._configuringMask = true;
12496
12615
  try {
12497
- // Destroy any prior mask so IMask can attach fresh under the new format.
12498
- // Null the reference too — if the new maskOptions.mask is falsy (e.g.
12499
- // type switched from credit-card to text) the IMask() reassignment
12500
- // below is skipped, and downstream writes at line ~823 would otherwise
12501
- // route through the destroyed instance.
12502
12616
  if (this.maskInstance) {
12503
12617
  this.maskInstance.destroy();
12504
- this.maskInstance = null;
12505
12618
  }
12506
12619
 
12620
+ // Pass new format to util
12507
12621
  this.util.updateFormat(this.format);
12508
12622
 
12509
12623
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
12510
12624
 
12511
12625
  if (this.inputElement && maskOptions.mask) {
12512
- // Capture the current display so it can be re-applied after IMask
12513
- // attaches. The restore at the bottom goes through maskInstance.value
12514
- // (not inputElement.value directly) so the mask's internal state and
12515
- // the input's displayed text stay in lock-step.
12516
- let existingValue = this.inputElement.value;
12517
12626
 
12518
- // Format-change case (e.g. locale switch): existingValue is the OLD
12519
- // mask's display string and may not parse under the new mask. When
12520
- // we have a valid date model, rebuild the display from valueObject
12521
- // (the canonical source) using the new mask's format function.
12627
+ // Stash and clear any existing value before IMask init.
12628
+ // IMask's constructor processes the current input value which requires
12629
+ // selection state clearing first avoids that scenario entirely.
12630
+ // When the format changes (e.g. locale switch) and we have a valid ISO
12631
+ // model value, compute the display string for the NEW format instead of
12632
+ // re-using the old display string, which may be invalid in the new mask.
12633
+ let existingValue = this.inputElement.value;
12522
12634
  if (
12523
12635
  this.util.isFullDateFormat(this.type, this.format) &&
12524
12636
  this.value &&
12525
- this.valueObject &&
12637
+ dateFormatter$3.isValidDate(this.value) &&
12638
+ this.valueObject instanceof Date &&
12639
+ !Number.isNaN(this.valueObject.getTime()) &&
12526
12640
  typeof maskOptions.format === 'function'
12527
12641
  ) {
12528
12642
  existingValue = maskOptions.format(this.valueObject);
12529
12643
  }
12530
12644
 
12531
- // Clear before IMask attaches so the constructor seeds an empty
12532
- // internal value. Otherwise IMask reads the stale unmasked string
12533
- // and emits a spurious 'accept' before the restore below runs.
12534
12645
  this.skipNextProgrammaticInputEvent = true;
12535
12646
  this.inputElement.value = '';
12536
12647
 
12537
12648
  this.maskInstance = IMask$3(this.inputElement, maskOptions);
12538
12649
 
12539
- // Mask fires 'accept' on every value change, including the restore
12540
- // step below. Skip events fired during configureAutoFormatting so
12541
- // we don't overwrite a value the parent just pushed.
12542
12650
  this.maskInstance.on('accept', () => {
12651
+ // Suppress propagation during configureAutoFormatting's own value-restoration
12652
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
12653
+ // and we don't want to overwrite a value the parent just pushed.
12543
12654
  if (this._configuringMask) return;
12544
12655
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
12545
12656
  if (this.type === "date") {
@@ -12547,8 +12658,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12547
12658
  }
12548
12659
  });
12549
12660
 
12550
- // Mask fires 'complete' on the restore step below for any value that
12551
- // happens to be a complete match. Same setup-suppression as 'accept'.
12552
12661
  this.maskInstance.on('complete', () => {
12553
12662
  if (this._configuringMask) return;
12554
12663
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -12557,9 +12666,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12557
12666
  }
12558
12667
  });
12559
12668
 
12560
- // Write existingValue through the mask (not the input directly) so
12561
- // the mask reformats it under the new rules and keeps its internal
12562
- // _value aligned with the input's displayed text.
12669
+ // Restore the stashed value through IMask so it's properly masked
12563
12670
  if (existingValue) {
12564
12671
  this.maskInstance.value = existingValue;
12565
12672
  }
@@ -12727,6 +12834,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12727
12834
  */
12728
12835
  reset() {
12729
12836
  this.value = undefined;
12837
+ this.setDateObjectProperty('valueObject', undefined);
12730
12838
  this.validation.reset(this);
12731
12839
  }
12732
12840
 
@@ -12735,6 +12843,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12735
12843
  */
12736
12844
  clear() {
12737
12845
  this.value = undefined;
12846
+ this.setDateObjectProperty('valueObject', undefined);
12738
12847
  }
12739
12848
 
12740
12849
  /**
@@ -12772,7 +12881,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12772
12881
  */
12773
12882
  get placeholderStr() {
12774
12883
  if (!this.placeholder && this.type === 'date') {
12775
- return this.format ? this.format.toUpperCase() : 'MM/DD/YYYY';
12884
+ return this.format.toUpperCase();
12776
12885
  }
12777
12886
  return this.placeholder || "";
12778
12887
  }
@@ -13263,7 +13372,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13263
13372
  }
13264
13373
  };
13265
13374
 
13266
- var formkitVersion$8 = '202606231948';
13375
+ var formkitVersion$8 = '202606241801';
13267
13376
 
13268
13377
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13269
13378
  // See LICENSE in the project root for license information.
@@ -24502,7 +24611,6 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
24502
24611
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
24503
24612
 
24504
24613
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
24505
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
24506
24614
  return undefined;
24507
24615
  }
24508
24616
 
@@ -27383,7 +27491,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27383
27491
  }
27384
27492
  };
27385
27493
 
27386
- var formkitVersion$2$1 = '202606231948';
27494
+ var formkitVersion$2$1 = '202606241801';
27387
27495
 
27388
27496
  let l$1$2 = 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$2`${s$3(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = 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$2 = 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$3=i$6`: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}
27389
27497
  `,u$4$2=i$6`.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}}
@@ -32894,7 +33002,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
32894
33002
  }
32895
33003
  };
32896
33004
 
32897
- var formkitVersion$1$3 = '202606231948';
33005
+ var formkitVersion$1$3 = '202606241801';
32898
33006
 
32899
33007
  let AuroElement$2$2 = class AuroElement extends i$3 {
32900
33008
  static get properties() {
@@ -44616,7 +44724,6 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
44616
44724
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
44617
44725
 
44618
44726
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
44619
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
44620
44727
  return undefined;
44621
44728
  }
44622
44729
 
@@ -44768,8 +44875,10 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44768
44875
  this.layout = 'classic';
44769
44876
  this.locale = 'en-US';
44770
44877
  this.max = undefined;
44878
+ this._maxObject = undefined;
44771
44879
  this.maxLength = undefined;
44772
44880
  this.min = undefined;
44881
+ this._minObject = undefined;
44773
44882
  this.minLength = undefined;
44774
44883
  this.required = false;
44775
44884
  this.onDark = false;
@@ -44777,6 +44886,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44777
44886
  this.size = 'lg';
44778
44887
  this.shape = 'classic';
44779
44888
  this.value = undefined;
44889
+ this._valueObject = undefined;
44780
44890
 
44781
44891
  this._initializePrivateDefaults();
44782
44892
  }
@@ -45316,7 +45426,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45316
45426
  * @returns {Date|undefined}
45317
45427
  */
45318
45428
  get valueObject() {
45319
- return this.value && dateFormatter$2.isValidDate(this.value) ? dateFormatter$2.stringToDateInstance(this.value) : undefined;
45429
+ return this._valueObject || this._computeDateObjectFallback(this.value);
45320
45430
  }
45321
45431
 
45322
45432
  /**
@@ -45324,7 +45434,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45324
45434
  * @returns {Date|undefined}
45325
45435
  */
45326
45436
  get minObject() {
45327
- return this.min && dateFormatter$2.isValidDate(this.min) ? dateFormatter$2.stringToDateInstance(this.min) : undefined;
45437
+ return this._minObject || this._computeDateObjectFallback(this.min);
45328
45438
  }
45329
45439
 
45330
45440
  /**
@@ -45332,7 +45442,50 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45332
45442
  * @returns {Date|undefined}
45333
45443
  */
45334
45444
  get maxObject() {
45335
- return this.max && dateFormatter$2.isValidDate(this.max) ? dateFormatter$2.stringToDateInstance(this.max) : undefined;
45445
+ return this._maxObject || this._computeDateObjectFallback(this.max);
45446
+ }
45447
+
45448
+ /**
45449
+ * Parses a date string into a Date object when the corresponding `_*Object`
45450
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
45451
+ * input type/format isn't a full date or the string is not a valid date.
45452
+ *
45453
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
45454
+ * inside its own `updated()` before this input's `updated()` has run
45455
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
45456
+ * and range checks would otherwise silently no-op (flipping the result to
45457
+ * `valid` or `patternMismatch`).
45458
+ * @private
45459
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
45460
+ * @returns {Date|undefined}
45461
+ */
45462
+ _computeDateObjectFallback(dateStr) {
45463
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
45464
+ return undefined;
45465
+ }
45466
+ if (!dateFormatter$2.isValidDate(dateStr)) {
45467
+ return undefined;
45468
+ }
45469
+ return dateFormatter$2.stringToDateInstance(dateStr);
45470
+ }
45471
+
45472
+ /**
45473
+ * Internal setter for readonly date object properties.
45474
+ * @private
45475
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
45476
+ * @param {Date|undefined} propertyValue - Value to assign.
45477
+ * @returns {void}
45478
+ */
45479
+ setDateObjectProperty(propertyName, propertyValue) {
45480
+ const internalPropertyName = `_${propertyName}`;
45481
+ const previousValue = this[internalPropertyName];
45482
+
45483
+ if (previousValue === propertyValue) {
45484
+ return;
45485
+ }
45486
+
45487
+ this[internalPropertyName] = propertyValue;
45488
+ this.requestUpdate(propertyName, previousValue);
45336
45489
  }
45337
45490
 
45338
45491
  connectedCallback() {
@@ -45361,6 +45514,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45361
45514
  format: this.format
45362
45515
  });
45363
45516
  this.configureDataForType();
45517
+ this.syncDateValues();
45364
45518
  }
45365
45519
 
45366
45520
  disconnectedCallback() {
@@ -45390,6 +45544,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45390
45544
  this.setCustomHelpTextMessage();
45391
45545
  this.configureAutoFormatting();
45392
45546
  this.configureDataForType();
45547
+ this.syncDateValues();
45393
45548
  }
45394
45549
 
45395
45550
  /**
@@ -45465,6 +45620,13 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45465
45620
 
45466
45621
  if (typeToI18n.includes(this.type)) {
45467
45622
  this.setCustomValidityForType = i18n$1(this.lang, this.type);
45623
+ // COVERAGE: this `else if` branch is unreachable in WTR. connectedCallback
45624
+ // (L682) calls configureDataForType, which at L1266-1268 assigns
45625
+ // `this.format = this.util.getDateMaskFromLocale().toLowerCase()` for any
45626
+ // type=date input whose `format` attribute is unset. That runs before
45627
+ // firstUpdated invokes setCustomHelpTextMessage, so `!this.format` is
45628
+ // always false here. Retained as a defensive fallback; the whole function
45629
+ // is @deprecated per AB#1557296 and slated for removal.
45468
45630
  } else if (!this.format && this.type === 'date') {
45469
45631
  this.setCustomValidityForType = i18n$1(this.lang, 'dateMMDDYYYY');
45470
45632
  } else if (this.dateFormatMap[this.format]) {
@@ -45526,6 +45688,8 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45526
45688
  this.configureDataForType();
45527
45689
  }
45528
45690
 
45691
+ this.syncDateValues(changedProperties);
45692
+
45529
45693
  if (changedProperties.has('value')) {
45530
45694
  if (this.value && this.value.length > 0) {
45531
45695
  this.hasValue = true;
@@ -45547,14 +45711,14 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45547
45711
 
45548
45712
  if (formattedValue !== this.inputElement.value) {
45549
45713
  this.skipNextProgrammaticInputEvent = true;
45550
- if (this.maskInstance && this.type !== 'date') {
45714
+ if (this.maskInstance && this.type === 'credit-card') {
45551
45715
  // Route through the mask so its _value and el.value stay in lock-step
45552
45716
  // (set value calls updateControl which writes el.value = displayValue).
45553
45717
  // Writing el.value directly leaves the mask thinking displayValue is
45554
- // stale; _saveSelection on the next focus/click then warns. Date is
45555
- // excluded because its formattedValue can be raw ISO when the calendar
45556
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
45557
- // flip validity from patternMismatch to tooShort.
45718
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
45719
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
45720
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
45721
+ // and flip validity from patternMismatch to tooShort.
45558
45722
  this.maskInstance.value = formattedValue || '';
45559
45723
  } else if (formattedValue) {
45560
45724
  this.inputElement.value = formattedValue;
@@ -45596,65 +45760,120 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45596
45760
  }));
45597
45761
  }
45598
45762
 
45763
+
45764
+ /**
45765
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
45766
+ * This keeps the model and display values aligned when either side changes.
45767
+ *
45768
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
45769
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
45770
+ * represents a full year/month/day date format.
45771
+ *
45772
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
45773
+ * @returns {void}
45774
+ * @private
45775
+ */
45776
+ syncDateValues(changedProperties = undefined) {
45777
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
45778
+ return;
45779
+ }
45780
+
45781
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
45782
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
45783
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
45784
+ }
45785
+
45786
+ /**
45787
+ * Synchronizes one date object/string property pair.
45788
+ * @private
45789
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
45790
+ * @param {string} objectProperty - Date object property name.
45791
+ * @param {string} valueProperty - ISO string property name.
45792
+ * @returns {void}
45793
+ */
45794
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
45795
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
45796
+
45797
+ // objectProperty wins over valueProperty when both changed
45798
+ if (objectPropertyChanged && this[objectProperty]) {
45799
+ this[valueProperty] = dateFormatter$2.toISOFormatString(this[objectProperty]);
45800
+ return;
45801
+ }
45802
+
45803
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
45804
+ if (!valuePropertyChanged) {
45805
+ return;
45806
+ }
45807
+
45808
+ // 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)
45809
+ if (
45810
+ changedProperties &&
45811
+ valueProperty === 'value' &&
45812
+ changedProperties.get('value') === undefined &&
45813
+ this[objectProperty] instanceof Date &&
45814
+ this[valueProperty] === dateFormatter$2.toISOFormatString(this[objectProperty])
45815
+ ) {
45816
+ return;
45817
+ }
45818
+
45819
+ if (dateFormatter$2.isValidDate(this[valueProperty])) {
45820
+ this.setDateObjectProperty(objectProperty, dateFormatter$2.stringToDateInstance(this[valueProperty]));
45821
+ } else {
45822
+ this.setDateObjectProperty(objectProperty, undefined);
45823
+ }
45824
+ }
45825
+
45599
45826
  /**
45600
45827
  * Sets up IMasks and logic based on auto-formatting requirements.
45601
45828
  * @private
45602
45829
  * @returns {void}
45603
45830
  */
45604
45831
  configureAutoFormatting() {
45605
- // _configuringMask gates two things: external re-entry into this method
45606
- // while setup is mid-flight (from property changes that call back here),
45607
- // and the accept/complete listeners below both need to ignore the mask
45608
- // events fired by our own value-restore step.
45832
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
45833
+ // by _configuringMask above) could otherwise trigger handleInput
45834
+ // processCreditCard configureAutoFormatting before the outer call's
45835
+ // set value has finished its alignCursor pass.
45609
45836
  if (this._configuringMask) return;
45610
45837
  this._configuringMask = true;
45611
45838
  try {
45612
- // Destroy any prior mask so IMask can attach fresh under the new format.
45613
- // Null the reference too — if the new maskOptions.mask is falsy (e.g.
45614
- // type switched from credit-card to text) the IMask() reassignment
45615
- // below is skipped, and downstream writes at line ~823 would otherwise
45616
- // route through the destroyed instance.
45617
45839
  if (this.maskInstance) {
45618
45840
  this.maskInstance.destroy();
45619
- this.maskInstance = null;
45620
45841
  }
45621
45842
 
45843
+ // Pass new format to util
45622
45844
  this.util.updateFormat(this.format);
45623
45845
 
45624
45846
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
45625
45847
 
45626
45848
  if (this.inputElement && maskOptions.mask) {
45627
- // Capture the current display so it can be re-applied after IMask
45628
- // attaches. The restore at the bottom goes through maskInstance.value
45629
- // (not inputElement.value directly) so the mask's internal state and
45630
- // the input's displayed text stay in lock-step.
45631
- let existingValue = this.inputElement.value;
45632
45849
 
45633
- // Format-change case (e.g. locale switch): existingValue is the OLD
45634
- // mask's display string and may not parse under the new mask. When
45635
- // we have a valid date model, rebuild the display from valueObject
45636
- // (the canonical source) using the new mask's format function.
45850
+ // Stash and clear any existing value before IMask init.
45851
+ // IMask's constructor processes the current input value which requires
45852
+ // selection state clearing first avoids that scenario entirely.
45853
+ // When the format changes (e.g. locale switch) and we have a valid ISO
45854
+ // model value, compute the display string for the NEW format instead of
45855
+ // re-using the old display string, which may be invalid in the new mask.
45856
+ let existingValue = this.inputElement.value;
45637
45857
  if (
45638
45858
  this.util.isFullDateFormat(this.type, this.format) &&
45639
45859
  this.value &&
45640
- this.valueObject &&
45860
+ dateFormatter$2.isValidDate(this.value) &&
45861
+ this.valueObject instanceof Date &&
45862
+ !Number.isNaN(this.valueObject.getTime()) &&
45641
45863
  typeof maskOptions.format === 'function'
45642
45864
  ) {
45643
45865
  existingValue = maskOptions.format(this.valueObject);
45644
45866
  }
45645
45867
 
45646
- // Clear before IMask attaches so the constructor seeds an empty
45647
- // internal value. Otherwise IMask reads the stale unmasked string
45648
- // and emits a spurious 'accept' before the restore below runs.
45649
45868
  this.skipNextProgrammaticInputEvent = true;
45650
45869
  this.inputElement.value = '';
45651
45870
 
45652
45871
  this.maskInstance = IMask$2(this.inputElement, maskOptions);
45653
45872
 
45654
- // Mask fires 'accept' on every value change, including the restore
45655
- // step below. Skip events fired during configureAutoFormatting so
45656
- // we don't overwrite a value the parent just pushed.
45657
45873
  this.maskInstance.on('accept', () => {
45874
+ // Suppress propagation during configureAutoFormatting's own value-restoration
45875
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
45876
+ // and we don't want to overwrite a value the parent just pushed.
45658
45877
  if (this._configuringMask) return;
45659
45878
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
45660
45879
  if (this.type === "date") {
@@ -45662,8 +45881,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45662
45881
  }
45663
45882
  });
45664
45883
 
45665
- // Mask fires 'complete' on the restore step below for any value that
45666
- // happens to be a complete match. Same setup-suppression as 'accept'.
45667
45884
  this.maskInstance.on('complete', () => {
45668
45885
  if (this._configuringMask) return;
45669
45886
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -45672,9 +45889,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45672
45889
  }
45673
45890
  });
45674
45891
 
45675
- // Write existingValue through the mask (not the input directly) so
45676
- // the mask reformats it under the new rules and keeps its internal
45677
- // _value aligned with the input's displayed text.
45892
+ // Restore the stashed value through IMask so it's properly masked
45678
45893
  if (existingValue) {
45679
45894
  this.maskInstance.value = existingValue;
45680
45895
  }
@@ -45842,6 +46057,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45842
46057
  */
45843
46058
  reset() {
45844
46059
  this.value = undefined;
46060
+ this.setDateObjectProperty('valueObject', undefined);
45845
46061
  this.validation.reset(this);
45846
46062
  }
45847
46063
 
@@ -45850,6 +46066,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45850
46066
  */
45851
46067
  clear() {
45852
46068
  this.value = undefined;
46069
+ this.setDateObjectProperty('valueObject', undefined);
45853
46070
  }
45854
46071
 
45855
46072
  /**
@@ -45887,7 +46104,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45887
46104
  */
45888
46105
  get placeholderStr() {
45889
46106
  if (!this.placeholder && this.type === 'date') {
45890
- return this.format ? this.format.toUpperCase() : 'MM/DD/YYYY';
46107
+ return this.format.toUpperCase();
45891
46108
  }
45892
46109
  return this.placeholder || "";
45893
46110
  }
@@ -46378,7 +46595,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
46378
46595
  }
46379
46596
  };
46380
46597
 
46381
- var formkitVersion$7 = '202606231948';
46598
+ var formkitVersion$7 = '202606241801';
46382
46599
 
46383
46600
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46384
46601
  // See LICENSE in the project root for license information.
@@ -51081,7 +51298,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
51081
51298
  }
51082
51299
  };
51083
51300
 
51084
- var formkitVersion$1$2 = '202606231948';
51301
+ var formkitVersion$1$2 = '202606241801';
51085
51302
 
51086
51303
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
51087
51304
  // See LICENSE in the project root for license information.
@@ -55409,7 +55626,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
55409
55626
  }
55410
55627
  };
55411
55628
 
55412
- var formkitVersion$6 = '202606231948';
55629
+ var formkitVersion$6 = '202606241801';
55413
55630
 
55414
55631
  let AuroElement$1$2 = class AuroElement extends i$3 {
55415
55632
  static get properties() {
@@ -59349,7 +59566,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
59349
59566
  }
59350
59567
  };
59351
59568
 
59352
- var formkitVersion$5 = '202606231948';
59569
+ var formkitVersion$5 = '202606241801';
59353
59570
 
59354
59571
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
59355
59572
  // See LICENSE in the project root for license information.
@@ -61099,7 +61316,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
61099
61316
  }
61100
61317
  };
61101
61318
 
61102
- var formkitVersion$4 = '202606231948';
61319
+ var formkitVersion$4 = '202606241801';
61103
61320
 
61104
61321
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
61105
61322
  // See LICENSE in the project root for license information.
@@ -62275,8 +62492,6 @@ function navigateArrow$1(component, direction, options = {}) {
62275
62492
  }
62276
62493
  }
62277
62494
 
62278
- /* eslint-disable no-underscore-dangle */
62279
-
62280
62495
  /**
62281
62496
  * Returns the clear button element from the active input's shadow
62282
62497
  * DOM, if available.
@@ -62312,9 +62527,11 @@ function isClearBtnFocused(ctx, clearBtn = getClearBtn(ctx)) {
62312
62527
  * @param {Object} menu - The menu component.
62313
62528
  */
62314
62529
  function reconcileMenuIndex(menu) {
62530
+ // eslint-disable-next-line no-underscore-dangle
62315
62531
  if (menu._index < 0 && menu.optionActive && menu.items) {
62316
62532
  const idx = menu.items.indexOf(menu.optionActive);
62317
62533
  if (idx >= 0) {
62534
+ // eslint-disable-next-line no-underscore-dangle
62318
62535
  menu._index = idx;
62319
62536
  }
62320
62537
  }
@@ -66314,7 +66531,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
66314
66531
  }
66315
66532
  };
66316
66533
 
66317
- var formkitVersion$2 = '202606231948';
66534
+ var formkitVersion$2 = '202606241801';
66318
66535
 
66319
66536
  let AuroElement$2$1 = class AuroElement extends i$3 {
66320
66537
  static get properties() {
@@ -78036,7 +78253,6 @@ class AuroInputUtilities {
78036
78253
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
78037
78254
 
78038
78255
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
78039
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
78040
78256
  return undefined;
78041
78257
  }
78042
78258
 
@@ -78188,8 +78404,10 @@ class BaseInput extends AuroElement$1$1 {
78188
78404
  this.layout = 'classic';
78189
78405
  this.locale = 'en-US';
78190
78406
  this.max = undefined;
78407
+ this._maxObject = undefined;
78191
78408
  this.maxLength = undefined;
78192
78409
  this.min = undefined;
78410
+ this._minObject = undefined;
78193
78411
  this.minLength = undefined;
78194
78412
  this.required = false;
78195
78413
  this.onDark = false;
@@ -78197,6 +78415,7 @@ class BaseInput extends AuroElement$1$1 {
78197
78415
  this.size = 'lg';
78198
78416
  this.shape = 'classic';
78199
78417
  this.value = undefined;
78418
+ this._valueObject = undefined;
78200
78419
 
78201
78420
  this._initializePrivateDefaults();
78202
78421
  }
@@ -78736,7 +78955,7 @@ class BaseInput extends AuroElement$1$1 {
78736
78955
  * @returns {Date|undefined}
78737
78956
  */
78738
78957
  get valueObject() {
78739
- return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
78958
+ return this._valueObject || this._computeDateObjectFallback(this.value);
78740
78959
  }
78741
78960
 
78742
78961
  /**
@@ -78744,7 +78963,7 @@ class BaseInput extends AuroElement$1$1 {
78744
78963
  * @returns {Date|undefined}
78745
78964
  */
78746
78965
  get minObject() {
78747
- return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
78966
+ return this._minObject || this._computeDateObjectFallback(this.min);
78748
78967
  }
78749
78968
 
78750
78969
  /**
@@ -78752,7 +78971,50 @@ class BaseInput extends AuroElement$1$1 {
78752
78971
  * @returns {Date|undefined}
78753
78972
  */
78754
78973
  get maxObject() {
78755
- return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
78974
+ return this._maxObject || this._computeDateObjectFallback(this.max);
78975
+ }
78976
+
78977
+ /**
78978
+ * Parses a date string into a Date object when the corresponding `_*Object`
78979
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
78980
+ * input type/format isn't a full date or the string is not a valid date.
78981
+ *
78982
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
78983
+ * inside its own `updated()` before this input's `updated()` has run
78984
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
78985
+ * and range checks would otherwise silently no-op (flipping the result to
78986
+ * `valid` or `patternMismatch`).
78987
+ * @private
78988
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
78989
+ * @returns {Date|undefined}
78990
+ */
78991
+ _computeDateObjectFallback(dateStr) {
78992
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
78993
+ return undefined;
78994
+ }
78995
+ if (!dateFormatter.isValidDate(dateStr)) {
78996
+ return undefined;
78997
+ }
78998
+ return dateFormatter.stringToDateInstance(dateStr);
78999
+ }
79000
+
79001
+ /**
79002
+ * Internal setter for readonly date object properties.
79003
+ * @private
79004
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
79005
+ * @param {Date|undefined} propertyValue - Value to assign.
79006
+ * @returns {void}
79007
+ */
79008
+ setDateObjectProperty(propertyName, propertyValue) {
79009
+ const internalPropertyName = `_${propertyName}`;
79010
+ const previousValue = this[internalPropertyName];
79011
+
79012
+ if (previousValue === propertyValue) {
79013
+ return;
79014
+ }
79015
+
79016
+ this[internalPropertyName] = propertyValue;
79017
+ this.requestUpdate(propertyName, previousValue);
78756
79018
  }
78757
79019
 
78758
79020
  connectedCallback() {
@@ -78781,6 +79043,7 @@ class BaseInput extends AuroElement$1$1 {
78781
79043
  format: this.format
78782
79044
  });
78783
79045
  this.configureDataForType();
79046
+ this.syncDateValues();
78784
79047
  }
78785
79048
 
78786
79049
  disconnectedCallback() {
@@ -78810,6 +79073,7 @@ class BaseInput extends AuroElement$1$1 {
78810
79073
  this.setCustomHelpTextMessage();
78811
79074
  this.configureAutoFormatting();
78812
79075
  this.configureDataForType();
79076
+ this.syncDateValues();
78813
79077
  }
78814
79078
 
78815
79079
  /**
@@ -78885,6 +79149,13 @@ class BaseInput extends AuroElement$1$1 {
78885
79149
 
78886
79150
  if (typeToI18n.includes(this.type)) {
78887
79151
  this.setCustomValidityForType = i18n(this.lang, this.type);
79152
+ // COVERAGE: this `else if` branch is unreachable in WTR. connectedCallback
79153
+ // (L682) calls configureDataForType, which at L1266-1268 assigns
79154
+ // `this.format = this.util.getDateMaskFromLocale().toLowerCase()` for any
79155
+ // type=date input whose `format` attribute is unset. That runs before
79156
+ // firstUpdated invokes setCustomHelpTextMessage, so `!this.format` is
79157
+ // always false here. Retained as a defensive fallback; the whole function
79158
+ // is @deprecated per AB#1557296 and slated for removal.
78888
79159
  } else if (!this.format && this.type === 'date') {
78889
79160
  this.setCustomValidityForType = i18n(this.lang, 'dateMMDDYYYY');
78890
79161
  } else if (this.dateFormatMap[this.format]) {
@@ -78946,6 +79217,8 @@ class BaseInput extends AuroElement$1$1 {
78946
79217
  this.configureDataForType();
78947
79218
  }
78948
79219
 
79220
+ this.syncDateValues(changedProperties);
79221
+
78949
79222
  if (changedProperties.has('value')) {
78950
79223
  if (this.value && this.value.length > 0) {
78951
79224
  this.hasValue = true;
@@ -78967,14 +79240,14 @@ class BaseInput extends AuroElement$1$1 {
78967
79240
 
78968
79241
  if (formattedValue !== this.inputElement.value) {
78969
79242
  this.skipNextProgrammaticInputEvent = true;
78970
- if (this.maskInstance && this.type !== 'date') {
79243
+ if (this.maskInstance && this.type === 'credit-card') {
78971
79244
  // Route through the mask so its _value and el.value stay in lock-step
78972
79245
  // (set value calls updateControl which writes el.value = displayValue).
78973
79246
  // Writing el.value directly leaves the mask thinking displayValue is
78974
- // stale; _saveSelection on the next focus/click then warns. Date is
78975
- // excluded because its formattedValue can be raw ISO when the calendar
78976
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
78977
- // flip validity from patternMismatch to tooShort.
79247
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
79248
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
79249
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
79250
+ // and flip validity from patternMismatch to tooShort.
78978
79251
  this.maskInstance.value = formattedValue || '';
78979
79252
  } else if (formattedValue) {
78980
79253
  this.inputElement.value = formattedValue;
@@ -79016,65 +79289,120 @@ class BaseInput extends AuroElement$1$1 {
79016
79289
  }));
79017
79290
  }
79018
79291
 
79292
+
79293
+ /**
79294
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
79295
+ * This keeps the model and display values aligned when either side changes.
79296
+ *
79297
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
79298
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
79299
+ * represents a full year/month/day date format.
79300
+ *
79301
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
79302
+ * @returns {void}
79303
+ * @private
79304
+ */
79305
+ syncDateValues(changedProperties = undefined) {
79306
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
79307
+ return;
79308
+ }
79309
+
79310
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
79311
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
79312
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
79313
+ }
79314
+
79315
+ /**
79316
+ * Synchronizes one date object/string property pair.
79317
+ * @private
79318
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
79319
+ * @param {string} objectProperty - Date object property name.
79320
+ * @param {string} valueProperty - ISO string property name.
79321
+ * @returns {void}
79322
+ */
79323
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
79324
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
79325
+
79326
+ // objectProperty wins over valueProperty when both changed
79327
+ if (objectPropertyChanged && this[objectProperty]) {
79328
+ this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
79329
+ return;
79330
+ }
79331
+
79332
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
79333
+ if (!valuePropertyChanged) {
79334
+ return;
79335
+ }
79336
+
79337
+ // 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)
79338
+ if (
79339
+ changedProperties &&
79340
+ valueProperty === 'value' &&
79341
+ changedProperties.get('value') === undefined &&
79342
+ this[objectProperty] instanceof Date &&
79343
+ this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
79344
+ ) {
79345
+ return;
79346
+ }
79347
+
79348
+ if (dateFormatter.isValidDate(this[valueProperty])) {
79349
+ this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
79350
+ } else {
79351
+ this.setDateObjectProperty(objectProperty, undefined);
79352
+ }
79353
+ }
79354
+
79019
79355
  /**
79020
79356
  * Sets up IMasks and logic based on auto-formatting requirements.
79021
79357
  * @private
79022
79358
  * @returns {void}
79023
79359
  */
79024
79360
  configureAutoFormatting() {
79025
- // _configuringMask gates two things: external re-entry into this method
79026
- // while setup is mid-flight (from property changes that call back here),
79027
- // and the accept/complete listeners below both need to ignore the mask
79028
- // events fired by our own value-restore step.
79361
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
79362
+ // by _configuringMask above) could otherwise trigger handleInput
79363
+ // processCreditCard configureAutoFormatting before the outer call's
79364
+ // set value has finished its alignCursor pass.
79029
79365
  if (this._configuringMask) return;
79030
79366
  this._configuringMask = true;
79031
79367
  try {
79032
- // Destroy any prior mask so IMask can attach fresh under the new format.
79033
- // Null the reference too — if the new maskOptions.mask is falsy (e.g.
79034
- // type switched from credit-card to text) the IMask() reassignment
79035
- // below is skipped, and downstream writes at line ~823 would otherwise
79036
- // route through the destroyed instance.
79037
79368
  if (this.maskInstance) {
79038
79369
  this.maskInstance.destroy();
79039
- this.maskInstance = null;
79040
79370
  }
79041
79371
 
79372
+ // Pass new format to util
79042
79373
  this.util.updateFormat(this.format);
79043
79374
 
79044
79375
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
79045
79376
 
79046
79377
  if (this.inputElement && maskOptions.mask) {
79047
- // Capture the current display so it can be re-applied after IMask
79048
- // attaches. The restore at the bottom goes through maskInstance.value
79049
- // (not inputElement.value directly) so the mask's internal state and
79050
- // the input's displayed text stay in lock-step.
79051
- let existingValue = this.inputElement.value;
79052
79378
 
79053
- // Format-change case (e.g. locale switch): existingValue is the OLD
79054
- // mask's display string and may not parse under the new mask. When
79055
- // we have a valid date model, rebuild the display from valueObject
79056
- // (the canonical source) using the new mask's format function.
79379
+ // Stash and clear any existing value before IMask init.
79380
+ // IMask's constructor processes the current input value which requires
79381
+ // selection state clearing first avoids that scenario entirely.
79382
+ // When the format changes (e.g. locale switch) and we have a valid ISO
79383
+ // model value, compute the display string for the NEW format instead of
79384
+ // re-using the old display string, which may be invalid in the new mask.
79385
+ let existingValue = this.inputElement.value;
79057
79386
  if (
79058
79387
  this.util.isFullDateFormat(this.type, this.format) &&
79059
79388
  this.value &&
79060
- this.valueObject &&
79389
+ dateFormatter.isValidDate(this.value) &&
79390
+ this.valueObject instanceof Date &&
79391
+ !Number.isNaN(this.valueObject.getTime()) &&
79061
79392
  typeof maskOptions.format === 'function'
79062
79393
  ) {
79063
79394
  existingValue = maskOptions.format(this.valueObject);
79064
79395
  }
79065
79396
 
79066
- // Clear before IMask attaches so the constructor seeds an empty
79067
- // internal value. Otherwise IMask reads the stale unmasked string
79068
- // and emits a spurious 'accept' before the restore below runs.
79069
79397
  this.skipNextProgrammaticInputEvent = true;
79070
79398
  this.inputElement.value = '';
79071
79399
 
79072
79400
  this.maskInstance = IMask(this.inputElement, maskOptions);
79073
79401
 
79074
- // Mask fires 'accept' on every value change, including the restore
79075
- // step below. Skip events fired during configureAutoFormatting so
79076
- // we don't overwrite a value the parent just pushed.
79077
79402
  this.maskInstance.on('accept', () => {
79403
+ // Suppress propagation during configureAutoFormatting's own value-restoration
79404
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
79405
+ // and we don't want to overwrite a value the parent just pushed.
79078
79406
  if (this._configuringMask) return;
79079
79407
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
79080
79408
  if (this.type === "date") {
@@ -79082,8 +79410,6 @@ class BaseInput extends AuroElement$1$1 {
79082
79410
  }
79083
79411
  });
79084
79412
 
79085
- // Mask fires 'complete' on the restore step below for any value that
79086
- // happens to be a complete match. Same setup-suppression as 'accept'.
79087
79413
  this.maskInstance.on('complete', () => {
79088
79414
  if (this._configuringMask) return;
79089
79415
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -79092,9 +79418,7 @@ class BaseInput extends AuroElement$1$1 {
79092
79418
  }
79093
79419
  });
79094
79420
 
79095
- // Write existingValue through the mask (not the input directly) so
79096
- // the mask reformats it under the new rules and keeps its internal
79097
- // _value aligned with the input's displayed text.
79421
+ // Restore the stashed value through IMask so it's properly masked
79098
79422
  if (existingValue) {
79099
79423
  this.maskInstance.value = existingValue;
79100
79424
  }
@@ -79262,6 +79586,7 @@ class BaseInput extends AuroElement$1$1 {
79262
79586
  */
79263
79587
  reset() {
79264
79588
  this.value = undefined;
79589
+ this.setDateObjectProperty('valueObject', undefined);
79265
79590
  this.validation.reset(this);
79266
79591
  }
79267
79592
 
@@ -79270,6 +79595,7 @@ class BaseInput extends AuroElement$1$1 {
79270
79595
  */
79271
79596
  clear() {
79272
79597
  this.value = undefined;
79598
+ this.setDateObjectProperty('valueObject', undefined);
79273
79599
  }
79274
79600
 
79275
79601
  /**
@@ -79307,7 +79633,7 @@ class BaseInput extends AuroElement$1$1 {
79307
79633
  */
79308
79634
  get placeholderStr() {
79309
79635
  if (!this.placeholder && this.type === 'date') {
79310
- return this.format ? this.format.toUpperCase() : 'MM/DD/YYYY';
79636
+ return this.format.toUpperCase();
79311
79637
  }
79312
79638
  return this.placeholder || "";
79313
79639
  }
@@ -79798,7 +80124,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
79798
80124
  }
79799
80125
  };
79800
80126
 
79801
- var formkitVersion$1$1 = '202606231948';
80127
+ var formkitVersion$1$1 = '202606241801';
79802
80128
 
79803
80129
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
79804
80130
  // See LICENSE in the project root for license information.
@@ -80919,7 +81245,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
80919
81245
  }
80920
81246
  };
80921
81247
 
80922
- var formkitVersion$3 = '202606231948';
81248
+ var formkitVersion$3 = '202606241801';
80923
81249
 
80924
81250
  var styleCss$1$3 = i$6`.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}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
80925
81251
 
@@ -81906,7 +82232,7 @@ class AuroCombobox extends AuroElement$3 {
81906
82232
  if (this.menu) {
81907
82233
  this.menu.matchWord = normalizeFilterValue(this.input.value);
81908
82234
  }
81909
- const label = getOptionLabel(this.menu.optionSelected);
82235
+ const label = getOptionLabel(this.menu.optionSelected) || this.menu.currentLabel;
81910
82236
  this.updateTriggerTextDisplay(label || this.value);
81911
82237
  }
81912
82238
 
@@ -81920,9 +82246,40 @@ class AuroCombobox extends AuroElement$3 {
81920
82246
  // in suggestion mode, do not override input value if no selection has been made and the input currently has focus
81921
82247
  const isInputFocusedWithNoSelection = !this.menu.value && (this.input.matches(':focus-within') || (this.inputInBib && this.inputInBib.matches(':focus-within')));
81922
82248
 
81923
- const suppressed = this.persistInput || (this.behavior === 'suggestion' && isInputFocusedWithNoSelection);
81924
- if (!suppressed) {
81925
- this.syncInputValuesAcrossTriggerAndBib(label || this.value);
82249
+ if (!this.persistInput && !(this.behavior === 'suggestion' && isInputFocusedWithNoSelection)) {
82250
+ const nextValue = label || this.value;
82251
+ // Only set the flag when there's an actual write to suppress —
82252
+ // syncValuesAndStates re-enters here during typing when both inputs
82253
+ // already match, and a no-op flag flip would make the bib branch's
82254
+ // bail eat legitimate user-input events.
82255
+ const triggerNeedsSync = this.input.value !== nextValue;
82256
+ const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
82257
+ if (triggerNeedsSync || bibNeedsSync) {
82258
+ this._syncingDisplayValue = true;
82259
+ if (triggerNeedsSync) {
82260
+ this.input.value = nextValue;
82261
+ }
82262
+ if (bibNeedsSync) {
82263
+ this.inputInBib.value = nextValue;
82264
+ }
82265
+ const pending = [];
82266
+ if (triggerNeedsSync) {
82267
+ pending.push(this.input.updateComplete);
82268
+ }
82269
+ if (bibNeedsSync) {
82270
+ pending.push(this.inputInBib.updateComplete);
82271
+ }
82272
+ Promise.all(pending).then(() => {
82273
+ // imask reasserts otherwise, and handleBlur reverts to its stale value.
82274
+ if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
82275
+ this.input.maskInstance.updateValue();
82276
+ }
82277
+ if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
82278
+ this.inputInBib.maskInstance.updateValue();
82279
+ }
82280
+ this._syncingDisplayValue = false;
82281
+ });
82282
+ }
81926
82283
  }
81927
82284
 
81928
82285
  // update the displayValue in the trigger if displayValue slot content is present
@@ -81950,48 +82307,6 @@ class AuroCombobox extends AuroElement$3 {
81950
82307
  this.requestUpdate();
81951
82308
  }
81952
82309
 
81953
- /**
81954
- * Writes nextValue to the trigger input and the bib input when their current
81955
- * value differs, then re-asserts imask after Lit's update flushes.
81956
- * @param {string} nextValue - The value to write to both inputs.
81957
- * @returns {Promise<void> | null} Promise that resolves after the inputs flush,
81958
- * or null when no sync was needed (so callers can skip post-flush work).
81959
- * @private
81960
- */
81961
- syncInputValuesAcrossTriggerAndBib(nextValue) {
81962
- // Only set the flag when there's an actual write to suppress —
81963
- // syncValuesAndStates re-enters here during typing when both inputs
81964
- // already match, and a no-op flag flip would make the bib branch's
81965
- // bail eat legitimate user-input events.
81966
- const triggerNeedsSync = this.input.value !== nextValue;
81967
- const bibNeedsSync = this.inputInBib.value !== nextValue;
81968
- if (!triggerNeedsSync && !bibNeedsSync) {
81969
- return null;
81970
- }
81971
-
81972
- this._syncingDisplayValue = true;
81973
-
81974
- const pending = [];
81975
- if (triggerNeedsSync) {
81976
- this.input.value = nextValue;
81977
- pending.push(this.input.updateComplete);
81978
- }
81979
- if (bibNeedsSync) {
81980
- this.inputInBib.value = nextValue;
81981
- pending.push(this.inputInBib.updateComplete);
81982
- }
81983
- return Promise.all(pending).then(() => {
81984
- // imask reasserts otherwise, and handleBlur reverts to its stale value.
81985
- if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
81986
- this.input.maskInstance.updateValue();
81987
- }
81988
- if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
81989
- this.inputInBib.maskInstance.updateValue();
81990
- }
81991
- this._syncingDisplayValue = false;
81992
- });
81993
- }
81994
-
81995
82310
  /**
81996
82311
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
81997
82312
  * @private
@@ -82019,9 +82334,9 @@ class AuroCombobox extends AuroElement$3 {
82019
82334
  this.syncValuesAndStates();
82020
82335
  }
82021
82336
 
82022
- // Re-activate when optionActive is not in the current scrollable viewport,
82023
- // or when _index has been reset (e.g. by clearSelection in an async update)
82024
- // so that makeSelection() can find the correct option.
82337
+ // Re-activate when optionActive is no longer visible, or when _index has
82338
+ // been reset (e.g. by clearSelection in an async update) so that
82339
+ // makeSelection() can find the correct option.
82025
82340
  if (!this.availableOptions.includes(this.menu.optionActive) || this.menu._index < 0) {
82026
82341
  this.activateFirstEnabledAvailableOption();
82027
82342
  }
@@ -82155,25 +82470,28 @@ class AuroCombobox extends AuroElement$3 {
82155
82470
 
82156
82471
  guardTouchPassthrough$1(this.menu);
82157
82472
 
82158
- // showModal() takes focus away from the trigger. Early focus once
82159
- // the dialog has painted; the shared doubleRaf below is the fallback
82160
- // for when the dialog needs an extra frame and also clears the
82161
- // validation guard.
82473
+ // The dialog's showModal() steals focus from the trigger.
82474
+ // A single rAF is enough for the dialog DOM to be painted and
82475
+ // focusable, then doubleRaf finalizes the transition.
82162
82476
  requestAnimationFrame(() => {
82163
82477
  this.setInputFocus();
82164
82478
  });
82165
- }
82166
- // else (desktop popover-open): Chrome resets the trigger caret to
82167
- // [0, 0] when its floating <label for="…"> overlay receives focus.
82168
- // The shared doubleRaf below parks the caret back at end-of-text
82169
- // after the dropdown layout settles.
82170
-
82171
- doubleRaf$1(() => {
82172
- this.setInputFocus();
82173
- if (this._inFullscreenTransition) {
82479
+
82480
+ doubleRaf$1(() => {
82481
+ this.setInputFocus();
82174
82482
  this._inFullscreenTransition = false;
82175
- }
82176
- });
82483
+ });
82484
+ } else {
82485
+ // Desktop popover-open: restore the trigger caret to end-of-text.
82486
+ // Clicking the trigger lands on auro-input's floating <label for="…">
82487
+ // overlay; Chrome resets the native input's selection to [0, 0] on
82488
+ // label-focus before any JS runs. setInputFocus()'s non-fullscreen
82489
+ // branch parks the caret at end. doubleRaf lets the dropdown layout
82490
+ // settle first, matching the fullscreen branch timing.
82491
+ doubleRaf$1(() => {
82492
+ this.setInputFocus();
82493
+ });
82494
+ }
82177
82495
  }
82178
82496
  });
82179
82497
 
@@ -82384,7 +82702,7 @@ class AuroCombobox extends AuroElement$3 {
82384
82702
  if (this.menu.optionSelected) {
82385
82703
  const selected = this.menu.optionSelected;
82386
82704
 
82387
- if (this.optionSelected !== selected) {
82705
+ if (!this.optionSelected || this.optionSelected !== selected) {
82388
82706
  this.optionSelected = selected;
82389
82707
  }
82390
82708
 
@@ -82397,7 +82715,7 @@ class AuroCombobox extends AuroElement$3 {
82397
82715
  }
82398
82716
 
82399
82717
  // Update display
82400
- this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected));
82718
+ this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected) || this.menu.value);
82401
82719
 
82402
82720
  // Update match word for filtering
82403
82721
  const trimmedInput = normalizeFilterValue(this.input.value);
@@ -82413,22 +82731,13 @@ class AuroCombobox extends AuroElement$3 {
82413
82731
  this.hideBib();
82414
82732
  }
82415
82733
 
82416
- // Move focus to the clear button when the user makes a selection.
82417
- if (!isEcho && this.menu.value !== undefined) {
82418
- this.setClearBtnFocus();
82419
- }
82420
-
82421
82734
  // Announce the selection after the dropdown closes so it isn't
82422
82735
  // overridden by VoiceOver's "collapsed" announcement from aria-expanded.
82423
- // Skip when there's no selected value (e.g. menu.clearSelection() from
82424
- // the unmatched-value path), otherwise VoiceOver reads "undefined".
82425
82736
  const selectedValue = this.menu.value;
82426
- if (selectedValue) {
82427
- const announcementDelay = 300;
82428
- setTimeout(() => {
82429
- announceToScreenReader$1(this._getAnnouncementRoot(), `${selectedValue}, selected`);
82430
- }, announcementDelay);
82431
- }
82737
+ const announcementDelay = 300;
82738
+ setTimeout(() => {
82739
+ announceToScreenReader$1(this._getAnnouncementRoot(), `${selectedValue}, selected`);
82740
+ }, announcementDelay);
82432
82741
  }
82433
82742
 
82434
82743
  // Programmatic value syncs leave availableOptions stale because
@@ -82442,6 +82751,18 @@ class AuroCombobox extends AuroElement$3 {
82442
82751
  this._programmaticFilterRefresh = false;
82443
82752
  }, 0);
82444
82753
  }
82754
+
82755
+ // base-input skips auto-validate when focus is inside its own shadow,
82756
+ // which it is after setTriggerInputFocus — re-run so prior tooShort
82757
+ // clears. processCreditCard reasserts errorMessage on every render.
82758
+ if (!isEcho && this.menu.optionSelected && this.input.validate) {
82759
+ this.input.updateComplete.then(() => {
82760
+ this.input.validate(true);
82761
+ if (this.input.validity === 'valid') {
82762
+ this.input.errorMessage = '';
82763
+ }
82764
+ });
82765
+ }
82445
82766
  });
82446
82767
 
82447
82768
  this.menu.addEventListener('auroMenu-customEventFired', () => {
@@ -82776,7 +83097,15 @@ class AuroCombobox extends AuroElement$3 {
82776
83097
  this.menu.value = undefined;
82777
83098
  this.validation.reset(this);
82778
83099
  this.touched = false;
83100
+ // Force validity back to the cleared state. validation.reset() calls
83101
+ // validate() at the end, and (post-credit-card-fix) the trigger input's
83102
+ // residual validity may still be copied into the combobox by the
83103
+ // auroInputElements loop. Explicitly clear here so reset() actually
83104
+ // leaves the component in a "no validity" state.
82779
83105
  this.validity = undefined;
83106
+ this.errorMessage = '';
83107
+ this.input.validity = undefined;
83108
+ this.input.errorMessage = '';
82780
83109
  }
82781
83110
 
82782
83111
  /**
@@ -82829,27 +83158,52 @@ class AuroCombobox extends AuroElement$3 {
82829
83158
  this.input.value = this.value;
82830
83159
  }
82831
83160
 
82832
- // Sync menu.value only when an option actually matches, or when filter
82833
- // mode needs setMenuValue to dispatch auroMenu-selectValueFailure (the
82834
- // listener at line 1206 clears combobox.value, mirroring select's
82835
- // pattern). Otherwise sync the input display for freeform values.
83161
+ // Sync menu.value only when an option actually matches; otherwise clear it.
82836
83162
  if (this.menu.options && this.menu.options.length > 0) {
82837
- if (this.menu.options.some((opt) => opt.value === this.value) || this.behavior === 'filter') {
83163
+ if (this.menu.options.some((opt) => opt.value === this.value)) {
83164
+ this.setMenuValue(this.value);
83165
+ } else if (this.behavior === 'filter') {
83166
+ // In filter mode, freeform values aren't allowed. Push the unmatched
83167
+ // value through setMenuValue so menu dispatches auroMenu-selectValueFailure
83168
+ // and the listener at line 1206 clears combobox.value (mirrors select's
83169
+ // pattern). Bypassing setMenuValue here would skip the failure cascade.
82838
83170
  this.setMenuValue(this.value);
82839
83171
  } else {
82840
- // Clear menu.value AND menu.optionSelected together. Clearing only
82841
- // menu.value leaves the previously-selected option element pinned
82842
- // as menu.optionSelected; a later auroMenu-selectedOption event
82843
- // would then write its stale .value back into combobox.value.
82844
- if (this.menu.value || this.menu.optionSelected) {
82845
- this.menu.clearSelection();
83172
+ if (this.menu.value) {
83173
+ this.menu.value = undefined;
82846
83174
  }
82847
- // Suggestion-mode freeform value: sync the trigger + bib to show it,
82848
- // then refresh the filter once the inputs flush (handleInputValueChange
82849
- // bailed on _syncingDisplayValue).
82850
- const syncPromise = this.syncInputValuesAcrossTriggerAndBib(this.value || '');
82851
- if (syncPromise) {
82852
- syncPromise.then(() => {
83175
+ // Sync the display for programmatic freeform value changes (e.g. the
83176
+ // swap-values pattern). Guard with _syncingDisplayValue so that the
83177
+ // re-entrant input event from base-input.notifyValueChanged() is
83178
+ // ignored by handleInputValueChange. Skip the sync when input already
83179
+ // matches to avoid spurious events during the normal typing path.
83180
+ const nextValue = this.value || '';
83181
+ const triggerNeedsSync = this.input.value !== nextValue;
83182
+ const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
83183
+ if (triggerNeedsSync || bibNeedsSync) {
83184
+ this._syncingDisplayValue = true;
83185
+ if (triggerNeedsSync) {
83186
+ this.input.value = nextValue;
83187
+ }
83188
+ if (bibNeedsSync) {
83189
+ this.inputInBib.value = nextValue;
83190
+ }
83191
+ const pending = [];
83192
+ if (triggerNeedsSync) {
83193
+ pending.push(this.input.updateComplete);
83194
+ }
83195
+ if (bibNeedsSync) {
83196
+ pending.push(this.inputInBib.updateComplete);
83197
+ }
83198
+ Promise.all(pending).then(() => {
83199
+ if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
83200
+ this.input.maskInstance.updateValue();
83201
+ }
83202
+ if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
83203
+ this.inputInBib.maskInstance.updateValue();
83204
+ }
83205
+ this._syncingDisplayValue = false;
83206
+ // handleInputValueChange bailed on the flag — refresh the filter.
82853
83207
  this._programmaticFilterRefresh = true;
82854
83208
  this.handleMenuOptions();
82855
83209
  setTimeout(() => {
@@ -89682,7 +90036,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
89682
90036
  }
89683
90037
  };
89684
90038
 
89685
- var formkitVersion$1 = '202606231948';
90039
+ var formkitVersion$1 = '202606241801';
89686
90040
 
89687
90041
  class AuroElement extends i$3 {
89688
90042
  static get properties() {
@@ -91703,7 +92057,7 @@ class AuroHelpText extends i$3 {
91703
92057
  }
91704
92058
  }
91705
92059
 
91706
- var formkitVersion = '202606231948';
92060
+ var formkitVersion = '202606241801';
91707
92061
 
91708
92062
  var styleCss = i$6`.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}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
91709
92063