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

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 (56) hide show
  1. package/components/checkbox/demo/customize.html +1 -2
  2. package/components/checkbox/demo/customize.min.js +1 -1
  3. package/components/checkbox/demo/getting-started.min.js +1 -1
  4. package/components/checkbox/demo/index.min.js +1 -1
  5. package/components/checkbox/dist/index.js +1 -1
  6. package/components/checkbox/dist/registered.js +1 -1
  7. package/components/combobox/demo/customize.html +1 -2
  8. package/components/combobox/demo/customize.md +108 -132
  9. package/components/combobox/demo/customize.min.js +26 -130
  10. package/components/combobox/demo/getting-started.min.js +26 -130
  11. package/components/combobox/demo/index.min.js +26 -130
  12. package/components/combobox/dist/index.js +26 -130
  13. package/components/combobox/dist/registered.js +26 -130
  14. package/components/counter/demo/customize.min.js +2 -2
  15. package/components/counter/demo/index.min.js +2 -2
  16. package/components/counter/dist/index.js +2 -2
  17. package/components/counter/dist/registered.js +2 -2
  18. package/components/datepicker/demo/customize.min.js +12 -124
  19. package/components/datepicker/demo/index.min.js +12 -124
  20. package/components/datepicker/dist/index.js +12 -124
  21. package/components/datepicker/dist/registered.js +12 -124
  22. package/components/dropdown/demo/customize.min.js +1 -1
  23. package/components/dropdown/demo/getting-started.min.js +1 -1
  24. package/components/dropdown/demo/index.min.js +1 -1
  25. package/components/dropdown/dist/index.js +1 -1
  26. package/components/dropdown/dist/registered.js +1 -1
  27. package/components/form/demo/customize.html +6 -6
  28. package/components/form/demo/customize.js +19 -0
  29. package/components/form/demo/customize.md +203 -51
  30. package/components/form/demo/customize.min.js +489 -419
  31. package/components/form/demo/getting-started.min.js +417 -419
  32. package/components/form/demo/index.min.js +417 -419
  33. package/components/form/demo/registerDemoDeps.min.js +54 -382
  34. package/components/form/dist/auro-form.d.ts +122 -4
  35. package/components/form/dist/index.js +363 -37
  36. package/components/form/dist/registered.js +363 -37
  37. package/components/input/demo/customize.html +1 -2
  38. package/components/input/demo/customize.min.js +10 -122
  39. package/components/input/demo/getting-started.min.js +10 -122
  40. package/components/input/demo/index.min.js +10 -122
  41. package/components/input/dist/base-input.d.ts +1 -49
  42. package/components/input/dist/index.js +10 -122
  43. package/components/input/dist/registered.js +10 -122
  44. package/components/radio/demo/customize.min.js +1 -1
  45. package/components/radio/demo/getting-started.min.js +1 -1
  46. package/components/radio/demo/index.min.js +1 -1
  47. package/components/radio/dist/index.js +1 -1
  48. package/components/radio/dist/registered.js +1 -1
  49. package/components/select/demo/customize.html +1 -2
  50. package/components/select/demo/customize.min.js +2 -2
  51. package/components/select/demo/getting-started.min.js +2 -2
  52. package/components/select/demo/index.min.js +2 -2
  53. package/components/select/dist/index.js +2 -2
  54. package/components/select/dist/registered.js +2 -2
  55. package/custom-elements.json +123 -266
  56. package/package.json +1 -1
@@ -4888,7 +4888,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4888
4888
  }
4889
4889
  };
4890
4890
 
4891
- var formkitVersion$2 = '202606190840';
4891
+ var formkitVersion$2 = '202606221656';
4892
4892
 
4893
4893
  let AuroElement$2 = class AuroElement extends i$3 {
4894
4894
  static get properties() {
@@ -16761,10 +16761,8 @@ class BaseInput extends AuroElement$1 {
16761
16761
  this.layout = 'classic';
16762
16762
  this.locale = 'en-US';
16763
16763
  this.max = undefined;
16764
- this._maxObject = undefined;
16765
16764
  this.maxLength = undefined;
16766
16765
  this.min = undefined;
16767
- this._minObject = undefined;
16768
16766
  this.minLength = undefined;
16769
16767
  this.required = false;
16770
16768
  this.onDark = false;
@@ -16772,7 +16770,6 @@ class BaseInput extends AuroElement$1 {
16772
16770
  this.size = 'lg';
16773
16771
  this.shape = 'classic';
16774
16772
  this.value = undefined;
16775
- this._valueObject = undefined;
16776
16773
 
16777
16774
  this._initializePrivateDefaults();
16778
16775
  }
@@ -17312,7 +17309,7 @@ class BaseInput extends AuroElement$1 {
17312
17309
  * @returns {Date|undefined}
17313
17310
  */
17314
17311
  get valueObject() {
17315
- return this._valueObject || this._computeDateObjectFallback(this.value);
17312
+ return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
17316
17313
  }
17317
17314
 
17318
17315
  /**
@@ -17320,7 +17317,7 @@ class BaseInput extends AuroElement$1 {
17320
17317
  * @returns {Date|undefined}
17321
17318
  */
17322
17319
  get minObject() {
17323
- return this._minObject || this._computeDateObjectFallback(this.min);
17320
+ return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
17324
17321
  }
17325
17322
 
17326
17323
  /**
@@ -17328,50 +17325,7 @@ class BaseInput extends AuroElement$1 {
17328
17325
  * @returns {Date|undefined}
17329
17326
  */
17330
17327
  get maxObject() {
17331
- return this._maxObject || this._computeDateObjectFallback(this.max);
17332
- }
17333
-
17334
- /**
17335
- * Parses a date string into a Date object when the corresponding `_*Object`
17336
- * field hasn't been synced yet by `updated()`. Returns undefined when the
17337
- * input type/format isn't a full date or the string is not a valid date.
17338
- *
17339
- * Why this exists: a parent (datepicker) can call `inputN.validate()` from
17340
- * inside its own `updated()` before this input's `updated()` has run
17341
- * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
17342
- * and range checks would otherwise silently no-op (flipping the result to
17343
- * `valid` or `patternMismatch`).
17344
- * @private
17345
- * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
17346
- * @returns {Date|undefined}
17347
- */
17348
- _computeDateObjectFallback(dateStr) {
17349
- if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
17350
- return undefined;
17351
- }
17352
- if (!dateFormatter.isValidDate(dateStr)) {
17353
- return undefined;
17354
- }
17355
- return dateFormatter.stringToDateInstance(dateStr);
17356
- }
17357
-
17358
- /**
17359
- * Internal setter for readonly date object properties.
17360
- * @private
17361
- * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
17362
- * @param {Date|undefined} propertyValue - Value to assign.
17363
- * @returns {void}
17364
- */
17365
- setDateObjectProperty(propertyName, propertyValue) {
17366
- const internalPropertyName = `_${propertyName}`;
17367
- const previousValue = this[internalPropertyName];
17368
-
17369
- if (previousValue === propertyValue) {
17370
- return;
17371
- }
17372
-
17373
- this[internalPropertyName] = propertyValue;
17374
- this.requestUpdate(propertyName, previousValue);
17328
+ return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
17375
17329
  }
17376
17330
 
17377
17331
  connectedCallback() {
@@ -17400,7 +17354,6 @@ class BaseInput extends AuroElement$1 {
17400
17354
  format: this.format
17401
17355
  });
17402
17356
  this.configureDataForType();
17403
- this.syncDateValues();
17404
17357
  }
17405
17358
 
17406
17359
  disconnectedCallback() {
@@ -17430,7 +17383,6 @@ class BaseInput extends AuroElement$1 {
17430
17383
  this.setCustomHelpTextMessage();
17431
17384
  this.configureAutoFormatting();
17432
17385
  this.configureDataForType();
17433
- this.syncDateValues();
17434
17386
  }
17435
17387
 
17436
17388
  /**
@@ -17567,8 +17519,6 @@ class BaseInput extends AuroElement$1 {
17567
17519
  this.configureDataForType();
17568
17520
  }
17569
17521
 
17570
- this.syncDateValues(changedProperties);
17571
-
17572
17522
  if (changedProperties.has('value')) {
17573
17523
  if (this.value && this.value.length > 0) {
17574
17524
  this.hasValue = true;
@@ -17639,69 +17589,6 @@ class BaseInput extends AuroElement$1 {
17639
17589
  }));
17640
17590
  }
17641
17591
 
17642
-
17643
- /**
17644
- * Synchronizes the ISO string values and Date object representations for date-related properties.
17645
- * This keeps the model and display values aligned when either side changes.
17646
- *
17647
- * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
17648
- * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
17649
- * represents a full year/month/day date format.
17650
- *
17651
- * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
17652
- * @returns {void}
17653
- * @private
17654
- */
17655
- syncDateValues(changedProperties = undefined) {
17656
- if (!this.util.isFullDateFormat(this.type, this.format)) {
17657
- return;
17658
- }
17659
-
17660
- this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
17661
- this.syncSingleDateValue(changedProperties, 'minObject', 'min');
17662
- this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
17663
- }
17664
-
17665
- /**
17666
- * Synchronizes one date object/string property pair.
17667
- * @private
17668
- * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
17669
- * @param {string} objectProperty - Date object property name.
17670
- * @param {string} valueProperty - ISO string property name.
17671
- * @returns {void}
17672
- */
17673
- syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
17674
- const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
17675
-
17676
- // objectProperty wins over valueProperty when both changed
17677
- if (objectPropertyChanged && this[objectProperty]) {
17678
- this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
17679
- return;
17680
- }
17681
-
17682
- const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
17683
- if (!valuePropertyChanged) {
17684
- return;
17685
- }
17686
-
17687
- // 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)
17688
- if (
17689
- changedProperties &&
17690
- valueProperty === 'value' &&
17691
- changedProperties.get('value') === undefined &&
17692
- this[objectProperty] instanceof Date &&
17693
- this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
17694
- ) {
17695
- return;
17696
- }
17697
-
17698
- if (dateFormatter.isValidDate(this[valueProperty])) {
17699
- this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
17700
- } else {
17701
- this.setDateObjectProperty(objectProperty, undefined);
17702
- }
17703
- }
17704
-
17705
17592
  /**
17706
17593
  * Sets up IMasks and logic based on auto-formatting requirements.
17707
17594
  * @private
@@ -17716,8 +17603,13 @@ class BaseInput extends AuroElement$1 {
17716
17603
  this._configuringMask = true;
17717
17604
  try {
17718
17605
  // Destroy any prior mask so IMask can attach fresh under the new format.
17606
+ // Null the reference too — if the new maskOptions.mask is falsy (e.g.
17607
+ // type switched from credit-card to text) the IMask() reassignment
17608
+ // below is skipped, and downstream writes at line ~823 would otherwise
17609
+ // route through the destroyed instance.
17719
17610
  if (this.maskInstance) {
17720
17611
  this.maskInstance.destroy();
17612
+ this.maskInstance = null;
17721
17613
  }
17722
17614
 
17723
17615
  this.util.updateFormat(this.format);
@@ -17738,9 +17630,7 @@ class BaseInput extends AuroElement$1 {
17738
17630
  if (
17739
17631
  this.util.isFullDateFormat(this.type, this.format) &&
17740
17632
  this.value &&
17741
- dateFormatter.isValidDate(this.value) &&
17742
- this.valueObject instanceof Date &&
17743
- !Number.isNaN(this.valueObject.getTime()) &&
17633
+ this.valueObject &&
17744
17634
  typeof maskOptions.format === 'function'
17745
17635
  ) {
17746
17636
  existingValue = maskOptions.format(this.valueObject);
@@ -17945,7 +17835,6 @@ class BaseInput extends AuroElement$1 {
17945
17835
  */
17946
17836
  reset() {
17947
17837
  this.value = undefined;
17948
- this.setDateObjectProperty('valueObject', undefined);
17949
17838
  this.validation.reset(this);
17950
17839
  }
17951
17840
 
@@ -17954,7 +17843,6 @@ class BaseInput extends AuroElement$1 {
17954
17843
  */
17955
17844
  clear() {
17956
17845
  this.value = undefined;
17957
- this.setDateObjectProperty('valueObject', undefined);
17958
17846
  }
17959
17847
 
17960
17848
  /**
@@ -18483,7 +18371,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18483
18371
  }
18484
18372
  };
18485
18373
 
18486
- var formkitVersion$1 = '202606190840';
18374
+ var formkitVersion$1 = '202606221656';
18487
18375
 
18488
18376
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18489
18377
  // See LICENSE in the project root for license information.
@@ -19604,7 +19492,7 @@ class AuroBibtemplate extends i$3 {
19604
19492
  }
19605
19493
  }
19606
19494
 
19607
- var formkitVersion = '202606190840';
19495
+ var formkitVersion = '202606221656';
19608
19496
 
19609
19497
  var styleCss$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}`;
19610
19498
 
@@ -21121,11 +21009,15 @@ class AuroCombobox extends AuroElement {
21121
21009
 
21122
21010
  // Announce the selection after the dropdown closes so it isn't
21123
21011
  // overridden by VoiceOver's "collapsed" announcement from aria-expanded.
21012
+ // Skip when there's no selected value (e.g. menu.clearSelection() from
21013
+ // the unmatched-value path), otherwise VoiceOver reads "undefined".
21124
21014
  const selectedValue = this.menu.value;
21125
- const announcementDelay = 300;
21126
- setTimeout(() => {
21127
- announceToScreenReader(this._getAnnouncementRoot(), `${selectedValue}, selected`);
21128
- }, announcementDelay);
21015
+ if (selectedValue) {
21016
+ const announcementDelay = 300;
21017
+ setTimeout(() => {
21018
+ announceToScreenReader(this._getAnnouncementRoot(), `${selectedValue}, selected`);
21019
+ }, announcementDelay);
21020
+ }
21129
21021
  }
21130
21022
 
21131
21023
  // Programmatic value syncs leave availableOptions stale because
@@ -21546,8 +21438,12 @@ class AuroCombobox extends AuroElement {
21546
21438
  if (this.menu.options.some((opt) => opt.value === this.value) || this.behavior === 'filter') {
21547
21439
  this.setMenuValue(this.value);
21548
21440
  } else {
21549
- if (this.menu.value) {
21550
- this.menu.value = undefined;
21441
+ // Clear menu.value AND menu.optionSelected together. Clearing only
21442
+ // menu.value leaves the previously-selected option element pinned
21443
+ // as menu.optionSelected; a later auroMenu-selectedOption event
21444
+ // would then write its stale .value back into combobox.value.
21445
+ if (this.menu.value || this.menu.optionSelected) {
21446
+ this.menu.clearSelection();
21551
21447
  }
21552
21448
  // Suggestion-mode freeform value: sync the trigger + bib to show it,
21553
21449
  // then refresh the filter once the inputs flush (handleInputValueChange
@@ -4806,7 +4806,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4806
4806
  }
4807
4807
  };
4808
4808
 
4809
- var formkitVersion$2 = '202606190840';
4809
+ var formkitVersion$2 = '202606221656';
4810
4810
 
4811
4811
  let AuroElement$2 = class AuroElement extends LitElement {
4812
4812
  static get properties() {
@@ -16672,10 +16672,8 @@ class BaseInput extends AuroElement$1 {
16672
16672
  this.layout = 'classic';
16673
16673
  this.locale = 'en-US';
16674
16674
  this.max = undefined;
16675
- this._maxObject = undefined;
16676
16675
  this.maxLength = undefined;
16677
16676
  this.min = undefined;
16678
- this._minObject = undefined;
16679
16677
  this.minLength = undefined;
16680
16678
  this.required = false;
16681
16679
  this.onDark = false;
@@ -16683,7 +16681,6 @@ class BaseInput extends AuroElement$1 {
16683
16681
  this.size = 'lg';
16684
16682
  this.shape = 'classic';
16685
16683
  this.value = undefined;
16686
- this._valueObject = undefined;
16687
16684
 
16688
16685
  this._initializePrivateDefaults();
16689
16686
  }
@@ -17223,7 +17220,7 @@ class BaseInput extends AuroElement$1 {
17223
17220
  * @returns {Date|undefined}
17224
17221
  */
17225
17222
  get valueObject() {
17226
- return this._valueObject || this._computeDateObjectFallback(this.value);
17223
+ return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
17227
17224
  }
17228
17225
 
17229
17226
  /**
@@ -17231,7 +17228,7 @@ class BaseInput extends AuroElement$1 {
17231
17228
  * @returns {Date|undefined}
17232
17229
  */
17233
17230
  get minObject() {
17234
- return this._minObject || this._computeDateObjectFallback(this.min);
17231
+ return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
17235
17232
  }
17236
17233
 
17237
17234
  /**
@@ -17239,50 +17236,7 @@ class BaseInput extends AuroElement$1 {
17239
17236
  * @returns {Date|undefined}
17240
17237
  */
17241
17238
  get maxObject() {
17242
- return this._maxObject || this._computeDateObjectFallback(this.max);
17243
- }
17244
-
17245
- /**
17246
- * Parses a date string into a Date object when the corresponding `_*Object`
17247
- * field hasn't been synced yet by `updated()`. Returns undefined when the
17248
- * input type/format isn't a full date or the string is not a valid date.
17249
- *
17250
- * Why this exists: a parent (datepicker) can call `inputN.validate()` from
17251
- * inside its own `updated()` before this input's `updated()` has run
17252
- * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
17253
- * and range checks would otherwise silently no-op (flipping the result to
17254
- * `valid` or `patternMismatch`).
17255
- * @private
17256
- * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
17257
- * @returns {Date|undefined}
17258
- */
17259
- _computeDateObjectFallback(dateStr) {
17260
- if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
17261
- return undefined;
17262
- }
17263
- if (!dateFormatter.isValidDate(dateStr)) {
17264
- return undefined;
17265
- }
17266
- return dateFormatter.stringToDateInstance(dateStr);
17267
- }
17268
-
17269
- /**
17270
- * Internal setter for readonly date object properties.
17271
- * @private
17272
- * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
17273
- * @param {Date|undefined} propertyValue - Value to assign.
17274
- * @returns {void}
17275
- */
17276
- setDateObjectProperty(propertyName, propertyValue) {
17277
- const internalPropertyName = `_${propertyName}`;
17278
- const previousValue = this[internalPropertyName];
17279
-
17280
- if (previousValue === propertyValue) {
17281
- return;
17282
- }
17283
-
17284
- this[internalPropertyName] = propertyValue;
17285
- this.requestUpdate(propertyName, previousValue);
17239
+ return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
17286
17240
  }
17287
17241
 
17288
17242
  connectedCallback() {
@@ -17311,7 +17265,6 @@ class BaseInput extends AuroElement$1 {
17311
17265
  format: this.format
17312
17266
  });
17313
17267
  this.configureDataForType();
17314
- this.syncDateValues();
17315
17268
  }
17316
17269
 
17317
17270
  disconnectedCallback() {
@@ -17341,7 +17294,6 @@ class BaseInput extends AuroElement$1 {
17341
17294
  this.setCustomHelpTextMessage();
17342
17295
  this.configureAutoFormatting();
17343
17296
  this.configureDataForType();
17344
- this.syncDateValues();
17345
17297
  }
17346
17298
 
17347
17299
  /**
@@ -17478,8 +17430,6 @@ class BaseInput extends AuroElement$1 {
17478
17430
  this.configureDataForType();
17479
17431
  }
17480
17432
 
17481
- this.syncDateValues(changedProperties);
17482
-
17483
17433
  if (changedProperties.has('value')) {
17484
17434
  if (this.value && this.value.length > 0) {
17485
17435
  this.hasValue = true;
@@ -17550,69 +17500,6 @@ class BaseInput extends AuroElement$1 {
17550
17500
  }));
17551
17501
  }
17552
17502
 
17553
-
17554
- /**
17555
- * Synchronizes the ISO string values and Date object representations for date-related properties.
17556
- * This keeps the model and display values aligned when either side changes.
17557
- *
17558
- * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
17559
- * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
17560
- * represents a full year/month/day date format.
17561
- *
17562
- * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
17563
- * @returns {void}
17564
- * @private
17565
- */
17566
- syncDateValues(changedProperties = undefined) {
17567
- if (!this.util.isFullDateFormat(this.type, this.format)) {
17568
- return;
17569
- }
17570
-
17571
- this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
17572
- this.syncSingleDateValue(changedProperties, 'minObject', 'min');
17573
- this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
17574
- }
17575
-
17576
- /**
17577
- * Synchronizes one date object/string property pair.
17578
- * @private
17579
- * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
17580
- * @param {string} objectProperty - Date object property name.
17581
- * @param {string} valueProperty - ISO string property name.
17582
- * @returns {void}
17583
- */
17584
- syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
17585
- const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
17586
-
17587
- // objectProperty wins over valueProperty when both changed
17588
- if (objectPropertyChanged && this[objectProperty]) {
17589
- this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
17590
- return;
17591
- }
17592
-
17593
- const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
17594
- if (!valuePropertyChanged) {
17595
- return;
17596
- }
17597
-
17598
- // 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)
17599
- if (
17600
- changedProperties &&
17601
- valueProperty === 'value' &&
17602
- changedProperties.get('value') === undefined &&
17603
- this[objectProperty] instanceof Date &&
17604
- this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
17605
- ) {
17606
- return;
17607
- }
17608
-
17609
- if (dateFormatter.isValidDate(this[valueProperty])) {
17610
- this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
17611
- } else {
17612
- this.setDateObjectProperty(objectProperty, undefined);
17613
- }
17614
- }
17615
-
17616
17503
  /**
17617
17504
  * Sets up IMasks and logic based on auto-formatting requirements.
17618
17505
  * @private
@@ -17627,8 +17514,13 @@ class BaseInput extends AuroElement$1 {
17627
17514
  this._configuringMask = true;
17628
17515
  try {
17629
17516
  // Destroy any prior mask so IMask can attach fresh under the new format.
17517
+ // Null the reference too — if the new maskOptions.mask is falsy (e.g.
17518
+ // type switched from credit-card to text) the IMask() reassignment
17519
+ // below is skipped, and downstream writes at line ~823 would otherwise
17520
+ // route through the destroyed instance.
17630
17521
  if (this.maskInstance) {
17631
17522
  this.maskInstance.destroy();
17523
+ this.maskInstance = null;
17632
17524
  }
17633
17525
 
17634
17526
  this.util.updateFormat(this.format);
@@ -17649,9 +17541,7 @@ class BaseInput extends AuroElement$1 {
17649
17541
  if (
17650
17542
  this.util.isFullDateFormat(this.type, this.format) &&
17651
17543
  this.value &&
17652
- dateFormatter.isValidDate(this.value) &&
17653
- this.valueObject instanceof Date &&
17654
- !Number.isNaN(this.valueObject.getTime()) &&
17544
+ this.valueObject &&
17655
17545
  typeof maskOptions.format === 'function'
17656
17546
  ) {
17657
17547
  existingValue = maskOptions.format(this.valueObject);
@@ -17856,7 +17746,6 @@ class BaseInput extends AuroElement$1 {
17856
17746
  */
17857
17747
  reset() {
17858
17748
  this.value = undefined;
17859
- this.setDateObjectProperty('valueObject', undefined);
17860
17749
  this.validation.reset(this);
17861
17750
  }
17862
17751
 
@@ -17865,7 +17754,6 @@ class BaseInput extends AuroElement$1 {
17865
17754
  */
17866
17755
  clear() {
17867
17756
  this.value = undefined;
17868
- this.setDateObjectProperty('valueObject', undefined);
17869
17757
  }
17870
17758
 
17871
17759
  /**
@@ -18394,7 +18282,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
18394
18282
  }
18395
18283
  };
18396
18284
 
18397
- var formkitVersion$1 = '202606190840';
18285
+ var formkitVersion$1 = '202606221656';
18398
18286
 
18399
18287
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18400
18288
  // See LICENSE in the project root for license information.
@@ -19515,7 +19403,7 @@ class AuroBibtemplate extends LitElement {
19515
19403
  }
19516
19404
  }
19517
19405
 
19518
- var formkitVersion = '202606190840';
19406
+ var formkitVersion = '202606221656';
19519
19407
 
19520
19408
  var styleCss$1 = css`.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}`;
19521
19409
 
@@ -21032,11 +20920,15 @@ class AuroCombobox extends AuroElement {
21032
20920
 
21033
20921
  // Announce the selection after the dropdown closes so it isn't
21034
20922
  // overridden by VoiceOver's "collapsed" announcement from aria-expanded.
20923
+ // Skip when there's no selected value (e.g. menu.clearSelection() from
20924
+ // the unmatched-value path), otherwise VoiceOver reads "undefined".
21035
20925
  const selectedValue = this.menu.value;
21036
- const announcementDelay = 300;
21037
- setTimeout(() => {
21038
- announceToScreenReader(this._getAnnouncementRoot(), `${selectedValue}, selected`);
21039
- }, announcementDelay);
20926
+ if (selectedValue) {
20927
+ const announcementDelay = 300;
20928
+ setTimeout(() => {
20929
+ announceToScreenReader(this._getAnnouncementRoot(), `${selectedValue}, selected`);
20930
+ }, announcementDelay);
20931
+ }
21040
20932
  }
21041
20933
 
21042
20934
  // Programmatic value syncs leave availableOptions stale because
@@ -21457,8 +21349,12 @@ class AuroCombobox extends AuroElement {
21457
21349
  if (this.menu.options.some((opt) => opt.value === this.value) || this.behavior === 'filter') {
21458
21350
  this.setMenuValue(this.value);
21459
21351
  } else {
21460
- if (this.menu.value) {
21461
- this.menu.value = undefined;
21352
+ // Clear menu.value AND menu.optionSelected together. Clearing only
21353
+ // menu.value leaves the previously-selected option element pinned
21354
+ // as menu.optionSelected; a later auroMenu-selectedOption event
21355
+ // would then write its stale .value back into combobox.value.
21356
+ if (this.menu.value || this.menu.optionSelected) {
21357
+ this.menu.clearSelection();
21462
21358
  }
21463
21359
  // Suggestion-mode freeform value: sync the trigger + bib to show it,
21464
21360
  // then refresh the filter once the inputs flush (handleInputValueChange