@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
@@ -10460,7 +10460,6 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
10460
10460
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
10461
10461
 
10462
10462
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
10463
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
10464
10463
  return undefined;
10465
10464
  }
10466
10465
 
@@ -10612,8 +10611,10 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
10612
10611
  this.layout = 'classic';
10613
10612
  this.locale = 'en-US';
10614
10613
  this.max = undefined;
10614
+ this._maxObject = undefined;
10615
10615
  this.maxLength = undefined;
10616
10616
  this.min = undefined;
10617
+ this._minObject = undefined;
10617
10618
  this.minLength = undefined;
10618
10619
  this.required = false;
10619
10620
  this.onDark = false;
@@ -10621,6 +10622,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
10621
10622
  this.size = 'lg';
10622
10623
  this.shape = 'classic';
10623
10624
  this.value = undefined;
10625
+ this._valueObject = undefined;
10624
10626
 
10625
10627
  this._initializePrivateDefaults();
10626
10628
  }
@@ -11160,7 +11162,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11160
11162
  * @returns {Date|undefined}
11161
11163
  */
11162
11164
  get valueObject() {
11163
- return this.value && dateFormatter$3.isValidDate(this.value) ? dateFormatter$3.stringToDateInstance(this.value) : undefined;
11165
+ return this._valueObject || this._computeDateObjectFallback(this.value);
11164
11166
  }
11165
11167
 
11166
11168
  /**
@@ -11168,7 +11170,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11168
11170
  * @returns {Date|undefined}
11169
11171
  */
11170
11172
  get minObject() {
11171
- return this.min && dateFormatter$3.isValidDate(this.min) ? dateFormatter$3.stringToDateInstance(this.min) : undefined;
11173
+ return this._minObject || this._computeDateObjectFallback(this.min);
11172
11174
  }
11173
11175
 
11174
11176
  /**
@@ -11176,7 +11178,50 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11176
11178
  * @returns {Date|undefined}
11177
11179
  */
11178
11180
  get maxObject() {
11179
- return this.max && dateFormatter$3.isValidDate(this.max) ? dateFormatter$3.stringToDateInstance(this.max) : undefined;
11181
+ return this._maxObject || this._computeDateObjectFallback(this.max);
11182
+ }
11183
+
11184
+ /**
11185
+ * Parses a date string into a Date object when the corresponding `_*Object`
11186
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
11187
+ * input type/format isn't a full date or the string is not a valid date.
11188
+ *
11189
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
11190
+ * inside its own `updated()` before this input's `updated()` has run
11191
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
11192
+ * and range checks would otherwise silently no-op (flipping the result to
11193
+ * `valid` or `patternMismatch`).
11194
+ * @private
11195
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
11196
+ * @returns {Date|undefined}
11197
+ */
11198
+ _computeDateObjectFallback(dateStr) {
11199
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
11200
+ return undefined;
11201
+ }
11202
+ if (!dateFormatter$3.isValidDate(dateStr)) {
11203
+ return undefined;
11204
+ }
11205
+ return dateFormatter$3.stringToDateInstance(dateStr);
11206
+ }
11207
+
11208
+ /**
11209
+ * Internal setter for readonly date object properties.
11210
+ * @private
11211
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
11212
+ * @param {Date|undefined} propertyValue - Value to assign.
11213
+ * @returns {void}
11214
+ */
11215
+ setDateObjectProperty(propertyName, propertyValue) {
11216
+ const internalPropertyName = `_${propertyName}`;
11217
+ const previousValue = this[internalPropertyName];
11218
+
11219
+ if (previousValue === propertyValue) {
11220
+ return;
11221
+ }
11222
+
11223
+ this[internalPropertyName] = propertyValue;
11224
+ this.requestUpdate(propertyName, previousValue);
11180
11225
  }
11181
11226
 
11182
11227
  connectedCallback() {
@@ -11205,6 +11250,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11205
11250
  format: this.format
11206
11251
  });
11207
11252
  this.configureDataForType();
11253
+ this.syncDateValues();
11208
11254
  }
11209
11255
 
11210
11256
  disconnectedCallback() {
@@ -11234,6 +11280,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11234
11280
  this.setCustomHelpTextMessage();
11235
11281
  this.configureAutoFormatting();
11236
11282
  this.configureDataForType();
11283
+ this.syncDateValues();
11237
11284
  }
11238
11285
 
11239
11286
  /**
@@ -11309,6 +11356,13 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11309
11356
 
11310
11357
  if (typeToI18n.includes(this.type)) {
11311
11358
  this.setCustomValidityForType = i18n$3(this.lang, this.type);
11359
+ // COVERAGE: this `else if` branch is unreachable in WTR. connectedCallback
11360
+ // (L682) calls configureDataForType, which at L1266-1268 assigns
11361
+ // `this.format = this.util.getDateMaskFromLocale().toLowerCase()` for any
11362
+ // type=date input whose `format` attribute is unset. That runs before
11363
+ // firstUpdated invokes setCustomHelpTextMessage, so `!this.format` is
11364
+ // always false here. Retained as a defensive fallback; the whole function
11365
+ // is @deprecated per AB#1557296 and slated for removal.
11312
11366
  } else if (!this.format && this.type === 'date') {
11313
11367
  this.setCustomValidityForType = i18n$3(this.lang, 'dateMMDDYYYY');
11314
11368
  } else if (this.dateFormatMap[this.format]) {
@@ -11370,6 +11424,8 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11370
11424
  this.configureDataForType();
11371
11425
  }
11372
11426
 
11427
+ this.syncDateValues(changedProperties);
11428
+
11373
11429
  if (changedProperties.has('value')) {
11374
11430
  if (this.value && this.value.length > 0) {
11375
11431
  this.hasValue = true;
@@ -11391,14 +11447,14 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11391
11447
 
11392
11448
  if (formattedValue !== this.inputElement.value) {
11393
11449
  this.skipNextProgrammaticInputEvent = true;
11394
- if (this.maskInstance && this.type !== 'date') {
11450
+ if (this.maskInstance && this.type === 'credit-card') {
11395
11451
  // Route through the mask so its _value and el.value stay in lock-step
11396
11452
  // (set value calls updateControl which writes el.value = displayValue).
11397
11453
  // Writing el.value directly leaves the mask thinking displayValue is
11398
- // stale; _saveSelection on the next focus/click then warns. Date is
11399
- // excluded because its formattedValue can be raw ISO when the calendar
11400
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
11401
- // flip validity from patternMismatch to tooShort.
11454
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
11455
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
11456
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
11457
+ // and flip validity from patternMismatch to tooShort.
11402
11458
  this.maskInstance.value = formattedValue || '';
11403
11459
  } else if (formattedValue) {
11404
11460
  this.inputElement.value = formattedValue;
@@ -11440,65 +11496,120 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11440
11496
  }));
11441
11497
  }
11442
11498
 
11499
+
11500
+ /**
11501
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
11502
+ * This keeps the model and display values aligned when either side changes.
11503
+ *
11504
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
11505
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
11506
+ * represents a full year/month/day date format.
11507
+ *
11508
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
11509
+ * @returns {void}
11510
+ * @private
11511
+ */
11512
+ syncDateValues(changedProperties = undefined) {
11513
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
11514
+ return;
11515
+ }
11516
+
11517
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
11518
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
11519
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
11520
+ }
11521
+
11522
+ /**
11523
+ * Synchronizes one date object/string property pair.
11524
+ * @private
11525
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
11526
+ * @param {string} objectProperty - Date object property name.
11527
+ * @param {string} valueProperty - ISO string property name.
11528
+ * @returns {void}
11529
+ */
11530
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
11531
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
11532
+
11533
+ // objectProperty wins over valueProperty when both changed
11534
+ if (objectPropertyChanged && this[objectProperty]) {
11535
+ this[valueProperty] = dateFormatter$3.toISOFormatString(this[objectProperty]);
11536
+ return;
11537
+ }
11538
+
11539
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
11540
+ if (!valuePropertyChanged) {
11541
+ return;
11542
+ }
11543
+
11544
+ // 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)
11545
+ if (
11546
+ changedProperties &&
11547
+ valueProperty === 'value' &&
11548
+ changedProperties.get('value') === undefined &&
11549
+ this[objectProperty] instanceof Date &&
11550
+ this[valueProperty] === dateFormatter$3.toISOFormatString(this[objectProperty])
11551
+ ) {
11552
+ return;
11553
+ }
11554
+
11555
+ if (dateFormatter$3.isValidDate(this[valueProperty])) {
11556
+ this.setDateObjectProperty(objectProperty, dateFormatter$3.stringToDateInstance(this[valueProperty]));
11557
+ } else {
11558
+ this.setDateObjectProperty(objectProperty, undefined);
11559
+ }
11560
+ }
11561
+
11443
11562
  /**
11444
11563
  * Sets up IMasks and logic based on auto-formatting requirements.
11445
11564
  * @private
11446
11565
  * @returns {void}
11447
11566
  */
11448
11567
  configureAutoFormatting() {
11449
- // _configuringMask gates two things: external re-entry into this method
11450
- // while setup is mid-flight (from property changes that call back here),
11451
- // and the accept/complete listeners below both need to ignore the mask
11452
- // events fired by our own value-restore step.
11568
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
11569
+ // by _configuringMask above) could otherwise trigger handleInput
11570
+ // processCreditCard configureAutoFormatting before the outer call's
11571
+ // set value has finished its alignCursor pass.
11453
11572
  if (this._configuringMask) return;
11454
11573
  this._configuringMask = true;
11455
11574
  try {
11456
- // Destroy any prior mask so IMask can attach fresh under the new format.
11457
- // Null the reference too — if the new maskOptions.mask is falsy (e.g.
11458
- // type switched from credit-card to text) the IMask() reassignment
11459
- // below is skipped, and downstream writes at line ~823 would otherwise
11460
- // route through the destroyed instance.
11461
11575
  if (this.maskInstance) {
11462
11576
  this.maskInstance.destroy();
11463
- this.maskInstance = null;
11464
11577
  }
11465
11578
 
11579
+ // Pass new format to util
11466
11580
  this.util.updateFormat(this.format);
11467
11581
 
11468
11582
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
11469
11583
 
11470
11584
  if (this.inputElement && maskOptions.mask) {
11471
- // Capture the current display so it can be re-applied after IMask
11472
- // attaches. The restore at the bottom goes through maskInstance.value
11473
- // (not inputElement.value directly) so the mask's internal state and
11474
- // the input's displayed text stay in lock-step.
11475
- let existingValue = this.inputElement.value;
11476
11585
 
11477
- // Format-change case (e.g. locale switch): existingValue is the OLD
11478
- // mask's display string and may not parse under the new mask. When
11479
- // we have a valid date model, rebuild the display from valueObject
11480
- // (the canonical source) using the new mask's format function.
11586
+ // Stash and clear any existing value before IMask init.
11587
+ // IMask's constructor processes the current input value which requires
11588
+ // selection state clearing first avoids that scenario entirely.
11589
+ // When the format changes (e.g. locale switch) and we have a valid ISO
11590
+ // model value, compute the display string for the NEW format instead of
11591
+ // re-using the old display string, which may be invalid in the new mask.
11592
+ let existingValue = this.inputElement.value;
11481
11593
  if (
11482
11594
  this.util.isFullDateFormat(this.type, this.format) &&
11483
11595
  this.value &&
11484
- this.valueObject &&
11596
+ dateFormatter$3.isValidDate(this.value) &&
11597
+ this.valueObject instanceof Date &&
11598
+ !Number.isNaN(this.valueObject.getTime()) &&
11485
11599
  typeof maskOptions.format === 'function'
11486
11600
  ) {
11487
11601
  existingValue = maskOptions.format(this.valueObject);
11488
11602
  }
11489
11603
 
11490
- // Clear before IMask attaches so the constructor seeds an empty
11491
- // internal value. Otherwise IMask reads the stale unmasked string
11492
- // and emits a spurious 'accept' before the restore below runs.
11493
11604
  this.skipNextProgrammaticInputEvent = true;
11494
11605
  this.inputElement.value = '';
11495
11606
 
11496
11607
  this.maskInstance = IMask$3(this.inputElement, maskOptions);
11497
11608
 
11498
- // Mask fires 'accept' on every value change, including the restore
11499
- // step below. Skip events fired during configureAutoFormatting so
11500
- // we don't overwrite a value the parent just pushed.
11501
11609
  this.maskInstance.on('accept', () => {
11610
+ // Suppress propagation during configureAutoFormatting's own value-restoration
11611
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
11612
+ // and we don't want to overwrite a value the parent just pushed.
11502
11613
  if (this._configuringMask) return;
11503
11614
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
11504
11615
  if (this.type === "date") {
@@ -11506,8 +11617,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11506
11617
  }
11507
11618
  });
11508
11619
 
11509
- // Mask fires 'complete' on the restore step below for any value that
11510
- // happens to be a complete match. Same setup-suppression as 'accept'.
11511
11620
  this.maskInstance.on('complete', () => {
11512
11621
  if (this._configuringMask) return;
11513
11622
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -11516,9 +11625,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11516
11625
  }
11517
11626
  });
11518
11627
 
11519
- // Write existingValue through the mask (not the input directly) so
11520
- // the mask reformats it under the new rules and keeps its internal
11521
- // _value aligned with the input's displayed text.
11628
+ // Restore the stashed value through IMask so it's properly masked
11522
11629
  if (existingValue) {
11523
11630
  this.maskInstance.value = existingValue;
11524
11631
  }
@@ -11686,6 +11793,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11686
11793
  */
11687
11794
  reset() {
11688
11795
  this.value = undefined;
11796
+ this.setDateObjectProperty('valueObject', undefined);
11689
11797
  this.validation.reset(this);
11690
11798
  }
11691
11799
 
@@ -11694,6 +11802,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11694
11802
  */
11695
11803
  clear() {
11696
11804
  this.value = undefined;
11805
+ this.setDateObjectProperty('valueObject', undefined);
11697
11806
  }
11698
11807
 
11699
11808
  /**
@@ -11731,7 +11840,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11731
11840
  */
11732
11841
  get placeholderStr() {
11733
11842
  if (!this.placeholder && this.type === 'date') {
11734
- return this.format ? this.format.toUpperCase() : 'MM/DD/YYYY';
11843
+ return this.format.toUpperCase();
11735
11844
  }
11736
11845
  return this.placeholder || "";
11737
11846
  }
@@ -12222,7 +12331,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$2 {
12222
12331
  }
12223
12332
  };
12224
12333
 
12225
- var formkitVersion$8 = '202606231948';
12334
+ var formkitVersion$8 = '202606241801';
12226
12335
 
12227
12336
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12228
12337
  // See LICENSE in the project root for license information.
@@ -23461,7 +23570,6 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
23461
23570
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
23462
23571
 
23463
23572
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
23464
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
23465
23573
  return undefined;
23466
23574
  }
23467
23575
 
@@ -26342,7 +26450,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$2 {
26342
26450
  }
26343
26451
  };
26344
26452
 
26345
- var formkitVersion$2$1 = '202606231948';
26453
+ var formkitVersion$2$1 = '202606241801';
26346
26454
 
26347
26455
  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$5`${s$5(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$4`: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}
26348
26456
  `,u$4$2=i$4`.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}}
@@ -31853,7 +31961,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
31853
31961
  }
31854
31962
  };
31855
31963
 
31856
- var formkitVersion$1$3 = '202606231948';
31964
+ var formkitVersion$1$3 = '202606241801';
31857
31965
 
31858
31966
  let AuroElement$2$2 = class AuroElement extends i$2 {
31859
31967
  static get properties() {
@@ -43575,7 +43683,6 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
43575
43683
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
43576
43684
 
43577
43685
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
43578
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
43579
43686
  return undefined;
43580
43687
  }
43581
43688
 
@@ -43727,8 +43834,10 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
43727
43834
  this.layout = 'classic';
43728
43835
  this.locale = 'en-US';
43729
43836
  this.max = undefined;
43837
+ this._maxObject = undefined;
43730
43838
  this.maxLength = undefined;
43731
43839
  this.min = undefined;
43840
+ this._minObject = undefined;
43732
43841
  this.minLength = undefined;
43733
43842
  this.required = false;
43734
43843
  this.onDark = false;
@@ -43736,6 +43845,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
43736
43845
  this.size = 'lg';
43737
43846
  this.shape = 'classic';
43738
43847
  this.value = undefined;
43848
+ this._valueObject = undefined;
43739
43849
 
43740
43850
  this._initializePrivateDefaults();
43741
43851
  }
@@ -44275,7 +44385,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44275
44385
  * @returns {Date|undefined}
44276
44386
  */
44277
44387
  get valueObject() {
44278
- return this.value && dateFormatter$2.isValidDate(this.value) ? dateFormatter$2.stringToDateInstance(this.value) : undefined;
44388
+ return this._valueObject || this._computeDateObjectFallback(this.value);
44279
44389
  }
44280
44390
 
44281
44391
  /**
@@ -44283,7 +44393,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44283
44393
  * @returns {Date|undefined}
44284
44394
  */
44285
44395
  get minObject() {
44286
- return this.min && dateFormatter$2.isValidDate(this.min) ? dateFormatter$2.stringToDateInstance(this.min) : undefined;
44396
+ return this._minObject || this._computeDateObjectFallback(this.min);
44287
44397
  }
44288
44398
 
44289
44399
  /**
@@ -44291,7 +44401,50 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44291
44401
  * @returns {Date|undefined}
44292
44402
  */
44293
44403
  get maxObject() {
44294
- return this.max && dateFormatter$2.isValidDate(this.max) ? dateFormatter$2.stringToDateInstance(this.max) : undefined;
44404
+ return this._maxObject || this._computeDateObjectFallback(this.max);
44405
+ }
44406
+
44407
+ /**
44408
+ * Parses a date string into a Date object when the corresponding `_*Object`
44409
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
44410
+ * input type/format isn't a full date or the string is not a valid date.
44411
+ *
44412
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
44413
+ * inside its own `updated()` before this input's `updated()` has run
44414
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
44415
+ * and range checks would otherwise silently no-op (flipping the result to
44416
+ * `valid` or `patternMismatch`).
44417
+ * @private
44418
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
44419
+ * @returns {Date|undefined}
44420
+ */
44421
+ _computeDateObjectFallback(dateStr) {
44422
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
44423
+ return undefined;
44424
+ }
44425
+ if (!dateFormatter$2.isValidDate(dateStr)) {
44426
+ return undefined;
44427
+ }
44428
+ return dateFormatter$2.stringToDateInstance(dateStr);
44429
+ }
44430
+
44431
+ /**
44432
+ * Internal setter for readonly date object properties.
44433
+ * @private
44434
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
44435
+ * @param {Date|undefined} propertyValue - Value to assign.
44436
+ * @returns {void}
44437
+ */
44438
+ setDateObjectProperty(propertyName, propertyValue) {
44439
+ const internalPropertyName = `_${propertyName}`;
44440
+ const previousValue = this[internalPropertyName];
44441
+
44442
+ if (previousValue === propertyValue) {
44443
+ return;
44444
+ }
44445
+
44446
+ this[internalPropertyName] = propertyValue;
44447
+ this.requestUpdate(propertyName, previousValue);
44295
44448
  }
44296
44449
 
44297
44450
  connectedCallback() {
@@ -44320,6 +44473,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44320
44473
  format: this.format
44321
44474
  });
44322
44475
  this.configureDataForType();
44476
+ this.syncDateValues();
44323
44477
  }
44324
44478
 
44325
44479
  disconnectedCallback() {
@@ -44349,6 +44503,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44349
44503
  this.setCustomHelpTextMessage();
44350
44504
  this.configureAutoFormatting();
44351
44505
  this.configureDataForType();
44506
+ this.syncDateValues();
44352
44507
  }
44353
44508
 
44354
44509
  /**
@@ -44424,6 +44579,13 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44424
44579
 
44425
44580
  if (typeToI18n.includes(this.type)) {
44426
44581
  this.setCustomValidityForType = i18n$1(this.lang, this.type);
44582
+ // COVERAGE: this `else if` branch is unreachable in WTR. connectedCallback
44583
+ // (L682) calls configureDataForType, which at L1266-1268 assigns
44584
+ // `this.format = this.util.getDateMaskFromLocale().toLowerCase()` for any
44585
+ // type=date input whose `format` attribute is unset. That runs before
44586
+ // firstUpdated invokes setCustomHelpTextMessage, so `!this.format` is
44587
+ // always false here. Retained as a defensive fallback; the whole function
44588
+ // is @deprecated per AB#1557296 and slated for removal.
44427
44589
  } else if (!this.format && this.type === 'date') {
44428
44590
  this.setCustomValidityForType = i18n$1(this.lang, 'dateMMDDYYYY');
44429
44591
  } else if (this.dateFormatMap[this.format]) {
@@ -44485,6 +44647,8 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44485
44647
  this.configureDataForType();
44486
44648
  }
44487
44649
 
44650
+ this.syncDateValues(changedProperties);
44651
+
44488
44652
  if (changedProperties.has('value')) {
44489
44653
  if (this.value && this.value.length > 0) {
44490
44654
  this.hasValue = true;
@@ -44506,14 +44670,14 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44506
44670
 
44507
44671
  if (formattedValue !== this.inputElement.value) {
44508
44672
  this.skipNextProgrammaticInputEvent = true;
44509
- if (this.maskInstance && this.type !== 'date') {
44673
+ if (this.maskInstance && this.type === 'credit-card') {
44510
44674
  // Route through the mask so its _value and el.value stay in lock-step
44511
44675
  // (set value calls updateControl which writes el.value = displayValue).
44512
44676
  // Writing el.value directly leaves the mask thinking displayValue is
44513
- // stale; _saveSelection on the next focus/click then warns. Date is
44514
- // excluded because its formattedValue can be raw ISO when the calendar
44515
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
44516
- // flip validity from patternMismatch to tooShort.
44677
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
44678
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
44679
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
44680
+ // and flip validity from patternMismatch to tooShort.
44517
44681
  this.maskInstance.value = formattedValue || '';
44518
44682
  } else if (formattedValue) {
44519
44683
  this.inputElement.value = formattedValue;
@@ -44555,65 +44719,120 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44555
44719
  }));
44556
44720
  }
44557
44721
 
44722
+
44723
+ /**
44724
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
44725
+ * This keeps the model and display values aligned when either side changes.
44726
+ *
44727
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
44728
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
44729
+ * represents a full year/month/day date format.
44730
+ *
44731
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
44732
+ * @returns {void}
44733
+ * @private
44734
+ */
44735
+ syncDateValues(changedProperties = undefined) {
44736
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
44737
+ return;
44738
+ }
44739
+
44740
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
44741
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
44742
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
44743
+ }
44744
+
44745
+ /**
44746
+ * Synchronizes one date object/string property pair.
44747
+ * @private
44748
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
44749
+ * @param {string} objectProperty - Date object property name.
44750
+ * @param {string} valueProperty - ISO string property name.
44751
+ * @returns {void}
44752
+ */
44753
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
44754
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
44755
+
44756
+ // objectProperty wins over valueProperty when both changed
44757
+ if (objectPropertyChanged && this[objectProperty]) {
44758
+ this[valueProperty] = dateFormatter$2.toISOFormatString(this[objectProperty]);
44759
+ return;
44760
+ }
44761
+
44762
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
44763
+ if (!valuePropertyChanged) {
44764
+ return;
44765
+ }
44766
+
44767
+ // 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)
44768
+ if (
44769
+ changedProperties &&
44770
+ valueProperty === 'value' &&
44771
+ changedProperties.get('value') === undefined &&
44772
+ this[objectProperty] instanceof Date &&
44773
+ this[valueProperty] === dateFormatter$2.toISOFormatString(this[objectProperty])
44774
+ ) {
44775
+ return;
44776
+ }
44777
+
44778
+ if (dateFormatter$2.isValidDate(this[valueProperty])) {
44779
+ this.setDateObjectProperty(objectProperty, dateFormatter$2.stringToDateInstance(this[valueProperty]));
44780
+ } else {
44781
+ this.setDateObjectProperty(objectProperty, undefined);
44782
+ }
44783
+ }
44784
+
44558
44785
  /**
44559
44786
  * Sets up IMasks and logic based on auto-formatting requirements.
44560
44787
  * @private
44561
44788
  * @returns {void}
44562
44789
  */
44563
44790
  configureAutoFormatting() {
44564
- // _configuringMask gates two things: external re-entry into this method
44565
- // while setup is mid-flight (from property changes that call back here),
44566
- // and the accept/complete listeners below both need to ignore the mask
44567
- // events fired by our own value-restore step.
44791
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
44792
+ // by _configuringMask above) could otherwise trigger handleInput
44793
+ // processCreditCard configureAutoFormatting before the outer call's
44794
+ // set value has finished its alignCursor pass.
44568
44795
  if (this._configuringMask) return;
44569
44796
  this._configuringMask = true;
44570
44797
  try {
44571
- // Destroy any prior mask so IMask can attach fresh under the new format.
44572
- // Null the reference too — if the new maskOptions.mask is falsy (e.g.
44573
- // type switched from credit-card to text) the IMask() reassignment
44574
- // below is skipped, and downstream writes at line ~823 would otherwise
44575
- // route through the destroyed instance.
44576
44798
  if (this.maskInstance) {
44577
44799
  this.maskInstance.destroy();
44578
- this.maskInstance = null;
44579
44800
  }
44580
44801
 
44802
+ // Pass new format to util
44581
44803
  this.util.updateFormat(this.format);
44582
44804
 
44583
44805
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
44584
44806
 
44585
44807
  if (this.inputElement && maskOptions.mask) {
44586
- // Capture the current display so it can be re-applied after IMask
44587
- // attaches. The restore at the bottom goes through maskInstance.value
44588
- // (not inputElement.value directly) so the mask's internal state and
44589
- // the input's displayed text stay in lock-step.
44590
- let existingValue = this.inputElement.value;
44591
44808
 
44592
- // Format-change case (e.g. locale switch): existingValue is the OLD
44593
- // mask's display string and may not parse under the new mask. When
44594
- // we have a valid date model, rebuild the display from valueObject
44595
- // (the canonical source) using the new mask's format function.
44809
+ // Stash and clear any existing value before IMask init.
44810
+ // IMask's constructor processes the current input value which requires
44811
+ // selection state clearing first avoids that scenario entirely.
44812
+ // When the format changes (e.g. locale switch) and we have a valid ISO
44813
+ // model value, compute the display string for the NEW format instead of
44814
+ // re-using the old display string, which may be invalid in the new mask.
44815
+ let existingValue = this.inputElement.value;
44596
44816
  if (
44597
44817
  this.util.isFullDateFormat(this.type, this.format) &&
44598
44818
  this.value &&
44599
- this.valueObject &&
44819
+ dateFormatter$2.isValidDate(this.value) &&
44820
+ this.valueObject instanceof Date &&
44821
+ !Number.isNaN(this.valueObject.getTime()) &&
44600
44822
  typeof maskOptions.format === 'function'
44601
44823
  ) {
44602
44824
  existingValue = maskOptions.format(this.valueObject);
44603
44825
  }
44604
44826
 
44605
- // Clear before IMask attaches so the constructor seeds an empty
44606
- // internal value. Otherwise IMask reads the stale unmasked string
44607
- // and emits a spurious 'accept' before the restore below runs.
44608
44827
  this.skipNextProgrammaticInputEvent = true;
44609
44828
  this.inputElement.value = '';
44610
44829
 
44611
44830
  this.maskInstance = IMask$2(this.inputElement, maskOptions);
44612
44831
 
44613
- // Mask fires 'accept' on every value change, including the restore
44614
- // step below. Skip events fired during configureAutoFormatting so
44615
- // we don't overwrite a value the parent just pushed.
44616
44832
  this.maskInstance.on('accept', () => {
44833
+ // Suppress propagation during configureAutoFormatting's own value-restoration
44834
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
44835
+ // and we don't want to overwrite a value the parent just pushed.
44617
44836
  if (this._configuringMask) return;
44618
44837
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
44619
44838
  if (this.type === "date") {
@@ -44621,8 +44840,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44621
44840
  }
44622
44841
  });
44623
44842
 
44624
- // Mask fires 'complete' on the restore step below for any value that
44625
- // happens to be a complete match. Same setup-suppression as 'accept'.
44626
44843
  this.maskInstance.on('complete', () => {
44627
44844
  if (this._configuringMask) return;
44628
44845
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -44631,9 +44848,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44631
44848
  }
44632
44849
  });
44633
44850
 
44634
- // Write existingValue through the mask (not the input directly) so
44635
- // the mask reformats it under the new rules and keeps its internal
44636
- // _value aligned with the input's displayed text.
44851
+ // Restore the stashed value through IMask so it's properly masked
44637
44852
  if (existingValue) {
44638
44853
  this.maskInstance.value = existingValue;
44639
44854
  }
@@ -44801,6 +45016,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44801
45016
  */
44802
45017
  reset() {
44803
45018
  this.value = undefined;
45019
+ this.setDateObjectProperty('valueObject', undefined);
44804
45020
  this.validation.reset(this);
44805
45021
  }
44806
45022
 
@@ -44809,6 +45025,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44809
45025
  */
44810
45026
  clear() {
44811
45027
  this.value = undefined;
45028
+ this.setDateObjectProperty('valueObject', undefined);
44812
45029
  }
44813
45030
 
44814
45031
  /**
@@ -44846,7 +45063,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44846
45063
  */
44847
45064
  get placeholderStr() {
44848
45065
  if (!this.placeholder && this.type === 'date') {
44849
- return this.format ? this.format.toUpperCase() : 'MM/DD/YYYY';
45066
+ return this.format.toUpperCase();
44850
45067
  }
44851
45068
  return this.placeholder || "";
44852
45069
  }
@@ -45337,7 +45554,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
45337
45554
  }
45338
45555
  };
45339
45556
 
45340
- var formkitVersion$7 = '202606231948';
45557
+ var formkitVersion$7 = '202606241801';
45341
45558
 
45342
45559
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
45343
45560
  // See LICENSE in the project root for license information.
@@ -50040,7 +50257,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
50040
50257
  }
50041
50258
  };
50042
50259
 
50043
- var formkitVersion$1$2 = '202606231948';
50260
+ var formkitVersion$1$2 = '202606241801';
50044
50261
 
50045
50262
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
50046
50263
  // See LICENSE in the project root for license information.
@@ -54368,7 +54585,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
54368
54585
  }
54369
54586
  };
54370
54587
 
54371
- var formkitVersion$6 = '202606231948';
54588
+ var formkitVersion$6 = '202606241801';
54372
54589
 
54373
54590
  let AuroElement$1$2 = class AuroElement extends i$2 {
54374
54591
  static get properties() {
@@ -58308,7 +58525,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
58308
58525
  }
58309
58526
  };
58310
58527
 
58311
- var formkitVersion$5 = '202606231948';
58528
+ var formkitVersion$5 = '202606241801';
58312
58529
 
58313
58530
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
58314
58531
  // See LICENSE in the project root for license information.
@@ -60058,7 +60275,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
60058
60275
  }
60059
60276
  };
60060
60277
 
60061
- var formkitVersion$4 = '202606231948';
60278
+ var formkitVersion$4 = '202606241801';
60062
60279
 
60063
60280
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
60064
60281
  // See LICENSE in the project root for license information.
@@ -61234,8 +61451,6 @@ function navigateArrow$1(component, direction, options = {}) {
61234
61451
  }
61235
61452
  }
61236
61453
 
61237
- /* eslint-disable no-underscore-dangle */
61238
-
61239
61454
  /**
61240
61455
  * Returns the clear button element from the active input's shadow
61241
61456
  * DOM, if available.
@@ -61271,9 +61486,11 @@ function isClearBtnFocused(ctx, clearBtn = getClearBtn(ctx)) {
61271
61486
  * @param {Object} menu - The menu component.
61272
61487
  */
61273
61488
  function reconcileMenuIndex(menu) {
61489
+ // eslint-disable-next-line no-underscore-dangle
61274
61490
  if (menu._index < 0 && menu.optionActive && menu.items) {
61275
61491
  const idx = menu.items.indexOf(menu.optionActive);
61276
61492
  if (idx >= 0) {
61493
+ // eslint-disable-next-line no-underscore-dangle
61277
61494
  menu._index = idx;
61278
61495
  }
61279
61496
  }
@@ -65273,7 +65490,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
65273
65490
  }
65274
65491
  };
65275
65492
 
65276
- var formkitVersion$2 = '202606231948';
65493
+ var formkitVersion$2 = '202606241801';
65277
65494
 
65278
65495
  let AuroElement$2$1 = class AuroElement extends i$2 {
65279
65496
  static get properties() {
@@ -76995,7 +77212,6 @@ class AuroInputUtilities {
76995
77212
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
76996
77213
 
76997
77214
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
76998
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
76999
77215
  return undefined;
77000
77216
  }
77001
77217
 
@@ -77147,8 +77363,10 @@ class BaseInput extends AuroElement$1$1 {
77147
77363
  this.layout = 'classic';
77148
77364
  this.locale = 'en-US';
77149
77365
  this.max = undefined;
77366
+ this._maxObject = undefined;
77150
77367
  this.maxLength = undefined;
77151
77368
  this.min = undefined;
77369
+ this._minObject = undefined;
77152
77370
  this.minLength = undefined;
77153
77371
  this.required = false;
77154
77372
  this.onDark = false;
@@ -77156,6 +77374,7 @@ class BaseInput extends AuroElement$1$1 {
77156
77374
  this.size = 'lg';
77157
77375
  this.shape = 'classic';
77158
77376
  this.value = undefined;
77377
+ this._valueObject = undefined;
77159
77378
 
77160
77379
  this._initializePrivateDefaults();
77161
77380
  }
@@ -77695,7 +77914,7 @@ class BaseInput extends AuroElement$1$1 {
77695
77914
  * @returns {Date|undefined}
77696
77915
  */
77697
77916
  get valueObject() {
77698
- return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
77917
+ return this._valueObject || this._computeDateObjectFallback(this.value);
77699
77918
  }
77700
77919
 
77701
77920
  /**
@@ -77703,7 +77922,7 @@ class BaseInput extends AuroElement$1$1 {
77703
77922
  * @returns {Date|undefined}
77704
77923
  */
77705
77924
  get minObject() {
77706
- return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
77925
+ return this._minObject || this._computeDateObjectFallback(this.min);
77707
77926
  }
77708
77927
 
77709
77928
  /**
@@ -77711,7 +77930,50 @@ class BaseInput extends AuroElement$1$1 {
77711
77930
  * @returns {Date|undefined}
77712
77931
  */
77713
77932
  get maxObject() {
77714
- return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
77933
+ return this._maxObject || this._computeDateObjectFallback(this.max);
77934
+ }
77935
+
77936
+ /**
77937
+ * Parses a date string into a Date object when the corresponding `_*Object`
77938
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
77939
+ * input type/format isn't a full date or the string is not a valid date.
77940
+ *
77941
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
77942
+ * inside its own `updated()` before this input's `updated()` has run
77943
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
77944
+ * and range checks would otherwise silently no-op (flipping the result to
77945
+ * `valid` or `patternMismatch`).
77946
+ * @private
77947
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
77948
+ * @returns {Date|undefined}
77949
+ */
77950
+ _computeDateObjectFallback(dateStr) {
77951
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
77952
+ return undefined;
77953
+ }
77954
+ if (!dateFormatter.isValidDate(dateStr)) {
77955
+ return undefined;
77956
+ }
77957
+ return dateFormatter.stringToDateInstance(dateStr);
77958
+ }
77959
+
77960
+ /**
77961
+ * Internal setter for readonly date object properties.
77962
+ * @private
77963
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
77964
+ * @param {Date|undefined} propertyValue - Value to assign.
77965
+ * @returns {void}
77966
+ */
77967
+ setDateObjectProperty(propertyName, propertyValue) {
77968
+ const internalPropertyName = `_${propertyName}`;
77969
+ const previousValue = this[internalPropertyName];
77970
+
77971
+ if (previousValue === propertyValue) {
77972
+ return;
77973
+ }
77974
+
77975
+ this[internalPropertyName] = propertyValue;
77976
+ this.requestUpdate(propertyName, previousValue);
77715
77977
  }
77716
77978
 
77717
77979
  connectedCallback() {
@@ -77740,6 +78002,7 @@ class BaseInput extends AuroElement$1$1 {
77740
78002
  format: this.format
77741
78003
  });
77742
78004
  this.configureDataForType();
78005
+ this.syncDateValues();
77743
78006
  }
77744
78007
 
77745
78008
  disconnectedCallback() {
@@ -77769,6 +78032,7 @@ class BaseInput extends AuroElement$1$1 {
77769
78032
  this.setCustomHelpTextMessage();
77770
78033
  this.configureAutoFormatting();
77771
78034
  this.configureDataForType();
78035
+ this.syncDateValues();
77772
78036
  }
77773
78037
 
77774
78038
  /**
@@ -77844,6 +78108,13 @@ class BaseInput extends AuroElement$1$1 {
77844
78108
 
77845
78109
  if (typeToI18n.includes(this.type)) {
77846
78110
  this.setCustomValidityForType = i18n(this.lang, this.type);
78111
+ // COVERAGE: this `else if` branch is unreachable in WTR. connectedCallback
78112
+ // (L682) calls configureDataForType, which at L1266-1268 assigns
78113
+ // `this.format = this.util.getDateMaskFromLocale().toLowerCase()` for any
78114
+ // type=date input whose `format` attribute is unset. That runs before
78115
+ // firstUpdated invokes setCustomHelpTextMessage, so `!this.format` is
78116
+ // always false here. Retained as a defensive fallback; the whole function
78117
+ // is @deprecated per AB#1557296 and slated for removal.
77847
78118
  } else if (!this.format && this.type === 'date') {
77848
78119
  this.setCustomValidityForType = i18n(this.lang, 'dateMMDDYYYY');
77849
78120
  } else if (this.dateFormatMap[this.format]) {
@@ -77905,6 +78176,8 @@ class BaseInput extends AuroElement$1$1 {
77905
78176
  this.configureDataForType();
77906
78177
  }
77907
78178
 
78179
+ this.syncDateValues(changedProperties);
78180
+
77908
78181
  if (changedProperties.has('value')) {
77909
78182
  if (this.value && this.value.length > 0) {
77910
78183
  this.hasValue = true;
@@ -77926,14 +78199,14 @@ class BaseInput extends AuroElement$1$1 {
77926
78199
 
77927
78200
  if (formattedValue !== this.inputElement.value) {
77928
78201
  this.skipNextProgrammaticInputEvent = true;
77929
- if (this.maskInstance && this.type !== 'date') {
78202
+ if (this.maskInstance && this.type === 'credit-card') {
77930
78203
  // Route through the mask so its _value and el.value stay in lock-step
77931
78204
  // (set value calls updateControl which writes el.value = displayValue).
77932
78205
  // Writing el.value directly leaves the mask thinking displayValue is
77933
- // stale; _saveSelection on the next focus/click then warns. Date is
77934
- // excluded because its formattedValue can be raw ISO when the calendar
77935
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
77936
- // flip validity from patternMismatch to tooShort.
78206
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
78207
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
78208
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
78209
+ // and flip validity from patternMismatch to tooShort.
77937
78210
  this.maskInstance.value = formattedValue || '';
77938
78211
  } else if (formattedValue) {
77939
78212
  this.inputElement.value = formattedValue;
@@ -77975,65 +78248,120 @@ class BaseInput extends AuroElement$1$1 {
77975
78248
  }));
77976
78249
  }
77977
78250
 
78251
+
78252
+ /**
78253
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
78254
+ * This keeps the model and display values aligned when either side changes.
78255
+ *
78256
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
78257
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
78258
+ * represents a full year/month/day date format.
78259
+ *
78260
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
78261
+ * @returns {void}
78262
+ * @private
78263
+ */
78264
+ syncDateValues(changedProperties = undefined) {
78265
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
78266
+ return;
78267
+ }
78268
+
78269
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
78270
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
78271
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
78272
+ }
78273
+
78274
+ /**
78275
+ * Synchronizes one date object/string property pair.
78276
+ * @private
78277
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
78278
+ * @param {string} objectProperty - Date object property name.
78279
+ * @param {string} valueProperty - ISO string property name.
78280
+ * @returns {void}
78281
+ */
78282
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
78283
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
78284
+
78285
+ // objectProperty wins over valueProperty when both changed
78286
+ if (objectPropertyChanged && this[objectProperty]) {
78287
+ this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
78288
+ return;
78289
+ }
78290
+
78291
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
78292
+ if (!valuePropertyChanged) {
78293
+ return;
78294
+ }
78295
+
78296
+ // 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)
78297
+ if (
78298
+ changedProperties &&
78299
+ valueProperty === 'value' &&
78300
+ changedProperties.get('value') === undefined &&
78301
+ this[objectProperty] instanceof Date &&
78302
+ this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
78303
+ ) {
78304
+ return;
78305
+ }
78306
+
78307
+ if (dateFormatter.isValidDate(this[valueProperty])) {
78308
+ this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
78309
+ } else {
78310
+ this.setDateObjectProperty(objectProperty, undefined);
78311
+ }
78312
+ }
78313
+
77978
78314
  /**
77979
78315
  * Sets up IMasks and logic based on auto-formatting requirements.
77980
78316
  * @private
77981
78317
  * @returns {void}
77982
78318
  */
77983
78319
  configureAutoFormatting() {
77984
- // _configuringMask gates two things: external re-entry into this method
77985
- // while setup is mid-flight (from property changes that call back here),
77986
- // and the accept/complete listeners below both need to ignore the mask
77987
- // events fired by our own value-restore step.
78320
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
78321
+ // by _configuringMask above) could otherwise trigger handleInput
78322
+ // processCreditCard configureAutoFormatting before the outer call's
78323
+ // set value has finished its alignCursor pass.
77988
78324
  if (this._configuringMask) return;
77989
78325
  this._configuringMask = true;
77990
78326
  try {
77991
- // Destroy any prior mask so IMask can attach fresh under the new format.
77992
- // Null the reference too — if the new maskOptions.mask is falsy (e.g.
77993
- // type switched from credit-card to text) the IMask() reassignment
77994
- // below is skipped, and downstream writes at line ~823 would otherwise
77995
- // route through the destroyed instance.
77996
78327
  if (this.maskInstance) {
77997
78328
  this.maskInstance.destroy();
77998
- this.maskInstance = null;
77999
78329
  }
78000
78330
 
78331
+ // Pass new format to util
78001
78332
  this.util.updateFormat(this.format);
78002
78333
 
78003
78334
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
78004
78335
 
78005
78336
  if (this.inputElement && maskOptions.mask) {
78006
- // Capture the current display so it can be re-applied after IMask
78007
- // attaches. The restore at the bottom goes through maskInstance.value
78008
- // (not inputElement.value directly) so the mask's internal state and
78009
- // the input's displayed text stay in lock-step.
78010
- let existingValue = this.inputElement.value;
78011
78337
 
78012
- // Format-change case (e.g. locale switch): existingValue is the OLD
78013
- // mask's display string and may not parse under the new mask. When
78014
- // we have a valid date model, rebuild the display from valueObject
78015
- // (the canonical source) using the new mask's format function.
78338
+ // Stash and clear any existing value before IMask init.
78339
+ // IMask's constructor processes the current input value which requires
78340
+ // selection state clearing first avoids that scenario entirely.
78341
+ // When the format changes (e.g. locale switch) and we have a valid ISO
78342
+ // model value, compute the display string for the NEW format instead of
78343
+ // re-using the old display string, which may be invalid in the new mask.
78344
+ let existingValue = this.inputElement.value;
78016
78345
  if (
78017
78346
  this.util.isFullDateFormat(this.type, this.format) &&
78018
78347
  this.value &&
78019
- this.valueObject &&
78348
+ dateFormatter.isValidDate(this.value) &&
78349
+ this.valueObject instanceof Date &&
78350
+ !Number.isNaN(this.valueObject.getTime()) &&
78020
78351
  typeof maskOptions.format === 'function'
78021
78352
  ) {
78022
78353
  existingValue = maskOptions.format(this.valueObject);
78023
78354
  }
78024
78355
 
78025
- // Clear before IMask attaches so the constructor seeds an empty
78026
- // internal value. Otherwise IMask reads the stale unmasked string
78027
- // and emits a spurious 'accept' before the restore below runs.
78028
78356
  this.skipNextProgrammaticInputEvent = true;
78029
78357
  this.inputElement.value = '';
78030
78358
 
78031
78359
  this.maskInstance = IMask(this.inputElement, maskOptions);
78032
78360
 
78033
- // Mask fires 'accept' on every value change, including the restore
78034
- // step below. Skip events fired during configureAutoFormatting so
78035
- // we don't overwrite a value the parent just pushed.
78036
78361
  this.maskInstance.on('accept', () => {
78362
+ // Suppress propagation during configureAutoFormatting's own value-restoration
78363
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
78364
+ // and we don't want to overwrite a value the parent just pushed.
78037
78365
  if (this._configuringMask) return;
78038
78366
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
78039
78367
  if (this.type === "date") {
@@ -78041,8 +78369,6 @@ class BaseInput extends AuroElement$1$1 {
78041
78369
  }
78042
78370
  });
78043
78371
 
78044
- // Mask fires 'complete' on the restore step below for any value that
78045
- // happens to be a complete match. Same setup-suppression as 'accept'.
78046
78372
  this.maskInstance.on('complete', () => {
78047
78373
  if (this._configuringMask) return;
78048
78374
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -78051,9 +78377,7 @@ class BaseInput extends AuroElement$1$1 {
78051
78377
  }
78052
78378
  });
78053
78379
 
78054
- // Write existingValue through the mask (not the input directly) so
78055
- // the mask reformats it under the new rules and keeps its internal
78056
- // _value aligned with the input's displayed text.
78380
+ // Restore the stashed value through IMask so it's properly masked
78057
78381
  if (existingValue) {
78058
78382
  this.maskInstance.value = existingValue;
78059
78383
  }
@@ -78221,6 +78545,7 @@ class BaseInput extends AuroElement$1$1 {
78221
78545
  */
78222
78546
  reset() {
78223
78547
  this.value = undefined;
78548
+ this.setDateObjectProperty('valueObject', undefined);
78224
78549
  this.validation.reset(this);
78225
78550
  }
78226
78551
 
@@ -78229,6 +78554,7 @@ class BaseInput extends AuroElement$1$1 {
78229
78554
  */
78230
78555
  clear() {
78231
78556
  this.value = undefined;
78557
+ this.setDateObjectProperty('valueObject', undefined);
78232
78558
  }
78233
78559
 
78234
78560
  /**
@@ -78266,7 +78592,7 @@ class BaseInput extends AuroElement$1$1 {
78266
78592
  */
78267
78593
  get placeholderStr() {
78268
78594
  if (!this.placeholder && this.type === 'date') {
78269
- return this.format ? this.format.toUpperCase() : 'MM/DD/YYYY';
78595
+ return this.format.toUpperCase();
78270
78596
  }
78271
78597
  return this.placeholder || "";
78272
78598
  }
@@ -78757,7 +79083,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
78757
79083
  }
78758
79084
  };
78759
79085
 
78760
- var formkitVersion$1$1 = '202606231948';
79086
+ var formkitVersion$1$1 = '202606241801';
78761
79087
 
78762
79088
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
78763
79089
  // See LICENSE in the project root for license information.
@@ -79878,7 +80204,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
79878
80204
  }
79879
80205
  };
79880
80206
 
79881
- var formkitVersion$3 = '202606231948';
80207
+ var formkitVersion$3 = '202606241801';
79882
80208
 
79883
80209
  var styleCss$1$3 = i$4`.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}`;
79884
80210
 
@@ -80865,7 +81191,7 @@ class AuroCombobox extends AuroElement$3 {
80865
81191
  if (this.menu) {
80866
81192
  this.menu.matchWord = normalizeFilterValue(this.input.value);
80867
81193
  }
80868
- const label = getOptionLabel(this.menu.optionSelected);
81194
+ const label = getOptionLabel(this.menu.optionSelected) || this.menu.currentLabel;
80869
81195
  this.updateTriggerTextDisplay(label || this.value);
80870
81196
  }
80871
81197
 
@@ -80879,9 +81205,40 @@ class AuroCombobox extends AuroElement$3 {
80879
81205
  // in suggestion mode, do not override input value if no selection has been made and the input currently has focus
80880
81206
  const isInputFocusedWithNoSelection = !this.menu.value && (this.input.matches(':focus-within') || (this.inputInBib && this.inputInBib.matches(':focus-within')));
80881
81207
 
80882
- const suppressed = this.persistInput || (this.behavior === 'suggestion' && isInputFocusedWithNoSelection);
80883
- if (!suppressed) {
80884
- this.syncInputValuesAcrossTriggerAndBib(label || this.value);
81208
+ if (!this.persistInput && !(this.behavior === 'suggestion' && isInputFocusedWithNoSelection)) {
81209
+ const nextValue = label || this.value;
81210
+ // Only set the flag when there's an actual write to suppress —
81211
+ // syncValuesAndStates re-enters here during typing when both inputs
81212
+ // already match, and a no-op flag flip would make the bib branch's
81213
+ // bail eat legitimate user-input events.
81214
+ const triggerNeedsSync = this.input.value !== nextValue;
81215
+ const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
81216
+ if (triggerNeedsSync || bibNeedsSync) {
81217
+ this._syncingDisplayValue = true;
81218
+ if (triggerNeedsSync) {
81219
+ this.input.value = nextValue;
81220
+ }
81221
+ if (bibNeedsSync) {
81222
+ this.inputInBib.value = nextValue;
81223
+ }
81224
+ const pending = [];
81225
+ if (triggerNeedsSync) {
81226
+ pending.push(this.input.updateComplete);
81227
+ }
81228
+ if (bibNeedsSync) {
81229
+ pending.push(this.inputInBib.updateComplete);
81230
+ }
81231
+ Promise.all(pending).then(() => {
81232
+ // imask reasserts otherwise, and handleBlur reverts to its stale value.
81233
+ if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
81234
+ this.input.maskInstance.updateValue();
81235
+ }
81236
+ if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
81237
+ this.inputInBib.maskInstance.updateValue();
81238
+ }
81239
+ this._syncingDisplayValue = false;
81240
+ });
81241
+ }
80885
81242
  }
80886
81243
 
80887
81244
  // update the displayValue in the trigger if displayValue slot content is present
@@ -80909,48 +81266,6 @@ class AuroCombobox extends AuroElement$3 {
80909
81266
  this.requestUpdate();
80910
81267
  }
80911
81268
 
80912
- /**
80913
- * Writes nextValue to the trigger input and the bib input when their current
80914
- * value differs, then re-asserts imask after Lit's update flushes.
80915
- * @param {string} nextValue - The value to write to both inputs.
80916
- * @returns {Promise<void> | null} Promise that resolves after the inputs flush,
80917
- * or null when no sync was needed (so callers can skip post-flush work).
80918
- * @private
80919
- */
80920
- syncInputValuesAcrossTriggerAndBib(nextValue) {
80921
- // Only set the flag when there's an actual write to suppress —
80922
- // syncValuesAndStates re-enters here during typing when both inputs
80923
- // already match, and a no-op flag flip would make the bib branch's
80924
- // bail eat legitimate user-input events.
80925
- const triggerNeedsSync = this.input.value !== nextValue;
80926
- const bibNeedsSync = this.inputInBib.value !== nextValue;
80927
- if (!triggerNeedsSync && !bibNeedsSync) {
80928
- return null;
80929
- }
80930
-
80931
- this._syncingDisplayValue = true;
80932
-
80933
- const pending = [];
80934
- if (triggerNeedsSync) {
80935
- this.input.value = nextValue;
80936
- pending.push(this.input.updateComplete);
80937
- }
80938
- if (bibNeedsSync) {
80939
- this.inputInBib.value = nextValue;
80940
- pending.push(this.inputInBib.updateComplete);
80941
- }
80942
- return Promise.all(pending).then(() => {
80943
- // imask reasserts otherwise, and handleBlur reverts to its stale value.
80944
- if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
80945
- this.input.maskInstance.updateValue();
80946
- }
80947
- if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
80948
- this.inputInBib.maskInstance.updateValue();
80949
- }
80950
- this._syncingDisplayValue = false;
80951
- });
80952
- }
80953
-
80954
81269
  /**
80955
81270
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
80956
81271
  * @private
@@ -80978,9 +81293,9 @@ class AuroCombobox extends AuroElement$3 {
80978
81293
  this.syncValuesAndStates();
80979
81294
  }
80980
81295
 
80981
- // Re-activate when optionActive is not in the current scrollable viewport,
80982
- // or when _index has been reset (e.g. by clearSelection in an async update)
80983
- // so that makeSelection() can find the correct option.
81296
+ // Re-activate when optionActive is no longer visible, or when _index has
81297
+ // been reset (e.g. by clearSelection in an async update) so that
81298
+ // makeSelection() can find the correct option.
80984
81299
  if (!this.availableOptions.includes(this.menu.optionActive) || this.menu._index < 0) {
80985
81300
  this.activateFirstEnabledAvailableOption();
80986
81301
  }
@@ -81114,25 +81429,28 @@ class AuroCombobox extends AuroElement$3 {
81114
81429
 
81115
81430
  guardTouchPassthrough$1(this.menu);
81116
81431
 
81117
- // showModal() takes focus away from the trigger. Early focus once
81118
- // the dialog has painted; the shared doubleRaf below is the fallback
81119
- // for when the dialog needs an extra frame and also clears the
81120
- // validation guard.
81432
+ // The dialog's showModal() steals focus from the trigger.
81433
+ // A single rAF is enough for the dialog DOM to be painted and
81434
+ // focusable, then doubleRaf finalizes the transition.
81121
81435
  requestAnimationFrame(() => {
81122
81436
  this.setInputFocus();
81123
81437
  });
81124
- }
81125
- // else (desktop popover-open): Chrome resets the trigger caret to
81126
- // [0, 0] when its floating <label for="…"> overlay receives focus.
81127
- // The shared doubleRaf below parks the caret back at end-of-text
81128
- // after the dropdown layout settles.
81129
-
81130
- doubleRaf$1(() => {
81131
- this.setInputFocus();
81132
- if (this._inFullscreenTransition) {
81438
+
81439
+ doubleRaf$1(() => {
81440
+ this.setInputFocus();
81133
81441
  this._inFullscreenTransition = false;
81134
- }
81135
- });
81442
+ });
81443
+ } else {
81444
+ // Desktop popover-open: restore the trigger caret to end-of-text.
81445
+ // Clicking the trigger lands on auro-input's floating <label for="…">
81446
+ // overlay; Chrome resets the native input's selection to [0, 0] on
81447
+ // label-focus before any JS runs. setInputFocus()'s non-fullscreen
81448
+ // branch parks the caret at end. doubleRaf lets the dropdown layout
81449
+ // settle first, matching the fullscreen branch timing.
81450
+ doubleRaf$1(() => {
81451
+ this.setInputFocus();
81452
+ });
81453
+ }
81136
81454
  }
81137
81455
  });
81138
81456
 
@@ -81343,7 +81661,7 @@ class AuroCombobox extends AuroElement$3 {
81343
81661
  if (this.menu.optionSelected) {
81344
81662
  const selected = this.menu.optionSelected;
81345
81663
 
81346
- if (this.optionSelected !== selected) {
81664
+ if (!this.optionSelected || this.optionSelected !== selected) {
81347
81665
  this.optionSelected = selected;
81348
81666
  }
81349
81667
 
@@ -81356,7 +81674,7 @@ class AuroCombobox extends AuroElement$3 {
81356
81674
  }
81357
81675
 
81358
81676
  // Update display
81359
- this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected));
81677
+ this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected) || this.menu.value);
81360
81678
 
81361
81679
  // Update match word for filtering
81362
81680
  const trimmedInput = normalizeFilterValue(this.input.value);
@@ -81372,22 +81690,13 @@ class AuroCombobox extends AuroElement$3 {
81372
81690
  this.hideBib();
81373
81691
  }
81374
81692
 
81375
- // Move focus to the clear button when the user makes a selection.
81376
- if (!isEcho && this.menu.value !== undefined) {
81377
- this.setClearBtnFocus();
81378
- }
81379
-
81380
81693
  // Announce the selection after the dropdown closes so it isn't
81381
81694
  // overridden by VoiceOver's "collapsed" announcement from aria-expanded.
81382
- // Skip when there's no selected value (e.g. menu.clearSelection() from
81383
- // the unmatched-value path), otherwise VoiceOver reads "undefined".
81384
81695
  const selectedValue = this.menu.value;
81385
- if (selectedValue) {
81386
- const announcementDelay = 300;
81387
- setTimeout(() => {
81388
- announceToScreenReader$1(this._getAnnouncementRoot(), `${selectedValue}, selected`);
81389
- }, announcementDelay);
81390
- }
81696
+ const announcementDelay = 300;
81697
+ setTimeout(() => {
81698
+ announceToScreenReader$1(this._getAnnouncementRoot(), `${selectedValue}, selected`);
81699
+ }, announcementDelay);
81391
81700
  }
81392
81701
 
81393
81702
  // Programmatic value syncs leave availableOptions stale because
@@ -81401,6 +81710,18 @@ class AuroCombobox extends AuroElement$3 {
81401
81710
  this._programmaticFilterRefresh = false;
81402
81711
  }, 0);
81403
81712
  }
81713
+
81714
+ // base-input skips auto-validate when focus is inside its own shadow,
81715
+ // which it is after setTriggerInputFocus — re-run so prior tooShort
81716
+ // clears. processCreditCard reasserts errorMessage on every render.
81717
+ if (!isEcho && this.menu.optionSelected && this.input.validate) {
81718
+ this.input.updateComplete.then(() => {
81719
+ this.input.validate(true);
81720
+ if (this.input.validity === 'valid') {
81721
+ this.input.errorMessage = '';
81722
+ }
81723
+ });
81724
+ }
81404
81725
  });
81405
81726
 
81406
81727
  this.menu.addEventListener('auroMenu-customEventFired', () => {
@@ -81735,7 +82056,15 @@ class AuroCombobox extends AuroElement$3 {
81735
82056
  this.menu.value = undefined;
81736
82057
  this.validation.reset(this);
81737
82058
  this.touched = false;
82059
+ // Force validity back to the cleared state. validation.reset() calls
82060
+ // validate() at the end, and (post-credit-card-fix) the trigger input's
82061
+ // residual validity may still be copied into the combobox by the
82062
+ // auroInputElements loop. Explicitly clear here so reset() actually
82063
+ // leaves the component in a "no validity" state.
81738
82064
  this.validity = undefined;
82065
+ this.errorMessage = '';
82066
+ this.input.validity = undefined;
82067
+ this.input.errorMessage = '';
81739
82068
  }
81740
82069
 
81741
82070
  /**
@@ -81788,27 +82117,52 @@ class AuroCombobox extends AuroElement$3 {
81788
82117
  this.input.value = this.value;
81789
82118
  }
81790
82119
 
81791
- // Sync menu.value only when an option actually matches, or when filter
81792
- // mode needs setMenuValue to dispatch auroMenu-selectValueFailure (the
81793
- // listener at line 1206 clears combobox.value, mirroring select's
81794
- // pattern). Otherwise sync the input display for freeform values.
82120
+ // Sync menu.value only when an option actually matches; otherwise clear it.
81795
82121
  if (this.menu.options && this.menu.options.length > 0) {
81796
- if (this.menu.options.some((opt) => opt.value === this.value) || this.behavior === 'filter') {
82122
+ if (this.menu.options.some((opt) => opt.value === this.value)) {
82123
+ this.setMenuValue(this.value);
82124
+ } else if (this.behavior === 'filter') {
82125
+ // In filter mode, freeform values aren't allowed. Push the unmatched
82126
+ // value through setMenuValue so menu dispatches auroMenu-selectValueFailure
82127
+ // and the listener at line 1206 clears combobox.value (mirrors select's
82128
+ // pattern). Bypassing setMenuValue here would skip the failure cascade.
81797
82129
  this.setMenuValue(this.value);
81798
82130
  } else {
81799
- // Clear menu.value AND menu.optionSelected together. Clearing only
81800
- // menu.value leaves the previously-selected option element pinned
81801
- // as menu.optionSelected; a later auroMenu-selectedOption event
81802
- // would then write its stale .value back into combobox.value.
81803
- if (this.menu.value || this.menu.optionSelected) {
81804
- this.menu.clearSelection();
82131
+ if (this.menu.value) {
82132
+ this.menu.value = undefined;
81805
82133
  }
81806
- // Suggestion-mode freeform value: sync the trigger + bib to show it,
81807
- // then refresh the filter once the inputs flush (handleInputValueChange
81808
- // bailed on _syncingDisplayValue).
81809
- const syncPromise = this.syncInputValuesAcrossTriggerAndBib(this.value || '');
81810
- if (syncPromise) {
81811
- syncPromise.then(() => {
82134
+ // Sync the display for programmatic freeform value changes (e.g. the
82135
+ // swap-values pattern). Guard with _syncingDisplayValue so that the
82136
+ // re-entrant input event from base-input.notifyValueChanged() is
82137
+ // ignored by handleInputValueChange. Skip the sync when input already
82138
+ // matches to avoid spurious events during the normal typing path.
82139
+ const nextValue = this.value || '';
82140
+ const triggerNeedsSync = this.input.value !== nextValue;
82141
+ const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
82142
+ if (triggerNeedsSync || bibNeedsSync) {
82143
+ this._syncingDisplayValue = true;
82144
+ if (triggerNeedsSync) {
82145
+ this.input.value = nextValue;
82146
+ }
82147
+ if (bibNeedsSync) {
82148
+ this.inputInBib.value = nextValue;
82149
+ }
82150
+ const pending = [];
82151
+ if (triggerNeedsSync) {
82152
+ pending.push(this.input.updateComplete);
82153
+ }
82154
+ if (bibNeedsSync) {
82155
+ pending.push(this.inputInBib.updateComplete);
82156
+ }
82157
+ Promise.all(pending).then(() => {
82158
+ if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
82159
+ this.input.maskInstance.updateValue();
82160
+ }
82161
+ if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
82162
+ this.inputInBib.maskInstance.updateValue();
82163
+ }
82164
+ this._syncingDisplayValue = false;
82165
+ // handleInputValueChange bailed on the flag — refresh the filter.
81812
82166
  this._programmaticFilterRefresh = true;
81813
82167
  this.handleMenuOptions();
81814
82168
  setTimeout(() => {
@@ -88641,7 +88995,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
88641
88995
  }
88642
88996
  };
88643
88997
 
88644
- var formkitVersion$1 = '202606231948';
88998
+ var formkitVersion$1 = '202606241801';
88645
88999
 
88646
89000
  class AuroElement extends i$2 {
88647
89001
  static get properties() {
@@ -90662,7 +91016,7 @@ class AuroHelpText extends i$2 {
90662
91016
  }
90663
91017
  }
90664
91018
 
90665
- var formkitVersion = '202606231948';
91019
+ var formkitVersion = '202606241801';
90666
91020
 
90667
91021
  var styleCss = i$4`.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}`;
90668
91022