@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
@@ -4873,7 +4873,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4873
4873
  }
4874
4874
  };
4875
4875
 
4876
- var formkitVersion$2 = '202606291727';
4876
+ var formkitVersion$2 = '202606291930';
4877
4877
 
4878
4878
  let AuroElement$2 = class AuroElement extends i$3 {
4879
4879
  static get properties() {
@@ -6145,6 +6145,7 @@ class AuroDropdown extends AuroElement$2 {
6145
6145
  role="${o(this.triggerContentFocusable ? undefined : this.a11yRole)}"
6146
6146
  aria-expanded="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
6147
6147
  aria-controls="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
6148
+ aria-haspopup="${o(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
6148
6149
  aria-labelledby="${o(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
6149
6150
  aria-disabled="${o(this.disabled ? 'true' : undefined)}"
6150
6151
  @focusin="${this.handleFocusin}"
@@ -16598,6 +16599,13 @@ class AuroInputUtilities {
16598
16599
  * @returns {string | undefined}
16599
16600
  */
16600
16601
  toFormattedValue(valueObject, format) {
16602
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
16603
+ // `format` argument has to fail gracefully rather than throw on
16604
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
16605
+ // as "no format → no display value".
16606
+ if (!format) {
16607
+ return undefined;
16608
+ }
16601
16609
  const normalizedFormat = format.toLowerCase();
16602
16610
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
16603
16611
 
@@ -16748,79 +16756,18 @@ class BaseInput extends AuroElement$1 {
16748
16756
  constructor() {
16749
16757
  super();
16750
16758
 
16751
- this.appearance = "default";
16752
- this.disabled = false;
16753
- this.layout = 'classic';
16754
- this.locale = 'en-US';
16755
- this.max = undefined;
16756
- this._maxObject = undefined;
16757
- this.maxLength = undefined;
16758
- this.min = undefined;
16759
- this._minObject = undefined;
16760
- this.minLength = undefined;
16761
- this.required = false;
16762
- this.onDark = false;
16763
- this.setCustomValidityForType = undefined;
16764
- this.size = 'lg';
16765
- this.shape = 'classic';
16766
- this.value = undefined;
16767
- this._valueObject = undefined;
16768
-
16769
- this._initializePrivateDefaults();
16770
- }
16771
-
16772
- /**
16773
- * Internal Defaults.
16774
- * @private
16775
- * @returns {void}
16776
- */
16777
- _initializePrivateDefaults() {
16759
+ // Single-source initialization. Alphabetized so duplicate or stale
16760
+ // defaults are immediately obvious on a diff. Every field is assigned
16761
+ // exactly once here (previously the constructor + the old
16762
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
16763
+ // fields and double-allocated `util` and `validation`, discarding the
16764
+ // first instance). `validation` is now allocated exactly once; `util`
16765
+ // is seeded here with an en-US default and then rebuilt in
16766
+ // `connectedCallback` once the consumer-resolved locale is available,
16767
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
16768
+ // during its own update cycle sees a populated util instance.
16778
16769
  this.activeLabel = false;
16779
- this.appearance = "default";
16780
- this.icon = false;
16781
- this.disabled = false;
16782
- this.dvInputOnly = false;
16783
- this.hideLabelVisually = false;
16784
- this.max = undefined;
16785
- this.maxLength = undefined;
16786
- this.min = undefined;
16787
- this.minLength = undefined;
16788
- this.noValidate = false;
16789
- this.onDark = false;
16790
- this.required = false;
16791
- this.setCustomValidityForType = undefined;
16792
-
16793
- // Used for storing raw values returned from input mask.
16794
- this._rawMaskValue = undefined;
16795
-
16796
- /**
16797
- * @private
16798
- */
16799
- this.layout = 'classic';
16800
-
16801
- /**
16802
- * @private
16803
- */
16804
- this.shape = 'classic';
16805
-
16806
- /**
16807
- * @private
16808
- */
16809
- this.size = 'lg';
16810
-
16811
- this.touched = false;
16812
- this.util = new AuroInputUtilities({
16813
- locale: "en-US",
16814
- format: this.format
16815
- });
16816
- this.validation = new AuroFormValidation();
16817
- this.inputIconName = undefined;
16818
- this.showPassword = false;
16819
- this.validationCCLength = undefined;
16820
- this.hasValue = false;
16821
- this.label = 'Input label is undefined';
16822
-
16823
-
16770
+ /** @private */
16824
16771
  this.allowedInputTypes = [
16825
16772
  "text",
16826
16773
  "number",
@@ -16829,7 +16776,8 @@ class BaseInput extends AuroElement$1 {
16829
16776
  "credit-card",
16830
16777
  "tel"
16831
16778
  ];
16832
- this.icon = false;
16779
+ this.appearance = "default";
16780
+ /** @private */
16833
16781
  this.dateFormatMap = {
16834
16782
  'mm/dd/yyyy': 'dateMMDDYYYY',
16835
16783
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -16846,27 +16794,57 @@ class BaseInput extends AuroElement$1 {
16846
16794
  'dd/mm': 'dateDDMM',
16847
16795
  'mm/dd': 'dateMMDD'
16848
16796
  };
16797
+ this.disabled = false;
16798
+ /** @private */
16849
16799
  this.domHandler = new DomHandler();
16850
16800
  this.dvInputOnly = false;
16851
16801
  this.hasValue = false;
16802
+ this.hideLabelVisually = false;
16803
+ this.icon = false;
16804
+ /** @private */
16852
16805
  this.inputIconName = undefined;
16806
+ /** @private */
16853
16807
  this.label = 'Input label is undefined';
16808
+ this.layout = 'classic';
16809
+ this.locale = 'en-US';
16810
+ this.max = undefined;
16811
+ this._maxObject = undefined;
16812
+ this.maxLength = undefined;
16813
+ this.min = undefined;
16814
+ this._minObject = undefined;
16815
+ this.minLength = undefined;
16854
16816
  this.noValidate = false;
16855
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
16817
+ this.onDark = false;
16818
+ // Raw values returned from the input mask before model normalization.
16819
+ this._rawMaskValue = undefined;
16820
+ this.required = false;
16821
+ this.setCustomValidityForType = undefined;
16822
+ // Credit Card is intentionally excluded — its mask manages the cursor
16823
+ // itself, and listing it here caused cursor placement issues in Safari.
16824
+ /** @private */
16856
16825
  this.setSelectionInputTypes = [
16857
16826
  "text",
16858
16827
  "password",
16859
16828
  "email"
16860
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
16829
+ ];
16830
+ this.shape = 'classic';
16831
+ /** @private */
16861
16832
  this.showPassword = false;
16833
+ this.size = 'lg';
16862
16834
  this.touched = false;
16835
+ /** @private */
16863
16836
  this.uniqueId = new UniqueId().create();
16837
+ /** @private */
16864
16838
  this.util = new AuroInputUtilities({
16865
16839
  locale: this.locale,
16866
16840
  format: this.format
16867
16841
  });
16842
+ /** @private */
16868
16843
  this.validation = new AuroFormValidation();
16844
+ /** @private */
16869
16845
  this.validationCCLength = undefined;
16846
+ this.value = undefined;
16847
+ this._valueObject = undefined;
16870
16848
  }
16871
16849
 
16872
16850
  // function to define props used within the scope of this component
@@ -17414,6 +17392,15 @@ class BaseInput extends AuroElement$1 {
17414
17392
 
17415
17393
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
17416
17394
 
17395
+ // Normalize the format token to lowercase so case-mixed values supplied
17396
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
17397
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
17398
+ // format silently misses the map and leaves `setCustomValidityForType`
17399
+ // unset.
17400
+ if (this.format) {
17401
+ this.format = this.format.toLowerCase();
17402
+ }
17403
+
17417
17404
  // use validity message override if declared when initializing the component
17418
17405
  if (this.hasAttribute('setCustomValidity')) {
17419
17406
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -17847,6 +17834,38 @@ class BaseInput extends AuroElement$1 {
17847
17834
  this.touched = true;
17848
17835
  this.validation.validate(this);
17849
17836
  }
17837
+
17838
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
17839
+ // update that can re-render the input and reset the native cursor; we
17840
+ // capture the caret position before that update commits and restore it
17841
+ // via `setSelectionRange` once the update has flushed. Gated on
17842
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
17843
+ // formatter manages the cursor itself) doesn't get a competing write.
17844
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
17845
+ // on input types that don't support text selection (number, email in
17846
+ // some browsers) throws InvalidStateError, which would crash all input
17847
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
17848
+ // the gated types currently support it, since the list is a public
17849
+ // property a consumer could mutate.
17850
+ if (this.setSelectionInputTypes.includes(this.type)) {
17851
+ let selectionStart;
17852
+ try {
17853
+ selectionStart = this.inputElement.selectionStart;
17854
+ } catch (error) { // eslint-disable-line no-unused-vars
17855
+ return;
17856
+ }
17857
+ if (typeof selectionStart !== 'number') {
17858
+ return;
17859
+ }
17860
+ this.updateComplete.then(() => {
17861
+ try {
17862
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
17863
+ } catch (error) { // eslint-disable-line no-unused-vars
17864
+ // Some input types (number/email in certain UAs) throw on
17865
+ // setSelectionRange; swallow and let the native cursor stand.
17866
+ }
17867
+ });
17868
+ }
17850
17869
  }
17851
17870
 
17852
17871
  /**
@@ -18473,7 +18492,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18473
18492
  }
18474
18493
  };
18475
18494
 
18476
- var formkitVersion$1 = '202606291727';
18495
+ var formkitVersion$1 = '202606291930';
18477
18496
 
18478
18497
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18479
18498
  // See LICENSE in the project root for license information.
@@ -18976,6 +18995,7 @@ class AuroInput extends BaseInput {
18976
18995
  <${this.buttonTag}
18977
18996
  @click="${this.handleClickShowPassword}"
18978
18997
  appearance="${this.onDark ? 'inverse' : this.appearance}"
18998
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
18979
18999
  class="notificationBtn passwordBtn"
18980
19000
  shape="circle"
18981
19001
  size="sm"
@@ -19049,25 +19069,29 @@ class AuroInput extends BaseInput {
19049
19069
  * @returns {html} - Returns HTML for the help text and error message.
19050
19070
  */
19051
19071
  renderHtmlHelpText() {
19072
+ // Single `<p>` with stable identity across validity transitions —
19073
+ // previously two distinct templates (valid vs invalid) caused Lit to
19074
+ // replace the node entirely on a flip, and VoiceOver wouldn't
19075
+ // re-announce because the live-region element it was watching had been
19076
+ // removed and a new one inserted. Keeping one node means the `role`,
19077
+ // `aria-live`, and text content all change in-place, which AT does
19078
+ // observe and announce.
19079
+ const isError = this.validity && this.validity !== 'valid';
19052
19080
  return u$7`
19053
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
19054
- ? u$7`
19055
- <${this.helpTextTag}
19056
- appearance="${this.onDark ? 'inverse' : this.appearance}">
19057
- <p id="${this.uniqueId}" part="helpText">
19058
- <slot name="helpText">${this.getHelpText()}</slot>
19059
- </p>
19060
- </${this.helpTextTag}>
19061
- `
19062
- : u$7`
19063
- <${this.helpTextTag} error
19064
- appearance="${this.onDark ? 'inverse' : this.appearance}">
19065
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
19066
- ${this.errorMessage}
19067
- </p>
19068
- </${this.helpTextTag}>
19069
- `
19070
- }
19081
+ <${this.helpTextTag}
19082
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
19083
+ ?error=${isError}>
19084
+ <p
19085
+ id="${this.uniqueId}"
19086
+ part="helpText"
19087
+ role="${o(isError ? 'alert' : undefined)}"
19088
+ aria-live="${o(isError ? 'assertive' : undefined)}">
19089
+ ${isError
19090
+ ? this.errorMessage
19091
+ : u$7`<slot name="helpText">${this.getHelpText()}</slot>`
19092
+ }
19093
+ </p>
19094
+ </${this.helpTextTag}>
19071
19095
  `;
19072
19096
  }
19073
19097
 
@@ -19199,7 +19223,7 @@ class AuroInput extends BaseInput {
19199
19223
 
19200
19224
  var colorCss$3 = i$6`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
19201
19225
 
19202
- var styleCss$4 = i$6`#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)}`;
19226
+ var styleCss$4 = i$6`#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)}`;
19203
19227
 
19204
19228
  var tokenCss = i$6`: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)}`;
19205
19229
 
@@ -19594,7 +19618,7 @@ class AuroBibtemplate extends i$3 {
19594
19618
  }
19595
19619
  }
19596
19620
 
19597
- var formkitVersion = '202606291727';
19621
+ var formkitVersion = '202606291930';
19598
19622
 
19599
19623
  var styleCss$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
19600
19624
 
@@ -4888,7 +4888,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4888
4888
  }
4889
4889
  };
4890
4890
 
4891
- var formkitVersion$2 = '202606291727';
4891
+ var formkitVersion$2 = '202606291930';
4892
4892
 
4893
4893
  let AuroElement$2 = class AuroElement extends i$3 {
4894
4894
  static get properties() {
@@ -6160,6 +6160,7 @@ class AuroDropdown extends AuroElement$2 {
6160
6160
  role="${o(this.triggerContentFocusable ? undefined : this.a11yRole)}"
6161
6161
  aria-expanded="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
6162
6162
  aria-controls="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
6163
+ aria-haspopup="${o(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
6163
6164
  aria-labelledby="${o(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
6164
6165
  aria-disabled="${o(this.disabled ? 'true' : undefined)}"
6165
6166
  @focusin="${this.handleFocusin}"
@@ -16613,6 +16614,13 @@ class AuroInputUtilities {
16613
16614
  * @returns {string | undefined}
16614
16615
  */
16615
16616
  toFormattedValue(valueObject, format) {
16617
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
16618
+ // `format` argument has to fail gracefully rather than throw on
16619
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
16620
+ // as "no format → no display value".
16621
+ if (!format) {
16622
+ return undefined;
16623
+ }
16616
16624
  const normalizedFormat = format.toLowerCase();
16617
16625
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
16618
16626
 
@@ -16763,79 +16771,18 @@ class BaseInput extends AuroElement$1 {
16763
16771
  constructor() {
16764
16772
  super();
16765
16773
 
16766
- this.appearance = "default";
16767
- this.disabled = false;
16768
- this.layout = 'classic';
16769
- this.locale = 'en-US';
16770
- this.max = undefined;
16771
- this._maxObject = undefined;
16772
- this.maxLength = undefined;
16773
- this.min = undefined;
16774
- this._minObject = undefined;
16775
- this.minLength = undefined;
16776
- this.required = false;
16777
- this.onDark = false;
16778
- this.setCustomValidityForType = undefined;
16779
- this.size = 'lg';
16780
- this.shape = 'classic';
16781
- this.value = undefined;
16782
- this._valueObject = undefined;
16783
-
16784
- this._initializePrivateDefaults();
16785
- }
16786
-
16787
- /**
16788
- * Internal Defaults.
16789
- * @private
16790
- * @returns {void}
16791
- */
16792
- _initializePrivateDefaults() {
16774
+ // Single-source initialization. Alphabetized so duplicate or stale
16775
+ // defaults are immediately obvious on a diff. Every field is assigned
16776
+ // exactly once here (previously the constructor + the old
16777
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
16778
+ // fields and double-allocated `util` and `validation`, discarding the
16779
+ // first instance). `validation` is now allocated exactly once; `util`
16780
+ // is seeded here with an en-US default and then rebuilt in
16781
+ // `connectedCallback` once the consumer-resolved locale is available,
16782
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
16783
+ // during its own update cycle sees a populated util instance.
16793
16784
  this.activeLabel = false;
16794
- this.appearance = "default";
16795
- this.icon = false;
16796
- this.disabled = false;
16797
- this.dvInputOnly = false;
16798
- this.hideLabelVisually = false;
16799
- this.max = undefined;
16800
- this.maxLength = undefined;
16801
- this.min = undefined;
16802
- this.minLength = undefined;
16803
- this.noValidate = false;
16804
- this.onDark = false;
16805
- this.required = false;
16806
- this.setCustomValidityForType = undefined;
16807
-
16808
- // Used for storing raw values returned from input mask.
16809
- this._rawMaskValue = undefined;
16810
-
16811
- /**
16812
- * @private
16813
- */
16814
- this.layout = 'classic';
16815
-
16816
- /**
16817
- * @private
16818
- */
16819
- this.shape = 'classic';
16820
-
16821
- /**
16822
- * @private
16823
- */
16824
- this.size = 'lg';
16825
-
16826
- this.touched = false;
16827
- this.util = new AuroInputUtilities({
16828
- locale: "en-US",
16829
- format: this.format
16830
- });
16831
- this.validation = new AuroFormValidation();
16832
- this.inputIconName = undefined;
16833
- this.showPassword = false;
16834
- this.validationCCLength = undefined;
16835
- this.hasValue = false;
16836
- this.label = 'Input label is undefined';
16837
-
16838
-
16785
+ /** @private */
16839
16786
  this.allowedInputTypes = [
16840
16787
  "text",
16841
16788
  "number",
@@ -16844,7 +16791,8 @@ class BaseInput extends AuroElement$1 {
16844
16791
  "credit-card",
16845
16792
  "tel"
16846
16793
  ];
16847
- this.icon = false;
16794
+ this.appearance = "default";
16795
+ /** @private */
16848
16796
  this.dateFormatMap = {
16849
16797
  'mm/dd/yyyy': 'dateMMDDYYYY',
16850
16798
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -16861,27 +16809,57 @@ class BaseInput extends AuroElement$1 {
16861
16809
  'dd/mm': 'dateDDMM',
16862
16810
  'mm/dd': 'dateMMDD'
16863
16811
  };
16812
+ this.disabled = false;
16813
+ /** @private */
16864
16814
  this.domHandler = new DomHandler();
16865
16815
  this.dvInputOnly = false;
16866
16816
  this.hasValue = false;
16817
+ this.hideLabelVisually = false;
16818
+ this.icon = false;
16819
+ /** @private */
16867
16820
  this.inputIconName = undefined;
16821
+ /** @private */
16868
16822
  this.label = 'Input label is undefined';
16823
+ this.layout = 'classic';
16824
+ this.locale = 'en-US';
16825
+ this.max = undefined;
16826
+ this._maxObject = undefined;
16827
+ this.maxLength = undefined;
16828
+ this.min = undefined;
16829
+ this._minObject = undefined;
16830
+ this.minLength = undefined;
16869
16831
  this.noValidate = false;
16870
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
16832
+ this.onDark = false;
16833
+ // Raw values returned from the input mask before model normalization.
16834
+ this._rawMaskValue = undefined;
16835
+ this.required = false;
16836
+ this.setCustomValidityForType = undefined;
16837
+ // Credit Card is intentionally excluded — its mask manages the cursor
16838
+ // itself, and listing it here caused cursor placement issues in Safari.
16839
+ /** @private */
16871
16840
  this.setSelectionInputTypes = [
16872
16841
  "text",
16873
16842
  "password",
16874
16843
  "email"
16875
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
16844
+ ];
16845
+ this.shape = 'classic';
16846
+ /** @private */
16876
16847
  this.showPassword = false;
16848
+ this.size = 'lg';
16877
16849
  this.touched = false;
16850
+ /** @private */
16878
16851
  this.uniqueId = new UniqueId().create();
16852
+ /** @private */
16879
16853
  this.util = new AuroInputUtilities({
16880
16854
  locale: this.locale,
16881
16855
  format: this.format
16882
16856
  });
16857
+ /** @private */
16883
16858
  this.validation = new AuroFormValidation();
16859
+ /** @private */
16884
16860
  this.validationCCLength = undefined;
16861
+ this.value = undefined;
16862
+ this._valueObject = undefined;
16885
16863
  }
16886
16864
 
16887
16865
  // function to define props used within the scope of this component
@@ -17429,6 +17407,15 @@ class BaseInput extends AuroElement$1 {
17429
17407
 
17430
17408
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
17431
17409
 
17410
+ // Normalize the format token to lowercase so case-mixed values supplied
17411
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
17412
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
17413
+ // format silently misses the map and leaves `setCustomValidityForType`
17414
+ // unset.
17415
+ if (this.format) {
17416
+ this.format = this.format.toLowerCase();
17417
+ }
17418
+
17432
17419
  // use validity message override if declared when initializing the component
17433
17420
  if (this.hasAttribute('setCustomValidity')) {
17434
17421
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -17862,6 +17849,38 @@ class BaseInput extends AuroElement$1 {
17862
17849
  this.touched = true;
17863
17850
  this.validation.validate(this);
17864
17851
  }
17852
+
17853
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
17854
+ // update that can re-render the input and reset the native cursor; we
17855
+ // capture the caret position before that update commits and restore it
17856
+ // via `setSelectionRange` once the update has flushed. Gated on
17857
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
17858
+ // formatter manages the cursor itself) doesn't get a competing write.
17859
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
17860
+ // on input types that don't support text selection (number, email in
17861
+ // some browsers) throws InvalidStateError, which would crash all input
17862
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
17863
+ // the gated types currently support it, since the list is a public
17864
+ // property a consumer could mutate.
17865
+ if (this.setSelectionInputTypes.includes(this.type)) {
17866
+ let selectionStart;
17867
+ try {
17868
+ selectionStart = this.inputElement.selectionStart;
17869
+ } catch (error) { // eslint-disable-line no-unused-vars
17870
+ return;
17871
+ }
17872
+ if (typeof selectionStart !== 'number') {
17873
+ return;
17874
+ }
17875
+ this.updateComplete.then(() => {
17876
+ try {
17877
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
17878
+ } catch (error) { // eslint-disable-line no-unused-vars
17879
+ // Some input types (number/email in certain UAs) throw on
17880
+ // setSelectionRange; swallow and let the native cursor stand.
17881
+ }
17882
+ });
17883
+ }
17865
17884
  }
17866
17885
 
17867
17886
  /**
@@ -18488,7 +18507,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18488
18507
  }
18489
18508
  };
18490
18509
 
18491
- var formkitVersion$1 = '202606291727';
18510
+ var formkitVersion$1 = '202606291930';
18492
18511
 
18493
18512
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18494
18513
  // See LICENSE in the project root for license information.
@@ -18991,6 +19010,7 @@ class AuroInput extends BaseInput {
18991
19010
  <${this.buttonTag}
18992
19011
  @click="${this.handleClickShowPassword}"
18993
19012
  appearance="${this.onDark ? 'inverse' : this.appearance}"
19013
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
18994
19014
  class="notificationBtn passwordBtn"
18995
19015
  shape="circle"
18996
19016
  size="sm"
@@ -19064,25 +19084,29 @@ class AuroInput extends BaseInput {
19064
19084
  * @returns {html} - Returns HTML for the help text and error message.
19065
19085
  */
19066
19086
  renderHtmlHelpText() {
19087
+ // Single `<p>` with stable identity across validity transitions —
19088
+ // previously two distinct templates (valid vs invalid) caused Lit to
19089
+ // replace the node entirely on a flip, and VoiceOver wouldn't
19090
+ // re-announce because the live-region element it was watching had been
19091
+ // removed and a new one inserted. Keeping one node means the `role`,
19092
+ // `aria-live`, and text content all change in-place, which AT does
19093
+ // observe and announce.
19094
+ const isError = this.validity && this.validity !== 'valid';
19067
19095
  return u$7`
19068
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
19069
- ? u$7`
19070
- <${this.helpTextTag}
19071
- appearance="${this.onDark ? 'inverse' : this.appearance}">
19072
- <p id="${this.uniqueId}" part="helpText">
19073
- <slot name="helpText">${this.getHelpText()}</slot>
19074
- </p>
19075
- </${this.helpTextTag}>
19076
- `
19077
- : u$7`
19078
- <${this.helpTextTag} error
19079
- appearance="${this.onDark ? 'inverse' : this.appearance}">
19080
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
19081
- ${this.errorMessage}
19082
- </p>
19083
- </${this.helpTextTag}>
19084
- `
19085
- }
19096
+ <${this.helpTextTag}
19097
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
19098
+ ?error=${isError}>
19099
+ <p
19100
+ id="${this.uniqueId}"
19101
+ part="helpText"
19102
+ role="${o(isError ? 'alert' : undefined)}"
19103
+ aria-live="${o(isError ? 'assertive' : undefined)}">
19104
+ ${isError
19105
+ ? this.errorMessage
19106
+ : u$7`<slot name="helpText">${this.getHelpText()}</slot>`
19107
+ }
19108
+ </p>
19109
+ </${this.helpTextTag}>
19086
19110
  `;
19087
19111
  }
19088
19112
 
@@ -19214,7 +19238,7 @@ class AuroInput extends BaseInput {
19214
19238
 
19215
19239
  var colorCss$3 = i$6`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
19216
19240
 
19217
- var styleCss$4 = i$6`#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)}`;
19241
+ var styleCss$4 = i$6`#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)}`;
19218
19242
 
19219
19243
  var tokenCss = i$6`: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)}`;
19220
19244
 
@@ -19609,7 +19633,7 @@ class AuroBibtemplate extends i$3 {
19609
19633
  }
19610
19634
  }
19611
19635
 
19612
- var formkitVersion = '202606291727';
19636
+ var formkitVersion = '202606291930';
19613
19637
 
19614
19638
  var styleCss$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
19615
19639