@aurodesignsystem-dev/auro-formkit 0.0.0-pr1514.3 → 0.0.0-pr1514.5

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 (52) hide show
  1. package/components/bibtemplate/dist/index.js +1 -1
  2. package/components/bibtemplate/dist/registered.js +1 -1
  3. package/components/checkbox/demo/customize.min.js +1 -1
  4. package/components/checkbox/demo/getting-started.min.js +1 -1
  5. package/components/checkbox/demo/index.min.js +1 -1
  6. package/components/checkbox/dist/index.js +1 -1
  7. package/components/checkbox/dist/registered.js +1 -1
  8. package/components/combobox/demo/customize.min.js +121 -97
  9. package/components/combobox/demo/getting-started.min.js +121 -97
  10. package/components/combobox/demo/index.min.js +121 -97
  11. package/components/combobox/dist/index.js +120 -96
  12. package/components/combobox/dist/registered.js +120 -96
  13. package/components/counter/demo/customize.min.js +11 -3
  14. package/components/counter/demo/index.min.js +11 -3
  15. package/components/counter/dist/index.js +11 -3
  16. package/components/counter/dist/registered.js +11 -3
  17. package/components/datepicker/demo/customize.min.js +224 -119
  18. package/components/datepicker/demo/index.min.js +224 -119
  19. package/components/datepicker/dist/auro-calendar.d.ts +24 -7
  20. package/components/datepicker/dist/index.js +224 -119
  21. package/components/datepicker/dist/registered.js +224 -119
  22. package/components/dropdown/demo/customize.min.js +2 -1
  23. package/components/dropdown/demo/getting-started.min.js +2 -1
  24. package/components/dropdown/demo/index.min.js +2 -1
  25. package/components/dropdown/dist/index.js +2 -1
  26. package/components/dropdown/dist/registered.js +2 -1
  27. package/components/form/demo/customize.min.js +662 -378
  28. package/components/form/demo/getting-started.min.js +662 -378
  29. package/components/form/demo/index.min.js +662 -378
  30. package/components/form/demo/registerDemoDeps.min.js +662 -378
  31. package/components/input/demo/api.md +5 -5
  32. package/components/input/demo/customize.md +8 -8
  33. package/components/input/demo/customize.min.js +116 -93
  34. package/components/input/demo/getting-started.min.js +116 -93
  35. package/components/input/demo/index.min.js +116 -93
  36. package/components/input/dist/base-input.d.ts +33 -44
  37. package/components/input/dist/index.js +129 -94
  38. package/components/input/dist/registered.js +116 -93
  39. package/components/radio/demo/customize.min.js +1 -1
  40. package/components/radio/demo/getting-started.min.js +1 -1
  41. package/components/radio/demo/index.min.js +1 -1
  42. package/components/radio/dist/index.js +1 -1
  43. package/components/radio/dist/registered.js +1 -1
  44. package/components/select/demo/customize.min.js +187 -63
  45. package/components/select/demo/getting-started.min.js +187 -63
  46. package/components/select/demo/index.min.js +187 -63
  47. package/components/select/demo/keyboard-behavior.md +18 -4
  48. package/components/select/dist/auro-select.d.ts +20 -8
  49. package/components/select/dist/index.js +187 -63
  50. package/components/select/dist/registered.js +187 -63
  51. package/custom-elements.json +1940 -1734
  52. package/package.json +1 -1
@@ -4806,7 +4806,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4806
4806
  }
4807
4807
  };
4808
4808
 
4809
- var formkitVersion$2 = '202606291727';
4809
+ var formkitVersion$2 = '202606291930';
4810
4810
 
4811
4811
  let AuroElement$2 = class AuroElement extends LitElement {
4812
4812
  static get properties() {
@@ -6078,6 +6078,7 @@ class AuroDropdown extends AuroElement$2 {
6078
6078
  role="${ifDefined(this.triggerContentFocusable ? undefined : this.a11yRole)}"
6079
6079
  aria-expanded="${ifDefined(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
6080
6080
  aria-controls="${ifDefined(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
6081
+ aria-haspopup="${ifDefined(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
6081
6082
  aria-labelledby="${ifDefined(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
6082
6083
  aria-disabled="${ifDefined(this.disabled ? 'true' : undefined)}"
6083
6084
  @focusin="${this.handleFocusin}"
@@ -16524,6 +16525,13 @@ class AuroInputUtilities {
16524
16525
  * @returns {string | undefined}
16525
16526
  */
16526
16527
  toFormattedValue(valueObject, format) {
16528
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
16529
+ // `format` argument has to fail gracefully rather than throw on
16530
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
16531
+ // as "no format → no display value".
16532
+ if (!format) {
16533
+ return undefined;
16534
+ }
16527
16535
  const normalizedFormat = format.toLowerCase();
16528
16536
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
16529
16537
 
@@ -16674,79 +16682,18 @@ class BaseInput extends AuroElement$1 {
16674
16682
  constructor() {
16675
16683
  super();
16676
16684
 
16677
- this.appearance = "default";
16678
- this.disabled = false;
16679
- this.layout = 'classic';
16680
- this.locale = 'en-US';
16681
- this.max = undefined;
16682
- this._maxObject = undefined;
16683
- this.maxLength = undefined;
16684
- this.min = undefined;
16685
- this._minObject = undefined;
16686
- this.minLength = undefined;
16687
- this.required = false;
16688
- this.onDark = false;
16689
- this.setCustomValidityForType = undefined;
16690
- this.size = 'lg';
16691
- this.shape = 'classic';
16692
- this.value = undefined;
16693
- this._valueObject = undefined;
16694
-
16695
- this._initializePrivateDefaults();
16696
- }
16697
-
16698
- /**
16699
- * Internal Defaults.
16700
- * @private
16701
- * @returns {void}
16702
- */
16703
- _initializePrivateDefaults() {
16685
+ // Single-source initialization. Alphabetized so duplicate or stale
16686
+ // defaults are immediately obvious on a diff. Every field is assigned
16687
+ // exactly once here (previously the constructor + the old
16688
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
16689
+ // fields and double-allocated `util` and `validation`, discarding the
16690
+ // first instance). `validation` is now allocated exactly once; `util`
16691
+ // is seeded here with an en-US default and then rebuilt in
16692
+ // `connectedCallback` once the consumer-resolved locale is available,
16693
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
16694
+ // during its own update cycle sees a populated util instance.
16704
16695
  this.activeLabel = false;
16705
- this.appearance = "default";
16706
- this.icon = false;
16707
- this.disabled = false;
16708
- this.dvInputOnly = false;
16709
- this.hideLabelVisually = false;
16710
- this.max = undefined;
16711
- this.maxLength = undefined;
16712
- this.min = undefined;
16713
- this.minLength = undefined;
16714
- this.noValidate = false;
16715
- this.onDark = false;
16716
- this.required = false;
16717
- this.setCustomValidityForType = undefined;
16718
-
16719
- // Used for storing raw values returned from input mask.
16720
- this._rawMaskValue = undefined;
16721
-
16722
- /**
16723
- * @private
16724
- */
16725
- this.layout = 'classic';
16726
-
16727
- /**
16728
- * @private
16729
- */
16730
- this.shape = 'classic';
16731
-
16732
- /**
16733
- * @private
16734
- */
16735
- this.size = 'lg';
16736
-
16737
- this.touched = false;
16738
- this.util = new AuroInputUtilities({
16739
- locale: "en-US",
16740
- format: this.format
16741
- });
16742
- this.validation = new AuroFormValidation();
16743
- this.inputIconName = undefined;
16744
- this.showPassword = false;
16745
- this.validationCCLength = undefined;
16746
- this.hasValue = false;
16747
- this.label = 'Input label is undefined';
16748
-
16749
-
16696
+ /** @private */
16750
16697
  this.allowedInputTypes = [
16751
16698
  "text",
16752
16699
  "number",
@@ -16755,7 +16702,8 @@ class BaseInput extends AuroElement$1 {
16755
16702
  "credit-card",
16756
16703
  "tel"
16757
16704
  ];
16758
- this.icon = false;
16705
+ this.appearance = "default";
16706
+ /** @private */
16759
16707
  this.dateFormatMap = {
16760
16708
  'mm/dd/yyyy': 'dateMMDDYYYY',
16761
16709
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -16772,27 +16720,57 @@ class BaseInput extends AuroElement$1 {
16772
16720
  'dd/mm': 'dateDDMM',
16773
16721
  'mm/dd': 'dateMMDD'
16774
16722
  };
16723
+ this.disabled = false;
16724
+ /** @private */
16775
16725
  this.domHandler = new DomHandler();
16776
16726
  this.dvInputOnly = false;
16777
16727
  this.hasValue = false;
16728
+ this.hideLabelVisually = false;
16729
+ this.icon = false;
16730
+ /** @private */
16778
16731
  this.inputIconName = undefined;
16732
+ /** @private */
16779
16733
  this.label = 'Input label is undefined';
16734
+ this.layout = 'classic';
16735
+ this.locale = 'en-US';
16736
+ this.max = undefined;
16737
+ this._maxObject = undefined;
16738
+ this.maxLength = undefined;
16739
+ this.min = undefined;
16740
+ this._minObject = undefined;
16741
+ this.minLength = undefined;
16780
16742
  this.noValidate = false;
16781
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
16743
+ this.onDark = false;
16744
+ // Raw values returned from the input mask before model normalization.
16745
+ this._rawMaskValue = undefined;
16746
+ this.required = false;
16747
+ this.setCustomValidityForType = undefined;
16748
+ // Credit Card is intentionally excluded — its mask manages the cursor
16749
+ // itself, and listing it here caused cursor placement issues in Safari.
16750
+ /** @private */
16782
16751
  this.setSelectionInputTypes = [
16783
16752
  "text",
16784
16753
  "password",
16785
16754
  "email"
16786
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
16755
+ ];
16756
+ this.shape = 'classic';
16757
+ /** @private */
16787
16758
  this.showPassword = false;
16759
+ this.size = 'lg';
16788
16760
  this.touched = false;
16761
+ /** @private */
16789
16762
  this.uniqueId = new UniqueId().create();
16763
+ /** @private */
16790
16764
  this.util = new AuroInputUtilities({
16791
16765
  locale: this.locale,
16792
16766
  format: this.format
16793
16767
  });
16768
+ /** @private */
16794
16769
  this.validation = new AuroFormValidation();
16770
+ /** @private */
16795
16771
  this.validationCCLength = undefined;
16772
+ this.value = undefined;
16773
+ this._valueObject = undefined;
16796
16774
  }
16797
16775
 
16798
16776
  // function to define props used within the scope of this component
@@ -17340,6 +17318,15 @@ class BaseInput extends AuroElement$1 {
17340
17318
 
17341
17319
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
17342
17320
 
17321
+ // Normalize the format token to lowercase so case-mixed values supplied
17322
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
17323
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
17324
+ // format silently misses the map and leaves `setCustomValidityForType`
17325
+ // unset.
17326
+ if (this.format) {
17327
+ this.format = this.format.toLowerCase();
17328
+ }
17329
+
17343
17330
  // use validity message override if declared when initializing the component
17344
17331
  if (this.hasAttribute('setCustomValidity')) {
17345
17332
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -17773,6 +17760,38 @@ class BaseInput extends AuroElement$1 {
17773
17760
  this.touched = true;
17774
17761
  this.validation.validate(this);
17775
17762
  }
17763
+
17764
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
17765
+ // update that can re-render the input and reset the native cursor; we
17766
+ // capture the caret position before that update commits and restore it
17767
+ // via `setSelectionRange` once the update has flushed. Gated on
17768
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
17769
+ // formatter manages the cursor itself) doesn't get a competing write.
17770
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
17771
+ // on input types that don't support text selection (number, email in
17772
+ // some browsers) throws InvalidStateError, which would crash all input
17773
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
17774
+ // the gated types currently support it, since the list is a public
17775
+ // property a consumer could mutate.
17776
+ if (this.setSelectionInputTypes.includes(this.type)) {
17777
+ let selectionStart;
17778
+ try {
17779
+ selectionStart = this.inputElement.selectionStart;
17780
+ } catch (error) { // eslint-disable-line no-unused-vars
17781
+ return;
17782
+ }
17783
+ if (typeof selectionStart !== 'number') {
17784
+ return;
17785
+ }
17786
+ this.updateComplete.then(() => {
17787
+ try {
17788
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
17789
+ } catch (error) { // eslint-disable-line no-unused-vars
17790
+ // Some input types (number/email in certain UAs) throw on
17791
+ // setSelectionRange; swallow and let the native cursor stand.
17792
+ }
17793
+ });
17794
+ }
17776
17795
  }
17777
17796
 
17778
17797
  /**
@@ -18399,7 +18418,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
18399
18418
  }
18400
18419
  };
18401
18420
 
18402
- var formkitVersion$1 = '202606291727';
18421
+ var formkitVersion$1 = '202606291930';
18403
18422
 
18404
18423
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18405
18424
  // See LICENSE in the project root for license information.
@@ -18902,6 +18921,7 @@ class AuroInput extends BaseInput {
18902
18921
  <${this.buttonTag}
18903
18922
  @click="${this.handleClickShowPassword}"
18904
18923
  appearance="${this.onDark ? 'inverse' : this.appearance}"
18924
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
18905
18925
  class="notificationBtn passwordBtn"
18906
18926
  shape="circle"
18907
18927
  size="sm"
@@ -18975,25 +18995,29 @@ class AuroInput extends BaseInput {
18975
18995
  * @returns {html} - Returns HTML for the help text and error message.
18976
18996
  */
18977
18997
  renderHtmlHelpText() {
18998
+ // Single `<p>` with stable identity across validity transitions —
18999
+ // previously two distinct templates (valid vs invalid) caused Lit to
19000
+ // replace the node entirely on a flip, and VoiceOver wouldn't
19001
+ // re-announce because the live-region element it was watching had been
19002
+ // removed and a new one inserted. Keeping one node means the `role`,
19003
+ // `aria-live`, and text content all change in-place, which AT does
19004
+ // observe and announce.
19005
+ const isError = this.validity && this.validity !== 'valid';
18978
19006
  return html`
18979
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
18980
- ? html`
18981
- <${this.helpTextTag}
18982
- appearance="${this.onDark ? 'inverse' : this.appearance}">
18983
- <p id="${this.uniqueId}" part="helpText">
18984
- <slot name="helpText">${this.getHelpText()}</slot>
18985
- </p>
18986
- </${this.helpTextTag}>
18987
- `
18988
- : html`
18989
- <${this.helpTextTag} error
18990
- appearance="${this.onDark ? 'inverse' : this.appearance}">
18991
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
18992
- ${this.errorMessage}
18993
- </p>
18994
- </${this.helpTextTag}>
18995
- `
19007
+ <${this.helpTextTag}
19008
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
19009
+ ?error=${isError}>
19010
+ <p
19011
+ id="${this.uniqueId}"
19012
+ part="helpText"
19013
+ role="${ifDefined(isError ? 'alert' : undefined)}"
19014
+ aria-live="${ifDefined(isError ? 'assertive' : undefined)}">
19015
+ ${isError
19016
+ ? this.errorMessage
19017
+ : html`<slot name="helpText">${this.getHelpText()}</slot>`
18996
19018
  }
19019
+ </p>
19020
+ </${this.helpTextTag}>
18997
19021
  `;
18998
19022
  }
18999
19023
 
@@ -19125,7 +19149,7 @@ class AuroInput extends BaseInput {
19125
19149
 
19126
19150
  var colorCss$1 = css`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
19127
19151
 
19128
- var styleCss$2 = css`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1 1 100%}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{position:absolute;right:0;bottom:0;left:0;padding:var(--ds-size-200, 1rem)}`;
19152
+ var styleCss$2 = css`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{padding:var(--ds-size-200, 1rem)}`;
19129
19153
 
19130
19154
  var tokenCss = css`:host{--ds-auro-dropdownbib-header-boxshadow-color: var(--ds-elevation-200, 0px 0px 10px rgba(0, 0, 0, 0.15));--ds-auro-dropdownbib-footer-container-color: var(--ds-basic-color-surface-default, #ffffff)}`;
19131
19155
 
@@ -19520,7 +19544,7 @@ class AuroBibtemplate extends LitElement {
19520
19544
  }
19521
19545
  }
19522
19546
 
19523
- var formkitVersion = '202606291727';
19547
+ var formkitVersion = '202606291930';
19524
19548
 
19525
19549
  var styleCss$1 = css`.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}`;
19526
19550
 
@@ -4806,7 +4806,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4806
4806
  }
4807
4807
  };
4808
4808
 
4809
- var formkitVersion$2 = '202606291727';
4809
+ var formkitVersion$2 = '202606291930';
4810
4810
 
4811
4811
  let AuroElement$2 = class AuroElement extends LitElement {
4812
4812
  static get properties() {
@@ -6078,6 +6078,7 @@ class AuroDropdown extends AuroElement$2 {
6078
6078
  role="${ifDefined(this.triggerContentFocusable ? undefined : this.a11yRole)}"
6079
6079
  aria-expanded="${ifDefined(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
6080
6080
  aria-controls="${ifDefined(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
6081
+ aria-haspopup="${ifDefined(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
6081
6082
  aria-labelledby="${ifDefined(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
6082
6083
  aria-disabled="${ifDefined(this.disabled ? 'true' : undefined)}"
6083
6084
  @focusin="${this.handleFocusin}"
@@ -16524,6 +16525,13 @@ class AuroInputUtilities {
16524
16525
  * @returns {string | undefined}
16525
16526
  */
16526
16527
  toFormattedValue(valueObject, format) {
16528
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
16529
+ // `format` argument has to fail gracefully rather than throw on
16530
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
16531
+ // as "no format → no display value".
16532
+ if (!format) {
16533
+ return undefined;
16534
+ }
16527
16535
  const normalizedFormat = format.toLowerCase();
16528
16536
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
16529
16537
 
@@ -16674,79 +16682,18 @@ class BaseInput extends AuroElement$1 {
16674
16682
  constructor() {
16675
16683
  super();
16676
16684
 
16677
- this.appearance = "default";
16678
- this.disabled = false;
16679
- this.layout = 'classic';
16680
- this.locale = 'en-US';
16681
- this.max = undefined;
16682
- this._maxObject = undefined;
16683
- this.maxLength = undefined;
16684
- this.min = undefined;
16685
- this._minObject = undefined;
16686
- this.minLength = undefined;
16687
- this.required = false;
16688
- this.onDark = false;
16689
- this.setCustomValidityForType = undefined;
16690
- this.size = 'lg';
16691
- this.shape = 'classic';
16692
- this.value = undefined;
16693
- this._valueObject = undefined;
16694
-
16695
- this._initializePrivateDefaults();
16696
- }
16697
-
16698
- /**
16699
- * Internal Defaults.
16700
- * @private
16701
- * @returns {void}
16702
- */
16703
- _initializePrivateDefaults() {
16685
+ // Single-source initialization. Alphabetized so duplicate or stale
16686
+ // defaults are immediately obvious on a diff. Every field is assigned
16687
+ // exactly once here (previously the constructor + the old
16688
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
16689
+ // fields and double-allocated `util` and `validation`, discarding the
16690
+ // first instance). `validation` is now allocated exactly once; `util`
16691
+ // is seeded here with an en-US default and then rebuilt in
16692
+ // `connectedCallback` once the consumer-resolved locale is available,
16693
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
16694
+ // during its own update cycle sees a populated util instance.
16704
16695
  this.activeLabel = false;
16705
- this.appearance = "default";
16706
- this.icon = false;
16707
- this.disabled = false;
16708
- this.dvInputOnly = false;
16709
- this.hideLabelVisually = false;
16710
- this.max = undefined;
16711
- this.maxLength = undefined;
16712
- this.min = undefined;
16713
- this.minLength = undefined;
16714
- this.noValidate = false;
16715
- this.onDark = false;
16716
- this.required = false;
16717
- this.setCustomValidityForType = undefined;
16718
-
16719
- // Used for storing raw values returned from input mask.
16720
- this._rawMaskValue = undefined;
16721
-
16722
- /**
16723
- * @private
16724
- */
16725
- this.layout = 'classic';
16726
-
16727
- /**
16728
- * @private
16729
- */
16730
- this.shape = 'classic';
16731
-
16732
- /**
16733
- * @private
16734
- */
16735
- this.size = 'lg';
16736
-
16737
- this.touched = false;
16738
- this.util = new AuroInputUtilities({
16739
- locale: "en-US",
16740
- format: this.format
16741
- });
16742
- this.validation = new AuroFormValidation();
16743
- this.inputIconName = undefined;
16744
- this.showPassword = false;
16745
- this.validationCCLength = undefined;
16746
- this.hasValue = false;
16747
- this.label = 'Input label is undefined';
16748
-
16749
-
16696
+ /** @private */
16750
16697
  this.allowedInputTypes = [
16751
16698
  "text",
16752
16699
  "number",
@@ -16755,7 +16702,8 @@ class BaseInput extends AuroElement$1 {
16755
16702
  "credit-card",
16756
16703
  "tel"
16757
16704
  ];
16758
- this.icon = false;
16705
+ this.appearance = "default";
16706
+ /** @private */
16759
16707
  this.dateFormatMap = {
16760
16708
  'mm/dd/yyyy': 'dateMMDDYYYY',
16761
16709
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -16772,27 +16720,57 @@ class BaseInput extends AuroElement$1 {
16772
16720
  'dd/mm': 'dateDDMM',
16773
16721
  'mm/dd': 'dateMMDD'
16774
16722
  };
16723
+ this.disabled = false;
16724
+ /** @private */
16775
16725
  this.domHandler = new DomHandler();
16776
16726
  this.dvInputOnly = false;
16777
16727
  this.hasValue = false;
16728
+ this.hideLabelVisually = false;
16729
+ this.icon = false;
16730
+ /** @private */
16778
16731
  this.inputIconName = undefined;
16732
+ /** @private */
16779
16733
  this.label = 'Input label is undefined';
16734
+ this.layout = 'classic';
16735
+ this.locale = 'en-US';
16736
+ this.max = undefined;
16737
+ this._maxObject = undefined;
16738
+ this.maxLength = undefined;
16739
+ this.min = undefined;
16740
+ this._minObject = undefined;
16741
+ this.minLength = undefined;
16780
16742
  this.noValidate = false;
16781
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
16743
+ this.onDark = false;
16744
+ // Raw values returned from the input mask before model normalization.
16745
+ this._rawMaskValue = undefined;
16746
+ this.required = false;
16747
+ this.setCustomValidityForType = undefined;
16748
+ // Credit Card is intentionally excluded — its mask manages the cursor
16749
+ // itself, and listing it here caused cursor placement issues in Safari.
16750
+ /** @private */
16782
16751
  this.setSelectionInputTypes = [
16783
16752
  "text",
16784
16753
  "password",
16785
16754
  "email"
16786
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
16755
+ ];
16756
+ this.shape = 'classic';
16757
+ /** @private */
16787
16758
  this.showPassword = false;
16759
+ this.size = 'lg';
16788
16760
  this.touched = false;
16761
+ /** @private */
16789
16762
  this.uniqueId = new UniqueId().create();
16763
+ /** @private */
16790
16764
  this.util = new AuroInputUtilities({
16791
16765
  locale: this.locale,
16792
16766
  format: this.format
16793
16767
  });
16768
+ /** @private */
16794
16769
  this.validation = new AuroFormValidation();
16770
+ /** @private */
16795
16771
  this.validationCCLength = undefined;
16772
+ this.value = undefined;
16773
+ this._valueObject = undefined;
16796
16774
  }
16797
16775
 
16798
16776
  // function to define props used within the scope of this component
@@ -17340,6 +17318,15 @@ class BaseInput extends AuroElement$1 {
17340
17318
 
17341
17319
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
17342
17320
 
17321
+ // Normalize the format token to lowercase so case-mixed values supplied
17322
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
17323
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
17324
+ // format silently misses the map and leaves `setCustomValidityForType`
17325
+ // unset.
17326
+ if (this.format) {
17327
+ this.format = this.format.toLowerCase();
17328
+ }
17329
+
17343
17330
  // use validity message override if declared when initializing the component
17344
17331
  if (this.hasAttribute('setCustomValidity')) {
17345
17332
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -17773,6 +17760,38 @@ class BaseInput extends AuroElement$1 {
17773
17760
  this.touched = true;
17774
17761
  this.validation.validate(this);
17775
17762
  }
17763
+
17764
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
17765
+ // update that can re-render the input and reset the native cursor; we
17766
+ // capture the caret position before that update commits and restore it
17767
+ // via `setSelectionRange` once the update has flushed. Gated on
17768
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
17769
+ // formatter manages the cursor itself) doesn't get a competing write.
17770
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
17771
+ // on input types that don't support text selection (number, email in
17772
+ // some browsers) throws InvalidStateError, which would crash all input
17773
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
17774
+ // the gated types currently support it, since the list is a public
17775
+ // property a consumer could mutate.
17776
+ if (this.setSelectionInputTypes.includes(this.type)) {
17777
+ let selectionStart;
17778
+ try {
17779
+ selectionStart = this.inputElement.selectionStart;
17780
+ } catch (error) { // eslint-disable-line no-unused-vars
17781
+ return;
17782
+ }
17783
+ if (typeof selectionStart !== 'number') {
17784
+ return;
17785
+ }
17786
+ this.updateComplete.then(() => {
17787
+ try {
17788
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
17789
+ } catch (error) { // eslint-disable-line no-unused-vars
17790
+ // Some input types (number/email in certain UAs) throw on
17791
+ // setSelectionRange; swallow and let the native cursor stand.
17792
+ }
17793
+ });
17794
+ }
17776
17795
  }
17777
17796
 
17778
17797
  /**
@@ -18399,7 +18418,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
18399
18418
  }
18400
18419
  };
18401
18420
 
18402
- var formkitVersion$1 = '202606291727';
18421
+ var formkitVersion$1 = '202606291930';
18403
18422
 
18404
18423
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18405
18424
  // See LICENSE in the project root for license information.
@@ -18902,6 +18921,7 @@ class AuroInput extends BaseInput {
18902
18921
  <${this.buttonTag}
18903
18922
  @click="${this.handleClickShowPassword}"
18904
18923
  appearance="${this.onDark ? 'inverse' : this.appearance}"
18924
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
18905
18925
  class="notificationBtn passwordBtn"
18906
18926
  shape="circle"
18907
18927
  size="sm"
@@ -18975,25 +18995,29 @@ class AuroInput extends BaseInput {
18975
18995
  * @returns {html} - Returns HTML for the help text and error message.
18976
18996
  */
18977
18997
  renderHtmlHelpText() {
18998
+ // Single `<p>` with stable identity across validity transitions —
18999
+ // previously two distinct templates (valid vs invalid) caused Lit to
19000
+ // replace the node entirely on a flip, and VoiceOver wouldn't
19001
+ // re-announce because the live-region element it was watching had been
19002
+ // removed and a new one inserted. Keeping one node means the `role`,
19003
+ // `aria-live`, and text content all change in-place, which AT does
19004
+ // observe and announce.
19005
+ const isError = this.validity && this.validity !== 'valid';
18978
19006
  return html`
18979
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
18980
- ? html`
18981
- <${this.helpTextTag}
18982
- appearance="${this.onDark ? 'inverse' : this.appearance}">
18983
- <p id="${this.uniqueId}" part="helpText">
18984
- <slot name="helpText">${this.getHelpText()}</slot>
18985
- </p>
18986
- </${this.helpTextTag}>
18987
- `
18988
- : html`
18989
- <${this.helpTextTag} error
18990
- appearance="${this.onDark ? 'inverse' : this.appearance}">
18991
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
18992
- ${this.errorMessage}
18993
- </p>
18994
- </${this.helpTextTag}>
18995
- `
19007
+ <${this.helpTextTag}
19008
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
19009
+ ?error=${isError}>
19010
+ <p
19011
+ id="${this.uniqueId}"
19012
+ part="helpText"
19013
+ role="${ifDefined(isError ? 'alert' : undefined)}"
19014
+ aria-live="${ifDefined(isError ? 'assertive' : undefined)}">
19015
+ ${isError
19016
+ ? this.errorMessage
19017
+ : html`<slot name="helpText">${this.getHelpText()}</slot>`
18996
19018
  }
19019
+ </p>
19020
+ </${this.helpTextTag}>
18997
19021
  `;
18998
19022
  }
18999
19023
 
@@ -19125,7 +19149,7 @@ class AuroInput extends BaseInput {
19125
19149
 
19126
19150
  var colorCss$1 = css`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
19127
19151
 
19128
- var styleCss$2 = css`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1 1 100%}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{position:absolute;right:0;bottom:0;left:0;padding:var(--ds-size-200, 1rem)}`;
19152
+ var styleCss$2 = css`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{padding:var(--ds-size-200, 1rem)}`;
19129
19153
 
19130
19154
  var tokenCss = css`:host{--ds-auro-dropdownbib-header-boxshadow-color: var(--ds-elevation-200, 0px 0px 10px rgba(0, 0, 0, 0.15));--ds-auro-dropdownbib-footer-container-color: var(--ds-basic-color-surface-default, #ffffff)}`;
19131
19155
 
@@ -19520,7 +19544,7 @@ class AuroBibtemplate extends LitElement {
19520
19544
  }
19521
19545
  }
19522
19546
 
19523
- var formkitVersion = '202606291727';
19547
+ var formkitVersion = '202606291930';
19524
19548
 
19525
19549
  var styleCss$1 = css`.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}`;
19526
19550