@aurodesignsystem-dev/auro-formkit 0.0.0-pr1506.1 → 0.0.0-pr1507.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) 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 +268 -140
  7. package/components/combobox/demo/getting-started.min.js +268 -140
  8. package/components/combobox/demo/index.min.js +268 -140
  9. package/components/combobox/dist/auro-combobox.d.ts +0 -9
  10. package/components/combobox/dist/index.js +266 -138
  11. package/components/combobox/dist/registered.js +266 -138
  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 +149 -39
  17. package/components/datepicker/demo/index.min.js +149 -39
  18. package/components/datepicker/dist/index.js +149 -39
  19. package/components/datepicker/dist/registered.js +149 -39
  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 +570 -221
  26. package/components/form/demo/getting-started.min.js +570 -221
  27. package/components/form/demo/index.min.js +570 -221
  28. package/components/form/demo/registerDemoDeps.min.js +570 -221
  29. package/components/input/demo/customize.min.js +147 -36
  30. package/components/input/demo/getting-started.min.js +147 -36
  31. package/components/input/demo/index.min.js +147 -36
  32. package/components/input/dist/base-input.d.ts +48 -0
  33. package/components/input/dist/index.js +147 -36
  34. package/components/input/dist/registered.js +147 -36
  35. package/components/menu/demo/index.min.js +2 -2
  36. package/components/menu/dist/index.js +2 -2
  37. package/components/menu/dist/registered.js +2 -2
  38. package/components/radio/demo/customize.min.js +1 -1
  39. package/components/radio/demo/getting-started.min.js +1 -1
  40. package/components/radio/demo/index.min.js +1 -1
  41. package/components/radio/dist/index.js +1 -1
  42. package/components/radio/dist/registered.js +1 -1
  43. package/components/select/demo/customize.min.js +4 -4
  44. package/components/select/demo/getting-started.min.js +4 -4
  45. package/components/select/demo/index.min.js +4 -4
  46. package/components/select/dist/index.js +2 -2
  47. package/components/select/dist/registered.js +2 -2
  48. package/custom-elements.json +264 -20
  49. 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() {
@@ -11224,6 +11270,10 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11224
11270
  this.wrapperElement.addEventListener('click', this.handleClick);
11225
11271
  }
11226
11272
 
11273
+ // add attribute for query selectors when auro-input is registered under a custom name
11274
+ if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
11275
+ this.setAttribute('auro-input', '');
11276
+ }
11227
11277
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
11228
11278
 
11229
11279
  // use validity message override if declared when initializing the component
@@ -11234,6 +11284,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11234
11284
  this.setCustomHelpTextMessage();
11235
11285
  this.configureAutoFormatting();
11236
11286
  this.configureDataForType();
11287
+ this.syncDateValues();
11237
11288
  }
11238
11289
 
11239
11290
  /**
@@ -11370,6 +11421,8 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11370
11421
  this.configureDataForType();
11371
11422
  }
11372
11423
 
11424
+ this.syncDateValues(changedProperties);
11425
+
11373
11426
  if (changedProperties.has('value')) {
11374
11427
  if (this.value && this.value.length > 0) {
11375
11428
  this.hasValue = true;
@@ -11391,14 +11444,14 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11391
11444
 
11392
11445
  if (formattedValue !== this.inputElement.value) {
11393
11446
  this.skipNextProgrammaticInputEvent = true;
11394
- if (this.maskInstance && this.type !== 'date') {
11447
+ if (this.maskInstance && this.type === 'credit-card') {
11395
11448
  // Route through the mask so its _value and el.value stay in lock-step
11396
11449
  // (set value calls updateControl which writes el.value = displayValue).
11397
11450
  // 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.
11451
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
11452
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
11453
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
11454
+ // and flip validity from patternMismatch to tooShort.
11402
11455
  this.maskInstance.value = formattedValue || '';
11403
11456
  } else if (formattedValue) {
11404
11457
  this.inputElement.value = formattedValue;
@@ -11440,60 +11493,120 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11440
11493
  }));
11441
11494
  }
11442
11495
 
11496
+
11497
+ /**
11498
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
11499
+ * This keeps the model and display values aligned when either side changes.
11500
+ *
11501
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
11502
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
11503
+ * represents a full year/month/day date format.
11504
+ *
11505
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
11506
+ * @returns {void}
11507
+ * @private
11508
+ */
11509
+ syncDateValues(changedProperties = undefined) {
11510
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
11511
+ return;
11512
+ }
11513
+
11514
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
11515
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
11516
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
11517
+ }
11518
+
11519
+ /**
11520
+ * Synchronizes one date object/string property pair.
11521
+ * @private
11522
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
11523
+ * @param {string} objectProperty - Date object property name.
11524
+ * @param {string} valueProperty - ISO string property name.
11525
+ * @returns {void}
11526
+ */
11527
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
11528
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
11529
+
11530
+ // objectProperty wins over valueProperty when both changed
11531
+ if (objectPropertyChanged && this[objectProperty]) {
11532
+ this[valueProperty] = dateFormatter$3.toISOFormatString(this[objectProperty]);
11533
+ return;
11534
+ }
11535
+
11536
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
11537
+ if (!valuePropertyChanged) {
11538
+ return;
11539
+ }
11540
+
11541
+ // 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)
11542
+ if (
11543
+ changedProperties &&
11544
+ valueProperty === 'value' &&
11545
+ changedProperties.get('value') === undefined &&
11546
+ this[objectProperty] instanceof Date &&
11547
+ this[valueProperty] === dateFormatter$3.toISOFormatString(this[objectProperty])
11548
+ ) {
11549
+ return;
11550
+ }
11551
+
11552
+ if (dateFormatter$3.isValidDate(this[valueProperty])) {
11553
+ this.setDateObjectProperty(objectProperty, dateFormatter$3.stringToDateInstance(this[valueProperty]));
11554
+ } else {
11555
+ this.setDateObjectProperty(objectProperty, undefined);
11556
+ }
11557
+ }
11558
+
11443
11559
  /**
11444
11560
  * Sets up IMasks and logic based on auto-formatting requirements.
11445
11561
  * @private
11446
11562
  * @returns {void}
11447
11563
  */
11448
11564
  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.
11565
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
11566
+ // by _configuringMask above) could otherwise trigger handleInput
11567
+ // processCreditCard configureAutoFormatting before the outer call's
11568
+ // set value has finished its alignCursor pass.
11453
11569
  if (this._configuringMask) return;
11454
11570
  this._configuringMask = true;
11455
11571
  try {
11456
- // Destroy any prior mask so IMask can attach fresh under the new format.
11457
11572
  if (this.maskInstance) {
11458
11573
  this.maskInstance.destroy();
11459
11574
  }
11460
11575
 
11576
+ // Pass new format to util
11461
11577
  this.util.updateFormat(this.format);
11462
11578
 
11463
11579
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
11464
11580
 
11465
11581
  if (this.inputElement && maskOptions.mask) {
11466
- // Capture the current display so it can be re-applied after IMask
11467
- // attaches. The restore at the bottom goes through maskInstance.value
11468
- // (not inputElement.value directly) so the mask's internal state and
11469
- // the input's displayed text stay in lock-step.
11470
- let existingValue = this.inputElement.value;
11471
11582
 
11472
- // Format-change case (e.g. locale switch): existingValue is the OLD
11473
- // mask's display string and may not parse under the new mask. When
11474
- // we have a valid date model, rebuild the display from valueObject
11475
- // (the canonical source) using the new mask's format function.
11583
+ // Stash and clear any existing value before IMask init.
11584
+ // IMask's constructor processes the current input value which requires
11585
+ // selection state clearing first avoids that scenario entirely.
11586
+ // When the format changes (e.g. locale switch) and we have a valid ISO
11587
+ // model value, compute the display string for the NEW format instead of
11588
+ // re-using the old display string, which may be invalid in the new mask.
11589
+ let existingValue = this.inputElement.value;
11476
11590
  if (
11477
11591
  this.util.isFullDateFormat(this.type, this.format) &&
11478
11592
  this.value &&
11479
- this.valueObject &&
11593
+ dateFormatter$3.isValidDate(this.value) &&
11594
+ this.valueObject instanceof Date &&
11595
+ !Number.isNaN(this.valueObject.getTime()) &&
11480
11596
  typeof maskOptions.format === 'function'
11481
11597
  ) {
11482
11598
  existingValue = maskOptions.format(this.valueObject);
11483
11599
  }
11484
11600
 
11485
- // Clear before IMask attaches so the constructor seeds an empty
11486
- // internal value. Otherwise IMask reads the stale unmasked string
11487
- // and emits a spurious 'accept' before the restore below runs.
11488
11601
  this.skipNextProgrammaticInputEvent = true;
11489
11602
  this.inputElement.value = '';
11490
11603
 
11491
11604
  this.maskInstance = IMask$3(this.inputElement, maskOptions);
11492
11605
 
11493
- // Mask fires 'accept' on every value change, including the restore
11494
- // step below. Skip events fired during configureAutoFormatting so
11495
- // we don't overwrite a value the parent just pushed.
11496
11606
  this.maskInstance.on('accept', () => {
11607
+ // Suppress propagation during configureAutoFormatting's own value-restoration
11608
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
11609
+ // and we don't want to overwrite a value the parent just pushed.
11497
11610
  if (this._configuringMask) return;
11498
11611
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
11499
11612
  if (this.type === "date") {
@@ -11501,8 +11614,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11501
11614
  }
11502
11615
  });
11503
11616
 
11504
- // Mask fires 'complete' on the restore step below for any value that
11505
- // happens to be a complete match. Same setup-suppression as 'accept'.
11506
11617
  this.maskInstance.on('complete', () => {
11507
11618
  if (this._configuringMask) return;
11508
11619
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -11511,9 +11622,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11511
11622
  }
11512
11623
  });
11513
11624
 
11514
- // Write existingValue through the mask (not the input directly) so
11515
- // the mask reformats it under the new rules and keeps its internal
11516
- // _value aligned with the input's displayed text.
11625
+ // Restore the stashed value through IMask so it's properly masked
11517
11626
  if (existingValue) {
11518
11627
  this.maskInstance.value = existingValue;
11519
11628
  }
@@ -11681,6 +11790,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11681
11790
  */
11682
11791
  reset() {
11683
11792
  this.value = undefined;
11793
+ this.setDateObjectProperty('valueObject', undefined);
11684
11794
  this.validation.reset(this);
11685
11795
  }
11686
11796
 
@@ -11689,6 +11799,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11689
11799
  */
11690
11800
  clear() {
11691
11801
  this.value = undefined;
11802
+ this.setDateObjectProperty('valueObject', undefined);
11692
11803
  }
11693
11804
 
11694
11805
  /**
@@ -12217,7 +12328,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$2 {
12217
12328
  }
12218
12329
  };
12219
12330
 
12220
- var formkitVersion$8 = '202606192004';
12331
+ var formkitVersion$8 = '202606192121';
12221
12332
 
12222
12333
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12223
12334
  // See LICENSE in the project root for license information.
@@ -23456,7 +23567,6 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
23456
23567
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
23457
23568
 
23458
23569
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
23459
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
23460
23570
  return undefined;
23461
23571
  }
23462
23572
 
@@ -26337,7 +26447,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$2 {
26337
26447
  }
26338
26448
  };
26339
26449
 
26340
- var formkitVersion$2$1 = '202606192004';
26450
+ var formkitVersion$2$1 = '202606192121';
26341
26451
 
26342
26452
  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}
26343
26453
  `,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}}
@@ -31848,7 +31958,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
31848
31958
  }
31849
31959
  };
31850
31960
 
31851
- var formkitVersion$1$3 = '202606192004';
31961
+ var formkitVersion$1$3 = '202606192121';
31852
31962
 
31853
31963
  let AuroElement$2$2 = class AuroElement extends i$2 {
31854
31964
  static get properties() {
@@ -43562,7 +43672,6 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
43562
43672
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
43563
43673
 
43564
43674
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
43565
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
43566
43675
  return undefined;
43567
43676
  }
43568
43677
 
@@ -43714,8 +43823,10 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
43714
43823
  this.layout = 'classic';
43715
43824
  this.locale = 'en-US';
43716
43825
  this.max = undefined;
43826
+ this._maxObject = undefined;
43717
43827
  this.maxLength = undefined;
43718
43828
  this.min = undefined;
43829
+ this._minObject = undefined;
43719
43830
  this.minLength = undefined;
43720
43831
  this.required = false;
43721
43832
  this.onDark = false;
@@ -43723,6 +43834,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
43723
43834
  this.size = 'lg';
43724
43835
  this.shape = 'classic';
43725
43836
  this.value = undefined;
43837
+ this._valueObject = undefined;
43726
43838
 
43727
43839
  this._initializePrivateDefaults();
43728
43840
  }
@@ -44262,7 +44374,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44262
44374
  * @returns {Date|undefined}
44263
44375
  */
44264
44376
  get valueObject() {
44265
- return this.value && dateFormatter$2.isValidDate(this.value) ? dateFormatter$2.stringToDateInstance(this.value) : undefined;
44377
+ return this._valueObject || this._computeDateObjectFallback(this.value);
44266
44378
  }
44267
44379
 
44268
44380
  /**
@@ -44270,7 +44382,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44270
44382
  * @returns {Date|undefined}
44271
44383
  */
44272
44384
  get minObject() {
44273
- return this.min && dateFormatter$2.isValidDate(this.min) ? dateFormatter$2.stringToDateInstance(this.min) : undefined;
44385
+ return this._minObject || this._computeDateObjectFallback(this.min);
44274
44386
  }
44275
44387
 
44276
44388
  /**
@@ -44278,7 +44390,50 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44278
44390
  * @returns {Date|undefined}
44279
44391
  */
44280
44392
  get maxObject() {
44281
- return this.max && dateFormatter$2.isValidDate(this.max) ? dateFormatter$2.stringToDateInstance(this.max) : undefined;
44393
+ return this._maxObject || this._computeDateObjectFallback(this.max);
44394
+ }
44395
+
44396
+ /**
44397
+ * Parses a date string into a Date object when the corresponding `_*Object`
44398
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
44399
+ * input type/format isn't a full date or the string is not a valid date.
44400
+ *
44401
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
44402
+ * inside its own `updated()` before this input's `updated()` has run
44403
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
44404
+ * and range checks would otherwise silently no-op (flipping the result to
44405
+ * `valid` or `patternMismatch`).
44406
+ * @private
44407
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
44408
+ * @returns {Date|undefined}
44409
+ */
44410
+ _computeDateObjectFallback(dateStr) {
44411
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
44412
+ return undefined;
44413
+ }
44414
+ if (!dateFormatter$2.isValidDate(dateStr)) {
44415
+ return undefined;
44416
+ }
44417
+ return dateFormatter$2.stringToDateInstance(dateStr);
44418
+ }
44419
+
44420
+ /**
44421
+ * Internal setter for readonly date object properties.
44422
+ * @private
44423
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
44424
+ * @param {Date|undefined} propertyValue - Value to assign.
44425
+ * @returns {void}
44426
+ */
44427
+ setDateObjectProperty(propertyName, propertyValue) {
44428
+ const internalPropertyName = `_${propertyName}`;
44429
+ const previousValue = this[internalPropertyName];
44430
+
44431
+ if (previousValue === propertyValue) {
44432
+ return;
44433
+ }
44434
+
44435
+ this[internalPropertyName] = propertyValue;
44436
+ this.requestUpdate(propertyName, previousValue);
44282
44437
  }
44283
44438
 
44284
44439
  connectedCallback() {
@@ -44307,6 +44462,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44307
44462
  format: this.format
44308
44463
  });
44309
44464
  this.configureDataForType();
44465
+ this.syncDateValues();
44310
44466
  }
44311
44467
 
44312
44468
  disconnectedCallback() {
@@ -44326,6 +44482,10 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44326
44482
  this.wrapperElement.addEventListener('click', this.handleClick);
44327
44483
  }
44328
44484
 
44485
+ // add attribute for query selectors when auro-input is registered under a custom name
44486
+ if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
44487
+ this.setAttribute('auro-input', '');
44488
+ }
44329
44489
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
44330
44490
 
44331
44491
  // use validity message override if declared when initializing the component
@@ -44336,6 +44496,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44336
44496
  this.setCustomHelpTextMessage();
44337
44497
  this.configureAutoFormatting();
44338
44498
  this.configureDataForType();
44499
+ this.syncDateValues();
44339
44500
  }
44340
44501
 
44341
44502
  /**
@@ -44472,6 +44633,8 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44472
44633
  this.configureDataForType();
44473
44634
  }
44474
44635
 
44636
+ this.syncDateValues(changedProperties);
44637
+
44475
44638
  if (changedProperties.has('value')) {
44476
44639
  if (this.value && this.value.length > 0) {
44477
44640
  this.hasValue = true;
@@ -44493,14 +44656,14 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44493
44656
 
44494
44657
  if (formattedValue !== this.inputElement.value) {
44495
44658
  this.skipNextProgrammaticInputEvent = true;
44496
- if (this.maskInstance && this.type !== 'date') {
44659
+ if (this.maskInstance && this.type === 'credit-card') {
44497
44660
  // Route through the mask so its _value and el.value stay in lock-step
44498
44661
  // (set value calls updateControl which writes el.value = displayValue).
44499
44662
  // Writing el.value directly leaves the mask thinking displayValue is
44500
- // stale; _saveSelection on the next focus/click then warns. Date is
44501
- // excluded because its formattedValue can be raw ISO when the calendar
44502
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
44503
- // flip validity from patternMismatch to tooShort.
44663
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
44664
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
44665
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
44666
+ // and flip validity from patternMismatch to tooShort.
44504
44667
  this.maskInstance.value = formattedValue || '';
44505
44668
  } else if (formattedValue) {
44506
44669
  this.inputElement.value = formattedValue;
@@ -44542,60 +44705,120 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44542
44705
  }));
44543
44706
  }
44544
44707
 
44708
+
44709
+ /**
44710
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
44711
+ * This keeps the model and display values aligned when either side changes.
44712
+ *
44713
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
44714
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
44715
+ * represents a full year/month/day date format.
44716
+ *
44717
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
44718
+ * @returns {void}
44719
+ * @private
44720
+ */
44721
+ syncDateValues(changedProperties = undefined) {
44722
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
44723
+ return;
44724
+ }
44725
+
44726
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
44727
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
44728
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
44729
+ }
44730
+
44731
+ /**
44732
+ * Synchronizes one date object/string property pair.
44733
+ * @private
44734
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
44735
+ * @param {string} objectProperty - Date object property name.
44736
+ * @param {string} valueProperty - ISO string property name.
44737
+ * @returns {void}
44738
+ */
44739
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
44740
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
44741
+
44742
+ // objectProperty wins over valueProperty when both changed
44743
+ if (objectPropertyChanged && this[objectProperty]) {
44744
+ this[valueProperty] = dateFormatter$2.toISOFormatString(this[objectProperty]);
44745
+ return;
44746
+ }
44747
+
44748
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
44749
+ if (!valuePropertyChanged) {
44750
+ return;
44751
+ }
44752
+
44753
+ // 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)
44754
+ if (
44755
+ changedProperties &&
44756
+ valueProperty === 'value' &&
44757
+ changedProperties.get('value') === undefined &&
44758
+ this[objectProperty] instanceof Date &&
44759
+ this[valueProperty] === dateFormatter$2.toISOFormatString(this[objectProperty])
44760
+ ) {
44761
+ return;
44762
+ }
44763
+
44764
+ if (dateFormatter$2.isValidDate(this[valueProperty])) {
44765
+ this.setDateObjectProperty(objectProperty, dateFormatter$2.stringToDateInstance(this[valueProperty]));
44766
+ } else {
44767
+ this.setDateObjectProperty(objectProperty, undefined);
44768
+ }
44769
+ }
44770
+
44545
44771
  /**
44546
44772
  * Sets up IMasks and logic based on auto-formatting requirements.
44547
44773
  * @private
44548
44774
  * @returns {void}
44549
44775
  */
44550
44776
  configureAutoFormatting() {
44551
- // _configuringMask gates two things: external re-entry into this method
44552
- // while setup is mid-flight (from property changes that call back here),
44553
- // and the accept/complete listeners below both need to ignore the mask
44554
- // events fired by our own value-restore step.
44777
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
44778
+ // by _configuringMask above) could otherwise trigger handleInput
44779
+ // processCreditCard configureAutoFormatting before the outer call's
44780
+ // set value has finished its alignCursor pass.
44555
44781
  if (this._configuringMask) return;
44556
44782
  this._configuringMask = true;
44557
44783
  try {
44558
- // Destroy any prior mask so IMask can attach fresh under the new format.
44559
44784
  if (this.maskInstance) {
44560
44785
  this.maskInstance.destroy();
44561
44786
  }
44562
44787
 
44788
+ // Pass new format to util
44563
44789
  this.util.updateFormat(this.format);
44564
44790
 
44565
44791
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
44566
44792
 
44567
44793
  if (this.inputElement && maskOptions.mask) {
44568
- // Capture the current display so it can be re-applied after IMask
44569
- // attaches. The restore at the bottom goes through maskInstance.value
44570
- // (not inputElement.value directly) so the mask's internal state and
44571
- // the input's displayed text stay in lock-step.
44572
- let existingValue = this.inputElement.value;
44573
44794
 
44574
- // Format-change case (e.g. locale switch): existingValue is the OLD
44575
- // mask's display string and may not parse under the new mask. When
44576
- // we have a valid date model, rebuild the display from valueObject
44577
- // (the canonical source) using the new mask's format function.
44795
+ // Stash and clear any existing value before IMask init.
44796
+ // IMask's constructor processes the current input value which requires
44797
+ // selection state clearing first avoids that scenario entirely.
44798
+ // When the format changes (e.g. locale switch) and we have a valid ISO
44799
+ // model value, compute the display string for the NEW format instead of
44800
+ // re-using the old display string, which may be invalid in the new mask.
44801
+ let existingValue = this.inputElement.value;
44578
44802
  if (
44579
44803
  this.util.isFullDateFormat(this.type, this.format) &&
44580
44804
  this.value &&
44581
- this.valueObject &&
44805
+ dateFormatter$2.isValidDate(this.value) &&
44806
+ this.valueObject instanceof Date &&
44807
+ !Number.isNaN(this.valueObject.getTime()) &&
44582
44808
  typeof maskOptions.format === 'function'
44583
44809
  ) {
44584
44810
  existingValue = maskOptions.format(this.valueObject);
44585
44811
  }
44586
44812
 
44587
- // Clear before IMask attaches so the constructor seeds an empty
44588
- // internal value. Otherwise IMask reads the stale unmasked string
44589
- // and emits a spurious 'accept' before the restore below runs.
44590
44813
  this.skipNextProgrammaticInputEvent = true;
44591
44814
  this.inputElement.value = '';
44592
44815
 
44593
44816
  this.maskInstance = IMask$2(this.inputElement, maskOptions);
44594
44817
 
44595
- // Mask fires 'accept' on every value change, including the restore
44596
- // step below. Skip events fired during configureAutoFormatting so
44597
- // we don't overwrite a value the parent just pushed.
44598
44818
  this.maskInstance.on('accept', () => {
44819
+ // Suppress propagation during configureAutoFormatting's own value-restoration
44820
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
44821
+ // and we don't want to overwrite a value the parent just pushed.
44599
44822
  if (this._configuringMask) return;
44600
44823
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
44601
44824
  if (this.type === "date") {
@@ -44603,8 +44826,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44603
44826
  }
44604
44827
  });
44605
44828
 
44606
- // Mask fires 'complete' on the restore step below for any value that
44607
- // happens to be a complete match. Same setup-suppression as 'accept'.
44608
44829
  this.maskInstance.on('complete', () => {
44609
44830
  if (this._configuringMask) return;
44610
44831
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -44613,9 +44834,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44613
44834
  }
44614
44835
  });
44615
44836
 
44616
- // Write existingValue through the mask (not the input directly) so
44617
- // the mask reformats it under the new rules and keeps its internal
44618
- // _value aligned with the input's displayed text.
44837
+ // Restore the stashed value through IMask so it's properly masked
44619
44838
  if (existingValue) {
44620
44839
  this.maskInstance.value = existingValue;
44621
44840
  }
@@ -44783,6 +45002,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44783
45002
  */
44784
45003
  reset() {
44785
45004
  this.value = undefined;
45005
+ this.setDateObjectProperty('valueObject', undefined);
44786
45006
  this.validation.reset(this);
44787
45007
  }
44788
45008
 
@@ -44791,6 +45011,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44791
45011
  */
44792
45012
  clear() {
44793
45013
  this.value = undefined;
45014
+ this.setDateObjectProperty('valueObject', undefined);
44794
45015
  }
44795
45016
 
44796
45017
  /**
@@ -45319,7 +45540,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
45319
45540
  }
45320
45541
  };
45321
45542
 
45322
- var formkitVersion$7 = '202606192004';
45543
+ var formkitVersion$7 = '202606192121';
45323
45544
 
45324
45545
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
45325
45546
  // See LICENSE in the project root for license information.
@@ -50016,7 +50237,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
50016
50237
  }
50017
50238
  };
50018
50239
 
50019
- var formkitVersion$1$2 = '202606192004';
50240
+ var formkitVersion$1$2 = '202606192121';
50020
50241
 
50021
50242
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
50022
50243
  // See LICENSE in the project root for license information.
@@ -54344,7 +54565,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
54344
54565
  }
54345
54566
  };
54346
54567
 
54347
- var formkitVersion$6 = '202606192004';
54568
+ var formkitVersion$6 = '202606192121';
54348
54569
 
54349
54570
  let AuroElement$1$2 = class AuroElement extends i$2 {
54350
54571
  static get properties() {
@@ -58276,7 +58497,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
58276
58497
  }
58277
58498
  };
58278
58499
 
58279
- var formkitVersion$5 = '202606192004';
58500
+ var formkitVersion$5 = '202606192121';
58280
58501
 
58281
58502
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
58282
58503
  // See LICENSE in the project root for license information.
@@ -60026,7 +60247,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
60026
60247
  }
60027
60248
  };
60028
60249
 
60029
- var formkitVersion$4 = '202606192004';
60250
+ var formkitVersion$4 = '202606192121';
60030
60251
 
60031
60252
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
60032
60253
  // See LICENSE in the project root for license information.
@@ -61202,8 +61423,6 @@ function navigateArrow$1(component, direction, options = {}) {
61202
61423
  }
61203
61424
  }
61204
61425
 
61205
- /* eslint-disable no-underscore-dangle */
61206
-
61207
61426
  /**
61208
61427
  * Returns the clear button element from the active input's shadow
61209
61428
  * DOM, if available.
@@ -61239,9 +61458,11 @@ function isClearBtnFocused(ctx, clearBtn = getClearBtn(ctx)) {
61239
61458
  * @param {Object} menu - The menu component.
61240
61459
  */
61241
61460
  function reconcileMenuIndex(menu) {
61461
+ // eslint-disable-next-line no-underscore-dangle
61242
61462
  if (menu._index < 0 && menu.optionActive && menu.items) {
61243
61463
  const idx = menu.items.indexOf(menu.optionActive);
61244
61464
  if (idx >= 0) {
61465
+ // eslint-disable-next-line no-underscore-dangle
61245
61466
  menu._index = idx;
61246
61467
  }
61247
61468
  }
@@ -65241,7 +65462,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
65241
65462
  }
65242
65463
  };
65243
65464
 
65244
- var formkitVersion$2 = '202606192004';
65465
+ var formkitVersion$2 = '202606192121';
65245
65466
 
65246
65467
  let AuroElement$2$1 = class AuroElement extends i$2 {
65247
65468
  static get properties() {
@@ -76955,7 +77176,6 @@ class AuroInputUtilities {
76955
77176
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
76956
77177
 
76957
77178
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
76958
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
76959
77179
  return undefined;
76960
77180
  }
76961
77181
 
@@ -77107,8 +77327,10 @@ class BaseInput extends AuroElement$1$1 {
77107
77327
  this.layout = 'classic';
77108
77328
  this.locale = 'en-US';
77109
77329
  this.max = undefined;
77330
+ this._maxObject = undefined;
77110
77331
  this.maxLength = undefined;
77111
77332
  this.min = undefined;
77333
+ this._minObject = undefined;
77112
77334
  this.minLength = undefined;
77113
77335
  this.required = false;
77114
77336
  this.onDark = false;
@@ -77116,6 +77338,7 @@ class BaseInput extends AuroElement$1$1 {
77116
77338
  this.size = 'lg';
77117
77339
  this.shape = 'classic';
77118
77340
  this.value = undefined;
77341
+ this._valueObject = undefined;
77119
77342
 
77120
77343
  this._initializePrivateDefaults();
77121
77344
  }
@@ -77655,7 +77878,7 @@ class BaseInput extends AuroElement$1$1 {
77655
77878
  * @returns {Date|undefined}
77656
77879
  */
77657
77880
  get valueObject() {
77658
- return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
77881
+ return this._valueObject || this._computeDateObjectFallback(this.value);
77659
77882
  }
77660
77883
 
77661
77884
  /**
@@ -77663,7 +77886,7 @@ class BaseInput extends AuroElement$1$1 {
77663
77886
  * @returns {Date|undefined}
77664
77887
  */
77665
77888
  get minObject() {
77666
- return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
77889
+ return this._minObject || this._computeDateObjectFallback(this.min);
77667
77890
  }
77668
77891
 
77669
77892
  /**
@@ -77671,7 +77894,50 @@ class BaseInput extends AuroElement$1$1 {
77671
77894
  * @returns {Date|undefined}
77672
77895
  */
77673
77896
  get maxObject() {
77674
- return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
77897
+ return this._maxObject || this._computeDateObjectFallback(this.max);
77898
+ }
77899
+
77900
+ /**
77901
+ * Parses a date string into a Date object when the corresponding `_*Object`
77902
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
77903
+ * input type/format isn't a full date or the string is not a valid date.
77904
+ *
77905
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
77906
+ * inside its own `updated()` before this input's `updated()` has run
77907
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
77908
+ * and range checks would otherwise silently no-op (flipping the result to
77909
+ * `valid` or `patternMismatch`).
77910
+ * @private
77911
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
77912
+ * @returns {Date|undefined}
77913
+ */
77914
+ _computeDateObjectFallback(dateStr) {
77915
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
77916
+ return undefined;
77917
+ }
77918
+ if (!dateFormatter.isValidDate(dateStr)) {
77919
+ return undefined;
77920
+ }
77921
+ return dateFormatter.stringToDateInstance(dateStr);
77922
+ }
77923
+
77924
+ /**
77925
+ * Internal setter for readonly date object properties.
77926
+ * @private
77927
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
77928
+ * @param {Date|undefined} propertyValue - Value to assign.
77929
+ * @returns {void}
77930
+ */
77931
+ setDateObjectProperty(propertyName, propertyValue) {
77932
+ const internalPropertyName = `_${propertyName}`;
77933
+ const previousValue = this[internalPropertyName];
77934
+
77935
+ if (previousValue === propertyValue) {
77936
+ return;
77937
+ }
77938
+
77939
+ this[internalPropertyName] = propertyValue;
77940
+ this.requestUpdate(propertyName, previousValue);
77675
77941
  }
77676
77942
 
77677
77943
  connectedCallback() {
@@ -77700,6 +77966,7 @@ class BaseInput extends AuroElement$1$1 {
77700
77966
  format: this.format
77701
77967
  });
77702
77968
  this.configureDataForType();
77969
+ this.syncDateValues();
77703
77970
  }
77704
77971
 
77705
77972
  disconnectedCallback() {
@@ -77719,6 +77986,10 @@ class BaseInput extends AuroElement$1$1 {
77719
77986
  this.wrapperElement.addEventListener('click', this.handleClick);
77720
77987
  }
77721
77988
 
77989
+ // add attribute for query selectors when auro-input is registered under a custom name
77990
+ if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
77991
+ this.setAttribute('auro-input', '');
77992
+ }
77722
77993
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
77723
77994
 
77724
77995
  // use validity message override if declared when initializing the component
@@ -77729,6 +78000,7 @@ class BaseInput extends AuroElement$1$1 {
77729
78000
  this.setCustomHelpTextMessage();
77730
78001
  this.configureAutoFormatting();
77731
78002
  this.configureDataForType();
78003
+ this.syncDateValues();
77732
78004
  }
77733
78005
 
77734
78006
  /**
@@ -77865,6 +78137,8 @@ class BaseInput extends AuroElement$1$1 {
77865
78137
  this.configureDataForType();
77866
78138
  }
77867
78139
 
78140
+ this.syncDateValues(changedProperties);
78141
+
77868
78142
  if (changedProperties.has('value')) {
77869
78143
  if (this.value && this.value.length > 0) {
77870
78144
  this.hasValue = true;
@@ -77886,14 +78160,14 @@ class BaseInput extends AuroElement$1$1 {
77886
78160
 
77887
78161
  if (formattedValue !== this.inputElement.value) {
77888
78162
  this.skipNextProgrammaticInputEvent = true;
77889
- if (this.maskInstance && this.type !== 'date') {
78163
+ if (this.maskInstance && this.type === 'credit-card') {
77890
78164
  // Route through the mask so its _value and el.value stay in lock-step
77891
78165
  // (set value calls updateControl which writes el.value = displayValue).
77892
78166
  // Writing el.value directly leaves the mask thinking displayValue is
77893
- // stale; _saveSelection on the next focus/click then warns. Date is
77894
- // excluded because its formattedValue can be raw ISO when the calendar
77895
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
77896
- // flip validity from patternMismatch to tooShort.
78167
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
78168
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
78169
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
78170
+ // and flip validity from patternMismatch to tooShort.
77897
78171
  this.maskInstance.value = formattedValue || '';
77898
78172
  } else if (formattedValue) {
77899
78173
  this.inputElement.value = formattedValue;
@@ -77935,60 +78209,120 @@ class BaseInput extends AuroElement$1$1 {
77935
78209
  }));
77936
78210
  }
77937
78211
 
78212
+
78213
+ /**
78214
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
78215
+ * This keeps the model and display values aligned when either side changes.
78216
+ *
78217
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
78218
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
78219
+ * represents a full year/month/day date format.
78220
+ *
78221
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
78222
+ * @returns {void}
78223
+ * @private
78224
+ */
78225
+ syncDateValues(changedProperties = undefined) {
78226
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
78227
+ return;
78228
+ }
78229
+
78230
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
78231
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
78232
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
78233
+ }
78234
+
78235
+ /**
78236
+ * Synchronizes one date object/string property pair.
78237
+ * @private
78238
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
78239
+ * @param {string} objectProperty - Date object property name.
78240
+ * @param {string} valueProperty - ISO string property name.
78241
+ * @returns {void}
78242
+ */
78243
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
78244
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
78245
+
78246
+ // objectProperty wins over valueProperty when both changed
78247
+ if (objectPropertyChanged && this[objectProperty]) {
78248
+ this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
78249
+ return;
78250
+ }
78251
+
78252
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
78253
+ if (!valuePropertyChanged) {
78254
+ return;
78255
+ }
78256
+
78257
+ // 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)
78258
+ if (
78259
+ changedProperties &&
78260
+ valueProperty === 'value' &&
78261
+ changedProperties.get('value') === undefined &&
78262
+ this[objectProperty] instanceof Date &&
78263
+ this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
78264
+ ) {
78265
+ return;
78266
+ }
78267
+
78268
+ if (dateFormatter.isValidDate(this[valueProperty])) {
78269
+ this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
78270
+ } else {
78271
+ this.setDateObjectProperty(objectProperty, undefined);
78272
+ }
78273
+ }
78274
+
77938
78275
  /**
77939
78276
  * Sets up IMasks and logic based on auto-formatting requirements.
77940
78277
  * @private
77941
78278
  * @returns {void}
77942
78279
  */
77943
78280
  configureAutoFormatting() {
77944
- // _configuringMask gates two things: external re-entry into this method
77945
- // while setup is mid-flight (from property changes that call back here),
77946
- // and the accept/complete listeners below both need to ignore the mask
77947
- // events fired by our own value-restore step.
78281
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
78282
+ // by _configuringMask above) could otherwise trigger handleInput
78283
+ // processCreditCard configureAutoFormatting before the outer call's
78284
+ // set value has finished its alignCursor pass.
77948
78285
  if (this._configuringMask) return;
77949
78286
  this._configuringMask = true;
77950
78287
  try {
77951
- // Destroy any prior mask so IMask can attach fresh under the new format.
77952
78288
  if (this.maskInstance) {
77953
78289
  this.maskInstance.destroy();
77954
78290
  }
77955
78291
 
78292
+ // Pass new format to util
77956
78293
  this.util.updateFormat(this.format);
77957
78294
 
77958
78295
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
77959
78296
 
77960
78297
  if (this.inputElement && maskOptions.mask) {
77961
- // Capture the current display so it can be re-applied after IMask
77962
- // attaches. The restore at the bottom goes through maskInstance.value
77963
- // (not inputElement.value directly) so the mask's internal state and
77964
- // the input's displayed text stay in lock-step.
77965
- let existingValue = this.inputElement.value;
77966
78298
 
77967
- // Format-change case (e.g. locale switch): existingValue is the OLD
77968
- // mask's display string and may not parse under the new mask. When
77969
- // we have a valid date model, rebuild the display from valueObject
77970
- // (the canonical source) using the new mask's format function.
78299
+ // Stash and clear any existing value before IMask init.
78300
+ // IMask's constructor processes the current input value which requires
78301
+ // selection state clearing first avoids that scenario entirely.
78302
+ // When the format changes (e.g. locale switch) and we have a valid ISO
78303
+ // model value, compute the display string for the NEW format instead of
78304
+ // re-using the old display string, which may be invalid in the new mask.
78305
+ let existingValue = this.inputElement.value;
77971
78306
  if (
77972
78307
  this.util.isFullDateFormat(this.type, this.format) &&
77973
78308
  this.value &&
77974
- this.valueObject &&
78309
+ dateFormatter.isValidDate(this.value) &&
78310
+ this.valueObject instanceof Date &&
78311
+ !Number.isNaN(this.valueObject.getTime()) &&
77975
78312
  typeof maskOptions.format === 'function'
77976
78313
  ) {
77977
78314
  existingValue = maskOptions.format(this.valueObject);
77978
78315
  }
77979
78316
 
77980
- // Clear before IMask attaches so the constructor seeds an empty
77981
- // internal value. Otherwise IMask reads the stale unmasked string
77982
- // and emits a spurious 'accept' before the restore below runs.
77983
78317
  this.skipNextProgrammaticInputEvent = true;
77984
78318
  this.inputElement.value = '';
77985
78319
 
77986
78320
  this.maskInstance = IMask(this.inputElement, maskOptions);
77987
78321
 
77988
- // Mask fires 'accept' on every value change, including the restore
77989
- // step below. Skip events fired during configureAutoFormatting so
77990
- // we don't overwrite a value the parent just pushed.
77991
78322
  this.maskInstance.on('accept', () => {
78323
+ // Suppress propagation during configureAutoFormatting's own value-restoration
78324
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
78325
+ // and we don't want to overwrite a value the parent just pushed.
77992
78326
  if (this._configuringMask) return;
77993
78327
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
77994
78328
  if (this.type === "date") {
@@ -77996,8 +78330,6 @@ class BaseInput extends AuroElement$1$1 {
77996
78330
  }
77997
78331
  });
77998
78332
 
77999
- // Mask fires 'complete' on the restore step below for any value that
78000
- // happens to be a complete match. Same setup-suppression as 'accept'.
78001
78333
  this.maskInstance.on('complete', () => {
78002
78334
  if (this._configuringMask) return;
78003
78335
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -78006,9 +78338,7 @@ class BaseInput extends AuroElement$1$1 {
78006
78338
  }
78007
78339
  });
78008
78340
 
78009
- // Write existingValue through the mask (not the input directly) so
78010
- // the mask reformats it under the new rules and keeps its internal
78011
- // _value aligned with the input's displayed text.
78341
+ // Restore the stashed value through IMask so it's properly masked
78012
78342
  if (existingValue) {
78013
78343
  this.maskInstance.value = existingValue;
78014
78344
  }
@@ -78176,6 +78506,7 @@ class BaseInput extends AuroElement$1$1 {
78176
78506
  */
78177
78507
  reset() {
78178
78508
  this.value = undefined;
78509
+ this.setDateObjectProperty('valueObject', undefined);
78179
78510
  this.validation.reset(this);
78180
78511
  }
78181
78512
 
@@ -78184,6 +78515,7 @@ class BaseInput extends AuroElement$1$1 {
78184
78515
  */
78185
78516
  clear() {
78186
78517
  this.value = undefined;
78518
+ this.setDateObjectProperty('valueObject', undefined);
78187
78519
  }
78188
78520
 
78189
78521
  /**
@@ -78712,7 +79044,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
78712
79044
  }
78713
79045
  };
78714
79046
 
78715
- var formkitVersion$1$1 = '202606192004';
79047
+ var formkitVersion$1$1 = '202606192121';
78716
79048
 
78717
79049
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
78718
79050
  // See LICENSE in the project root for license information.
@@ -79833,7 +80165,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
79833
80165
  }
79834
80166
  };
79835
80167
 
79836
- var formkitVersion$3 = '202606192004';
80168
+ var formkitVersion$3 = '202606192121';
79837
80169
 
79838
80170
  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}`;
79839
80171
 
@@ -80820,7 +81152,7 @@ class AuroCombobox extends AuroElement$3 {
80820
81152
  if (this.menu) {
80821
81153
  this.menu.matchWord = normalizeFilterValue(this.input.value);
80822
81154
  }
80823
- const label = getOptionLabel(this.menu.optionSelected);
81155
+ const label = getOptionLabel(this.menu.optionSelected) || this.menu.currentLabel;
80824
81156
  this.updateTriggerTextDisplay(label || this.value);
80825
81157
  }
80826
81158
 
@@ -80834,9 +81166,40 @@ class AuroCombobox extends AuroElement$3 {
80834
81166
  // in suggestion mode, do not override input value if no selection has been made and the input currently has focus
80835
81167
  const isInputFocusedWithNoSelection = !this.menu.value && (this.input.matches(':focus-within') || (this.inputInBib && this.inputInBib.matches(':focus-within')));
80836
81168
 
80837
- const suppressed = this.persistInput || (this.behavior === 'suggestion' && isInputFocusedWithNoSelection);
80838
- if (!suppressed) {
80839
- this.syncInputValuesAcrossTriggerAndBib(label || this.value);
81169
+ if (!this.persistInput && !(this.behavior === 'suggestion' && isInputFocusedWithNoSelection)) {
81170
+ const nextValue = label || this.value;
81171
+ // Only set the flag when there's an actual write to suppress —
81172
+ // syncValuesAndStates re-enters here during typing when both inputs
81173
+ // already match, and a no-op flag flip would make the bib branch's
81174
+ // bail eat legitimate user-input events.
81175
+ const triggerNeedsSync = this.input.value !== nextValue;
81176
+ const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
81177
+ if (triggerNeedsSync || bibNeedsSync) {
81178
+ this._syncingDisplayValue = true;
81179
+ if (triggerNeedsSync) {
81180
+ this.input.value = nextValue;
81181
+ }
81182
+ if (bibNeedsSync) {
81183
+ this.inputInBib.value = nextValue;
81184
+ }
81185
+ const pending = [];
81186
+ if (triggerNeedsSync) {
81187
+ pending.push(this.input.updateComplete);
81188
+ }
81189
+ if (bibNeedsSync) {
81190
+ pending.push(this.inputInBib.updateComplete);
81191
+ }
81192
+ Promise.all(pending).then(() => {
81193
+ // imask reasserts otherwise, and handleBlur reverts to its stale value.
81194
+ if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
81195
+ this.input.maskInstance.updateValue();
81196
+ }
81197
+ if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
81198
+ this.inputInBib.maskInstance.updateValue();
81199
+ }
81200
+ this._syncingDisplayValue = false;
81201
+ });
81202
+ }
80840
81203
  }
80841
81204
 
80842
81205
  // update the displayValue in the trigger if displayValue slot content is present
@@ -80864,52 +81227,6 @@ class AuroCombobox extends AuroElement$3 {
80864
81227
  this.requestUpdate();
80865
81228
  }
80866
81229
 
80867
- /**
80868
- * Writes nextValue to the trigger input and the bib input when their current
80869
- * value differs, then re-asserts imask after Lit's update flushes.
80870
- * @param {string} nextValue - The value to write to both inputs.
80871
- * @returns {Promise<void> | null} Promise that resolves after the inputs flush,
80872
- * or null when no sync was needed (so callers can skip post-flush work).
80873
- * @private
80874
- */
80875
- syncInputValuesAcrossTriggerAndBib(nextValue) {
80876
- // Only set the flag when there's an actual write to suppress —
80877
- // syncValuesAndStates re-enters here during typing when both inputs
80878
- // already match, and a no-op flag flip would make the bib branch's
80879
- // bail eat legitimate user-input events.
80880
- const triggerNeedsSync = this.input.value !== nextValue;
80881
- const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
80882
- if (!triggerNeedsSync && !bibNeedsSync) {
80883
- return null;
80884
- }
80885
-
80886
- this._syncingDisplayValue = true;
80887
- if (triggerNeedsSync) {
80888
- this.input.value = nextValue;
80889
- }
80890
- if (bibNeedsSync) {
80891
- this.inputInBib.value = nextValue;
80892
- }
80893
-
80894
- const pending = [];
80895
- if (triggerNeedsSync) {
80896
- pending.push(this.input.updateComplete);
80897
- }
80898
- if (bibNeedsSync) {
80899
- pending.push(this.inputInBib.updateComplete);
80900
- }
80901
- return Promise.all(pending).then(() => {
80902
- // imask reasserts otherwise, and handleBlur reverts to its stale value.
80903
- if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
80904
- this.input.maskInstance.updateValue();
80905
- }
80906
- if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
80907
- this.inputInBib.maskInstance.updateValue();
80908
- }
80909
- this._syncingDisplayValue = false;
80910
- });
80911
- }
80912
-
80913
81230
  /**
80914
81231
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
80915
81232
  * @private
@@ -80937,9 +81254,9 @@ class AuroCombobox extends AuroElement$3 {
80937
81254
  this.syncValuesAndStates();
80938
81255
  }
80939
81256
 
80940
- // Re-activate when optionActive is not in the current scrollable viewport,
80941
- // or when _index has been reset (e.g. by clearSelection in an async update)
80942
- // so that makeSelection() can find the correct option.
81257
+ // Re-activate when optionActive is no longer visible, or when _index has
81258
+ // been reset (e.g. by clearSelection in an async update) so that
81259
+ // makeSelection() can find the correct option.
80943
81260
  if (!this.availableOptions.includes(this.menu.optionActive) || this.menu._index < 0) {
80944
81261
  this.activateFirstEnabledAvailableOption();
80945
81262
  }
@@ -81073,25 +81390,28 @@ class AuroCombobox extends AuroElement$3 {
81073
81390
 
81074
81391
  guardTouchPassthrough$1(this.menu);
81075
81392
 
81076
- // showModal() takes focus away from the trigger. Early focus once
81077
- // the dialog has painted; the shared doubleRaf below is the fallback
81078
- // for when the dialog needs an extra frame and also clears the
81079
- // validation guard.
81393
+ // The dialog's showModal() steals focus from the trigger.
81394
+ // A single rAF is enough for the dialog DOM to be painted and
81395
+ // focusable, then doubleRaf finalizes the transition.
81080
81396
  requestAnimationFrame(() => {
81081
81397
  this.setInputFocus();
81082
81398
  });
81083
- }
81084
- // else (desktop popover-open): Chrome resets the trigger caret to
81085
- // [0, 0] when its floating <label for="…"> overlay receives focus.
81086
- // The shared doubleRaf below parks the caret back at end-of-text
81087
- // after the dropdown layout settles.
81088
-
81089
- doubleRaf$1(() => {
81090
- this.setInputFocus();
81091
- if (this._inFullscreenTransition) {
81399
+
81400
+ doubleRaf$1(() => {
81401
+ this.setInputFocus();
81092
81402
  this._inFullscreenTransition = false;
81093
- }
81094
- });
81403
+ });
81404
+ } else {
81405
+ // Desktop popover-open: restore the trigger caret to end-of-text.
81406
+ // Clicking the trigger lands on auro-input's floating <label for="…">
81407
+ // overlay; Chrome resets the native input's selection to [0, 0] on
81408
+ // label-focus before any JS runs. setInputFocus()'s non-fullscreen
81409
+ // branch parks the caret at end. doubleRaf lets the dropdown layout
81410
+ // settle first, matching the fullscreen branch timing.
81411
+ doubleRaf$1(() => {
81412
+ this.setInputFocus();
81413
+ });
81414
+ }
81095
81415
  }
81096
81416
  });
81097
81417
 
@@ -81198,9 +81518,9 @@ class AuroCombobox extends AuroElement$3 {
81198
81518
  } else {
81199
81519
  // Safety net for the strategy-change setTimeout: a viewport-crossing
81200
81520
  // fullscreen→floating switch can close the dialog and leave focus on
81201
- // body. Every other call into this branch already has focus on the
81202
- // input via the combobox-level focusin → this.focus() redirect, so
81203
- // this is a no-op in the common case.
81521
+ // body. Every other Branch 2 callsite already has focus on the input
81522
+ // via the focusin → this.focus() redirect (L1448-1452), so this is a
81523
+ // no-op in the common case.
81204
81524
  if (!this.input.componentHasFocus) {
81205
81525
  this.input.focus();
81206
81526
  }
@@ -81319,7 +81639,7 @@ class AuroCombobox extends AuroElement$3 {
81319
81639
  if (this.menu.optionSelected) {
81320
81640
  const selected = this.menu.optionSelected;
81321
81641
 
81322
- if (this.optionSelected !== selected) {
81642
+ if (!this.optionSelected || this.optionSelected !== selected) {
81323
81643
  this.optionSelected = selected;
81324
81644
  }
81325
81645
 
@@ -81332,7 +81652,7 @@ class AuroCombobox extends AuroElement$3 {
81332
81652
  }
81333
81653
 
81334
81654
  // Update display
81335
- this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected));
81655
+ this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected) || this.menu.value);
81336
81656
 
81337
81657
  // Update match word for filtering
81338
81658
  const trimmedInput = normalizeFilterValue(this.input.value);
@@ -81350,15 +81670,11 @@ class AuroCombobox extends AuroElement$3 {
81350
81670
 
81351
81671
  // Announce the selection after the dropdown closes so it isn't
81352
81672
  // overridden by VoiceOver's "collapsed" announcement from aria-expanded.
81353
- // Skip when there's no selected value (e.g. menu.clearSelection() from
81354
- // the unmatched-value path), otherwise VoiceOver reads "undefined".
81355
81673
  const selectedValue = this.menu.value;
81356
- if (selectedValue) {
81357
- const announcementDelay = 300;
81358
- setTimeout(() => {
81359
- announceToScreenReader$1(this._getAnnouncementRoot(), `${selectedValue}, selected`);
81360
- }, announcementDelay);
81361
- }
81674
+ const announcementDelay = 300;
81675
+ setTimeout(() => {
81676
+ announceToScreenReader$1(this._getAnnouncementRoot(), `${selectedValue}, selected`);
81677
+ }, announcementDelay);
81362
81678
  }
81363
81679
 
81364
81680
  // Programmatic value syncs leave availableOptions stale because
@@ -81718,7 +82034,15 @@ class AuroCombobox extends AuroElement$3 {
81718
82034
  this.menu.value = undefined;
81719
82035
  this.validation.reset(this);
81720
82036
  this.touched = false;
82037
+ // Force validity back to the cleared state. validation.reset() calls
82038
+ // validate() at the end, and (post-credit-card-fix) the trigger input's
82039
+ // residual validity may still be copied into the combobox by the
82040
+ // auroInputElements loop. Explicitly clear here so reset() actually
82041
+ // leaves the component in a "no validity" state.
81721
82042
  this.validity = undefined;
82043
+ this.errorMessage = '';
82044
+ this.input.validity = undefined;
82045
+ this.input.errorMessage = '';
81722
82046
  }
81723
82047
 
81724
82048
  /**
@@ -81771,27 +82095,52 @@ class AuroCombobox extends AuroElement$3 {
81771
82095
  this.input.value = this.value;
81772
82096
  }
81773
82097
 
81774
- // Sync menu.value only when an option actually matches, or when filter
81775
- // mode needs setMenuValue to dispatch auroMenu-selectValueFailure (the
81776
- // listener at line 1206 clears combobox.value, mirroring select's
81777
- // pattern). Otherwise sync the input display for freeform values.
82098
+ // Sync menu.value only when an option actually matches; otherwise clear it.
81778
82099
  if (this.menu.options && this.menu.options.length > 0) {
81779
- if (this.menu.options.some((opt) => opt.value === this.value) || this.behavior === 'filter') {
82100
+ if (this.menu.options.some((opt) => opt.value === this.value)) {
82101
+ this.setMenuValue(this.value);
82102
+ } else if (this.behavior === 'filter') {
82103
+ // In filter mode, freeform values aren't allowed. Push the unmatched
82104
+ // value through setMenuValue so menu dispatches auroMenu-selectValueFailure
82105
+ // and the listener at line 1206 clears combobox.value (mirrors select's
82106
+ // pattern). Bypassing setMenuValue here would skip the failure cascade.
81780
82107
  this.setMenuValue(this.value);
81781
82108
  } else {
81782
- // Clear menu.value AND menu.optionSelected together. Clearing only
81783
- // menu.value leaves the previously-selected option element pinned
81784
- // as menu.optionSelected; a later auroMenu-selectedOption event
81785
- // would then write its stale .value back into combobox.value.
81786
- if (this.menu.value || this.menu.optionSelected) {
81787
- this.menu.clearSelection();
82109
+ if (this.menu.value) {
82110
+ this.menu.value = undefined;
81788
82111
  }
81789
- // Suggestion-mode freeform value: sync the trigger + bib to show it,
81790
- // then refresh the filter once the inputs flush (handleInputValueChange
81791
- // bailed on _syncingDisplayValue).
81792
- const syncPromise = this.syncInputValuesAcrossTriggerAndBib(this.value || '');
81793
- if (syncPromise) {
81794
- syncPromise.then(() => {
82112
+ // Sync the display for programmatic freeform value changes (e.g. the
82113
+ // swap-values pattern). Guard with _syncingDisplayValue so that the
82114
+ // re-entrant input event from base-input.notifyValueChanged() is
82115
+ // ignored by handleInputValueChange. Skip the sync when input already
82116
+ // matches to avoid spurious events during the normal typing path.
82117
+ const nextValue = this.value || '';
82118
+ const triggerNeedsSync = this.input.value !== nextValue;
82119
+ const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
82120
+ if (triggerNeedsSync || bibNeedsSync) {
82121
+ this._syncingDisplayValue = true;
82122
+ if (triggerNeedsSync) {
82123
+ this.input.value = nextValue;
82124
+ }
82125
+ if (bibNeedsSync) {
82126
+ this.inputInBib.value = nextValue;
82127
+ }
82128
+ const pending = [];
82129
+ if (triggerNeedsSync) {
82130
+ pending.push(this.input.updateComplete);
82131
+ }
82132
+ if (bibNeedsSync) {
82133
+ pending.push(this.inputInBib.updateComplete);
82134
+ }
82135
+ Promise.all(pending).then(() => {
82136
+ if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
82137
+ this.input.maskInstance.updateValue();
82138
+ }
82139
+ if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
82140
+ this.inputInBib.maskInstance.updateValue();
82141
+ }
82142
+ this._syncingDisplayValue = false;
82143
+ // handleInputValueChange bailed on the flag — refresh the filter.
81795
82144
  this._programmaticFilterRefresh = true;
81796
82145
  this.handleMenuOptions();
81797
82146
  setTimeout(() => {
@@ -82580,8 +82929,8 @@ class AuroMenu extends AuroElement$2 {
82580
82929
  // Malformed JSON (e.g. a literal string that happens to start with "[") falls back
82581
82930
  // to a single-item array rather than throwing during render.
82582
82931
  try {
82583
- const parsed = JSON.parse(this.value);
82584
- return Array.isArray(parsed) ? parsed : [this.value];
82932
+ // any valid JSON starting with `[` ALWAYS parses to an array
82933
+ return JSON.parse(this.value);
82585
82934
  } catch {
82586
82935
  return [this.value];
82587
82936
  }
@@ -88624,7 +88973,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
88624
88973
  }
88625
88974
  };
88626
88975
 
88627
- var formkitVersion$1 = '202606192004';
88976
+ var formkitVersion$1 = '202606192121';
88628
88977
 
88629
88978
  class AuroElement extends i$2 {
88630
88979
  static get properties() {
@@ -90637,7 +90986,7 @@ class AuroHelpText extends i$2 {
90637
90986
  }
90638
90987
  }
90639
90988
 
90640
- var formkitVersion = '202606192004';
90989
+ var formkitVersion = '202606192121';
90641
90990
 
90642
90991
  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}`;
90643
90992