@aurodesignsystem-dev/auro-formkit 0.0.0-pr1516.0 → 0.0.0-pr1519.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 (54) hide show
  1. package/components/checkbox/demo/customize.min.js +18 -10
  2. package/components/checkbox/demo/getting-started.min.js +18 -10
  3. package/components/checkbox/demo/index.min.js +18 -10
  4. package/components/checkbox/dist/index.js +18 -10
  5. package/components/checkbox/dist/registered.js +18 -10
  6. package/components/combobox/README.md +1 -1
  7. package/components/combobox/demo/customize.md +2 -10
  8. package/components/combobox/demo/customize.min.js +454 -467
  9. package/components/combobox/demo/getting-started.min.js +454 -463
  10. package/components/combobox/demo/index.md +1 -1
  11. package/components/combobox/demo/index.min.js +454 -463
  12. package/components/combobox/demo/keyboard-behavior.md +2 -142
  13. package/components/combobox/demo/readme.md +1 -1
  14. package/components/combobox/demo/why-combobox.md +2 -2
  15. package/components/combobox/dist/auro-combobox.d.ts +30 -14
  16. package/components/combobox/dist/index.js +454 -463
  17. package/components/combobox/dist/registered.js +454 -463
  18. package/components/counter/demo/customize.min.js +32 -12
  19. package/components/counter/demo/index.min.js +32 -12
  20. package/components/counter/dist/index.js +32 -12
  21. package/components/counter/dist/registered.js +32 -12
  22. package/components/datepicker/demo/customize.min.js +183 -167
  23. package/components/datepicker/demo/index.min.js +183 -167
  24. package/components/datepicker/dist/index.js +183 -167
  25. package/components/datepicker/dist/registered.js +183 -167
  26. package/components/dropdown/demo/customize.min.js +14 -2
  27. package/components/dropdown/demo/getting-started.min.js +14 -2
  28. package/components/dropdown/demo/index.min.js +14 -2
  29. package/components/dropdown/dist/index.js +14 -2
  30. package/components/dropdown/dist/registered.js +14 -2
  31. package/components/form/demo/customize.min.js +851 -829
  32. package/components/form/demo/getting-started.min.js +851 -829
  33. package/components/form/demo/index.min.js +851 -829
  34. package/components/form/demo/registerDemoDeps.min.js +851 -829
  35. package/components/input/demo/api.md +58 -57
  36. package/components/input/demo/customize.min.js +114 -155
  37. package/components/input/demo/getting-started.min.js +114 -155
  38. package/components/input/demo/index.min.js +114 -155
  39. package/components/input/dist/base-input.d.ts +9 -51
  40. package/components/input/dist/index.js +114 -155
  41. package/components/input/dist/registered.js +114 -155
  42. package/components/input/dist/utilities.d.ts +9 -0
  43. package/components/radio/demo/customize.min.js +18 -10
  44. package/components/radio/demo/getting-started.min.js +18 -10
  45. package/components/radio/demo/index.min.js +18 -10
  46. package/components/radio/dist/index.js +18 -10
  47. package/components/radio/dist/registered.js +18 -10
  48. package/components/select/demo/customize.min.js +32 -12
  49. package/components/select/demo/getting-started.min.js +32 -12
  50. package/components/select/demo/index.min.js +32 -12
  51. package/components/select/dist/index.js +32 -12
  52. package/components/select/dist/registered.js +32 -12
  53. package/custom-elements.json +142 -278
  54. package/package.json +1 -1
@@ -542,11 +542,17 @@ let AuroFormValidation$1 = class AuroFormValidation {
542
542
  return;
543
543
  }
544
544
 
545
- // Validate that the date passed was the correct format and is a valid date
545
+ // Validate that the date passed was the correct format and is a valid date.
546
+ // For partial date formats, valueObject is never populated; validate them directly.
546
547
  if (elem.value && !elem.valueObject) {
547
- elem.validity = 'patternMismatch';
548
- elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
549
- return;
548
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
549
+ const isValidPartial = isPartialDateFormat && elem.util.isValidPartialDate(elem.value, elem.format);
550
+
551
+ if (!isValidPartial) {
552
+ elem.validity = 'patternMismatch';
553
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
554
+ return;
555
+ }
550
556
  }
551
557
 
552
558
  // Perform the rest of the validation
@@ -640,15 +646,17 @@ let AuroFormValidation$1 = class AuroFormValidation {
640
646
  );
641
647
  }
642
648
 
643
- // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false;
644
- if (this.auroInputElements?.length === 2) {
645
- if (!this.auroInputElements[1].value || this.auroInputElements[1].length === 0) {
649
+ const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
650
+
651
+ // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
652
+ // Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
653
+ // field (datepicker is the intended consumer — start/end are independently required).
654
+ if (this.auroInputElements?.length === 2 && !isCombobox) {
655
+ if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
646
656
  hasValue = false;
647
657
  }
648
658
  }
649
659
 
650
- const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
651
-
652
660
  if (isCombobox) {
653
661
 
654
662
  if (!elem.persistInput || elem.behavior === "filter") {
@@ -10471,6 +10479,42 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10471
10479
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
10472
10480
  }
10473
10481
 
10482
+ /**
10483
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
10484
+ * Single-component formats are checked as integer ranges; multi-component formats use
10485
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
10486
+ * @param {string} value - The user-facing display value.
10487
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
10488
+ * @returns {boolean}
10489
+ */
10490
+ isValidPartialDate(value, format) {
10491
+ if (!value || !format) {
10492
+ return false;
10493
+ }
10494
+ const normalizedFormat = format.toLowerCase();
10495
+
10496
+ if (normalizedFormat === 'dd') {
10497
+ const num = Number(value);
10498
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
10499
+ }
10500
+ if (normalizedFormat === 'yy') {
10501
+ const num = Number(value);
10502
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
10503
+ }
10504
+ if (normalizedFormat === 'yyyy') {
10505
+ const num = Number(value);
10506
+ return (/^\d{4}$/u).test(value) && num >= 1 && num <= 9999;
10507
+ }
10508
+
10509
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
10510
+ // Use the 1st of the current month as the reference so that formats
10511
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
10512
+ const referenceDate = new Date();
10513
+ referenceDate.setDate(1);
10514
+ const parsed = parse$1(value, dateFnsMask, referenceDate);
10515
+ return isValid$1(parsed) && format$1(parsed, dateFnsMask) === value;
10516
+ }
10517
+
10474
10518
  /**
10475
10519
  * Converts a display string to its model value.
10476
10520
  * For full date formats, converts the display string to an ISO date string.
@@ -10518,6 +10562,7 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10518
10562
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
10519
10563
 
10520
10564
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
10565
+ console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
10521
10566
  return undefined;
10522
10567
  }
10523
10568
 
@@ -13543,7 +13588,7 @@ class AuroBibtemplate extends LitElement {
13543
13588
  }
13544
13589
  }
13545
13590
 
13546
- var formkitVersion$2 = '202606292156';
13591
+ var formkitVersion$2 = '202607011722';
13547
13592
 
13548
13593
  let l$1 = 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=literal`${unsafeStatic(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = 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 = 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=css`: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}
13549
13594
  `,u$4=css`.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}}
@@ -19295,7 +19340,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
19295
19340
  }
19296
19341
  };
19297
19342
 
19298
- var formkitVersion$1 = '202606292156';
19343
+ var formkitVersion$1 = '202607011722';
19299
19344
 
19300
19345
  let AuroElement$2 = class AuroElement extends LitElement {
19301
19346
  static get properties() {
@@ -20047,7 +20092,19 @@ class AuroDropdown extends AuroElement$2 {
20047
20092
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
20048
20093
  this.trigger.focus();
20049
20094
  }
20050
- }
20095
+
20096
+
20097
+ if (!this.isPopoverVisible) {
20098
+ // wait til the bib gets fully closed and rendered
20099
+ setTimeout(() => {
20100
+ // check if it's still closed and the focus is still within the dropdown, but not in the bib. If so, move focus to the trigger.
20101
+ if (!this.isPopoverVisible || !this.bib.matches(':focus-within')) {
20102
+ return;
20103
+ }
20104
+ // Move focus out of bib into trigger.
20105
+ this.trigger.focus();
20106
+ });
20107
+ } }
20051
20108
 
20052
20109
  firstUpdated() {
20053
20110
  // Configure the floater to, this will generate the ID for the bib
@@ -24972,11 +25029,17 @@ class AuroFormValidation {
24972
25029
  return;
24973
25030
  }
24974
25031
 
24975
- // Validate that the date passed was the correct format and is a valid date
25032
+ // Validate that the date passed was the correct format and is a valid date.
25033
+ // For partial date formats, valueObject is never populated; validate them directly.
24976
25034
  if (elem.value && !elem.valueObject) {
24977
- elem.validity = 'patternMismatch';
24978
- elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
24979
- return;
25035
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
25036
+ const isValidPartial = isPartialDateFormat && elem.util.isValidPartialDate(elem.value, elem.format);
25037
+
25038
+ if (!isValidPartial) {
25039
+ elem.validity = 'patternMismatch';
25040
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
25041
+ return;
25042
+ }
24980
25043
  }
24981
25044
 
24982
25045
  // Perform the rest of the validation
@@ -25070,15 +25133,17 @@ class AuroFormValidation {
25070
25133
  );
25071
25134
  }
25072
25135
 
25073
- // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false;
25074
- if (this.auroInputElements?.length === 2) {
25075
- if (!this.auroInputElements[1].value || this.auroInputElements[1].length === 0) {
25136
+ const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
25137
+
25138
+ // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
25139
+ // Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
25140
+ // field (datepicker is the intended consumer — start/end are independently required).
25141
+ if (this.auroInputElements?.length === 2 && !isCombobox) {
25142
+ if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
25076
25143
  hasValue = false;
25077
25144
  }
25078
25145
  }
25079
25146
 
25080
- const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
25081
-
25082
25147
  if (isCombobox) {
25083
25148
 
25084
25149
  if (!elem.persistInput || elem.behavior === "filter") {
@@ -30978,6 +31043,42 @@ class AuroInputUtilities {
30978
31043
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
30979
31044
  }
30980
31045
 
31046
+ /**
31047
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
31048
+ * Single-component formats are checked as integer ranges; multi-component formats use
31049
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
31050
+ * @param {string} value - The user-facing display value.
31051
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
31052
+ * @returns {boolean}
31053
+ */
31054
+ isValidPartialDate(value, format$1) {
31055
+ if (!value || !format$1) {
31056
+ return false;
31057
+ }
31058
+ const normalizedFormat = format$1.toLowerCase();
31059
+
31060
+ if (normalizedFormat === 'dd') {
31061
+ const num = Number(value);
31062
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
31063
+ }
31064
+ if (normalizedFormat === 'yy') {
31065
+ const num = Number(value);
31066
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
31067
+ }
31068
+ if (normalizedFormat === 'yyyy') {
31069
+ const num = Number(value);
31070
+ return (/^\d{4}$/u).test(value) && num >= 1 && num <= 9999;
31071
+ }
31072
+
31073
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
31074
+ // Use the 1st of the current month as the reference so that formats
31075
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
31076
+ const referenceDate = new Date();
31077
+ referenceDate.setDate(1);
31078
+ const parsed = parse(value, dateFnsMask, referenceDate);
31079
+ return isValid(parsed) && format(parsed, dateFnsMask) === value;
31080
+ }
31081
+
30981
31082
  /**
30982
31083
  * Converts a display string to its model value.
30983
31084
  * For full date formats, converts the display string to an ISO date string.
@@ -31025,6 +31126,7 @@ class AuroInputUtilities {
31025
31126
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
31026
31127
 
31027
31128
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
31129
+ console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
31028
31130
  return undefined;
31029
31131
  }
31030
31132
 
@@ -31182,6 +31284,7 @@ class BaseInput extends AuroElement$1 {
31182
31284
  // so a parent (datepicker/combobox) calling `validate()` synchronously
31183
31285
  // during its own update cycle sees a populated util instance.
31184
31286
  this.activeLabel = false;
31287
+
31185
31288
  /** @private */
31186
31289
  this.allowedInputTypes = [
31187
31290
  "text",
@@ -31192,6 +31295,7 @@ class BaseInput extends AuroElement$1 {
31192
31295
  "tel"
31193
31296
  ];
31194
31297
  this.appearance = "default";
31298
+
31195
31299
  /** @private */
31196
31300
  this.dateFormatMap = {
31197
31301
  'mm/dd/yyyy': 'dateMMDDYYYY',
@@ -31210,23 +31314,24 @@ class BaseInput extends AuroElement$1 {
31210
31314
  'mm/dd': 'dateMMDD'
31211
31315
  };
31212
31316
  this.disabled = false;
31317
+
31213
31318
  /** @private */
31214
31319
  this.domHandler = new DomHandler();
31215
31320
  this.dvInputOnly = false;
31216
31321
  this.hasValue = false;
31217
31322
  this.hideLabelVisually = false;
31218
31323
  this.icon = false;
31324
+
31219
31325
  /** @private */
31220
31326
  this.inputIconName = undefined;
31327
+
31221
31328
  /** @private */
31222
31329
  this.label = 'Input label is undefined';
31223
31330
  this.layout = 'classic';
31224
31331
  this.locale = 'en-US';
31225
31332
  this.max = undefined;
31226
- this._maxObject = undefined;
31227
31333
  this.maxLength = undefined;
31228
31334
  this.min = undefined;
31229
- this._minObject = undefined;
31230
31335
  this.minLength = undefined;
31231
31336
  this.noValidate = false;
31232
31337
  this.onDark = false;
@@ -31243,23 +31348,27 @@ class BaseInput extends AuroElement$1 {
31243
31348
  "email"
31244
31349
  ];
31245
31350
  this.shape = 'classic';
31351
+
31246
31352
  /** @private */
31247
31353
  this.showPassword = false;
31248
31354
  this.size = 'lg';
31249
31355
  this.touched = false;
31356
+
31250
31357
  /** @private */
31251
31358
  this.uniqueId = new UniqueId().create();
31359
+
31252
31360
  /** @private */
31253
31361
  this.util = new AuroInputUtilities({
31254
31362
  locale: this.locale,
31255
31363
  format: this.format
31256
31364
  });
31365
+
31257
31366
  /** @private */
31258
31367
  this.validation = new AuroFormValidation();
31368
+
31259
31369
  /** @private */
31260
31370
  this.validationCCLength = undefined;
31261
31371
  this.value = undefined;
31262
- this._valueObject = undefined;
31263
31372
  }
31264
31373
 
31265
31374
  // function to define props used within the scope of this component
@@ -31589,6 +31698,13 @@ class BaseInput extends AuroElement$1 {
31589
31698
  type: String
31590
31699
  },
31591
31700
 
31701
+ /**
31702
+ * Custom help text message to display when validity = `patternMismatch`.
31703
+ */
31704
+ setCustomValidityPatternMismatch: {
31705
+ type: String
31706
+ },
31707
+
31592
31708
  /**
31593
31709
  * Custom help text message to display when validity = `rangeOverflow`.
31594
31710
  */
@@ -31659,7 +31775,7 @@ class BaseInput extends AuroElement$1 {
31659
31775
 
31660
31776
  /**
31661
31777
  * Populates the `type` attribute on the input.
31662
- * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
31778
+ * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
31663
31779
  * @default 'text'
31664
31780
  */
31665
31781
  type: {
@@ -31697,7 +31813,7 @@ class BaseInput extends AuroElement$1 {
31697
31813
  * @returns {Date|undefined}
31698
31814
  */
31699
31815
  get valueObject() {
31700
- return this._valueObject || this._computeDateObjectFallback(this.value);
31816
+ return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
31701
31817
  }
31702
31818
 
31703
31819
  /**
@@ -31705,7 +31821,7 @@ class BaseInput extends AuroElement$1 {
31705
31821
  * @returns {Date|undefined}
31706
31822
  */
31707
31823
  get minObject() {
31708
- return this._minObject || this._computeDateObjectFallback(this.min);
31824
+ return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
31709
31825
  }
31710
31826
 
31711
31827
  /**
@@ -31713,50 +31829,7 @@ class BaseInput extends AuroElement$1 {
31713
31829
  * @returns {Date|undefined}
31714
31830
  */
31715
31831
  get maxObject() {
31716
- return this._maxObject || this._computeDateObjectFallback(this.max);
31717
- }
31718
-
31719
- /**
31720
- * Parses a date string into a Date object when the corresponding `_*Object`
31721
- * field hasn't been synced yet by `updated()`. Returns undefined when the
31722
- * input type/format isn't a full date or the string is not a valid date.
31723
- *
31724
- * Why this exists: a parent (datepicker) can call `inputN.validate()` from
31725
- * inside its own `updated()` before this input's `updated()` has run
31726
- * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
31727
- * and range checks would otherwise silently no-op (flipping the result to
31728
- * `valid` or `patternMismatch`).
31729
- * @private
31730
- * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
31731
- * @returns {Date|undefined}
31732
- */
31733
- _computeDateObjectFallback(dateStr) {
31734
- if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
31735
- return undefined;
31736
- }
31737
- if (!dateFormatter.isValidDate(dateStr)) {
31738
- return undefined;
31739
- }
31740
- return dateFormatter.stringToDateInstance(dateStr);
31741
- }
31742
-
31743
- /**
31744
- * Internal setter for readonly date object properties.
31745
- * @private
31746
- * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
31747
- * @param {Date|undefined} propertyValue - Value to assign.
31748
- * @returns {void}
31749
- */
31750
- setDateObjectProperty(propertyName, propertyValue) {
31751
- const internalPropertyName = `_${propertyName}`;
31752
- const previousValue = this[internalPropertyName];
31753
-
31754
- if (previousValue === propertyValue) {
31755
- return;
31756
- }
31757
-
31758
- this[internalPropertyName] = propertyValue;
31759
- this.requestUpdate(propertyName, previousValue);
31832
+ return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
31760
31833
  }
31761
31834
 
31762
31835
  connectedCallback() {
@@ -31785,7 +31858,6 @@ class BaseInput extends AuroElement$1 {
31785
31858
  format: this.format
31786
31859
  });
31787
31860
  this.configureDataForType();
31788
- this.syncDateValues();
31789
31861
  }
31790
31862
 
31791
31863
  disconnectedCallback() {
@@ -31824,7 +31896,6 @@ class BaseInput extends AuroElement$1 {
31824
31896
  this.setCustomHelpTextMessage();
31825
31897
  this.configureAutoFormatting();
31826
31898
  this.configureDataForType();
31827
- this.syncDateValues();
31828
31899
  }
31829
31900
 
31830
31901
  /**
@@ -31968,8 +32039,6 @@ class BaseInput extends AuroElement$1 {
31968
32039
  this.configureDataForType();
31969
32040
  }
31970
32041
 
31971
- this.syncDateValues(changedProperties);
31972
-
31973
32042
  if (changedProperties.has('value')) {
31974
32043
  if (this.value && this.value.length > 0) {
31975
32044
  this.hasValue = true;
@@ -31991,14 +32060,14 @@ class BaseInput extends AuroElement$1 {
31991
32060
 
31992
32061
  if (formattedValue !== this.inputElement.value) {
31993
32062
  this.skipNextProgrammaticInputEvent = true;
31994
- if (this.maskInstance && this.type === 'credit-card') {
32063
+ if (this.maskInstance && this.type !== 'date') {
31995
32064
  // Route through the mask so its _value and el.value stay in lock-step
31996
32065
  // (set value calls updateControl which writes el.value = displayValue).
31997
32066
  // Writing el.value directly leaves the mask thinking displayValue is
31998
- // stale; _saveSelection on the next focus/click then warns. Scoped to
31999
- // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
32000
- // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
32001
- // and flip validity from patternMismatch to tooShort.
32067
+ // stale; _saveSelection on the next focus/click then warns. Date is
32068
+ // excluded because its formattedValue can be raw ISO when the calendar
32069
+ // is invalid, and re-masking through mm/dd/yyyy would truncate it and
32070
+ // flip validity from patternMismatch to tooShort.
32002
32071
  this.maskInstance.value = formattedValue || '';
32003
32072
  } else if (formattedValue) {
32004
32073
  this.inputElement.value = formattedValue;
@@ -32040,120 +32109,65 @@ class BaseInput extends AuroElement$1 {
32040
32109
  }));
32041
32110
  }
32042
32111
 
32043
-
32044
- /**
32045
- * Synchronizes the ISO string values and Date object representations for date-related properties.
32046
- * This keeps the model and display values aligned when either side changes.
32047
- *
32048
- * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
32049
- * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
32050
- * represents a full year/month/day date format.
32051
- *
32052
- * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
32053
- * @returns {void}
32054
- * @private
32055
- */
32056
- syncDateValues(changedProperties = undefined) {
32057
- if (!this.util.isFullDateFormat(this.type, this.format)) {
32058
- return;
32059
- }
32060
-
32061
- this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
32062
- this.syncSingleDateValue(changedProperties, 'minObject', 'min');
32063
- this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
32064
- }
32065
-
32066
- /**
32067
- * Synchronizes one date object/string property pair.
32068
- * @private
32069
- * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
32070
- * @param {string} objectProperty - Date object property name.
32071
- * @param {string} valueProperty - ISO string property name.
32072
- * @returns {void}
32073
- */
32074
- syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
32075
- const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
32076
-
32077
- // objectProperty wins over valueProperty when both changed
32078
- if (objectPropertyChanged && this[objectProperty]) {
32079
- this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
32080
- return;
32081
- }
32082
-
32083
- const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
32084
- if (!valuePropertyChanged) {
32085
- return;
32086
- }
32087
-
32088
- // 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)
32089
- if (
32090
- changedProperties &&
32091
- valueProperty === 'value' &&
32092
- changedProperties.get('value') === undefined &&
32093
- this[objectProperty] instanceof Date &&
32094
- this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
32095
- ) {
32096
- return;
32097
- }
32098
-
32099
- if (dateFormatter.isValidDate(this[valueProperty])) {
32100
- this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
32101
- } else {
32102
- this.setDateObjectProperty(objectProperty, undefined);
32103
- }
32104
- }
32105
-
32106
32112
  /**
32107
32113
  * Sets up IMasks and logic based on auto-formatting requirements.
32108
32114
  * @private
32109
32115
  * @returns {void}
32110
32116
  */
32111
32117
  configureAutoFormatting() {
32112
- // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
32113
- // by _configuringMask above) could otherwise trigger handleInput
32114
- // processCreditCard configureAutoFormatting before the outer call's
32115
- // set value has finished its alignCursor pass.
32118
+ // _configuringMask gates two things: external re-entry into this method
32119
+ // while setup is mid-flight (from property changes that call back here),
32120
+ // and the accept/complete listeners below — both need to ignore the mask
32121
+ // events fired by our own value-restore step.
32116
32122
  if (this._configuringMask) return;
32117
32123
  this._configuringMask = true;
32118
32124
  try {
32125
+ // Destroy any prior mask so IMask can attach fresh under the new format.
32126
+ // Null the reference too — if the new maskOptions.mask is falsy (e.g.
32127
+ // type switched from credit-card to text) the IMask() reassignment
32128
+ // below is skipped, and downstream writes at line ~823 would otherwise
32129
+ // route through the destroyed instance.
32119
32130
  if (this.maskInstance) {
32120
32131
  this.maskInstance.destroy();
32132
+ this.maskInstance = null;
32121
32133
  }
32122
32134
 
32123
- // Pass new format to util
32124
32135
  this.util.updateFormat(this.format);
32125
32136
 
32126
32137
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
32127
32138
 
32128
32139
  if (this.inputElement && maskOptions.mask) {
32129
-
32130
- // Stash and clear any existing value before IMask init.
32131
- // IMask's constructor processes the current input value which requires
32132
- // selection state clearing first avoids that scenario entirely.
32133
- // When the format changes (e.g. locale switch) and we have a valid ISO
32134
- // model value, compute the display string for the NEW format instead of
32135
- // re-using the old display string, which may be invalid in the new mask.
32140
+ // Capture the current display so it can be re-applied after IMask
32141
+ // attaches. The restore at the bottom goes through maskInstance.value
32142
+ // (not inputElement.value directly) so the mask's internal state and
32143
+ // the input's displayed text stay in lock-step.
32136
32144
  let existingValue = this.inputElement.value;
32145
+
32146
+ // Format-change case (e.g. locale switch): existingValue is the OLD
32147
+ // mask's display string and may not parse under the new mask. When
32148
+ // we have a valid date model, rebuild the display from valueObject
32149
+ // (the canonical source) using the new mask's format function.
32137
32150
  if (
32138
32151
  this.util.isFullDateFormat(this.type, this.format) &&
32139
32152
  this.value &&
32140
- dateFormatter.isValidDate(this.value) &&
32141
- this.valueObject instanceof Date &&
32142
- !Number.isNaN(this.valueObject.getTime()) &&
32153
+ this.valueObject &&
32143
32154
  typeof maskOptions.format === 'function'
32144
32155
  ) {
32145
32156
  existingValue = maskOptions.format(this.valueObject);
32146
32157
  }
32147
32158
 
32159
+ // Clear before IMask attaches so the constructor seeds an empty
32160
+ // internal value. Otherwise IMask reads the stale unmasked string
32161
+ // and emits a spurious 'accept' before the restore below runs.
32148
32162
  this.skipNextProgrammaticInputEvent = true;
32149
32163
  this.inputElement.value = '';
32150
32164
 
32151
32165
  this.maskInstance = IMask(this.inputElement, maskOptions);
32152
32166
 
32167
+ // Mask fires 'accept' on every value change, including the restore
32168
+ // step below. Skip events fired during configureAutoFormatting so
32169
+ // we don't overwrite a value the parent just pushed.
32153
32170
  this.maskInstance.on('accept', () => {
32154
- // Suppress propagation during configureAutoFormatting's own value-restoration
32155
- // (line below) — the mask emits 'accept' on every value-set, including ours,
32156
- // and we don't want to overwrite a value the parent just pushed.
32157
32171
  if (this._configuringMask) return;
32158
32172
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
32159
32173
  if (this.type === "date") {
@@ -32161,6 +32175,8 @@ class BaseInput extends AuroElement$1 {
32161
32175
  }
32162
32176
  });
32163
32177
 
32178
+ // Mask fires 'complete' on the restore step below for any value that
32179
+ // happens to be a complete match. Same setup-suppression as 'accept'.
32164
32180
  this.maskInstance.on('complete', () => {
32165
32181
  if (this._configuringMask) return;
32166
32182
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -32169,7 +32185,9 @@ class BaseInput extends AuroElement$1 {
32169
32185
  }
32170
32186
  });
32171
32187
 
32172
- // Restore the stashed value through IMask so it's properly masked
32188
+ // Write existingValue through the mask (not the input directly) so
32189
+ // the mask reformats it under the new rules and keeps its internal
32190
+ // _value aligned with the input's displayed text.
32173
32191
  if (existingValue) {
32174
32192
  this.maskInstance.value = existingValue;
32175
32193
  }
@@ -32263,9 +32281,9 @@ class BaseInput extends AuroElement$1 {
32263
32281
  // the gated types currently support it, since the list is a public
32264
32282
  // property a consumer could mutate.
32265
32283
  if (this.setSelectionInputTypes.includes(this.type)) {
32266
- let selectionStart;
32284
+ let selectionStart = null;
32267
32285
  try {
32268
- selectionStart = this.inputElement.selectionStart;
32286
+ ({ selectionStart } = this.inputElement);
32269
32287
  } catch (error) { // eslint-disable-line no-unused-vars
32270
32288
  return;
32271
32289
  }
@@ -32369,7 +32387,6 @@ class BaseInput extends AuroElement$1 {
32369
32387
  */
32370
32388
  reset() {
32371
32389
  this.value = undefined;
32372
- this.setDateObjectProperty('valueObject', undefined);
32373
32390
  this.validation.reset(this);
32374
32391
  }
32375
32392
 
@@ -32378,7 +32395,6 @@ class BaseInput extends AuroElement$1 {
32378
32395
  */
32379
32396
  clear() {
32380
32397
  this.value = undefined;
32381
- this.setDateObjectProperty('valueObject', undefined);
32382
32398
  }
32383
32399
 
32384
32400
  /**
@@ -32907,7 +32923,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
32907
32923
  }
32908
32924
  };
32909
32925
 
32910
- var formkitVersion = '202606292156';
32926
+ var formkitVersion = '202607011722';
32911
32927
 
32912
32928
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32913
32929
  // See LICENSE in the project root for license information.