@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
@@ -5455,8 +5455,21 @@ let AuroFormValidation$7 = class AuroFormValidation {
5455
5455
  return;
5456
5456
  }
5457
5457
 
5458
- // Validate that the date passed was the correct format and is a valid date
5458
+ // Validate that the date passed was the correct format and is a valid date.
5459
+ // For partial date formats, valueObject is never populated; validate them directly.
5459
5460
  if (elem.value && !elem.valueObject) {
5461
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
5462
+
5463
+ if (isPartialDateFormat) {
5464
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
5465
+ elem.validity = 'patternMismatch';
5466
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
5467
+ }
5468
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
5469
+ return;
5470
+ }
5471
+
5472
+ // Full date format with no valueObject means the value is not a valid calendar date.
5460
5473
  elem.validity = 'patternMismatch';
5461
5474
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
5462
5475
  return;
@@ -11386,10 +11399,11 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
11386
11399
  const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
11387
11400
 
11388
11401
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
11389
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
11402
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
11403
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
11390
11404
  return {
11391
11405
  mask: IMask$3.MaskedRange,
11392
- from: 1,
11406
+ from: fromValue,
11393
11407
  to: maxValue,
11394
11408
  lazy: true,
11395
11409
  placeholderChar: '',
@@ -11397,7 +11411,8 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
11397
11411
  return value.toString().padStart(dateFormat.length, '0');
11398
11412
  },
11399
11413
  parse(str) {
11400
- return parseInt(str) || null;
11414
+ const num = parseInt(str, 10);
11415
+ return isNaN(num) ? null : num;
11401
11416
  }
11402
11417
  };
11403
11418
  }
@@ -11461,6 +11476,49 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
11461
11476
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
11462
11477
  }
11463
11478
 
11479
+ /**
11480
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
11481
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
11482
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
11483
+ * @param {string} value - The user-facing display value.
11484
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
11485
+ * @returns {boolean}
11486
+ */
11487
+ isValidPartialDate(value, format$1) {
11488
+ if (!value || !format$1) {
11489
+ return false;
11490
+ }
11491
+ const normalizedFormat = format$1.toLowerCase();
11492
+
11493
+ if (normalizedFormat === 'dd') {
11494
+ const num = Number(value);
11495
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
11496
+ }
11497
+ if (normalizedFormat === 'yy') {
11498
+ const num = Number(value);
11499
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
11500
+ }
11501
+ if (normalizedFormat === 'yyyy') {
11502
+ const num = Number(value);
11503
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
11504
+ }
11505
+
11506
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
11507
+ // Use the 1st of the current month as the reference so that formats
11508
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
11509
+ const referenceDate = new Date();
11510
+ referenceDate.setDate(1);
11511
+ const parsed = parse$3(value, dateFnsMask, referenceDate);
11512
+ if (!isValid$3(parsed) || format$3(parsed, dateFnsMask) !== value) {
11513
+ return false;
11514
+ }
11515
+ if (normalizedFormat.includes('yyyy')) {
11516
+ const year = parsed.getFullYear();
11517
+ return year >= 1900 && year <= 2100;
11518
+ }
11519
+ return true;
11520
+ }
11521
+
11464
11522
  /**
11465
11523
  * Converts a display string to its model value.
11466
11524
  * For full date formats, converts the display string to an ISO date string.
@@ -12080,6 +12138,13 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12080
12138
  type: String
12081
12139
  },
12082
12140
 
12141
+ /**
12142
+ * Custom help text message to display when validity = `patternMismatch`.
12143
+ */
12144
+ setCustomValidityPatternMismatch: {
12145
+ type: String
12146
+ },
12147
+
12083
12148
  /**
12084
12149
  * Custom help text message to display when validity = `rangeOverflow`.
12085
12150
  */
@@ -12150,7 +12215,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12150
12215
 
12151
12216
  /**
12152
12217
  * Populates the `type` attribute on the input.
12153
- * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
12218
+ * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
12154
12219
  * @default 'text'
12155
12220
  */
12156
12221
  type: {
@@ -12175,7 +12240,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12175
12240
 
12176
12241
  /**
12177
12242
  * Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
12178
- * The format for this property should be ISO for `date` type inputs.
12243
+ * 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.
12179
12244
  */
12180
12245
  value: {
12181
12246
  type: String
@@ -13298,7 +13363,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13298
13363
  }
13299
13364
  };
13300
13365
 
13301
- var formkitVersion$8 = '202607011652';
13366
+ var formkitVersion$8 = '202607011914';
13302
13367
 
13303
13368
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13304
13369
  // See LICENSE in the project root for license information.
@@ -14573,8 +14638,21 @@ let AuroFormValidation$1$1 = class AuroFormValidation {
14573
14638
  return;
14574
14639
  }
14575
14640
 
14576
- // Validate that the date passed was the correct format and is a valid date
14641
+ // Validate that the date passed was the correct format and is a valid date.
14642
+ // For partial date formats, valueObject is never populated; validate them directly.
14577
14643
  if (elem.value && !elem.valueObject) {
14644
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
14645
+
14646
+ if (isPartialDateFormat) {
14647
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
14648
+ elem.validity = 'patternMismatch';
14649
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
14650
+ }
14651
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
14652
+ return;
14653
+ }
14654
+
14655
+ // Full date format with no valueObject means the value is not a valid calendar date.
14578
14656
  elem.validity = 'patternMismatch';
14579
14657
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
14580
14658
  return;
@@ -24427,10 +24505,11 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
24427
24505
  const dateFormat = format || this.overrideFormat || pattern || 'mm/dd/yyyy';
24428
24506
 
24429
24507
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
24430
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
24508
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
24509
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
24431
24510
  return {
24432
24511
  mask: IMask$1.MaskedRange,
24433
- from: 1,
24512
+ from: fromValue,
24434
24513
  to: maxValue,
24435
24514
  lazy: true,
24436
24515
  placeholderChar: '',
@@ -24438,7 +24517,8 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
24438
24517
  return value.toString().padStart(dateFormat.length, '0');
24439
24518
  },
24440
24519
  parse(str) {
24441
- return parseInt(str) || null;
24520
+ const num = parseInt(str, 10);
24521
+ return isNaN(num) ? null : num;
24442
24522
  }
24443
24523
  };
24444
24524
  }
@@ -24502,6 +24582,49 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
24502
24582
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
24503
24583
  }
24504
24584
 
24585
+ /**
24586
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
24587
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
24588
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
24589
+ * @param {string} value - The user-facing display value.
24590
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
24591
+ * @returns {boolean}
24592
+ */
24593
+ isValidPartialDate(value, format) {
24594
+ if (!value || !format) {
24595
+ return false;
24596
+ }
24597
+ const normalizedFormat = format.toLowerCase();
24598
+
24599
+ if (normalizedFormat === 'dd') {
24600
+ const num = Number(value);
24601
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
24602
+ }
24603
+ if (normalizedFormat === 'yy') {
24604
+ const num = Number(value);
24605
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
24606
+ }
24607
+ if (normalizedFormat === 'yyyy') {
24608
+ const num = Number(value);
24609
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
24610
+ }
24611
+
24612
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
24613
+ // Use the 1st of the current month as the reference so that formats
24614
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
24615
+ const referenceDate = new Date();
24616
+ referenceDate.setDate(1);
24617
+ const parsed = parse$1(value, dateFnsMask, referenceDate);
24618
+ if (!isValid$1(parsed) || format$1(parsed, dateFnsMask) !== value) {
24619
+ return false;
24620
+ }
24621
+ if (normalizedFormat.includes('yyyy')) {
24622
+ const year = parsed.getFullYear();
24623
+ return year >= 1900 && year <= 2100;
24624
+ }
24625
+ return true;
24626
+ }
24627
+
24505
24628
  /**
24506
24629
  * Converts a display string to its model value.
24507
24630
  * For full date formats, converts the display string to an ISO date string.
@@ -27575,7 +27698,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27575
27698
  }
27576
27699
  };
27577
27700
 
27578
- var formkitVersion$2$1 = '202607011652';
27701
+ var formkitVersion$2$1 = '202607011914';
27579
27702
 
27580
27703
  let l$1$2 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$2`${s$3(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1$2 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1$3=i$6`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
27581
27704
  `,u$4$2=i$6`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -33327,7 +33450,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
33327
33450
  }
33328
33451
  };
33329
33452
 
33330
- var formkitVersion$1$3 = '202607011652';
33453
+ var formkitVersion$1$3 = '202607011914';
33331
33454
 
33332
33455
  let AuroElement$2$2 = class AuroElement extends i$3 {
33333
33456
  static get properties() {
@@ -34079,6 +34202,23 @@ let AuroDropdown$3 = class AuroDropdown extends AuroElement$2$2 {
34079
34202
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
34080
34203
  this.trigger.focus();
34081
34204
  }
34205
+
34206
+
34207
+ if (!this.isPopoverVisible) {
34208
+ // wait til the bib gets fully closed and rendered
34209
+ setTimeout(() => {
34210
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
34211
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
34212
+ if (this.isPopoverVisible ||
34213
+ // eslint-disable-next-line no-extra-parens
34214
+ (!this.bibContent?.matches(':focus-within') &&
34215
+ document.activeElement !== document.body)) {
34216
+ return;
34217
+ }
34218
+ // Restore focus to the trigger.
34219
+ this.trigger.focus();
34220
+ });
34221
+ }
34082
34222
  }
34083
34223
 
34084
34224
  firstUpdated() {
@@ -39004,8 +39144,21 @@ let AuroFormValidation$6 = class AuroFormValidation {
39004
39144
  return;
39005
39145
  }
39006
39146
 
39007
- // Validate that the date passed was the correct format and is a valid date
39147
+ // Validate that the date passed was the correct format and is a valid date.
39148
+ // For partial date formats, valueObject is never populated; validate them directly.
39008
39149
  if (elem.value && !elem.valueObject) {
39150
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
39151
+
39152
+ if (isPartialDateFormat) {
39153
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
39154
+ elem.validity = 'patternMismatch';
39155
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
39156
+ }
39157
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
39158
+ return;
39159
+ }
39160
+
39161
+ // Full date format with no valueObject means the value is not a valid calendar date.
39009
39162
  elem.validity = 'patternMismatch';
39010
39163
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
39011
39164
  return;
@@ -44935,10 +45088,11 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
44935
45088
  const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
44936
45089
 
44937
45090
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
44938
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
45091
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
45092
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
44939
45093
  return {
44940
45094
  mask: IMask$2.MaskedRange,
44941
- from: 1,
45095
+ from: fromValue,
44942
45096
  to: maxValue,
44943
45097
  lazy: true,
44944
45098
  placeholderChar: '',
@@ -44946,7 +45100,8 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
44946
45100
  return value.toString().padStart(dateFormat.length, '0');
44947
45101
  },
44948
45102
  parse(str) {
44949
- return parseInt(str) || null;
45103
+ const num = parseInt(str, 10);
45104
+ return isNaN(num) ? null : num;
44950
45105
  }
44951
45106
  };
44952
45107
  }
@@ -45010,6 +45165,49 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
45010
45165
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
45011
45166
  }
45012
45167
 
45168
+ /**
45169
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
45170
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
45171
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
45172
+ * @param {string} value - The user-facing display value.
45173
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
45174
+ * @returns {boolean}
45175
+ */
45176
+ isValidPartialDate(value, format$1) {
45177
+ if (!value || !format$1) {
45178
+ return false;
45179
+ }
45180
+ const normalizedFormat = format$1.toLowerCase();
45181
+
45182
+ if (normalizedFormat === 'dd') {
45183
+ const num = Number(value);
45184
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
45185
+ }
45186
+ if (normalizedFormat === 'yy') {
45187
+ const num = Number(value);
45188
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
45189
+ }
45190
+ if (normalizedFormat === 'yyyy') {
45191
+ const num = Number(value);
45192
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
45193
+ }
45194
+
45195
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
45196
+ // Use the 1st of the current month as the reference so that formats
45197
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
45198
+ const referenceDate = new Date();
45199
+ referenceDate.setDate(1);
45200
+ const parsed = parse$2(value, dateFnsMask, referenceDate);
45201
+ if (!isValid$2(parsed) || format$2(parsed, dateFnsMask) !== value) {
45202
+ return false;
45203
+ }
45204
+ if (normalizedFormat.includes('yyyy')) {
45205
+ const year = parsed.getFullYear();
45206
+ return year >= 1900 && year <= 2100;
45207
+ }
45208
+ return true;
45209
+ }
45210
+
45013
45211
  /**
45014
45212
  * Converts a display string to its model value.
45015
45213
  * For full date formats, converts the display string to an ISO date string.
@@ -45629,6 +45827,13 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45629
45827
  type: String
45630
45828
  },
45631
45829
 
45830
+ /**
45831
+ * Custom help text message to display when validity = `patternMismatch`.
45832
+ */
45833
+ setCustomValidityPatternMismatch: {
45834
+ type: String
45835
+ },
45836
+
45632
45837
  /**
45633
45838
  * Custom help text message to display when validity = `rangeOverflow`.
45634
45839
  */
@@ -45699,7 +45904,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45699
45904
 
45700
45905
  /**
45701
45906
  * Populates the `type` attribute on the input.
45702
- * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
45907
+ * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
45703
45908
  * @default 'text'
45704
45909
  */
45705
45910
  type: {
@@ -45724,7 +45929,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45724
45929
 
45725
45930
  /**
45726
45931
  * Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
45727
- * The format for this property should be ISO for `date` type inputs.
45932
+ * 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.
45728
45933
  */
45729
45934
  value: {
45730
45935
  type: String
@@ -46847,7 +47052,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
46847
47052
  }
46848
47053
  };
46849
47054
 
46850
- var formkitVersion$7 = '202607011652';
47055
+ var formkitVersion$7 = '202607011914';
46851
47056
 
46852
47057
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46853
47058
  // See LICENSE in the project root for license information.
@@ -51143,8 +51348,21 @@ let AuroFormValidation$5 = class AuroFormValidation {
51143
51348
  return;
51144
51349
  }
51145
51350
 
51146
- // Validate that the date passed was the correct format and is a valid date
51351
+ // Validate that the date passed was the correct format and is a valid date.
51352
+ // For partial date formats, valueObject is never populated; validate them directly.
51147
51353
  if (elem.value && !elem.valueObject) {
51354
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
51355
+
51356
+ if (isPartialDateFormat) {
51357
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
51358
+ elem.validity = 'patternMismatch';
51359
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
51360
+ }
51361
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
51362
+ return;
51363
+ }
51364
+
51365
+ // Full date format with no valueObject means the value is not a valid calendar date.
51148
51366
  elem.validity = 'patternMismatch';
51149
51367
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
51150
51368
  return;
@@ -51716,7 +51934,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
51716
51934
  }
51717
51935
  };
51718
51936
 
51719
- var formkitVersion$1$2 = '202607011652';
51937
+ var formkitVersion$1$2 = '202607011914';
51720
51938
 
51721
51939
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
51722
51940
  // See LICENSE in the project root for license information.
@@ -56044,7 +56262,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
56044
56262
  }
56045
56263
  };
56046
56264
 
56047
- var formkitVersion$6 = '202607011652';
56265
+ var formkitVersion$6 = '202607011914';
56048
56266
 
56049
56267
  let AuroElement$1$2 = class AuroElement extends i$3 {
56050
56268
  static get properties() {
@@ -56796,6 +57014,23 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
56796
57014
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
56797
57015
  this.trigger.focus();
56798
57016
  }
57017
+
57018
+
57019
+ if (!this.isPopoverVisible) {
57020
+ // wait til the bib gets fully closed and rendered
57021
+ setTimeout(() => {
57022
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
57023
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
57024
+ if (this.isPopoverVisible ||
57025
+ // eslint-disable-next-line no-extra-parens
57026
+ (!this.bibContent?.matches(':focus-within') &&
57027
+ document.activeElement !== document.body)) {
57028
+ return;
57029
+ }
57030
+ // Restore focus to the trigger.
57031
+ this.trigger.focus();
57032
+ });
57033
+ }
56799
57034
  }
56800
57035
 
56801
57036
  firstUpdated() {
@@ -59495,8 +59730,21 @@ let AuroFormValidation$4 = class AuroFormValidation {
59495
59730
  return;
59496
59731
  }
59497
59732
 
59498
- // Validate that the date passed was the correct format and is a valid date
59733
+ // Validate that the date passed was the correct format and is a valid date.
59734
+ // For partial date formats, valueObject is never populated; validate them directly.
59499
59735
  if (elem.value && !elem.valueObject) {
59736
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
59737
+
59738
+ if (isPartialDateFormat) {
59739
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
59740
+ elem.validity = 'patternMismatch';
59741
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
59742
+ }
59743
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
59744
+ return;
59745
+ }
59746
+
59747
+ // Full date format with no valueObject means the value is not a valid calendar date.
59500
59748
  elem.validity = 'patternMismatch';
59501
59749
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
59502
59750
  return;
@@ -59994,7 +60242,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
59994
60242
  }
59995
60243
  };
59996
60244
 
59997
- var formkitVersion$5 = '202607011652';
60245
+ var formkitVersion$5 = '202607011914';
59998
60246
 
59999
60247
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
60000
60248
  // See LICENSE in the project root for license information.
@@ -61243,8 +61491,21 @@ let AuroFormValidation$3 = class AuroFormValidation {
61243
61491
  return;
61244
61492
  }
61245
61493
 
61246
- // Validate that the date passed was the correct format and is a valid date
61494
+ // Validate that the date passed was the correct format and is a valid date.
61495
+ // For partial date formats, valueObject is never populated; validate them directly.
61247
61496
  if (elem.value && !elem.valueObject) {
61497
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
61498
+
61499
+ if (isPartialDateFormat) {
61500
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
61501
+ elem.validity = 'patternMismatch';
61502
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
61503
+ }
61504
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
61505
+ return;
61506
+ }
61507
+
61508
+ // Full date format with no valueObject means the value is not a valid calendar date.
61248
61509
  elem.validity = 'patternMismatch';
61249
61510
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
61250
61511
  return;
@@ -61746,7 +62007,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
61746
62007
  }
61747
62008
  };
61748
62009
 
61749
- var formkitVersion$4 = '202607011652';
62010
+ var formkitVersion$4 = '202607011914';
61750
62011
 
61751
62012
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
61752
62013
  // See LICENSE in the project root for license information.
@@ -62505,8 +62766,21 @@ let AuroFormValidation$1 = class AuroFormValidation {
62505
62766
  return;
62506
62767
  }
62507
62768
 
62508
- // Validate that the date passed was the correct format and is a valid date
62769
+ // Validate that the date passed was the correct format and is a valid date.
62770
+ // For partial date formats, valueObject is never populated; validate them directly.
62509
62771
  if (elem.value && !elem.valueObject) {
62772
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
62773
+
62774
+ if (isPartialDateFormat) {
62775
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
62776
+ elem.validity = 'patternMismatch';
62777
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
62778
+ }
62779
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
62780
+ return;
62781
+ }
62782
+
62783
+ // Full date format with no valueObject means the value is not a valid calendar date.
62510
62784
  elem.validity = 'patternMismatch';
62511
62785
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
62512
62786
  return;
@@ -66954,7 +67228,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
66954
67228
  }
66955
67229
  };
66956
67230
 
66957
- var formkitVersion$2 = '202607011652';
67231
+ var formkitVersion$2 = '202607011914';
66958
67232
 
66959
67233
  let AuroElement$2$1 = class AuroElement extends i$3 {
66960
67234
  static get properties() {
@@ -67706,6 +67980,23 @@ let AuroDropdown$1 = class AuroDropdown extends AuroElement$2$1 {
67706
67980
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
67707
67981
  this.trigger.focus();
67708
67982
  }
67983
+
67984
+
67985
+ if (!this.isPopoverVisible) {
67986
+ // wait til the bib gets fully closed and rendered
67987
+ setTimeout(() => {
67988
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
67989
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
67990
+ if (this.isPopoverVisible ||
67991
+ // eslint-disable-next-line no-extra-parens
67992
+ (!this.bibContent?.matches(':focus-within') &&
67993
+ document.activeElement !== document.body)) {
67994
+ return;
67995
+ }
67996
+ // Restore focus to the trigger.
67997
+ this.trigger.focus();
67998
+ });
67999
+ }
67709
68000
  }
67710
68001
 
67711
68002
  firstUpdated() {
@@ -72631,8 +72922,21 @@ let AuroFormValidation$2 = class AuroFormValidation {
72631
72922
  return;
72632
72923
  }
72633
72924
 
72634
- // Validate that the date passed was the correct format and is a valid date
72925
+ // Validate that the date passed was the correct format and is a valid date.
72926
+ // For partial date formats, valueObject is never populated; validate them directly.
72635
72927
  if (elem.value && !elem.valueObject) {
72928
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
72929
+
72930
+ if (isPartialDateFormat) {
72931
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
72932
+ elem.validity = 'patternMismatch';
72933
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
72934
+ }
72935
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
72936
+ return;
72937
+ }
72938
+
72939
+ // Full date format with no valueObject means the value is not a valid calendar date.
72636
72940
  elem.validity = 'patternMismatch';
72637
72941
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
72638
72942
  return;
@@ -78562,10 +78866,11 @@ class AuroInputUtilities {
78562
78866
  const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
78563
78867
 
78564
78868
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
78565
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
78869
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
78870
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
78566
78871
  return {
78567
78872
  mask: IMask.MaskedRange,
78568
- from: 1,
78873
+ from: fromValue,
78569
78874
  to: maxValue,
78570
78875
  lazy: true,
78571
78876
  placeholderChar: '',
@@ -78573,7 +78878,8 @@ class AuroInputUtilities {
78573
78878
  return value.toString().padStart(dateFormat.length, '0');
78574
78879
  },
78575
78880
  parse(str) {
78576
- return parseInt(str) || null;
78881
+ const num = parseInt(str, 10);
78882
+ return isNaN(num) ? null : num;
78577
78883
  }
78578
78884
  };
78579
78885
  }
@@ -78637,6 +78943,49 @@ class AuroInputUtilities {
78637
78943
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
78638
78944
  }
78639
78945
 
78946
+ /**
78947
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
78948
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
78949
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
78950
+ * @param {string} value - The user-facing display value.
78951
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
78952
+ * @returns {boolean}
78953
+ */
78954
+ isValidPartialDate(value, format$1) {
78955
+ if (!value || !format$1) {
78956
+ return false;
78957
+ }
78958
+ const normalizedFormat = format$1.toLowerCase();
78959
+
78960
+ if (normalizedFormat === 'dd') {
78961
+ const num = Number(value);
78962
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
78963
+ }
78964
+ if (normalizedFormat === 'yy') {
78965
+ const num = Number(value);
78966
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
78967
+ }
78968
+ if (normalizedFormat === 'yyyy') {
78969
+ const num = Number(value);
78970
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
78971
+ }
78972
+
78973
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
78974
+ // Use the 1st of the current month as the reference so that formats
78975
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
78976
+ const referenceDate = new Date();
78977
+ referenceDate.setDate(1);
78978
+ const parsed = parse(value, dateFnsMask, referenceDate);
78979
+ if (!isValid(parsed) || format(parsed, dateFnsMask) !== value) {
78980
+ return false;
78981
+ }
78982
+ if (normalizedFormat.includes('yyyy')) {
78983
+ const year = parsed.getFullYear();
78984
+ return year >= 1900 && year <= 2100;
78985
+ }
78986
+ return true;
78987
+ }
78988
+
78640
78989
  /**
78641
78990
  * Converts a display string to its model value.
78642
78991
  * For full date formats, converts the display string to an ISO date string.
@@ -79256,6 +79605,13 @@ class BaseInput extends AuroElement$1$1 {
79256
79605
  type: String
79257
79606
  },
79258
79607
 
79608
+ /**
79609
+ * Custom help text message to display when validity = `patternMismatch`.
79610
+ */
79611
+ setCustomValidityPatternMismatch: {
79612
+ type: String
79613
+ },
79614
+
79259
79615
  /**
79260
79616
  * Custom help text message to display when validity = `rangeOverflow`.
79261
79617
  */
@@ -79326,7 +79682,7 @@ class BaseInput extends AuroElement$1$1 {
79326
79682
 
79327
79683
  /**
79328
79684
  * Populates the `type` attribute on the input.
79329
- * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
79685
+ * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
79330
79686
  * @default 'text'
79331
79687
  */
79332
79688
  type: {
@@ -79351,7 +79707,7 @@ class BaseInput extends AuroElement$1$1 {
79351
79707
 
79352
79708
  /**
79353
79709
  * Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
79354
- * The format for this property should be ISO for `date` type inputs.
79710
+ * 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.
79355
79711
  */
79356
79712
  value: {
79357
79713
  type: String
@@ -80474,7 +80830,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
80474
80830
  }
80475
80831
  };
80476
80832
 
80477
- var formkitVersion$1$1 = '202607011652';
80833
+ var formkitVersion$1$1 = '202607011914';
80478
80834
 
80479
80835
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
80480
80836
  // See LICENSE in the project root for license information.
@@ -81600,7 +81956,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
81600
81956
  }
81601
81957
  };
81602
81958
 
81603
- var formkitVersion$3 = '202607011652';
81959
+ var formkitVersion$3 = '202607011914';
81604
81960
 
81605
81961
  var styleCss$1$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
81606
81962
 
@@ -85934,8 +86290,21 @@ class AuroFormValidation {
85934
86290
  return;
85935
86291
  }
85936
86292
 
85937
- // Validate that the date passed was the correct format and is a valid date
86293
+ // Validate that the date passed was the correct format and is a valid date.
86294
+ // For partial date formats, valueObject is never populated; validate them directly.
85938
86295
  if (elem.value && !elem.valueObject) {
86296
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
86297
+
86298
+ if (isPartialDateFormat) {
86299
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
86300
+ elem.validity = 'patternMismatch';
86301
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
86302
+ }
86303
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
86304
+ return;
86305
+ }
86306
+
86307
+ // Full date format with no valueObject means the value is not a valid calendar date.
85939
86308
  elem.validity = 'patternMismatch';
85940
86309
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
85941
86310
  return;
@@ -90423,7 +90792,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
90423
90792
  }
90424
90793
  };
90425
90794
 
90426
- var formkitVersion$1 = '202607011652';
90795
+ var formkitVersion$1 = '202607011914';
90427
90796
 
90428
90797
  class AuroElement extends i$3 {
90429
90798
  static get properties() {
@@ -91175,6 +91544,23 @@ class AuroDropdown extends AuroElement {
91175
91544
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
91176
91545
  this.trigger.focus();
91177
91546
  }
91547
+
91548
+
91549
+ if (!this.isPopoverVisible) {
91550
+ // wait til the bib gets fully closed and rendered
91551
+ setTimeout(() => {
91552
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
91553
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
91554
+ if (this.isPopoverVisible ||
91555
+ // eslint-disable-next-line no-extra-parens
91556
+ (!this.bibContent?.matches(':focus-within') &&
91557
+ document.activeElement !== document.body)) {
91558
+ return;
91559
+ }
91560
+ // Restore focus to the trigger.
91561
+ this.trigger.focus();
91562
+ });
91563
+ }
91178
91564
  }
91179
91565
 
91180
91566
  firstUpdated() {
@@ -92445,7 +92831,7 @@ class AuroHelpText extends i$3 {
92445
92831
  }
92446
92832
  }
92447
92833
 
92448
- var formkitVersion = '202607011652';
92834
+ var formkitVersion = '202607011914';
92449
92835
 
92450
92836
  var styleCss = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 300);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 300);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
92451
92837
 
@@ -93306,6 +93692,14 @@ class AuroSelect extends AuroElement$1 {
93306
93692
  this.menu.addEventListener("auroMenu-loadingChange", (event) => this.handleMenuLoadingChange(event));
93307
93693
 
93308
93694
  this.menu.addEventListener("auroMenu-selectValueFailure", () => {
93695
+ // Menu dispatches this from two paths: a programmatic value mismatch
93696
+ // (menu pre-clears its own optionSelected to undefined before firing)
93697
+ // and a click on an unselected valueless option (menu leaves state
93698
+ // untouched). Only mirror the clear in the first case — otherwise a
93699
+ // valueless click in multiSelect would wipe every prior pick.
93700
+ if (this.menu.optionSelected !== undefined) {
93701
+ return;
93702
+ }
93309
93703
  this.value = undefined;
93310
93704
  this.optionSelected = this.multiSelect ? [] : undefined;
93311
93705
  // The trigger label is rendered imperatively into #value, so a property
@@ -93506,6 +93900,13 @@ class AuroSelect extends AuroElement$1 {
93506
93900
  const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
93507
93901
  match = matches[cycleIndex];
93508
93902
  }
93903
+ } else if (!match && this.typeaheadBuffer.length > 1) {
93904
+ // Buffer has no prefix match and isn't a repeat-char cycle (e.g. "a" then
93905
+ // "b" against [Apple, Banana]). Reset to just the new key and retry —
93906
+ // mirrors native <select>, which falls back to a single-char search when
93907
+ // accumulated input matches nothing, rather than swallowing the keystroke.
93908
+ this.typeaheadBuffer = key;
93909
+ match = options.find((option) => this._getOptionDisplayText(option).startsWith(key));
93509
93910
  }
93510
93911
 
93511
93912
  // Intentional: no-match leaves the bib closed (deviates from APG / some native <select>).