@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
@@ -522,8 +522,21 @@ class AuroFormValidation {
522
522
  return;
523
523
  }
524
524
 
525
- // Validate that the date passed was the correct format and is a valid date
525
+ // Validate that the date passed was the correct format and is a valid date.
526
+ // For partial date formats, valueObject is never populated; validate them directly.
526
527
  if (elem.value && !elem.valueObject) {
528
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
529
+
530
+ if (isPartialDateFormat) {
531
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
532
+ elem.validity = 'patternMismatch';
533
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
534
+ }
535
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
536
+ return;
537
+ }
538
+
539
+ // Full date format with no valueObject means the value is not a valid calendar date.
527
540
  elem.validity = 'patternMismatch';
528
541
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
529
542
  return;
@@ -1101,7 +1114,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
1101
1114
  }
1102
1115
  };
1103
1116
 
1104
- var formkitVersion$1 = '202607011652';
1117
+ var formkitVersion$1 = '202607011914';
1105
1118
 
1106
1119
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1107
1120
  // See LICENSE in the project root for license information.
@@ -5447,7 +5460,7 @@ class AuroHelpText extends i$2 {
5447
5460
  }
5448
5461
  }
5449
5462
 
5450
- var formkitVersion = '202607011652';
5463
+ var formkitVersion = '202607011914';
5451
5464
 
5452
5465
  let AuroElement$1 = class AuroElement extends i$2 {
5453
5466
  static get properties() {
@@ -6199,6 +6212,23 @@ class AuroDropdown extends AuroElement$1 {
6199
6212
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
6200
6213
  this.trigger.focus();
6201
6214
  }
6215
+
6216
+
6217
+ if (!this.isPopoverVisible) {
6218
+ // wait til the bib gets fully closed and rendered
6219
+ setTimeout(() => {
6220
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
6221
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
6222
+ if (this.isPopoverVisible ||
6223
+ // eslint-disable-next-line no-extra-parens
6224
+ (!this.bibContent?.matches(':focus-within') &&
6225
+ document.activeElement !== document.body)) {
6226
+ return;
6227
+ }
6228
+ // Restore focus to the trigger.
6229
+ this.trigger.focus();
6230
+ });
6231
+ }
6202
6232
  }
6203
6233
 
6204
6234
  firstUpdated() {
@@ -478,8 +478,21 @@ class AuroFormValidation {
478
478
  return;
479
479
  }
480
480
 
481
- // Validate that the date passed was the correct format and is a valid date
481
+ // Validate that the date passed was the correct format and is a valid date.
482
+ // For partial date formats, valueObject is never populated; validate them directly.
482
483
  if (elem.value && !elem.valueObject) {
484
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
485
+
486
+ if (isPartialDateFormat) {
487
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
488
+ elem.validity = 'patternMismatch';
489
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
490
+ }
491
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
492
+ return;
493
+ }
494
+
495
+ // Full date format with no valueObject means the value is not a valid calendar date.
483
496
  elem.validity = 'patternMismatch';
484
497
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
485
498
  return;
@@ -1051,7 +1064,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
1051
1064
  }
1052
1065
  };
1053
1066
 
1054
- var formkitVersion$1 = '202607011652';
1067
+ var formkitVersion$1 = '202607011914';
1055
1068
 
1056
1069
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1057
1070
  // See LICENSE in the project root for license information.
@@ -5379,7 +5392,7 @@ class AuroHelpText extends LitElement {
5379
5392
  }
5380
5393
  }
5381
5394
 
5382
- var formkitVersion = '202607011652';
5395
+ var formkitVersion = '202607011914';
5383
5396
 
5384
5397
  let AuroElement$1 = class AuroElement extends LitElement {
5385
5398
  static get properties() {
@@ -6131,6 +6144,23 @@ class AuroDropdown extends AuroElement$1 {
6131
6144
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
6132
6145
  this.trigger.focus();
6133
6146
  }
6147
+
6148
+
6149
+ if (!this.isPopoverVisible) {
6150
+ // wait til the bib gets fully closed and rendered
6151
+ setTimeout(() => {
6152
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
6153
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
6154
+ if (this.isPopoverVisible ||
6155
+ // eslint-disable-next-line no-extra-parens
6156
+ (!this.bibContent?.matches(':focus-within') &&
6157
+ document.activeElement !== document.body)) {
6158
+ return;
6159
+ }
6160
+ // Restore focus to the trigger.
6161
+ this.trigger.focus();
6162
+ });
6163
+ }
6134
6164
  }
6135
6165
 
6136
6166
  firstUpdated() {
@@ -478,8 +478,21 @@ class AuroFormValidation {
478
478
  return;
479
479
  }
480
480
 
481
- // Validate that the date passed was the correct format and is a valid date
481
+ // Validate that the date passed was the correct format and is a valid date.
482
+ // For partial date formats, valueObject is never populated; validate them directly.
482
483
  if (elem.value && !elem.valueObject) {
484
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
485
+
486
+ if (isPartialDateFormat) {
487
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
488
+ elem.validity = 'patternMismatch';
489
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
490
+ }
491
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
492
+ return;
493
+ }
494
+
495
+ // Full date format with no valueObject means the value is not a valid calendar date.
483
496
  elem.validity = 'patternMismatch';
484
497
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
485
498
  return;
@@ -1051,7 +1064,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
1051
1064
  }
1052
1065
  };
1053
1066
 
1054
- var formkitVersion$1 = '202607011652';
1067
+ var formkitVersion$1 = '202607011914';
1055
1068
 
1056
1069
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1057
1070
  // See LICENSE in the project root for license information.
@@ -5379,7 +5392,7 @@ class AuroHelpText extends LitElement {
5379
5392
  }
5380
5393
  }
5381
5394
 
5382
- var formkitVersion = '202607011652';
5395
+ var formkitVersion = '202607011914';
5383
5396
 
5384
5397
  let AuroElement$1 = class AuroElement extends LitElement {
5385
5398
  static get properties() {
@@ -6131,6 +6144,23 @@ class AuroDropdown extends AuroElement$1 {
6131
6144
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
6132
6145
  this.trigger.focus();
6133
6146
  }
6147
+
6148
+
6149
+ if (!this.isPopoverVisible) {
6150
+ // wait til the bib gets fully closed and rendered
6151
+ setTimeout(() => {
6152
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
6153
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
6154
+ if (this.isPopoverVisible ||
6155
+ // eslint-disable-next-line no-extra-parens
6156
+ (!this.bibContent?.matches(':focus-within') &&
6157
+ document.activeElement !== document.body)) {
6158
+ return;
6159
+ }
6160
+ // Restore focus to the trigger.
6161
+ this.trigger.focus();
6162
+ });
6163
+ }
6134
6164
  }
6135
6165
 
6136
6166
  firstUpdated() {
@@ -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.