@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
@@ -4414,8 +4414,21 @@ let AuroFormValidation$7 = class AuroFormValidation {
4414
4414
  return;
4415
4415
  }
4416
4416
 
4417
- // Validate that the date passed was the correct format and is a valid date
4417
+ // Validate that the date passed was the correct format and is a valid date.
4418
+ // For partial date formats, valueObject is never populated; validate them directly.
4418
4419
  if (elem.value && !elem.valueObject) {
4420
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
4421
+
4422
+ if (isPartialDateFormat) {
4423
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
4424
+ elem.validity = 'patternMismatch';
4425
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
4426
+ }
4427
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
4428
+ return;
4429
+ }
4430
+
4431
+ // Full date format with no valueObject means the value is not a valid calendar date.
4419
4432
  elem.validity = 'patternMismatch';
4420
4433
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
4421
4434
  return;
@@ -10345,10 +10358,11 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
10345
10358
  const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
10346
10359
 
10347
10360
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
10348
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
10361
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
10362
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
10349
10363
  return {
10350
10364
  mask: IMask$3.MaskedRange,
10351
- from: 1,
10365
+ from: fromValue,
10352
10366
  to: maxValue,
10353
10367
  lazy: true,
10354
10368
  placeholderChar: '',
@@ -10356,7 +10370,8 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
10356
10370
  return value.toString().padStart(dateFormat.length, '0');
10357
10371
  },
10358
10372
  parse(str) {
10359
- return parseInt(str) || null;
10373
+ const num = parseInt(str, 10);
10374
+ return isNaN(num) ? null : num;
10360
10375
  }
10361
10376
  };
10362
10377
  }
@@ -10420,6 +10435,49 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
10420
10435
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
10421
10436
  }
10422
10437
 
10438
+ /**
10439
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
10440
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
10441
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
10442
+ * @param {string} value - The user-facing display value.
10443
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
10444
+ * @returns {boolean}
10445
+ */
10446
+ isValidPartialDate(value, format$1) {
10447
+ if (!value || !format$1) {
10448
+ return false;
10449
+ }
10450
+ const normalizedFormat = format$1.toLowerCase();
10451
+
10452
+ if (normalizedFormat === 'dd') {
10453
+ const num = Number(value);
10454
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
10455
+ }
10456
+ if (normalizedFormat === 'yy') {
10457
+ const num = Number(value);
10458
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
10459
+ }
10460
+ if (normalizedFormat === 'yyyy') {
10461
+ const num = Number(value);
10462
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
10463
+ }
10464
+
10465
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
10466
+ // Use the 1st of the current month as the reference so that formats
10467
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
10468
+ const referenceDate = new Date();
10469
+ referenceDate.setDate(1);
10470
+ const parsed = parse$3(value, dateFnsMask, referenceDate);
10471
+ if (!isValid$3(parsed) || format$3(parsed, dateFnsMask) !== value) {
10472
+ return false;
10473
+ }
10474
+ if (normalizedFormat.includes('yyyy')) {
10475
+ const year = parsed.getFullYear();
10476
+ return year >= 1900 && year <= 2100;
10477
+ }
10478
+ return true;
10479
+ }
10480
+
10423
10481
  /**
10424
10482
  * Converts a display string to its model value.
10425
10483
  * For full date formats, converts the display string to an ISO date string.
@@ -11039,6 +11097,13 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11039
11097
  type: String
11040
11098
  },
11041
11099
 
11100
+ /**
11101
+ * Custom help text message to display when validity = `patternMismatch`.
11102
+ */
11103
+ setCustomValidityPatternMismatch: {
11104
+ type: String
11105
+ },
11106
+
11042
11107
  /**
11043
11108
  * Custom help text message to display when validity = `rangeOverflow`.
11044
11109
  */
@@ -11109,7 +11174,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11109
11174
 
11110
11175
  /**
11111
11176
  * Populates the `type` attribute on the input.
11112
- * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
11177
+ * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
11113
11178
  * @default 'text'
11114
11179
  */
11115
11180
  type: {
@@ -11134,7 +11199,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11134
11199
 
11135
11200
  /**
11136
11201
  * Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
11137
- * The format for this property should be ISO for `date` type inputs.
11202
+ * 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.
11138
11203
  */
11139
11204
  value: {
11140
11205
  type: String
@@ -12257,7 +12322,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$2 {
12257
12322
  }
12258
12323
  };
12259
12324
 
12260
- var formkitVersion$8 = '202607011652';
12325
+ var formkitVersion$8 = '202607011914';
12261
12326
 
12262
12327
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12263
12328
  // See LICENSE in the project root for license information.
@@ -13532,8 +13597,21 @@ let AuroFormValidation$1$1 = class AuroFormValidation {
13532
13597
  return;
13533
13598
  }
13534
13599
 
13535
- // Validate that the date passed was the correct format and is a valid date
13600
+ // Validate that the date passed was the correct format and is a valid date.
13601
+ // For partial date formats, valueObject is never populated; validate them directly.
13536
13602
  if (elem.value && !elem.valueObject) {
13603
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
13604
+
13605
+ if (isPartialDateFormat) {
13606
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
13607
+ elem.validity = 'patternMismatch';
13608
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
13609
+ }
13610
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
13611
+ return;
13612
+ }
13613
+
13614
+ // Full date format with no valueObject means the value is not a valid calendar date.
13537
13615
  elem.validity = 'patternMismatch';
13538
13616
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
13539
13617
  return;
@@ -23386,10 +23464,11 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
23386
23464
  const dateFormat = format || this.overrideFormat || pattern || 'mm/dd/yyyy';
23387
23465
 
23388
23466
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
23389
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
23467
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
23468
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
23390
23469
  return {
23391
23470
  mask: IMask$1.MaskedRange,
23392
- from: 1,
23471
+ from: fromValue,
23393
23472
  to: maxValue,
23394
23473
  lazy: true,
23395
23474
  placeholderChar: '',
@@ -23397,7 +23476,8 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
23397
23476
  return value.toString().padStart(dateFormat.length, '0');
23398
23477
  },
23399
23478
  parse(str) {
23400
- return parseInt(str) || null;
23479
+ const num = parseInt(str, 10);
23480
+ return isNaN(num) ? null : num;
23401
23481
  }
23402
23482
  };
23403
23483
  }
@@ -23461,6 +23541,49 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
23461
23541
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
23462
23542
  }
23463
23543
 
23544
+ /**
23545
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
23546
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
23547
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
23548
+ * @param {string} value - The user-facing display value.
23549
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
23550
+ * @returns {boolean}
23551
+ */
23552
+ isValidPartialDate(value, format) {
23553
+ if (!value || !format) {
23554
+ return false;
23555
+ }
23556
+ const normalizedFormat = format.toLowerCase();
23557
+
23558
+ if (normalizedFormat === 'dd') {
23559
+ const num = Number(value);
23560
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
23561
+ }
23562
+ if (normalizedFormat === 'yy') {
23563
+ const num = Number(value);
23564
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
23565
+ }
23566
+ if (normalizedFormat === 'yyyy') {
23567
+ const num = Number(value);
23568
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
23569
+ }
23570
+
23571
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
23572
+ // Use the 1st of the current month as the reference so that formats
23573
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
23574
+ const referenceDate = new Date();
23575
+ referenceDate.setDate(1);
23576
+ const parsed = parse$1(value, dateFnsMask, referenceDate);
23577
+ if (!isValid$1(parsed) || format$1(parsed, dateFnsMask) !== value) {
23578
+ return false;
23579
+ }
23580
+ if (normalizedFormat.includes('yyyy')) {
23581
+ const year = parsed.getFullYear();
23582
+ return year >= 1900 && year <= 2100;
23583
+ }
23584
+ return true;
23585
+ }
23586
+
23464
23587
  /**
23465
23588
  * Converts a display string to its model value.
23466
23589
  * For full date formats, converts the display string to an ISO date string.
@@ -26534,7 +26657,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$2 {
26534
26657
  }
26535
26658
  };
26536
26659
 
26537
- var formkitVersion$2$1 = '202607011652';
26660
+ var formkitVersion$2$1 = '202607011914';
26538
26661
 
26539
26662
  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$5`${s$5(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$4`: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}
26540
26663
  `,u$4$2=i$4`.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}}
@@ -32286,7 +32409,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
32286
32409
  }
32287
32410
  };
32288
32411
 
32289
- var formkitVersion$1$3 = '202607011652';
32412
+ var formkitVersion$1$3 = '202607011914';
32290
32413
 
32291
32414
  let AuroElement$2$2 = class AuroElement extends i$2 {
32292
32415
  static get properties() {
@@ -33038,6 +33161,23 @@ let AuroDropdown$3 = class AuroDropdown extends AuroElement$2$2 {
33038
33161
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
33039
33162
  this.trigger.focus();
33040
33163
  }
33164
+
33165
+
33166
+ if (!this.isPopoverVisible) {
33167
+ // wait til the bib gets fully closed and rendered
33168
+ setTimeout(() => {
33169
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
33170
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
33171
+ if (this.isPopoverVisible ||
33172
+ // eslint-disable-next-line no-extra-parens
33173
+ (!this.bibContent?.matches(':focus-within') &&
33174
+ document.activeElement !== document.body)) {
33175
+ return;
33176
+ }
33177
+ // Restore focus to the trigger.
33178
+ this.trigger.focus();
33179
+ });
33180
+ }
33041
33181
  }
33042
33182
 
33043
33183
  firstUpdated() {
@@ -37963,8 +38103,21 @@ let AuroFormValidation$6 = class AuroFormValidation {
37963
38103
  return;
37964
38104
  }
37965
38105
 
37966
- // Validate that the date passed was the correct format and is a valid date
38106
+ // Validate that the date passed was the correct format and is a valid date.
38107
+ // For partial date formats, valueObject is never populated; validate them directly.
37967
38108
  if (elem.value && !elem.valueObject) {
38109
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
38110
+
38111
+ if (isPartialDateFormat) {
38112
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
38113
+ elem.validity = 'patternMismatch';
38114
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
38115
+ }
38116
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
38117
+ return;
38118
+ }
38119
+
38120
+ // Full date format with no valueObject means the value is not a valid calendar date.
37968
38121
  elem.validity = 'patternMismatch';
37969
38122
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
37970
38123
  return;
@@ -43894,10 +44047,11 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
43894
44047
  const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
43895
44048
 
43896
44049
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
43897
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
44050
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
44051
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
43898
44052
  return {
43899
44053
  mask: IMask$2.MaskedRange,
43900
- from: 1,
44054
+ from: fromValue,
43901
44055
  to: maxValue,
43902
44056
  lazy: true,
43903
44057
  placeholderChar: '',
@@ -43905,7 +44059,8 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
43905
44059
  return value.toString().padStart(dateFormat.length, '0');
43906
44060
  },
43907
44061
  parse(str) {
43908
- return parseInt(str) || null;
44062
+ const num = parseInt(str, 10);
44063
+ return isNaN(num) ? null : num;
43909
44064
  }
43910
44065
  };
43911
44066
  }
@@ -43969,6 +44124,49 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
43969
44124
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
43970
44125
  }
43971
44126
 
44127
+ /**
44128
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
44129
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
44130
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
44131
+ * @param {string} value - The user-facing display value.
44132
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
44133
+ * @returns {boolean}
44134
+ */
44135
+ isValidPartialDate(value, format$1) {
44136
+ if (!value || !format$1) {
44137
+ return false;
44138
+ }
44139
+ const normalizedFormat = format$1.toLowerCase();
44140
+
44141
+ if (normalizedFormat === 'dd') {
44142
+ const num = Number(value);
44143
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
44144
+ }
44145
+ if (normalizedFormat === 'yy') {
44146
+ const num = Number(value);
44147
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
44148
+ }
44149
+ if (normalizedFormat === 'yyyy') {
44150
+ const num = Number(value);
44151
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
44152
+ }
44153
+
44154
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
44155
+ // Use the 1st of the current month as the reference so that formats
44156
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
44157
+ const referenceDate = new Date();
44158
+ referenceDate.setDate(1);
44159
+ const parsed = parse$2(value, dateFnsMask, referenceDate);
44160
+ if (!isValid$2(parsed) || format$2(parsed, dateFnsMask) !== value) {
44161
+ return false;
44162
+ }
44163
+ if (normalizedFormat.includes('yyyy')) {
44164
+ const year = parsed.getFullYear();
44165
+ return year >= 1900 && year <= 2100;
44166
+ }
44167
+ return true;
44168
+ }
44169
+
43972
44170
  /**
43973
44171
  * Converts a display string to its model value.
43974
44172
  * For full date formats, converts the display string to an ISO date string.
@@ -44588,6 +44786,13 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44588
44786
  type: String
44589
44787
  },
44590
44788
 
44789
+ /**
44790
+ * Custom help text message to display when validity = `patternMismatch`.
44791
+ */
44792
+ setCustomValidityPatternMismatch: {
44793
+ type: String
44794
+ },
44795
+
44591
44796
  /**
44592
44797
  * Custom help text message to display when validity = `rangeOverflow`.
44593
44798
  */
@@ -44658,7 +44863,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44658
44863
 
44659
44864
  /**
44660
44865
  * Populates the `type` attribute on the input.
44661
- * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
44866
+ * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
44662
44867
  * @default 'text'
44663
44868
  */
44664
44869
  type: {
@@ -44683,7 +44888,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44683
44888
 
44684
44889
  /**
44685
44890
  * Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
44686
- * The format for this property should be ISO for `date` type inputs.
44891
+ * 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.
44687
44892
  */
44688
44893
  value: {
44689
44894
  type: String
@@ -45806,7 +46011,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
45806
46011
  }
45807
46012
  };
45808
46013
 
45809
- var formkitVersion$7 = '202607011652';
46014
+ var formkitVersion$7 = '202607011914';
45810
46015
 
45811
46016
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
45812
46017
  // See LICENSE in the project root for license information.
@@ -50102,8 +50307,21 @@ let AuroFormValidation$5 = class AuroFormValidation {
50102
50307
  return;
50103
50308
  }
50104
50309
 
50105
- // Validate that the date passed was the correct format and is a valid date
50310
+ // Validate that the date passed was the correct format and is a valid date.
50311
+ // For partial date formats, valueObject is never populated; validate them directly.
50106
50312
  if (elem.value && !elem.valueObject) {
50313
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
50314
+
50315
+ if (isPartialDateFormat) {
50316
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
50317
+ elem.validity = 'patternMismatch';
50318
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
50319
+ }
50320
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
50321
+ return;
50322
+ }
50323
+
50324
+ // Full date format with no valueObject means the value is not a valid calendar date.
50107
50325
  elem.validity = 'patternMismatch';
50108
50326
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
50109
50327
  return;
@@ -50675,7 +50893,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
50675
50893
  }
50676
50894
  };
50677
50895
 
50678
- var formkitVersion$1$2 = '202607011652';
50896
+ var formkitVersion$1$2 = '202607011914';
50679
50897
 
50680
50898
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
50681
50899
  // See LICENSE in the project root for license information.
@@ -55003,7 +55221,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
55003
55221
  }
55004
55222
  };
55005
55223
 
55006
- var formkitVersion$6 = '202607011652';
55224
+ var formkitVersion$6 = '202607011914';
55007
55225
 
55008
55226
  let AuroElement$1$2 = class AuroElement extends i$2 {
55009
55227
  static get properties() {
@@ -55755,6 +55973,23 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
55755
55973
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
55756
55974
  this.trigger.focus();
55757
55975
  }
55976
+
55977
+
55978
+ if (!this.isPopoverVisible) {
55979
+ // wait til the bib gets fully closed and rendered
55980
+ setTimeout(() => {
55981
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
55982
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
55983
+ if (this.isPopoverVisible ||
55984
+ // eslint-disable-next-line no-extra-parens
55985
+ (!this.bibContent?.matches(':focus-within') &&
55986
+ document.activeElement !== document.body)) {
55987
+ return;
55988
+ }
55989
+ // Restore focus to the trigger.
55990
+ this.trigger.focus();
55991
+ });
55992
+ }
55758
55993
  }
55759
55994
 
55760
55995
  firstUpdated() {
@@ -58454,8 +58689,21 @@ let AuroFormValidation$4 = class AuroFormValidation {
58454
58689
  return;
58455
58690
  }
58456
58691
 
58457
- // Validate that the date passed was the correct format and is a valid date
58692
+ // Validate that the date passed was the correct format and is a valid date.
58693
+ // For partial date formats, valueObject is never populated; validate them directly.
58458
58694
  if (elem.value && !elem.valueObject) {
58695
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
58696
+
58697
+ if (isPartialDateFormat) {
58698
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
58699
+ elem.validity = 'patternMismatch';
58700
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
58701
+ }
58702
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
58703
+ return;
58704
+ }
58705
+
58706
+ // Full date format with no valueObject means the value is not a valid calendar date.
58459
58707
  elem.validity = 'patternMismatch';
58460
58708
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
58461
58709
  return;
@@ -58953,7 +59201,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
58953
59201
  }
58954
59202
  };
58955
59203
 
58956
- var formkitVersion$5 = '202607011652';
59204
+ var formkitVersion$5 = '202607011914';
58957
59205
 
58958
59206
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
58959
59207
  // See LICENSE in the project root for license information.
@@ -60202,8 +60450,21 @@ let AuroFormValidation$3 = class AuroFormValidation {
60202
60450
  return;
60203
60451
  }
60204
60452
 
60205
- // Validate that the date passed was the correct format and is a valid date
60453
+ // Validate that the date passed was the correct format and is a valid date.
60454
+ // For partial date formats, valueObject is never populated; validate them directly.
60206
60455
  if (elem.value && !elem.valueObject) {
60456
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
60457
+
60458
+ if (isPartialDateFormat) {
60459
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
60460
+ elem.validity = 'patternMismatch';
60461
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
60462
+ }
60463
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
60464
+ return;
60465
+ }
60466
+
60467
+ // Full date format with no valueObject means the value is not a valid calendar date.
60207
60468
  elem.validity = 'patternMismatch';
60208
60469
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
60209
60470
  return;
@@ -60705,7 +60966,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
60705
60966
  }
60706
60967
  };
60707
60968
 
60708
- var formkitVersion$4 = '202607011652';
60969
+ var formkitVersion$4 = '202607011914';
60709
60970
 
60710
60971
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
60711
60972
  // See LICENSE in the project root for license information.
@@ -61464,8 +61725,21 @@ let AuroFormValidation$1 = class AuroFormValidation {
61464
61725
  return;
61465
61726
  }
61466
61727
 
61467
- // Validate that the date passed was the correct format and is a valid date
61728
+ // Validate that the date passed was the correct format and is a valid date.
61729
+ // For partial date formats, valueObject is never populated; validate them directly.
61468
61730
  if (elem.value && !elem.valueObject) {
61731
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
61732
+
61733
+ if (isPartialDateFormat) {
61734
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
61735
+ elem.validity = 'patternMismatch';
61736
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
61737
+ }
61738
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
61739
+ return;
61740
+ }
61741
+
61742
+ // Full date format with no valueObject means the value is not a valid calendar date.
61469
61743
  elem.validity = 'patternMismatch';
61470
61744
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
61471
61745
  return;
@@ -65913,7 +66187,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
65913
66187
  }
65914
66188
  };
65915
66189
 
65916
- var formkitVersion$2 = '202607011652';
66190
+ var formkitVersion$2 = '202607011914';
65917
66191
 
65918
66192
  let AuroElement$2$1 = class AuroElement extends i$2 {
65919
66193
  static get properties() {
@@ -66665,6 +66939,23 @@ let AuroDropdown$1 = class AuroDropdown extends AuroElement$2$1 {
66665
66939
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
66666
66940
  this.trigger.focus();
66667
66941
  }
66942
+
66943
+
66944
+ if (!this.isPopoverVisible) {
66945
+ // wait til the bib gets fully closed and rendered
66946
+ setTimeout(() => {
66947
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
66948
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
66949
+ if (this.isPopoverVisible ||
66950
+ // eslint-disable-next-line no-extra-parens
66951
+ (!this.bibContent?.matches(':focus-within') &&
66952
+ document.activeElement !== document.body)) {
66953
+ return;
66954
+ }
66955
+ // Restore focus to the trigger.
66956
+ this.trigger.focus();
66957
+ });
66958
+ }
66668
66959
  }
66669
66960
 
66670
66961
  firstUpdated() {
@@ -71590,8 +71881,21 @@ let AuroFormValidation$2 = class AuroFormValidation {
71590
71881
  return;
71591
71882
  }
71592
71883
 
71593
- // Validate that the date passed was the correct format and is a valid date
71884
+ // Validate that the date passed was the correct format and is a valid date.
71885
+ // For partial date formats, valueObject is never populated; validate them directly.
71594
71886
  if (elem.value && !elem.valueObject) {
71887
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
71888
+
71889
+ if (isPartialDateFormat) {
71890
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
71891
+ elem.validity = 'patternMismatch';
71892
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
71893
+ }
71894
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
71895
+ return;
71896
+ }
71897
+
71898
+ // Full date format with no valueObject means the value is not a valid calendar date.
71595
71899
  elem.validity = 'patternMismatch';
71596
71900
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
71597
71901
  return;
@@ -77521,10 +77825,11 @@ class AuroInputUtilities {
77521
77825
  const dateFormat = format$1 || this.overrideFormat || pattern || 'mm/dd/yyyy';
77522
77826
 
77523
77827
  if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {
77524
- const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);
77828
+ const fromValue = dateFormat === 'yyyy' ? 1900 : (dateFormat === 'yy' ? 0 : 1);
77829
+ const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 2100);
77525
77830
  return {
77526
77831
  mask: IMask.MaskedRange,
77527
- from: 1,
77832
+ from: fromValue,
77528
77833
  to: maxValue,
77529
77834
  lazy: true,
77530
77835
  placeholderChar: '',
@@ -77532,7 +77837,8 @@ class AuroInputUtilities {
77532
77837
  return value.toString().padStart(dateFormat.length, '0');
77533
77838
  },
77534
77839
  parse(str) {
77535
- return parseInt(str) || null;
77840
+ const num = parseInt(str, 10);
77841
+ return isNaN(num) ? null : num;
77536
77842
  }
77537
77843
  };
77538
77844
  }
@@ -77596,6 +77902,49 @@ class AuroInputUtilities {
77596
77902
  return type === 'date' && normalizedFormat.includes('yy') && normalizedFormat.includes('mm') && normalizedFormat.includes('dd');
77597
77903
  }
77598
77904
 
77905
+ /**
77906
+ * Validates a value against a partial date format (one that lacks yy/mm/dd all three).
77907
+ * Day- and year-only formats (dd/yy/yyyy) are checked as integer ranges; other partial formats use
77908
+ * a date-fns parse + round-trip to confirm both validity and exact formatting.
77909
+ * @param {string} value - The user-facing display value.
77910
+ * @param {string} format - The partial date format string (e.g. "mm/yyyy", "yyyy", "dd").
77911
+ * @returns {boolean}
77912
+ */
77913
+ isValidPartialDate(value, format$1) {
77914
+ if (!value || !format$1) {
77915
+ return false;
77916
+ }
77917
+ const normalizedFormat = format$1.toLowerCase();
77918
+
77919
+ if (normalizedFormat === 'dd') {
77920
+ const num = Number(value);
77921
+ return (/^\d{2}$/u).test(value) && num >= 1 && num <= 31;
77922
+ }
77923
+ if (normalizedFormat === 'yy') {
77924
+ const num = Number(value);
77925
+ return (/^\d{2}$/u).test(value) && num >= 0 && num <= 99;
77926
+ }
77927
+ if (normalizedFormat === 'yyyy') {
77928
+ const num = Number(value);
77929
+ return (/^\d{4}$/u).test(value) && num >= 1900 && num <= 2100;
77930
+ }
77931
+
77932
+ const dateFnsMask = this.toDateFnsMask(normalizedFormat);
77933
+ // Use the 1st of the current month as the reference so that formats
77934
+ // omitting a day (e.g. MM/yyyy) never roll over on days 29–31.
77935
+ const referenceDate = new Date();
77936
+ referenceDate.setDate(1);
77937
+ const parsed = parse(value, dateFnsMask, referenceDate);
77938
+ if (!isValid(parsed) || format(parsed, dateFnsMask) !== value) {
77939
+ return false;
77940
+ }
77941
+ if (normalizedFormat.includes('yyyy')) {
77942
+ const year = parsed.getFullYear();
77943
+ return year >= 1900 && year <= 2100;
77944
+ }
77945
+ return true;
77946
+ }
77947
+
77599
77948
  /**
77600
77949
  * Converts a display string to its model value.
77601
77950
  * For full date formats, converts the display string to an ISO date string.
@@ -78215,6 +78564,13 @@ class BaseInput extends AuroElement$1$1 {
78215
78564
  type: String
78216
78565
  },
78217
78566
 
78567
+ /**
78568
+ * Custom help text message to display when validity = `patternMismatch`.
78569
+ */
78570
+ setCustomValidityPatternMismatch: {
78571
+ type: String
78572
+ },
78573
+
78218
78574
  /**
78219
78575
  * Custom help text message to display when validity = `rangeOverflow`.
78220
78576
  */
@@ -78285,7 +78641,7 @@ class BaseInput extends AuroElement$1$1 {
78285
78641
 
78286
78642
  /**
78287
78643
  * Populates the `type` attribute on the input.
78288
- * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number'}
78644
+ * @type {'text' | 'password' | 'email' | 'credit-card' | 'tel' | 'number' | 'date'}
78289
78645
  * @default 'text'
78290
78646
  */
78291
78647
  type: {
@@ -78310,7 +78666,7 @@ class BaseInput extends AuroElement$1$1 {
78310
78666
 
78311
78667
  /**
78312
78668
  * Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.
78313
- * The format for this property should be ISO for `date` type inputs.
78669
+ * 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.
78314
78670
  */
78315
78671
  value: {
78316
78672
  type: String
@@ -79433,7 +79789,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
79433
79789
  }
79434
79790
  };
79435
79791
 
79436
- var formkitVersion$1$1 = '202607011652';
79792
+ var formkitVersion$1$1 = '202607011914';
79437
79793
 
79438
79794
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
79439
79795
  // See LICENSE in the project root for license information.
@@ -80559,7 +80915,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
80559
80915
  }
80560
80916
  };
80561
80917
 
80562
- var formkitVersion$3 = '202607011652';
80918
+ var formkitVersion$3 = '202607011914';
80563
80919
 
80564
80920
  var styleCss$1$3 = i$4`.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}`;
80565
80921
 
@@ -84893,8 +85249,21 @@ class AuroFormValidation {
84893
85249
  return;
84894
85250
  }
84895
85251
 
84896
- // Validate that the date passed was the correct format and is a valid date
85252
+ // Validate that the date passed was the correct format and is a valid date.
85253
+ // For partial date formats, valueObject is never populated; validate them directly.
84897
85254
  if (elem.value && !elem.valueObject) {
85255
+ const isPartialDateFormat = elem.util && !elem.util.isFullDateFormat(elem.type, elem.format);
85256
+
85257
+ if (isPartialDateFormat) {
85258
+ if (!elem.util.isValidPartialDate(elem.value, elem.format)) {
85259
+ elem.validity = 'patternMismatch';
85260
+ elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
85261
+ }
85262
+ // Partial date format — validate directly and skip max/min checks since valueObject is undefined.
85263
+ return;
85264
+ }
85265
+
85266
+ // Full date format with no valueObject means the value is not a valid calendar date.
84898
85267
  elem.validity = 'patternMismatch';
84899
85268
  elem.errorMessage = elem.setCustomValidityPatternMismatch || elem.setCustomValidity || 'Invalid Date Format Entered';
84900
85269
  return;
@@ -89382,7 +89751,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
89382
89751
  }
89383
89752
  };
89384
89753
 
89385
- var formkitVersion$1 = '202607011652';
89754
+ var formkitVersion$1 = '202607011914';
89386
89755
 
89387
89756
  class AuroElement extends i$2 {
89388
89757
  static get properties() {
@@ -90134,6 +90503,23 @@ class AuroDropdown extends AuroElement {
90134
90503
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
90135
90504
  this.trigger.focus();
90136
90505
  }
90506
+
90507
+
90508
+ if (!this.isPopoverVisible) {
90509
+ // wait til the bib gets fully closed and rendered
90510
+ setTimeout(() => {
90511
+ // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
90512
+ // Restore focus to trigger when focus is still inside the bib (:focus-within) or fell to body.
90513
+ if (this.isPopoverVisible ||
90514
+ // eslint-disable-next-line no-extra-parens
90515
+ (!this.bibContent?.matches(':focus-within') &&
90516
+ document.activeElement !== document.body)) {
90517
+ return;
90518
+ }
90519
+ // Restore focus to the trigger.
90520
+ this.trigger.focus();
90521
+ });
90522
+ }
90137
90523
  }
90138
90524
 
90139
90525
  firstUpdated() {
@@ -91404,7 +91790,7 @@ class AuroHelpText extends i$2 {
91404
91790
  }
91405
91791
  }
91406
91792
 
91407
- var formkitVersion = '202607011652';
91793
+ var formkitVersion = '202607011914';
91408
91794
 
91409
91795
  var styleCss = i$4`.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}`;
91410
91796
 
@@ -92265,6 +92651,14 @@ class AuroSelect extends AuroElement$1 {
92265
92651
  this.menu.addEventListener("auroMenu-loadingChange", (event) => this.handleMenuLoadingChange(event));
92266
92652
 
92267
92653
  this.menu.addEventListener("auroMenu-selectValueFailure", () => {
92654
+ // Menu dispatches this from two paths: a programmatic value mismatch
92655
+ // (menu pre-clears its own optionSelected to undefined before firing)
92656
+ // and a click on an unselected valueless option (menu leaves state
92657
+ // untouched). Only mirror the clear in the first case — otherwise a
92658
+ // valueless click in multiSelect would wipe every prior pick.
92659
+ if (this.menu.optionSelected !== undefined) {
92660
+ return;
92661
+ }
92268
92662
  this.value = undefined;
92269
92663
  this.optionSelected = this.multiSelect ? [] : undefined;
92270
92664
  // The trigger label is rendered imperatively into #value, so a property
@@ -92465,6 +92859,13 @@ class AuroSelect extends AuroElement$1 {
92465
92859
  const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
92466
92860
  match = matches[cycleIndex];
92467
92861
  }
92862
+ } else if (!match && this.typeaheadBuffer.length > 1) {
92863
+ // Buffer has no prefix match and isn't a repeat-char cycle (e.g. "a" then
92864
+ // "b" against [Apple, Banana]). Reset to just the new key and retry —
92865
+ // mirrors native <select>, which falls back to a single-char search when
92866
+ // accumulated input matches nothing, rather than swallowing the keystroke.
92867
+ this.typeaheadBuffer = key;
92868
+ match = options.find((option) => this._getOptionDisplayText(option).startsWith(key));
92468
92869
  }
92469
92870
 
92470
92871
  // Intentional: no-match leaves the bib closed (deviates from APG / some native <select>).