@aurodesignsystem-dev/auro-formkit 0.0.0-pr1518.0 → 0.0.0-pr1519.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/components/checkbox/demo/customize.min.js +15 -2
  2. package/components/checkbox/demo/getting-started.min.js +15 -2
  3. package/components/checkbox/demo/index.min.js +15 -2
  4. package/components/checkbox/dist/index.js +15 -2
  5. package/components/checkbox/dist/registered.js +15 -2
  6. package/components/combobox/demo/customize.min.js +105 -10
  7. package/components/combobox/demo/getting-started.min.js +105 -10
  8. package/components/combobox/demo/index.min.js +105 -10
  9. package/components/combobox/dist/index.js +105 -10
  10. package/components/combobox/dist/registered.js +105 -10
  11. package/components/counter/demo/customize.min.js +33 -3
  12. package/components/counter/demo/index.min.js +33 -3
  13. package/components/counter/dist/index.js +33 -3
  14. package/components/counter/dist/registered.js +33 -3
  15. package/components/datepicker/demo/customize.min.js +153 -13
  16. package/components/datepicker/demo/index.min.js +153 -13
  17. package/components/datepicker/dist/index.js +153 -13
  18. package/components/datepicker/dist/registered.js +153 -13
  19. package/components/dropdown/demo/customize.min.js +18 -1
  20. package/components/dropdown/demo/getting-started.min.js +18 -1
  21. package/components/dropdown/demo/index.min.js +18 -1
  22. package/components/dropdown/dist/index.js +18 -1
  23. package/components/dropdown/dist/registered.js +18 -1
  24. package/components/form/demo/customize.min.js +441 -40
  25. package/components/form/demo/getting-started.min.js +441 -40
  26. package/components/form/demo/index.min.js +441 -40
  27. package/components/form/demo/registerDemoDeps.min.js +441 -40
  28. package/components/input/demo/api.md +58 -57
  29. package/components/input/demo/customize.min.js +72 -7
  30. package/components/input/demo/getting-started.min.js +72 -7
  31. package/components/input/demo/index.min.js +72 -7
  32. package/components/input/dist/base-input.d.ts +9 -3
  33. package/components/input/dist/index.js +72 -7
  34. package/components/input/dist/registered.js +72 -7
  35. package/components/input/dist/utilities.d.ts +9 -0
  36. package/components/radio/demo/customize.min.js +15 -2
  37. package/components/radio/demo/getting-started.min.js +15 -2
  38. package/components/radio/demo/index.min.js +15 -2
  39. package/components/radio/dist/index.js +15 -2
  40. package/components/radio/dist/registered.js +15 -2
  41. package/components/select/demo/customize.min.js +48 -3
  42. package/components/select/demo/getting-started.min.js +48 -3
  43. package/components/select/demo/index.min.js +48 -3
  44. package/components/select/dist/index.js +48 -3
  45. package/components/select/dist/registered.js +48 -3
  46. package/custom-elements.json +78 -8
  47. package/package.json +1 -1
@@ -559,8 +559,21 @@ let AuroFormValidation$1 = class AuroFormValidation {
559
559
  return;
560
560
  }
561
561
 
562
- // Validate that the date passed was the correct format and is a valid date
562
+ // Validate that the date passed was the correct format and is a valid date.
563
+ // For partial date formats, valueObject is never populated; validate them directly.
563
564
  if (elem.value && !elem.valueObject) {
565
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
566
+
567
+ if (isPartialDateFormat) {
568
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
569
+ elem.validity = 'patternMismatch';
570
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
571
+ }
572
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
573
+ return;
574
+ }
575
+
576
+ // Full date format with no valueObject means the value is not a valid calendar date.
564
577
  elem.validity = 'patternMismatch';
565
578
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
566
579
  return;
@@ -10413,10 +10426,11 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10413
10426
  const dateFormat = format || this.overrideFormat || pattern || 'mm/dd/yyyy';
10414
10427
 
10415
10428
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
10416
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
10429
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
10430
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
10417
10431
  return {
10418
10432
  mask: IMask$1.MaskedRange,
10419
- from: 1,
10433
+ from: fromValue,
10420
10434
  to: maxValue,
10421
10435
  lazy: true,
10422
10436
  placeholderChar: '',
@@ -10424,7 +10438,8 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10424
10438
  return value.toString().padStart(dateFormat.length, '0');
10425
10439
  },
10426
10440
  parse(str) {
10427
- return parseInt(str) || null;
10441
+ const num = parseInt(str, 10);
10442
+ return isNaN(num) ? null : num;
10428
10443
  }
10429
10444
  };
10430
10445
  }
@@ -10488,6 +10503,49 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10488
10503
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
10489
10504
  }
10490
10505
 
10506
+ /**
10507
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
10508
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
10509
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
10510
+ * @param {string} value - The user-facing display value.
10511
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
10512
+ * @returns {boolean}
10513
+ */
10514
+ isValidPartialDate(value, format) {
10515
+ if (!value || !format) {
10516
+ return false;
10517
+ }
10518
+ const normalizedFormat = format.toLowerCase();
10519
+
10520
+ if (normalizedFormat === 'dd') {
10521
+ const num = Number(value);
10522
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
10523
+ }
10524
+ if (normalizedFormat === 'yy') {
10525
+ const num = Number(value);
10526
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
10527
+ }
10528
+ if (normalizedFormat === 'yyyy') {
10529
+ const num = Number(value);
10530
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
10531
+ }
10532
+
10533
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
10534
+ // Use the 1st of the current month as the reference so that formats
10535
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
10536
+ const referenceDate = new Date();
10537
+ referenceDate.setDate(1);
10538
+ const parsed = parse$1(value, dateFnsMask, referenceDate);
10539
+ if (!isValid$1(parsed) || format$1(parsed, dateFnsMask) !== value) {
10540
+ return false;
10541
+ }
10542
+ if (normalizedFormat.includes('yyyy')) {
10543
+ const year = parsed.getFullYear();
10544
+ return year >= 1900 && year <= 2100;
10545
+ }
10546
+ return true;
10547
+ }
10548
+
10491
10549
  /**
10492
10550
  * Converts a display string to its model value.
10493
10551
  * For full date formats, converts the display string to an ISO date string.
@@ -13592,7 +13650,7 @@ class AuroBibtemplate extends i$1 {
13592
13650
  }
13593
13651
  }
13594
13652
 
13595
- var formkitVersion$2 = '202607011652';
13653
+ var formkitVersion$2 = '202607011914';
13596
13654
 
13597
13655
  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=i$5`${s$5(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$4 = 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$3=i$3`: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}
13598
13656
  `,u$6=i$3`.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}}
@@ -19368,7 +19426,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
19368
19426
  }
19369
19427
  };
19370
19428
 
19371
- var formkitVersion$1 = '202607011652';
19429
+ var formkitVersion$1 = '202607011914';
19372
19430
 
19373
19431
  let AuroElement$2 = class AuroElement extends i$1 {
19374
19432
  static get properties() {
@@ -20120,6 +20178,23 @@ class AuroDropdown extends AuroElement$2 {
20120
20178
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
20121
20179
  this.trigger.focus();
20122
20180
  }
20181
+
20182
+
20183
+ if (!this.isPopoverVisible) {
20184
+ // wait til the bib gets fully closed and rendered
20185
+ setTimeout(() => {
20186
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
20187
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
20188
+ if (this.isPopoverVisible ||
20189
+ // eslint-disable-next-line no-extra-parens
20190
+ (!this.bibContent?.matches(':focus-within') &&
20191
+ document.activeElement !== document.body)) {
20192
+ return;
20193
+ }
20194
+ // Restore focus to the trigger.
20195
+ this.trigger.focus();
20196
+ });
20197
+ }
20123
20198
  }
20124
20199
 
20125
20200
  firstUpdated() {
@@ -25052,8 +25127,21 @@ class AuroFormValidation {
25052
25127
  return;
25053
25128
  }
25054
25129
 
25055
- // Validate that the date passed was the correct format and is a valid date
25130
+ // Validate that the date passed was the correct format and is a valid date.
25131
+ // For partial date formats, valueObject is never populated; validate them directly.
25056
25132
  if (elem.value && !elem.valueObject) {
25133
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
25134
+
25135
+ if (isPartialDateFormat) {
25136
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
25137
+ elem.validity = 'patternMismatch';
25138
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
25139
+ }
25140
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
25141
+ return;
25142
+ }
25143
+
25144
+ // Full date format with no valueObject means the value is not a valid calendar date.
25057
25145
  elem.validity = 'patternMismatch';
25058
25146
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
25059
25147
  return;
@@ -30983,10 +31071,11 @@ class AuroInputUtilities {
30983
31071
  const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
30984
31072
 
30985
31073
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
30986
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
31074
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
31075
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
30987
31076
  return {
30988
31077
  mask: IMask.MaskedRange,
30989
- from: 1,
31078
+ from: fromValue,
30990
31079
  to: maxValue,
30991
31080
  lazy: true,
30992
31081
  placeholderChar: '',
@@ -30994,7 +31083,8 @@ class AuroInputUtilities {
30994
31083
  return value.toString().padStart(dateFormat.length, '0');
30995
31084
  },
30996
31085
  parse(str) {
30997
- return parseInt(str) || null;
31086
+ const num = parseInt(str, 10);
31087
+ return isNaN(num) ? null : num;
30998
31088
  }
30999
31089
  };
31000
31090
  }
@@ -31058,6 +31148,49 @@ class AuroInputUtilities {
31058
31148
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
31059
31149
  }
31060
31150
 
31151
+ /**
31152
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
31153
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
31154
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
31155
+ * @param {string} value - The user-facing display value.
31156
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
31157
+ * @returns {boolean}
31158
+ */
31159
+ isValidPartialDate(value, format$1) {
31160
+ if (!value || !format$1) {
31161
+ return false;
31162
+ }
31163
+ const normalizedFormat = format$1.toLowerCase();
31164
+
31165
+ if (normalizedFormat === 'dd') {
31166
+ const num = Number(value);
31167
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
31168
+ }
31169
+ if (normalizedFormat === 'yy') {
31170
+ const num = Number(value);
31171
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
31172
+ }
31173
+ if (normalizedFormat === 'yyyy') {
31174
+ const num = Number(value);
31175
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
31176
+ }
31177
+
31178
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
31179
+ // Use the 1st of the current month as the reference so that formats
31180
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
31181
+ const referenceDate = new Date();
31182
+ referenceDate.setDate(1);
31183
+ const parsed = parse(value, dateFnsMask, referenceDate);
31184
+ if (!isValid(parsed) || format(parsed, dateFnsMask) !== value) {
31185
+ return false;
31186
+ }
31187
+ if (normalizedFormat.includes('yyyy')) {
31188
+ const year = parsed.getFullYear();
31189
+ return year >= 1900 && year <= 2100;
31190
+ }
31191
+ return true;
31192
+ }
31193
+
31061
31194
  /**
31062
31195
  * Converts a display string to its model value.
31063
31196
  * For full date formats, converts the display string to an ISO date string.
@@ -31677,6 +31810,13 @@ class BaseInput extends AuroElement$1 {
31677
31810
  type: String
31678
31811
  },
31679
31812
 
31813
+ /**
31814
+ * Custom help text message to display when validity = `patternMismatch`.
31815
+ */
31816
+ setCustomValidityPatternMismatch: {
31817
+ type: String
31818
+ },
31819
+
31680
31820
  /**
31681
31821
  * Custom help text message to display when validity = `rangeOverflow`.
31682
31822
  */
@@ -31747,7 +31887,7 @@ class BaseInput extends AuroElement$1 {
31747
31887
 
31748
31888
  /**
31749
31889
  * Populates the `type` attribute on the input.
31750
- * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
31890
+ * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
31751
31891
  * @default 'text'
31752
31892
  */
31753
31893
  type: {
@@ -31772,7 +31912,7 @@ class BaseInput extends AuroElement$1 {
31772
31912
 
31773
31913
  /**
31774
31914
  * Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
31775
- * The format for this property should be ISO for `date` type inputs.
31915
+ * For `date` type inputs using a full date format (year/month/day), the `value` should be ISO (YYYY-MM-DD). Partial date formats use the display format.
31776
31916
  */
31777
31917
  value: {
31778
31918
  type: String
@@ -32895,7 +33035,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
32895
33035
  }
32896
33036
  };
32897
33037
 
32898
- var formkitVersion = '202607011652';
33038
+ var formkitVersion = '202607011914';
32899
33039
 
32900
33040
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32901
33041
  // See LICENSE in the project root for license information.
@@ -542,8 +542,21 @@ 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) {
548
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
549
+
550
+ if (isPartialDateFormat) {
551
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
552
+ elem.validity = 'patternMismatch';
553
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
554
+ }
555
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
556
+ return;
557
+ }
558
+
559
+ // Full date format with no valueObject means the value is not a valid calendar date.
547
560
  elem.validity = 'patternMismatch';
548
561
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
549
562
  return;
@@ -10396,10 +10409,11 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10396
10409
  const dateFormat = format || this.overrideFormat || pattern || 'mm/dd/yyyy';
10397
10410
 
10398
10411
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
10399
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
10412
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
10413
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
10400
10414
  return {
10401
10415
  mask: IMask$1.MaskedRange,
10402
- from: 1,
10416
+ from: fromValue,
10403
10417
  to: maxValue,
10404
10418
  lazy: true,
10405
10419
  placeholderChar: '',
@@ -10407,7 +10421,8 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10407
10421
  return value.toString().padStart(dateFormat.length, '0');
10408
10422
  },
10409
10423
  parse(str) {
10410
- return parseInt(str) || null;
10424
+ const num = parseInt(str, 10);
10425
+ return isNaN(num) ? null : num;
10411
10426
  }
10412
10427
  };
10413
10428
  }
@@ -10471,6 +10486,49 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10471
10486
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
10472
10487
  }
10473
10488
 
10489
+ /**
10490
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
10491
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
10492
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
10493
+ * @param {string} value - The user-facing display value.
10494
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
10495
+ * @returns {boolean}
10496
+ */
10497
+ isValidPartialDate(value, format) {
10498
+ if (!value || !format) {
10499
+ return false;
10500
+ }
10501
+ const normalizedFormat = format.toLowerCase();
10502
+
10503
+ if (normalizedFormat === 'dd') {
10504
+ const num = Number(value);
10505
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
10506
+ }
10507
+ if (normalizedFormat === 'yy') {
10508
+ const num = Number(value);
10509
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
10510
+ }
10511
+ if (normalizedFormat === 'yyyy') {
10512
+ const num = Number(value);
10513
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
10514
+ }
10515
+
10516
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
10517
+ // Use the 1st of the current month as the reference so that formats
10518
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
10519
+ const referenceDate = new Date();
10520
+ referenceDate.setDate(1);
10521
+ const parsed = parse$1(value, dateFnsMask, referenceDate);
10522
+ if (!isValid$1(parsed) || format$1(parsed, dateFnsMask) !== value) {
10523
+ return false;
10524
+ }
10525
+ if (normalizedFormat.includes('yyyy')) {
10526
+ const year = parsed.getFullYear();
10527
+ return year >= 1900 && year <= 2100;
10528
+ }
10529
+ return true;
10530
+ }
10531
+
10474
10532
  /**
10475
10533
  * Converts a display string to its model value.
10476
10534
  * For full date formats, converts the display string to an ISO date string.
@@ -13544,7 +13602,7 @@ class AuroBibtemplate extends LitElement {
13544
13602
  }
13545
13603
  }
13546
13604
 
13547
- var formkitVersion$2 = '202607011652';
13605
+ var formkitVersion$2 = '202607011914';
13548
13606
 
13549
13607
  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}
13550
13608
  `,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}}
@@ -19296,7 +19354,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
19296
19354
  }
19297
19355
  };
19298
19356
 
19299
- var formkitVersion$1 = '202607011652';
19357
+ var formkitVersion$1 = '202607011914';
19300
19358
 
19301
19359
  let AuroElement$2 = class AuroElement extends LitElement {
19302
19360
  static get properties() {
@@ -20048,6 +20106,23 @@ class AuroDropdown extends AuroElement$2 {
20048
20106
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
20049
20107
  this.trigger.focus();
20050
20108
  }
20109
+
20110
+
20111
+ if (!this.isPopoverVisible) {
20112
+ // wait til the bib gets fully closed and rendered
20113
+ setTimeout(() => {
20114
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
20115
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
20116
+ if (this.isPopoverVisible ||
20117
+ // eslint-disable-next-line no-extra-parens
20118
+ (!this.bibContent?.matches(':focus-within') &&
20119
+ document.activeElement !== document.body)) {
20120
+ return;
20121
+ }
20122
+ // Restore focus to the trigger.
20123
+ this.trigger.focus();
20124
+ });
20125
+ }
20051
20126
  }
20052
20127
 
20053
20128
  firstUpdated() {
@@ -24973,8 +25048,21 @@ class AuroFormValidation {
24973
25048
  return;
24974
25049
  }
24975
25050
 
24976
- // Validate that the date passed was the correct format and is a valid date
25051
+ // Validate that the date passed was the correct format and is a valid date.
25052
+ // For partial date formats, valueObject is never populated; validate them directly.
24977
25053
  if (elem.value && !elem.valueObject) {
25054
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
25055
+
25056
+ if (isPartialDateFormat) {
25057
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
25058
+ elem.validity = 'patternMismatch';
25059
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
25060
+ }
25061
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
25062
+ return;
25063
+ }
25064
+
25065
+ // Full date format with no valueObject means the value is not a valid calendar date.
24978
25066
  elem.validity = 'patternMismatch';
24979
25067
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
24980
25068
  return;
@@ -30904,10 +30992,11 @@ class AuroInputUtilities {
30904
30992
  const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
30905
30993
 
30906
30994
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
30907
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
30995
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
30996
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
30908
30997
  return {
30909
30998
  mask: IMask.MaskedRange,
30910
- from: 1,
30999
+ from: fromValue,
30911
31000
  to: maxValue,
30912
31001
  lazy: true,
30913
31002
  placeholderChar: '',
@@ -30915,7 +31004,8 @@ class AuroInputUtilities {
30915
31004
  return value.toString().padStart(dateFormat.length, '0');
30916
31005
  },
30917
31006
  parse(str) {
30918
- return parseInt(str) || null;
31007
+ const num = parseInt(str, 10);
31008
+ return isNaN(num) ? null : num;
30919
31009
  }
30920
31010
  };
30921
31011
  }
@@ -30979,6 +31069,49 @@ class AuroInputUtilities {
30979
31069
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
30980
31070
  }
30981
31071
 
31072
+ /**
31073
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
31074
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
31075
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
31076
+ * @param {string} value - The user-facing display value.
31077
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
31078
+ * @returns {boolean}
31079
+ */
31080
+ isValidPartialDate(value, format$1) {
31081
+ if (!value || !format$1) {
31082
+ return false;
31083
+ }
31084
+ const normalizedFormat = format$1.toLowerCase();
31085
+
31086
+ if (normalizedFormat === 'dd') {
31087
+ const num = Number(value);
31088
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
31089
+ }
31090
+ if (normalizedFormat === 'yy') {
31091
+ const num = Number(value);
31092
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
31093
+ }
31094
+ if (normalizedFormat === 'yyyy') {
31095
+ const num = Number(value);
31096
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
31097
+ }
31098
+
31099
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
31100
+ // Use the 1st of the current month as the reference so that formats
31101
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
31102
+ const referenceDate = new Date();
31103
+ referenceDate.setDate(1);
31104
+ const parsed = parse(value, dateFnsMask, referenceDate);
31105
+ if (!isValid(parsed) || format(parsed, dateFnsMask) !== value) {
31106
+ return false;
31107
+ }
31108
+ if (normalizedFormat.includes('yyyy')) {
31109
+ const year = parsed.getFullYear();
31110
+ return year >= 1900 && year <= 2100;
31111
+ }
31112
+ return true;
31113
+ }
31114
+
30982
31115
  /**
30983
31116
  * Converts a display string to its model value.
30984
31117
  * For full date formats, converts the display string to an ISO date string.
@@ -31598,6 +31731,13 @@ class BaseInput extends AuroElement$1 {
31598
31731
  type: String
31599
31732
  },
31600
31733
 
31734
+ /**
31735
+ * Custom help text message to display when validity = `patternMismatch`.
31736
+ */
31737
+ setCustomValidityPatternMismatch: {
31738
+ type: String
31739
+ },
31740
+
31601
31741
  /**
31602
31742
  * Custom help text message to display when validity = `rangeOverflow`.
31603
31743
  */
@@ -31668,7 +31808,7 @@ class BaseInput extends AuroElement$1 {
31668
31808
 
31669
31809
  /**
31670
31810
  * Populates the `type` attribute on the input.
31671
- * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
31811
+ * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
31672
31812
  * @default 'text'
31673
31813
  */
31674
31814
  type: {
@@ -31693,7 +31833,7 @@ class BaseInput extends AuroElement$1 {
31693
31833
 
31694
31834
  /**
31695
31835
  * Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
31696
- * The format for this property should be ISO for `date` type inputs.
31836
+ * For `date` type inputs using a full date format (year/month/day), the `value` should be ISO (YYYY-MM-DD). Partial date formats use the display format.
31697
31837
  */
31698
31838
  value: {
31699
31839
  type: String
@@ -32816,7 +32956,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
32816
32956
  }
32817
32957
  };
32818
32958
 
32819
- var formkitVersion = '202607011652';
32959
+ var formkitVersion = '202607011914';
32820
32960
 
32821
32961
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32822
32962
  // See LICENSE in the project root for license information.