@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
@@ -11175,7 +11175,6 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
11175
11175
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
11176
11176
 
11177
11177
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
11178
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
11179
11178
  return undefined;
11180
11179
  }
11181
11180
 
@@ -11327,8 +11326,10 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11327
11326
  this.layout = 'classic';
11328
11327
  this.locale = 'en-US';
11329
11328
  this.max = undefined;
11329
+ this._maxObject = undefined;
11330
11330
  this.maxLength = undefined;
11331
11331
  this.min = undefined;
11332
+ this._minObject = undefined;
11332
11333
  this.minLength = undefined;
11333
11334
  this.required = false;
11334
11335
  this.onDark = false;
@@ -11336,6 +11337,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11336
11337
  this.size = 'lg';
11337
11338
  this.shape = 'classic';
11338
11339
  this.value = undefined;
11340
+ this._valueObject = undefined;
11339
11341
 
11340
11342
  this._initializePrivateDefaults();
11341
11343
  }
@@ -11875,7 +11877,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11875
11877
  * @returns {Date|undefined}
11876
11878
  */
11877
11879
  get valueObject() {
11878
- return this.value && dateFormatter$3.isValidDate(this.value) ? dateFormatter$3.stringToDateInstance(this.value) : undefined;
11880
+ return this._valueObject || this._computeDateObjectFallback(this.value);
11879
11881
  }
11880
11882
 
11881
11883
  /**
@@ -11883,7 +11885,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11883
11885
  * @returns {Date|undefined}
11884
11886
  */
11885
11887
  get minObject() {
11886
- return this.min && dateFormatter$3.isValidDate(this.min) ? dateFormatter$3.stringToDateInstance(this.min) : undefined;
11888
+ return this._minObject || this._computeDateObjectFallback(this.min);
11887
11889
  }
11888
11890
 
11889
11891
  /**
@@ -11891,7 +11893,50 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11891
11893
  * @returns {Date|undefined}
11892
11894
  */
11893
11895
  get maxObject() {
11894
- return this.max && dateFormatter$3.isValidDate(this.max) ? dateFormatter$3.stringToDateInstance(this.max) : undefined;
11896
+ return this._maxObject || this._computeDateObjectFallback(this.max);
11897
+ }
11898
+
11899
+ /**
11900
+ * Parses a date string into a Date object when the corresponding `_*Object`
11901
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
11902
+ * input type/format isn't a full date or the string is not a valid date.
11903
+ *
11904
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
11905
+ * inside its own `updated()` before this input's `updated()` has run
11906
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
11907
+ * and range checks would otherwise silently no-op (flipping the result to
11908
+ * `valid` or `patternMismatch`).
11909
+ * @private
11910
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
11911
+ * @returns {Date|undefined}
11912
+ */
11913
+ _computeDateObjectFallback(dateStr) {
11914
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
11915
+ return undefined;
11916
+ }
11917
+ if (!dateFormatter$3.isValidDate(dateStr)) {
11918
+ return undefined;
11919
+ }
11920
+ return dateFormatter$3.stringToDateInstance(dateStr);
11921
+ }
11922
+
11923
+ /**
11924
+ * Internal setter for readonly date object properties.
11925
+ * @private
11926
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
11927
+ * @param {Date|undefined} propertyValue - Value to assign.
11928
+ * @returns {void}
11929
+ */
11930
+ setDateObjectProperty(propertyName, propertyValue) {
11931
+ const internalPropertyName = `_${propertyName}`;
11932
+ const previousValue = this[internalPropertyName];
11933
+
11934
+ if (previousValue === propertyValue) {
11935
+ return;
11936
+ }
11937
+
11938
+ this[internalPropertyName] = propertyValue;
11939
+ this.requestUpdate(propertyName, previousValue);
11895
11940
  }
11896
11941
 
11897
11942
  connectedCallback() {
@@ -11920,6 +11965,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11920
11965
  format: this.format
11921
11966
  });
11922
11967
  this.configureDataForType();
11968
+ this.syncDateValues();
11923
11969
  }
11924
11970
 
11925
11971
  disconnectedCallback() {
@@ -11939,6 +11985,10 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11939
11985
  this.wrapperElement.addEventListener('click', this.handleClick);
11940
11986
  }
11941
11987
 
11988
+ // add attribute for query selectors when auro-input is registered under a custom name
11989
+ if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
11990
+ this.setAttribute('auro-input', '');
11991
+ }
11942
11992
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
11943
11993
 
11944
11994
  // use validity message override if declared when initializing the component
@@ -11949,6 +11999,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11949
11999
  this.setCustomHelpTextMessage();
11950
12000
  this.configureAutoFormatting();
11951
12001
  this.configureDataForType();
12002
+ this.syncDateValues();
11952
12003
  }
11953
12004
 
11954
12005
  /**
@@ -12085,6 +12136,8 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12085
12136
  this.configureDataForType();
12086
12137
  }
12087
12138
 
12139
+ this.syncDateValues(changedProperties);
12140
+
12088
12141
  if (changedProperties.has('value')) {
12089
12142
  if (this.value && this.value.length > 0) {
12090
12143
  this.hasValue = true;
@@ -12106,14 +12159,14 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12106
12159
 
12107
12160
  if (formattedValue !== this.inputElement.value) {
12108
12161
  this.skipNextProgrammaticInputEvent = true;
12109
- if (this.maskInstance && this.type !== 'date') {
12162
+ if (this.maskInstance && this.type === 'credit-card') {
12110
12163
  // Route through the mask so its _value and el.value stay in lock-step
12111
12164
  // (set value calls updateControl which writes el.value = displayValue).
12112
12165
  // Writing el.value directly leaves the mask thinking displayValue is
12113
- // stale; _saveSelection on the next focus/click then warns. Date is
12114
- // excluded because its formattedValue can be raw ISO when the calendar
12115
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
12116
- // flip validity from patternMismatch to tooShort.
12166
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
12167
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
12168
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
12169
+ // and flip validity from patternMismatch to tooShort.
12117
12170
  this.maskInstance.value = formattedValue || '';
12118
12171
  } else if (formattedValue) {
12119
12172
  this.inputElement.value = formattedValue;
@@ -12155,60 +12208,120 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12155
12208
  }));
12156
12209
  }
12157
12210
 
12211
+
12212
+ /**
12213
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
12214
+ * This keeps the model and display values aligned when either side changes.
12215
+ *
12216
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
12217
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
12218
+ * represents a full year/month/day date format.
12219
+ *
12220
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
12221
+ * @returns {void}
12222
+ * @private
12223
+ */
12224
+ syncDateValues(changedProperties = undefined) {
12225
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
12226
+ return;
12227
+ }
12228
+
12229
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
12230
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
12231
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
12232
+ }
12233
+
12234
+ /**
12235
+ * Synchronizes one date object/string property pair.
12236
+ * @private
12237
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
12238
+ * @param {string} objectProperty - Date object property name.
12239
+ * @param {string} valueProperty - ISO string property name.
12240
+ * @returns {void}
12241
+ */
12242
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
12243
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
12244
+
12245
+ // objectProperty wins over valueProperty when both changed
12246
+ if (objectPropertyChanged && this[objectProperty]) {
12247
+ this[valueProperty] = dateFormatter$3.toISOFormatString(this[objectProperty]);
12248
+ return;
12249
+ }
12250
+
12251
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
12252
+ if (!valuePropertyChanged) {
12253
+ return;
12254
+ }
12255
+
12256
+ // 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)
12257
+ if (
12258
+ changedProperties &&
12259
+ valueProperty === 'value' &&
12260
+ changedProperties.get('value') === undefined &&
12261
+ this[objectProperty] instanceof Date &&
12262
+ this[valueProperty] === dateFormatter$3.toISOFormatString(this[objectProperty])
12263
+ ) {
12264
+ return;
12265
+ }
12266
+
12267
+ if (dateFormatter$3.isValidDate(this[valueProperty])) {
12268
+ this.setDateObjectProperty(objectProperty, dateFormatter$3.stringToDateInstance(this[valueProperty]));
12269
+ } else {
12270
+ this.setDateObjectProperty(objectProperty, undefined);
12271
+ }
12272
+ }
12273
+
12158
12274
  /**
12159
12275
  * Sets up IMasks and logic based on auto-formatting requirements.
12160
12276
  * @private
12161
12277
  * @returns {void}
12162
12278
  */
12163
12279
  configureAutoFormatting() {
12164
- // _configuringMask gates two things: external re-entry into this method
12165
- // while setup is mid-flight (from property changes that call back here),
12166
- // and the accept/complete listeners below both need to ignore the mask
12167
- // events fired by our own value-restore step.
12280
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
12281
+ // by _configuringMask above) could otherwise trigger handleInput
12282
+ // processCreditCard configureAutoFormatting before the outer call's
12283
+ // set value has finished its alignCursor pass.
12168
12284
  if (this._configuringMask) return;
12169
12285
  this._configuringMask = true;
12170
12286
  try {
12171
- // Destroy any prior mask so IMask can attach fresh under the new format.
12172
12287
  if (this.maskInstance) {
12173
12288
  this.maskInstance.destroy();
12174
12289
  }
12175
12290
 
12291
+ // Pass new format to util
12176
12292
  this.util.updateFormat(this.format);
12177
12293
 
12178
12294
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
12179
12295
 
12180
12296
  if (this.inputElement && maskOptions.mask) {
12181
- // Capture the current display so it can be re-applied after IMask
12182
- // attaches. The restore at the bottom goes through maskInstance.value
12183
- // (not inputElement.value directly) so the mask's internal state and
12184
- // the input's displayed text stay in lock-step.
12185
- let existingValue = this.inputElement.value;
12186
12297
 
12187
- // Format-change case (e.g. locale switch): existingValue is the OLD
12188
- // mask's display string and may not parse under the new mask. When
12189
- // we have a valid date model, rebuild the display from valueObject
12190
- // (the canonical source) using the new mask's format function.
12298
+ // Stash and clear any existing value before IMask init.
12299
+ // IMask's constructor processes the current input value which requires
12300
+ // selection state clearing first avoids that scenario entirely.
12301
+ // When the format changes (e.g. locale switch) and we have a valid ISO
12302
+ // model value, compute the display string for the NEW format instead of
12303
+ // re-using the old display string, which may be invalid in the new mask.
12304
+ let existingValue = this.inputElement.value;
12191
12305
  if (
12192
12306
  this.util.isFullDateFormat(this.type, this.format) &&
12193
12307
  this.value &&
12194
- this.valueObject &&
12308
+ dateFormatter$3.isValidDate(this.value) &&
12309
+ this.valueObject instanceof Date &&
12310
+ !Number.isNaN(this.valueObject.getTime()) &&
12195
12311
  typeof maskOptions.format === 'function'
12196
12312
  ) {
12197
12313
  existingValue = maskOptions.format(this.valueObject);
12198
12314
  }
12199
12315
 
12200
- // Clear before IMask attaches so the constructor seeds an empty
12201
- // internal value. Otherwise IMask reads the stale unmasked string
12202
- // and emits a spurious 'accept' before the restore below runs.
12203
12316
  this.skipNextProgrammaticInputEvent = true;
12204
12317
  this.inputElement.value = '';
12205
12318
 
12206
12319
  this.maskInstance = IMask$3(this.inputElement, maskOptions);
12207
12320
 
12208
- // Mask fires 'accept' on every value change, including the restore
12209
- // step below. Skip events fired during configureAutoFormatting so
12210
- // we don't overwrite a value the parent just pushed.
12211
12321
  this.maskInstance.on('accept', () => {
12322
+ // Suppress propagation during configureAutoFormatting's own value-restoration
12323
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
12324
+ // and we don't want to overwrite a value the parent just pushed.
12212
12325
  if (this._configuringMask) return;
12213
12326
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
12214
12327
  if (this.type === "date") {
@@ -12216,8 +12329,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12216
12329
  }
12217
12330
  });
12218
12331
 
12219
- // Mask fires 'complete' on the restore step below for any value that
12220
- // happens to be a complete match. Same setup-suppression as 'accept'.
12221
12332
  this.maskInstance.on('complete', () => {
12222
12333
  if (this._configuringMask) return;
12223
12334
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -12226,9 +12337,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12226
12337
  }
12227
12338
  });
12228
12339
 
12229
- // Write existingValue through the mask (not the input directly) so
12230
- // the mask reformats it under the new rules and keeps its internal
12231
- // _value aligned with the input's displayed text.
12340
+ // Restore the stashed value through IMask so it's properly masked
12232
12341
  if (existingValue) {
12233
12342
  this.maskInstance.value = existingValue;
12234
12343
  }
@@ -12396,6 +12505,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12396
12505
  */
12397
12506
  reset() {
12398
12507
  this.value = undefined;
12508
+ this.setDateObjectProperty('valueObject', undefined);
12399
12509
  this.validation.reset(this);
12400
12510
  }
12401
12511
 
@@ -12404,6 +12514,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12404
12514
  */
12405
12515
  clear() {
12406
12516
  this.value = undefined;
12517
+ this.setDateObjectProperty('valueObject', undefined);
12407
12518
  }
12408
12519
 
12409
12520
  /**
@@ -12932,7 +13043,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
12932
13043
  }
12933
13044
  };
12934
13045
 
12935
- var formkitVersion$8 = '202606192004';
13046
+ var formkitVersion$8 = '202606192121';
12936
13047
 
12937
13048
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12938
13049
  // See LICENSE in the project root for license information.
@@ -24171,7 +24282,6 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
24171
24282
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
24172
24283
 
24173
24284
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
24174
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
24175
24285
  return undefined;
24176
24286
  }
24177
24287
 
@@ -27052,7 +27162,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27052
27162
  }
27053
27163
  };
27054
27164
 
27055
- var formkitVersion$2$1 = '202606192004';
27165
+ var formkitVersion$2$1 = '202606192121';
27056
27166
 
27057
27167
  let l$1$2 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$2`${s$3(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1$2 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1$3=i$6`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
27058
27168
  `,u$4$2=i$6`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -32563,7 +32673,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
32563
32673
  }
32564
32674
  };
32565
32675
 
32566
- var formkitVersion$1$3 = '202606192004';
32676
+ var formkitVersion$1$3 = '202606192121';
32567
32677
 
32568
32678
  let AuroElement$2$2 = class AuroElement extends i$3 {
32569
32679
  static get properties() {
@@ -44277,7 +44387,6 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
44277
44387
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
44278
44388
 
44279
44389
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
44280
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
44281
44390
  return undefined;
44282
44391
  }
44283
44392
 
@@ -44429,8 +44538,10 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44429
44538
  this.layout = 'classic';
44430
44539
  this.locale = 'en-US';
44431
44540
  this.max = undefined;
44541
+ this._maxObject = undefined;
44432
44542
  this.maxLength = undefined;
44433
44543
  this.min = undefined;
44544
+ this._minObject = undefined;
44434
44545
  this.minLength = undefined;
44435
44546
  this.required = false;
44436
44547
  this.onDark = false;
@@ -44438,6 +44549,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44438
44549
  this.size = 'lg';
44439
44550
  this.shape = 'classic';
44440
44551
  this.value = undefined;
44552
+ this._valueObject = undefined;
44441
44553
 
44442
44554
  this._initializePrivateDefaults();
44443
44555
  }
@@ -44977,7 +45089,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44977
45089
  * @returns {Date|undefined}
44978
45090
  */
44979
45091
  get valueObject() {
44980
- return this.value && dateFormatter$2.isValidDate(this.value) ? dateFormatter$2.stringToDateInstance(this.value) : undefined;
45092
+ return this._valueObject || this._computeDateObjectFallback(this.value);
44981
45093
  }
44982
45094
 
44983
45095
  /**
@@ -44985,7 +45097,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44985
45097
  * @returns {Date|undefined}
44986
45098
  */
44987
45099
  get minObject() {
44988
- return this.min && dateFormatter$2.isValidDate(this.min) ? dateFormatter$2.stringToDateInstance(this.min) : undefined;
45100
+ return this._minObject || this._computeDateObjectFallback(this.min);
44989
45101
  }
44990
45102
 
44991
45103
  /**
@@ -44993,7 +45105,50 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44993
45105
  * @returns {Date|undefined}
44994
45106
  */
44995
45107
  get maxObject() {
44996
- return this.max && dateFormatter$2.isValidDate(this.max) ? dateFormatter$2.stringToDateInstance(this.max) : undefined;
45108
+ return this._maxObject || this._computeDateObjectFallback(this.max);
45109
+ }
45110
+
45111
+ /**
45112
+ * Parses a date string into a Date object when the corresponding `_*Object`
45113
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
45114
+ * input type/format isn't a full date or the string is not a valid date.
45115
+ *
45116
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
45117
+ * inside its own `updated()` before this input's `updated()` has run
45118
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
45119
+ * and range checks would otherwise silently no-op (flipping the result to
45120
+ * `valid` or `patternMismatch`).
45121
+ * @private
45122
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
45123
+ * @returns {Date|undefined}
45124
+ */
45125
+ _computeDateObjectFallback(dateStr) {
45126
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
45127
+ return undefined;
45128
+ }
45129
+ if (!dateFormatter$2.isValidDate(dateStr)) {
45130
+ return undefined;
45131
+ }
45132
+ return dateFormatter$2.stringToDateInstance(dateStr);
45133
+ }
45134
+
45135
+ /**
45136
+ * Internal setter for readonly date object properties.
45137
+ * @private
45138
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
45139
+ * @param {Date|undefined} propertyValue - Value to assign.
45140
+ * @returns {void}
45141
+ */
45142
+ setDateObjectProperty(propertyName, propertyValue) {
45143
+ const internalPropertyName = `_${propertyName}`;
45144
+ const previousValue = this[internalPropertyName];
45145
+
45146
+ if (previousValue === propertyValue) {
45147
+ return;
45148
+ }
45149
+
45150
+ this[internalPropertyName] = propertyValue;
45151
+ this.requestUpdate(propertyName, previousValue);
44997
45152
  }
44998
45153
 
44999
45154
  connectedCallback() {
@@ -45022,6 +45177,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45022
45177
  format: this.format
45023
45178
  });
45024
45179
  this.configureDataForType();
45180
+ this.syncDateValues();
45025
45181
  }
45026
45182
 
45027
45183
  disconnectedCallback() {
@@ -45041,6 +45197,10 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45041
45197
  this.wrapperElement.addEventListener('click', this.handleClick);
45042
45198
  }
45043
45199
 
45200
+ // add attribute for query selectors when auro-input is registered under a custom name
45201
+ if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
45202
+ this.setAttribute('auro-input', '');
45203
+ }
45044
45204
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
45045
45205
 
45046
45206
  // use validity message override if declared when initializing the component
@@ -45051,6 +45211,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45051
45211
  this.setCustomHelpTextMessage();
45052
45212
  this.configureAutoFormatting();
45053
45213
  this.configureDataForType();
45214
+ this.syncDateValues();
45054
45215
  }
45055
45216
 
45056
45217
  /**
@@ -45187,6 +45348,8 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45187
45348
  this.configureDataForType();
45188
45349
  }
45189
45350
 
45351
+ this.syncDateValues(changedProperties);
45352
+
45190
45353
  if (changedProperties.has('value')) {
45191
45354
  if (this.value && this.value.length > 0) {
45192
45355
  this.hasValue = true;
@@ -45208,14 +45371,14 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45208
45371
 
45209
45372
  if (formattedValue !== this.inputElement.value) {
45210
45373
  this.skipNextProgrammaticInputEvent = true;
45211
- if (this.maskInstance && this.type !== 'date') {
45374
+ if (this.maskInstance && this.type === 'credit-card') {
45212
45375
  // Route through the mask so its _value and el.value stay in lock-step
45213
45376
  // (set value calls updateControl which writes el.value = displayValue).
45214
45377
  // Writing el.value directly leaves the mask thinking displayValue is
45215
- // stale; _saveSelection on the next focus/click then warns. Date is
45216
- // excluded because its formattedValue can be raw ISO when the calendar
45217
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
45218
- // flip validity from patternMismatch to tooShort.
45378
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
45379
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
45380
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
45381
+ // and flip validity from patternMismatch to tooShort.
45219
45382
  this.maskInstance.value = formattedValue || '';
45220
45383
  } else if (formattedValue) {
45221
45384
  this.inputElement.value = formattedValue;
@@ -45257,60 +45420,120 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45257
45420
  }));
45258
45421
  }
45259
45422
 
45423
+
45424
+ /**
45425
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
45426
+ * This keeps the model and display values aligned when either side changes.
45427
+ *
45428
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
45429
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
45430
+ * represents a full year/month/day date format.
45431
+ *
45432
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
45433
+ * @returns {void}
45434
+ * @private
45435
+ */
45436
+ syncDateValues(changedProperties = undefined) {
45437
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
45438
+ return;
45439
+ }
45440
+
45441
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
45442
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
45443
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
45444
+ }
45445
+
45446
+ /**
45447
+ * Synchronizes one date object/string property pair.
45448
+ * @private
45449
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
45450
+ * @param {string} objectProperty - Date object property name.
45451
+ * @param {string} valueProperty - ISO string property name.
45452
+ * @returns {void}
45453
+ */
45454
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
45455
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
45456
+
45457
+ // objectProperty wins over valueProperty when both changed
45458
+ if (objectPropertyChanged && this[objectProperty]) {
45459
+ this[valueProperty] = dateFormatter$2.toISOFormatString(this[objectProperty]);
45460
+ return;
45461
+ }
45462
+
45463
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
45464
+ if (!valuePropertyChanged) {
45465
+ return;
45466
+ }
45467
+
45468
+ // 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)
45469
+ if (
45470
+ changedProperties &&
45471
+ valueProperty === 'value' &&
45472
+ changedProperties.get('value') === undefined &&
45473
+ this[objectProperty] instanceof Date &&
45474
+ this[valueProperty] === dateFormatter$2.toISOFormatString(this[objectProperty])
45475
+ ) {
45476
+ return;
45477
+ }
45478
+
45479
+ if (dateFormatter$2.isValidDate(this[valueProperty])) {
45480
+ this.setDateObjectProperty(objectProperty, dateFormatter$2.stringToDateInstance(this[valueProperty]));
45481
+ } else {
45482
+ this.setDateObjectProperty(objectProperty, undefined);
45483
+ }
45484
+ }
45485
+
45260
45486
  /**
45261
45487
  * Sets up IMasks and logic based on auto-formatting requirements.
45262
45488
  * @private
45263
45489
  * @returns {void}
45264
45490
  */
45265
45491
  configureAutoFormatting() {
45266
- // _configuringMask gates two things: external re-entry into this method
45267
- // while setup is mid-flight (from property changes that call back here),
45268
- // and the accept/complete listeners below both need to ignore the mask
45269
- // events fired by our own value-restore step.
45492
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
45493
+ // by _configuringMask above) could otherwise trigger handleInput
45494
+ // processCreditCard configureAutoFormatting before the outer call's
45495
+ // set value has finished its alignCursor pass.
45270
45496
  if (this._configuringMask) return;
45271
45497
  this._configuringMask = true;
45272
45498
  try {
45273
- // Destroy any prior mask so IMask can attach fresh under the new format.
45274
45499
  if (this.maskInstance) {
45275
45500
  this.maskInstance.destroy();
45276
45501
  }
45277
45502
 
45503
+ // Pass new format to util
45278
45504
  this.util.updateFormat(this.format);
45279
45505
 
45280
45506
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
45281
45507
 
45282
45508
  if (this.inputElement && maskOptions.mask) {
45283
- // Capture the current display so it can be re-applied after IMask
45284
- // attaches. The restore at the bottom goes through maskInstance.value
45285
- // (not inputElement.value directly) so the mask's internal state and
45286
- // the input's displayed text stay in lock-step.
45287
- let existingValue = this.inputElement.value;
45288
45509
 
45289
- // Format-change case (e.g. locale switch): existingValue is the OLD
45290
- // mask's display string and may not parse under the new mask. When
45291
- // we have a valid date model, rebuild the display from valueObject
45292
- // (the canonical source) using the new mask's format function.
45510
+ // Stash and clear any existing value before IMask init.
45511
+ // IMask's constructor processes the current input value which requires
45512
+ // selection state clearing first avoids that scenario entirely.
45513
+ // When the format changes (e.g. locale switch) and we have a valid ISO
45514
+ // model value, compute the display string for the NEW format instead of
45515
+ // re-using the old display string, which may be invalid in the new mask.
45516
+ let existingValue = this.inputElement.value;
45293
45517
  if (
45294
45518
  this.util.isFullDateFormat(this.type, this.format) &&
45295
45519
  this.value &&
45296
- this.valueObject &&
45520
+ dateFormatter$2.isValidDate(this.value) &&
45521
+ this.valueObject instanceof Date &&
45522
+ !Number.isNaN(this.valueObject.getTime()) &&
45297
45523
  typeof maskOptions.format === 'function'
45298
45524
  ) {
45299
45525
  existingValue = maskOptions.format(this.valueObject);
45300
45526
  }
45301
45527
 
45302
- // Clear before IMask attaches so the constructor seeds an empty
45303
- // internal value. Otherwise IMask reads the stale unmasked string
45304
- // and emits a spurious 'accept' before the restore below runs.
45305
45528
  this.skipNextProgrammaticInputEvent = true;
45306
45529
  this.inputElement.value = '';
45307
45530
 
45308
45531
  this.maskInstance = IMask$2(this.inputElement, maskOptions);
45309
45532
 
45310
- // Mask fires 'accept' on every value change, including the restore
45311
- // step below. Skip events fired during configureAutoFormatting so
45312
- // we don't overwrite a value the parent just pushed.
45313
45533
  this.maskInstance.on('accept', () => {
45534
+ // Suppress propagation during configureAutoFormatting's own value-restoration
45535
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
45536
+ // and we don't want to overwrite a value the parent just pushed.
45314
45537
  if (this._configuringMask) return;
45315
45538
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
45316
45539
  if (this.type === "date") {
@@ -45318,8 +45541,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45318
45541
  }
45319
45542
  });
45320
45543
 
45321
- // Mask fires 'complete' on the restore step below for any value that
45322
- // happens to be a complete match. Same setup-suppression as 'accept'.
45323
45544
  this.maskInstance.on('complete', () => {
45324
45545
  if (this._configuringMask) return;
45325
45546
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -45328,9 +45549,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45328
45549
  }
45329
45550
  });
45330
45551
 
45331
- // Write existingValue through the mask (not the input directly) so
45332
- // the mask reformats it under the new rules and keeps its internal
45333
- // _value aligned with the input's displayed text.
45552
+ // Restore the stashed value through IMask so it's properly masked
45334
45553
  if (existingValue) {
45335
45554
  this.maskInstance.value = existingValue;
45336
45555
  }
@@ -45498,6 +45717,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45498
45717
  */
45499
45718
  reset() {
45500
45719
  this.value = undefined;
45720
+ this.setDateObjectProperty('valueObject', undefined);
45501
45721
  this.validation.reset(this);
45502
45722
  }
45503
45723
 
@@ -45506,6 +45726,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45506
45726
  */
45507
45727
  clear() {
45508
45728
  this.value = undefined;
45729
+ this.setDateObjectProperty('valueObject', undefined);
45509
45730
  }
45510
45731
 
45511
45732
  /**
@@ -46034,7 +46255,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
46034
46255
  }
46035
46256
  };
46036
46257
 
46037
- var formkitVersion$7 = '202606192004';
46258
+ var formkitVersion$7 = '202606192121';
46038
46259
 
46039
46260
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46040
46261
  // See LICENSE in the project root for license information.
@@ -50731,7 +50952,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
50731
50952
  }
50732
50953
  };
50733
50954
 
50734
- var formkitVersion$1$2 = '202606192004';
50955
+ var formkitVersion$1$2 = '202606192121';
50735
50956
 
50736
50957
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
50737
50958
  // See LICENSE in the project root for license information.
@@ -55059,7 +55280,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
55059
55280
  }
55060
55281
  };
55061
55282
 
55062
- var formkitVersion$6 = '202606192004';
55283
+ var formkitVersion$6 = '202606192121';
55063
55284
 
55064
55285
  let AuroElement$1$2 = class AuroElement extends i$3 {
55065
55286
  static get properties() {
@@ -58991,7 +59212,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
58991
59212
  }
58992
59213
  };
58993
59214
 
58994
- var formkitVersion$5 = '202606192004';
59215
+ var formkitVersion$5 = '202606192121';
58995
59216
 
58996
59217
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
58997
59218
  // See LICENSE in the project root for license information.
@@ -60741,7 +60962,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
60741
60962
  }
60742
60963
  };
60743
60964
 
60744
- var formkitVersion$4 = '202606192004';
60965
+ var formkitVersion$4 = '202606192121';
60745
60966
 
60746
60967
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
60747
60968
  // See LICENSE in the project root for license information.
@@ -61917,8 +62138,6 @@ function navigateArrow$1(component, direction, options = {}) {
61917
62138
  }
61918
62139
  }
61919
62140
 
61920
- /* eslint-disable no-underscore-dangle */
61921
-
61922
62141
  /**
61923
62142
  * Returns the clear button element from the active input's shadow
61924
62143
  * DOM, if available.
@@ -61954,9 +62173,11 @@ function isClearBtnFocused(ctx, clearBtn = getClearBtn(ctx)) {
61954
62173
  * @param {Object} menu - The menu component.
61955
62174
  */
61956
62175
  function reconcileMenuIndex(menu) {
62176
+ // eslint-disable-next-line no-underscore-dangle
61957
62177
  if (menu._index < 0 && menu.optionActive && menu.items) {
61958
62178
  const idx = menu.items.indexOf(menu.optionActive);
61959
62179
  if (idx >= 0) {
62180
+ // eslint-disable-next-line no-underscore-dangle
61960
62181
  menu._index = idx;
61961
62182
  }
61962
62183
  }
@@ -65956,7 +66177,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
65956
66177
  }
65957
66178
  };
65958
66179
 
65959
- var formkitVersion$2 = '202606192004';
66180
+ var formkitVersion$2 = '202606192121';
65960
66181
 
65961
66182
  let AuroElement$2$1 = class AuroElement extends i$3 {
65962
66183
  static get properties() {
@@ -77670,7 +77891,6 @@ class AuroInputUtilities {
77670
77891
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
77671
77892
 
77672
77893
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
77673
- console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
77674
77894
  return undefined;
77675
77895
  }
77676
77896
 
@@ -77822,8 +78042,10 @@ class BaseInput extends AuroElement$1$1 {
77822
78042
  this.layout = 'classic';
77823
78043
  this.locale = 'en-US';
77824
78044
  this.max = undefined;
78045
+ this._maxObject = undefined;
77825
78046
  this.maxLength = undefined;
77826
78047
  this.min = undefined;
78048
+ this._minObject = undefined;
77827
78049
  this.minLength = undefined;
77828
78050
  this.required = false;
77829
78051
  this.onDark = false;
@@ -77831,6 +78053,7 @@ class BaseInput extends AuroElement$1$1 {
77831
78053
  this.size = 'lg';
77832
78054
  this.shape = 'classic';
77833
78055
  this.value = undefined;
78056
+ this._valueObject = undefined;
77834
78057
 
77835
78058
  this._initializePrivateDefaults();
77836
78059
  }
@@ -78370,7 +78593,7 @@ class BaseInput extends AuroElement$1$1 {
78370
78593
  * @returns {Date|undefined}
78371
78594
  */
78372
78595
  get valueObject() {
78373
- return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
78596
+ return this._valueObject || this._computeDateObjectFallback(this.value);
78374
78597
  }
78375
78598
 
78376
78599
  /**
@@ -78378,7 +78601,7 @@ class BaseInput extends AuroElement$1$1 {
78378
78601
  * @returns {Date|undefined}
78379
78602
  */
78380
78603
  get minObject() {
78381
- return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
78604
+ return this._minObject || this._computeDateObjectFallback(this.min);
78382
78605
  }
78383
78606
 
78384
78607
  /**
@@ -78386,7 +78609,50 @@ class BaseInput extends AuroElement$1$1 {
78386
78609
  * @returns {Date|undefined}
78387
78610
  */
78388
78611
  get maxObject() {
78389
- return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
78612
+ return this._maxObject || this._computeDateObjectFallback(this.max);
78613
+ }
78614
+
78615
+ /**
78616
+ * Parses a date string into a Date object when the corresponding `_*Object`
78617
+ * field hasn't been synced yet by `updated()`. Returns undefined when the
78618
+ * input type/format isn't a full date or the string is not a valid date.
78619
+ *
78620
+ * Why this exists: a parent (datepicker) can call `inputN.validate()` from
78621
+ * inside its own `updated()` before this input's `updated()` has run
78622
+ * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
78623
+ * and range checks would otherwise silently no-op (flipping the result to
78624
+ * `valid` or `patternMismatch`).
78625
+ * @private
78626
+ * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
78627
+ * @returns {Date|undefined}
78628
+ */
78629
+ _computeDateObjectFallback(dateStr) {
78630
+ if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
78631
+ return undefined;
78632
+ }
78633
+ if (!dateFormatter.isValidDate(dateStr)) {
78634
+ return undefined;
78635
+ }
78636
+ return dateFormatter.stringToDateInstance(dateStr);
78637
+ }
78638
+
78639
+ /**
78640
+ * Internal setter for readonly date object properties.
78641
+ * @private
78642
+ * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
78643
+ * @param {Date|undefined} propertyValue - Value to assign.
78644
+ * @returns {void}
78645
+ */
78646
+ setDateObjectProperty(propertyName, propertyValue) {
78647
+ const internalPropertyName = `_${propertyName}`;
78648
+ const previousValue = this[internalPropertyName];
78649
+
78650
+ if (previousValue === propertyValue) {
78651
+ return;
78652
+ }
78653
+
78654
+ this[internalPropertyName] = propertyValue;
78655
+ this.requestUpdate(propertyName, previousValue);
78390
78656
  }
78391
78657
 
78392
78658
  connectedCallback() {
@@ -78415,6 +78681,7 @@ class BaseInput extends AuroElement$1$1 {
78415
78681
  format: this.format
78416
78682
  });
78417
78683
  this.configureDataForType();
78684
+ this.syncDateValues();
78418
78685
  }
78419
78686
 
78420
78687
  disconnectedCallback() {
@@ -78434,6 +78701,10 @@ class BaseInput extends AuroElement$1$1 {
78434
78701
  this.wrapperElement.addEventListener('click', this.handleClick);
78435
78702
  }
78436
78703
 
78704
+ // add attribute for query selectors when auro-input is registered under a custom name
78705
+ if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
78706
+ this.setAttribute('auro-input', '');
78707
+ }
78437
78708
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
78438
78709
 
78439
78710
  // use validity message override if declared when initializing the component
@@ -78444,6 +78715,7 @@ class BaseInput extends AuroElement$1$1 {
78444
78715
  this.setCustomHelpTextMessage();
78445
78716
  this.configureAutoFormatting();
78446
78717
  this.configureDataForType();
78718
+ this.syncDateValues();
78447
78719
  }
78448
78720
 
78449
78721
  /**
@@ -78580,6 +78852,8 @@ class BaseInput extends AuroElement$1$1 {
78580
78852
  this.configureDataForType();
78581
78853
  }
78582
78854
 
78855
+ this.syncDateValues(changedProperties);
78856
+
78583
78857
  if (changedProperties.has('value')) {
78584
78858
  if (this.value && this.value.length > 0) {
78585
78859
  this.hasValue = true;
@@ -78601,14 +78875,14 @@ class BaseInput extends AuroElement$1$1 {
78601
78875
 
78602
78876
  if (formattedValue !== this.inputElement.value) {
78603
78877
  this.skipNextProgrammaticInputEvent = true;
78604
- if (this.maskInstance && this.type !== 'date') {
78878
+ if (this.maskInstance && this.type === 'credit-card') {
78605
78879
  // Route through the mask so its _value and el.value stay in lock-step
78606
78880
  // (set value calls updateControl which writes el.value = displayValue).
78607
78881
  // Writing el.value directly leaves the mask thinking displayValue is
78608
- // stale; _saveSelection on the next focus/click then warns. Date is
78609
- // excluded because its formattedValue can be raw ISO when the calendar
78610
- // is invalid, and re-masking through mm/dd/yyyy would truncate it and
78611
- // flip validity from patternMismatch to tooShort.
78882
+ // stale; _saveSelection on the next focus/click then warns. Scoped to
78883
+ // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
78884
+ // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
78885
+ // and flip validity from patternMismatch to tooShort.
78612
78886
  this.maskInstance.value = formattedValue || '';
78613
78887
  } else if (formattedValue) {
78614
78888
  this.inputElement.value = formattedValue;
@@ -78650,60 +78924,120 @@ class BaseInput extends AuroElement$1$1 {
78650
78924
  }));
78651
78925
  }
78652
78926
 
78927
+
78928
+ /**
78929
+ * Synchronizes the ISO string values and Date object representations for date-related properties.
78930
+ * This keeps the model and display values aligned when either side changes.
78931
+ *
78932
+ * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
78933
+ * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
78934
+ * represents a full year/month/day date format.
78935
+ *
78936
+ * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
78937
+ * @returns {void}
78938
+ * @private
78939
+ */
78940
+ syncDateValues(changedProperties = undefined) {
78941
+ if (!this.util.isFullDateFormat(this.type, this.format)) {
78942
+ return;
78943
+ }
78944
+
78945
+ this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
78946
+ this.syncSingleDateValue(changedProperties, 'minObject', 'min');
78947
+ this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
78948
+ }
78949
+
78950
+ /**
78951
+ * Synchronizes one date object/string property pair.
78952
+ * @private
78953
+ * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
78954
+ * @param {string} objectProperty - Date object property name.
78955
+ * @param {string} valueProperty - ISO string property name.
78956
+ * @returns {void}
78957
+ */
78958
+ syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
78959
+ const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
78960
+
78961
+ // objectProperty wins over valueProperty when both changed
78962
+ if (objectPropertyChanged && this[objectProperty]) {
78963
+ this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
78964
+ return;
78965
+ }
78966
+
78967
+ const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
78968
+ if (!valuePropertyChanged) {
78969
+ return;
78970
+ }
78971
+
78972
+ // 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)
78973
+ if (
78974
+ changedProperties &&
78975
+ valueProperty === 'value' &&
78976
+ changedProperties.get('value') === undefined &&
78977
+ this[objectProperty] instanceof Date &&
78978
+ this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
78979
+ ) {
78980
+ return;
78981
+ }
78982
+
78983
+ if (dateFormatter.isValidDate(this[valueProperty])) {
78984
+ this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
78985
+ } else {
78986
+ this.setDateObjectProperty(objectProperty, undefined);
78987
+ }
78988
+ }
78989
+
78653
78990
  /**
78654
78991
  * Sets up IMasks and logic based on auto-formatting requirements.
78655
78992
  * @private
78656
78993
  * @returns {void}
78657
78994
  */
78658
78995
  configureAutoFormatting() {
78659
- // _configuringMask gates two things: external re-entry into this method
78660
- // while setup is mid-flight (from property changes that call back here),
78661
- // and the accept/complete listeners below both need to ignore the mask
78662
- // events fired by our own value-restore step.
78996
+ // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
78997
+ // by _configuringMask above) could otherwise trigger handleInput
78998
+ // processCreditCard configureAutoFormatting before the outer call's
78999
+ // set value has finished its alignCursor pass.
78663
79000
  if (this._configuringMask) return;
78664
79001
  this._configuringMask = true;
78665
79002
  try {
78666
- // Destroy any prior mask so IMask can attach fresh under the new format.
78667
79003
  if (this.maskInstance) {
78668
79004
  this.maskInstance.destroy();
78669
79005
  }
78670
79006
 
79007
+ // Pass new format to util
78671
79008
  this.util.updateFormat(this.format);
78672
79009
 
78673
79010
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
78674
79011
 
78675
79012
  if (this.inputElement && maskOptions.mask) {
78676
- // Capture the current display so it can be re-applied after IMask
78677
- // attaches. The restore at the bottom goes through maskInstance.value
78678
- // (not inputElement.value directly) so the mask's internal state and
78679
- // the input's displayed text stay in lock-step.
78680
- let existingValue = this.inputElement.value;
78681
79013
 
78682
- // Format-change case (e.g. locale switch): existingValue is the OLD
78683
- // mask's display string and may not parse under the new mask. When
78684
- // we have a valid date model, rebuild the display from valueObject
78685
- // (the canonical source) using the new mask's format function.
79014
+ // Stash and clear any existing value before IMask init.
79015
+ // IMask's constructor processes the current input value which requires
79016
+ // selection state clearing first avoids that scenario entirely.
79017
+ // When the format changes (e.g. locale switch) and we have a valid ISO
79018
+ // model value, compute the display string for the NEW format instead of
79019
+ // re-using the old display string, which may be invalid in the new mask.
79020
+ let existingValue = this.inputElement.value;
78686
79021
  if (
78687
79022
  this.util.isFullDateFormat(this.type, this.format) &&
78688
79023
  this.value &&
78689
- this.valueObject &&
79024
+ dateFormatter.isValidDate(this.value) &&
79025
+ this.valueObject instanceof Date &&
79026
+ !Number.isNaN(this.valueObject.getTime()) &&
78690
79027
  typeof maskOptions.format === 'function'
78691
79028
  ) {
78692
79029
  existingValue = maskOptions.format(this.valueObject);
78693
79030
  }
78694
79031
 
78695
- // Clear before IMask attaches so the constructor seeds an empty
78696
- // internal value. Otherwise IMask reads the stale unmasked string
78697
- // and emits a spurious 'accept' before the restore below runs.
78698
79032
  this.skipNextProgrammaticInputEvent = true;
78699
79033
  this.inputElement.value = '';
78700
79034
 
78701
79035
  this.maskInstance = IMask(this.inputElement, maskOptions);
78702
79036
 
78703
- // Mask fires 'accept' on every value change, including the restore
78704
- // step below. Skip events fired during configureAutoFormatting so
78705
- // we don't overwrite a value the parent just pushed.
78706
79037
  this.maskInstance.on('accept', () => {
79038
+ // Suppress propagation during configureAutoFormatting's own value-restoration
79039
+ // (line below) — the mask emits 'accept' on every value-set, including ours,
79040
+ // and we don't want to overwrite a value the parent just pushed.
78707
79041
  if (this._configuringMask) return;
78708
79042
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
78709
79043
  if (this.type === "date") {
@@ -78711,8 +79045,6 @@ class BaseInput extends AuroElement$1$1 {
78711
79045
  }
78712
79046
  });
78713
79047
 
78714
- // Mask fires 'complete' on the restore step below for any value that
78715
- // happens to be a complete match. Same setup-suppression as 'accept'.
78716
79048
  this.maskInstance.on('complete', () => {
78717
79049
  if (this._configuringMask) return;
78718
79050
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -78721,9 +79053,7 @@ class BaseInput extends AuroElement$1$1 {
78721
79053
  }
78722
79054
  });
78723
79055
 
78724
- // Write existingValue through the mask (not the input directly) so
78725
- // the mask reformats it under the new rules and keeps its internal
78726
- // _value aligned with the input's displayed text.
79056
+ // Restore the stashed value through IMask so it's properly masked
78727
79057
  if (existingValue) {
78728
79058
  this.maskInstance.value = existingValue;
78729
79059
  }
@@ -78891,6 +79221,7 @@ class BaseInput extends AuroElement$1$1 {
78891
79221
  */
78892
79222
  reset() {
78893
79223
  this.value = undefined;
79224
+ this.setDateObjectProperty('valueObject', undefined);
78894
79225
  this.validation.reset(this);
78895
79226
  }
78896
79227
 
@@ -78899,6 +79230,7 @@ class BaseInput extends AuroElement$1$1 {
78899
79230
  */
78900
79231
  clear() {
78901
79232
  this.value = undefined;
79233
+ this.setDateObjectProperty('valueObject', undefined);
78902
79234
  }
78903
79235
 
78904
79236
  /**
@@ -79427,7 +79759,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
79427
79759
  }
79428
79760
  };
79429
79761
 
79430
- var formkitVersion$1$1 = '202606192004';
79762
+ var formkitVersion$1$1 = '202606192121';
79431
79763
 
79432
79764
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
79433
79765
  // See LICENSE in the project root for license information.
@@ -80548,7 +80880,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
80548
80880
  }
80549
80881
  };
80550
80882
 
80551
- var formkitVersion$3 = '202606192004';
80883
+ var formkitVersion$3 = '202606192121';
80552
80884
 
80553
80885
  var styleCss$1$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
80554
80886
 
@@ -81535,7 +81867,7 @@ class AuroCombobox extends AuroElement$3 {
81535
81867
  if (this.menu) {
81536
81868
  this.menu.matchWord = normalizeFilterValue(this.input.value);
81537
81869
  }
81538
- const label = getOptionLabel(this.menu.optionSelected);
81870
+ const label = getOptionLabel(this.menu.optionSelected) || this.menu.currentLabel;
81539
81871
  this.updateTriggerTextDisplay(label || this.value);
81540
81872
  }
81541
81873
 
@@ -81549,9 +81881,40 @@ class AuroCombobox extends AuroElement$3 {
81549
81881
  // in suggestion mode, do not override input value if no selection has been made and the input currently has focus
81550
81882
  const isInputFocusedWithNoSelection = !this.menu.value && (this.input.matches(':focus-within') || (this.inputInBib && this.inputInBib.matches(':focus-within')));
81551
81883
 
81552
- const suppressed = this.persistInput || (this.behavior === 'suggestion' && isInputFocusedWithNoSelection);
81553
- if (!suppressed) {
81554
- this.syncInputValuesAcrossTriggerAndBib(label || this.value);
81884
+ if (!this.persistInput && !(this.behavior === 'suggestion' && isInputFocusedWithNoSelection)) {
81885
+ const nextValue = label || this.value;
81886
+ // Only set the flag when there's an actual write to suppress —
81887
+ // syncValuesAndStates re-enters here during typing when both inputs
81888
+ // already match, and a no-op flag flip would make the bib branch's
81889
+ // bail eat legitimate user-input events.
81890
+ const triggerNeedsSync = this.input.value !== nextValue;
81891
+ const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
81892
+ if (triggerNeedsSync || bibNeedsSync) {
81893
+ this._syncingDisplayValue = true;
81894
+ if (triggerNeedsSync) {
81895
+ this.input.value = nextValue;
81896
+ }
81897
+ if (bibNeedsSync) {
81898
+ this.inputInBib.value = nextValue;
81899
+ }
81900
+ const pending = [];
81901
+ if (triggerNeedsSync) {
81902
+ pending.push(this.input.updateComplete);
81903
+ }
81904
+ if (bibNeedsSync) {
81905
+ pending.push(this.inputInBib.updateComplete);
81906
+ }
81907
+ Promise.all(pending).then(() => {
81908
+ // imask reasserts otherwise, and handleBlur reverts to its stale value.
81909
+ if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
81910
+ this.input.maskInstance.updateValue();
81911
+ }
81912
+ if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
81913
+ this.inputInBib.maskInstance.updateValue();
81914
+ }
81915
+ this._syncingDisplayValue = false;
81916
+ });
81917
+ }
81555
81918
  }
81556
81919
 
81557
81920
  // update the displayValue in the trigger if displayValue slot content is present
@@ -81579,52 +81942,6 @@ class AuroCombobox extends AuroElement$3 {
81579
81942
  this.requestUpdate();
81580
81943
  }
81581
81944
 
81582
- /**
81583
- * Writes nextValue to the trigger input and the bib input when their current
81584
- * value differs, then re-asserts imask after Lit's update flushes.
81585
- * @param {string} nextValue - The value to write to both inputs.
81586
- * @returns {Promise<void> | null} Promise that resolves after the inputs flush,
81587
- * or null when no sync was needed (so callers can skip post-flush work).
81588
- * @private
81589
- */
81590
- syncInputValuesAcrossTriggerAndBib(nextValue) {
81591
- // Only set the flag when there's an actual write to suppress —
81592
- // syncValuesAndStates re-enters here during typing when both inputs
81593
- // already match, and a no-op flag flip would make the bib branch's
81594
- // bail eat legitimate user-input events.
81595
- const triggerNeedsSync = this.input.value !== nextValue;
81596
- const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
81597
- if (!triggerNeedsSync && !bibNeedsSync) {
81598
- return null;
81599
- }
81600
-
81601
- this._syncingDisplayValue = true;
81602
- if (triggerNeedsSync) {
81603
- this.input.value = nextValue;
81604
- }
81605
- if (bibNeedsSync) {
81606
- this.inputInBib.value = nextValue;
81607
- }
81608
-
81609
- const pending = [];
81610
- if (triggerNeedsSync) {
81611
- pending.push(this.input.updateComplete);
81612
- }
81613
- if (bibNeedsSync) {
81614
- pending.push(this.inputInBib.updateComplete);
81615
- }
81616
- return Promise.all(pending).then(() => {
81617
- // imask reasserts otherwise, and handleBlur reverts to its stale value.
81618
- if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
81619
- this.input.maskInstance.updateValue();
81620
- }
81621
- if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
81622
- this.inputInBib.maskInstance.updateValue();
81623
- }
81624
- this._syncingDisplayValue = false;
81625
- });
81626
- }
81627
-
81628
81945
  /**
81629
81946
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
81630
81947
  * @private
@@ -81652,9 +81969,9 @@ class AuroCombobox extends AuroElement$3 {
81652
81969
  this.syncValuesAndStates();
81653
81970
  }
81654
81971
 
81655
- // Re-activate when optionActive is not in the current scrollable viewport,
81656
- // or when _index has been reset (e.g. by clearSelection in an async update)
81657
- // so that makeSelection() can find the correct option.
81972
+ // Re-activate when optionActive is no longer visible, or when _index has
81973
+ // been reset (e.g. by clearSelection in an async update) so that
81974
+ // makeSelection() can find the correct option.
81658
81975
  if (!this.availableOptions.includes(this.menu.optionActive) || this.menu._index < 0) {
81659
81976
  this.activateFirstEnabledAvailableOption();
81660
81977
  }
@@ -81788,25 +82105,28 @@ class AuroCombobox extends AuroElement$3 {
81788
82105
 
81789
82106
  guardTouchPassthrough$1(this.menu);
81790
82107
 
81791
- // showModal() takes focus away from the trigger. Early focus once
81792
- // the dialog has painted; the shared doubleRaf below is the fallback
81793
- // for when the dialog needs an extra frame and also clears the
81794
- // validation guard.
82108
+ // The dialog's showModal() steals focus from the trigger.
82109
+ // A single rAF is enough for the dialog DOM to be painted and
82110
+ // focusable, then doubleRaf finalizes the transition.
81795
82111
  requestAnimationFrame(() => {
81796
82112
  this.setInputFocus();
81797
82113
  });
81798
- }
81799
- // else (desktop popover-open): Chrome resets the trigger caret to
81800
- // [0, 0] when its floating <label for="…"> overlay receives focus.
81801
- // The shared doubleRaf below parks the caret back at end-of-text
81802
- // after the dropdown layout settles.
81803
-
81804
- doubleRaf$1(() => {
81805
- this.setInputFocus();
81806
- if (this._inFullscreenTransition) {
82114
+
82115
+ doubleRaf$1(() => {
82116
+ this.setInputFocus();
81807
82117
  this._inFullscreenTransition = false;
81808
- }
81809
- });
82118
+ });
82119
+ } else {
82120
+ // Desktop popover-open: restore the trigger caret to end-of-text.
82121
+ // Clicking the trigger lands on auro-input's floating <label for="…">
82122
+ // overlay; Chrome resets the native input's selection to [0, 0] on
82123
+ // label-focus before any JS runs. setInputFocus()'s non-fullscreen
82124
+ // branch parks the caret at end. doubleRaf lets the dropdown layout
82125
+ // settle first, matching the fullscreen branch timing.
82126
+ doubleRaf$1(() => {
82127
+ this.setInputFocus();
82128
+ });
82129
+ }
81810
82130
  }
81811
82131
  });
81812
82132
 
@@ -81913,9 +82233,9 @@ class AuroCombobox extends AuroElement$3 {
81913
82233
  } else {
81914
82234
  // Safety net for the strategy-change setTimeout: a viewport-crossing
81915
82235
  // fullscreen→floating switch can close the dialog and leave focus on
81916
- // body. Every other call into this branch already has focus on the
81917
- // input via the combobox-level focusin → this.focus() redirect, so
81918
- // this is a no-op in the common case.
82236
+ // body. Every other Branch 2 callsite already has focus on the input
82237
+ // via the focusin → this.focus() redirect (L1448-1452), so this is a
82238
+ // no-op in the common case.
81919
82239
  if (!this.input.componentHasFocus) {
81920
82240
  this.input.focus();
81921
82241
  }
@@ -82034,7 +82354,7 @@ class AuroCombobox extends AuroElement$3 {
82034
82354
  if (this.menu.optionSelected) {
82035
82355
  const selected = this.menu.optionSelected;
82036
82356
 
82037
- if (this.optionSelected !== selected) {
82357
+ if (!this.optionSelected || this.optionSelected !== selected) {
82038
82358
  this.optionSelected = selected;
82039
82359
  }
82040
82360
 
@@ -82047,7 +82367,7 @@ class AuroCombobox extends AuroElement$3 {
82047
82367
  }
82048
82368
 
82049
82369
  // Update display
82050
- this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected));
82370
+ this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected) || this.menu.value);
82051
82371
 
82052
82372
  // Update match word for filtering
82053
82373
  const trimmedInput = normalizeFilterValue(this.input.value);
@@ -82065,15 +82385,11 @@ class AuroCombobox extends AuroElement$3 {
82065
82385
 
82066
82386
  // Announce the selection after the dropdown closes so it isn't
82067
82387
  // overridden by VoiceOver's "collapsed" announcement from aria-expanded.
82068
- // Skip when there's no selected value (e.g. menu.clearSelection() from
82069
- // the unmatched-value path), otherwise VoiceOver reads "undefined".
82070
82388
  const selectedValue = this.menu.value;
82071
- if (selectedValue) {
82072
- const announcementDelay = 300;
82073
- setTimeout(() => {
82074
- announceToScreenReader$1(this._getAnnouncementRoot(), `${selectedValue}, selected`);
82075
- }, announcementDelay);
82076
- }
82389
+ const announcementDelay = 300;
82390
+ setTimeout(() => {
82391
+ announceToScreenReader$1(this._getAnnouncementRoot(), `${selectedValue}, selected`);
82392
+ }, announcementDelay);
82077
82393
  }
82078
82394
 
82079
82395
  // Programmatic value syncs leave availableOptions stale because
@@ -82433,7 +82749,15 @@ class AuroCombobox extends AuroElement$3 {
82433
82749
  this.menu.value = undefined;
82434
82750
  this.validation.reset(this);
82435
82751
  this.touched = false;
82752
+ // Force validity back to the cleared state. validation.reset() calls
82753
+ // validate() at the end, and (post-credit-card-fix) the trigger input's
82754
+ // residual validity may still be copied into the combobox by the
82755
+ // auroInputElements loop. Explicitly clear here so reset() actually
82756
+ // leaves the component in a "no validity" state.
82436
82757
  this.validity = undefined;
82758
+ this.errorMessage = '';
82759
+ this.input.validity = undefined;
82760
+ this.input.errorMessage = '';
82437
82761
  }
82438
82762
 
82439
82763
  /**
@@ -82486,27 +82810,52 @@ class AuroCombobox extends AuroElement$3 {
82486
82810
  this.input.value = this.value;
82487
82811
  }
82488
82812
 
82489
- // Sync menu.value only when an option actually matches, or when filter
82490
- // mode needs setMenuValue to dispatch auroMenu-selectValueFailure (the
82491
- // listener at line 1206 clears combobox.value, mirroring select's
82492
- // pattern). Otherwise sync the input display for freeform values.
82813
+ // Sync menu.value only when an option actually matches; otherwise clear it.
82493
82814
  if (this.menu.options && this.menu.options.length > 0) {
82494
- if (this.menu.options.some((opt) => opt.value === this.value) || this.behavior === 'filter') {
82815
+ if (this.menu.options.some((opt) => opt.value === this.value)) {
82816
+ this.setMenuValue(this.value);
82817
+ } else if (this.behavior === 'filter') {
82818
+ // In filter mode, freeform values aren't allowed. Push the unmatched
82819
+ // value through setMenuValue so menu dispatches auroMenu-selectValueFailure
82820
+ // and the listener at line 1206 clears combobox.value (mirrors select's
82821
+ // pattern). Bypassing setMenuValue here would skip the failure cascade.
82495
82822
  this.setMenuValue(this.value);
82496
82823
  } else {
82497
- // Clear menu.value AND menu.optionSelected together. Clearing only
82498
- // menu.value leaves the previously-selected option element pinned
82499
- // as menu.optionSelected; a later auroMenu-selectedOption event
82500
- // would then write its stale .value back into combobox.value.
82501
- if (this.menu.value || this.menu.optionSelected) {
82502
- this.menu.clearSelection();
82824
+ if (this.menu.value) {
82825
+ this.menu.value = undefined;
82503
82826
  }
82504
- // Suggestion-mode freeform value: sync the trigger + bib to show it,
82505
- // then refresh the filter once the inputs flush (handleInputValueChange
82506
- // bailed on _syncingDisplayValue).
82507
- const syncPromise = this.syncInputValuesAcrossTriggerAndBib(this.value || '');
82508
- if (syncPromise) {
82509
- syncPromise.then(() => {
82827
+ // Sync the display for programmatic freeform value changes (e.g. the
82828
+ // swap-values pattern). Guard with _syncingDisplayValue so that the
82829
+ // re-entrant input event from base-input.notifyValueChanged() is
82830
+ // ignored by handleInputValueChange. Skip the sync when input already
82831
+ // matches to avoid spurious events during the normal typing path.
82832
+ const nextValue = this.value || '';
82833
+ const triggerNeedsSync = this.input.value !== nextValue;
82834
+ const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
82835
+ if (triggerNeedsSync || bibNeedsSync) {
82836
+ this._syncingDisplayValue = true;
82837
+ if (triggerNeedsSync) {
82838
+ this.input.value = nextValue;
82839
+ }
82840
+ if (bibNeedsSync) {
82841
+ this.inputInBib.value = nextValue;
82842
+ }
82843
+ const pending = [];
82844
+ if (triggerNeedsSync) {
82845
+ pending.push(this.input.updateComplete);
82846
+ }
82847
+ if (bibNeedsSync) {
82848
+ pending.push(this.inputInBib.updateComplete);
82849
+ }
82850
+ Promise.all(pending).then(() => {
82851
+ if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
82852
+ this.input.maskInstance.updateValue();
82853
+ }
82854
+ if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
82855
+ this.inputInBib.maskInstance.updateValue();
82856
+ }
82857
+ this._syncingDisplayValue = false;
82858
+ // handleInputValueChange bailed on the flag — refresh the filter.
82510
82859
  this._programmaticFilterRefresh = true;
82511
82860
  this.handleMenuOptions();
82512
82861
  setTimeout(() => {
@@ -83295,8 +83644,8 @@ class AuroMenu extends AuroElement$2 {
83295
83644
  // Malformed JSON (e.g. a literal string that happens to start with "[") falls back
83296
83645
  // to a single-item array rather than throwing during render.
83297
83646
  try {
83298
- const parsed = JSON.parse(this.value);
83299
- return Array.isArray(parsed) ? parsed : [this.value];
83647
+ // any valid JSON starting with `[` ALWAYS parses to an array
83648
+ return JSON.parse(this.value);
83300
83649
  } catch {
83301
83650
  return [this.value];
83302
83651
  }
@@ -89339,7 +89688,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
89339
89688
  }
89340
89689
  };
89341
89690
 
89342
- var formkitVersion$1 = '202606192004';
89691
+ var formkitVersion$1 = '202606192121';
89343
89692
 
89344
89693
  class AuroElement extends i$3 {
89345
89694
  static get properties() {
@@ -91352,7 +91701,7 @@ class AuroHelpText extends i$3 {
91352
91701
  }
91353
91702
  }
91354
91703
 
91355
- var formkitVersion = '202606192004';
91704
+ var formkitVersion = '202606192121';
91356
91705
 
91357
91706
  var styleCss = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 300);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 300);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
91358
91707