@aurodesignsystem-dev/auro-formkit 0.0.0-pr1554.9 → 0.0.0-pr1555.0

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 (45) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +45 -150
  7. package/components/combobox/demo/getting-started.min.js +45 -150
  8. package/components/combobox/demo/index.min.js +45 -150
  9. package/components/combobox/dist/index.js +45 -150
  10. package/components/combobox/dist/registered.js +45 -150
  11. package/components/counter/demo/customize.min.js +6 -47
  12. package/components/counter/demo/index.min.js +6 -47
  13. package/components/counter/dist/index.js +6 -47
  14. package/components/counter/dist/registered.js +6 -47
  15. package/components/datepicker/demo/customize.min.js +20 -89
  16. package/components/datepicker/demo/index.min.js +20 -89
  17. package/components/datepicker/dist/index.js +20 -89
  18. package/components/datepicker/dist/registered.js +20 -89
  19. package/components/dropdown/demo/customize.min.js +5 -46
  20. package/components/dropdown/demo/getting-started.min.js +5 -46
  21. package/components/dropdown/demo/index.min.js +5 -46
  22. package/components/dropdown/dist/auro-dropdown.d.ts +1 -8
  23. package/components/dropdown/dist/index.js +5 -46
  24. package/components/dropdown/dist/registered.js +5 -46
  25. package/components/form/demo/customize.min.js +90 -374
  26. package/components/form/demo/getting-started.min.js +90 -374
  27. package/components/form/demo/index.min.js +90 -374
  28. package/components/form/demo/registerDemoDeps.min.js +90 -374
  29. package/components/input/demo/customize.min.js +11 -39
  30. package/components/input/demo/getting-started.min.js +11 -39
  31. package/components/input/demo/index.min.js +11 -39
  32. package/components/input/dist/index.js +11 -39
  33. package/components/input/dist/registered.js +11 -39
  34. package/components/radio/demo/customize.min.js +1 -1
  35. package/components/radio/demo/getting-started.min.js +1 -1
  36. package/components/radio/demo/index.min.js +1 -1
  37. package/components/radio/dist/index.js +1 -1
  38. package/components/radio/dist/registered.js +1 -1
  39. package/components/select/demo/customize.min.js +6 -47
  40. package/components/select/demo/getting-started.min.js +6 -47
  41. package/components/select/demo/index.min.js +6 -47
  42. package/components/select/dist/index.js +6 -47
  43. package/components/select/dist/registered.js +6 -47
  44. package/custom-elements.json +1504 -1510
  45. package/package.json +1 -1
@@ -4904,7 +4904,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
4904
4904
  }
4905
4905
  };
4906
4906
 
4907
- var formkitVersion$2 = '202607160654';
4907
+ var formkitVersion$2 = '202607152222';
4908
4908
 
4909
4909
  let AuroElement$2 = class AuroElement extends LitElement {
4910
4910
  static get properties() {
@@ -5033,6 +5033,7 @@ class AuroDropdown extends AuroElement$2 {
5033
5033
  static get shadowRootOptions() {
5034
5034
  return {
5035
5035
  ...AuroElement$2.shadowRootOptions,
5036
+ delegatesFocus: true,
5036
5037
  };
5037
5038
  }
5038
5039
 
@@ -5199,47 +5200,7 @@ class AuroDropdown extends AuroElement$2 {
5199
5200
  focusables[0].focus();
5200
5201
  }
5201
5202
  } else {
5202
- this.focusTrigger();
5203
- }
5204
- }
5205
-
5206
- /**
5207
- * Focus the trigger content. When the trigger wrapper itself is focusable
5208
- * (has tabindex), focus it directly. Otherwise, focus the first focusable
5209
- * element slotted into the trigger slot (e.g. the auro-input).
5210
- * @private
5211
- */
5212
- focusTrigger() {
5213
- if (this.trigger.hasAttribute('tabindex')) {
5214
5203
  this.trigger.focus();
5215
- } else {
5216
- // Slotted content isn't a DOM child of the trigger div, so
5217
- // getFocusableElements can't find it. Query assigned nodes directly.
5218
- const slot = this.trigger.querySelector('slot[name="trigger"]');
5219
- if (slot) {
5220
- const assigned = slot.assignedElements();
5221
- for (const el of assigned) {
5222
- if (el.hasAttribute('disabled')) {
5223
- continue;
5224
- }
5225
- // Try finding a focusable descendant first (handles non-focusable
5226
- // wrappers like <div> containing a <button>). If none found, try
5227
- // focusing the element directly (works for custom elements like
5228
- // auro-input that have delegatesFocus or a custom focus() method).
5229
- const descendants = getFocusableElements(el);
5230
- if (descendants.length > 0) {
5231
- descendants[0].focus();
5232
- return;
5233
- }
5234
- el.focus();
5235
- return;
5236
- }
5237
- }
5238
- // Fallback: try DOM children (non-slotted content)
5239
- const focusables = getFocusableElements(this.trigger);
5240
- if (focusables.length > 0) {
5241
- focusables[0].focus();
5242
- }
5243
5204
  }
5244
5205
  }
5245
5206
 
@@ -5693,16 +5654,14 @@ class AuroDropdown extends AuroElement$2 {
5693
5654
 
5694
5655
  const eventType = event.detail.eventType || "unknown";
5695
5656
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
5696
- this.focusTrigger();
5657
+ this.trigger.focus();
5697
5658
  }
5698
5659
 
5699
5660
 
5700
5661
  // On Tab-driven close (eventType "focusloss"), let focus advance naturally
5701
5662
  // — restoring to the trigger would trap the user on this dropdown, forcing
5702
5663
  // an extra Tab to move on. Escape and outside-click still restore.
5703
- // When noHideOnThisFocusLoss is true, the consumer (e.g. combobox) manages
5704
- // its own focus restoration — skip the generic trigger focus to avoid races.
5705
- if (!this.isPopoverVisible && eventType !== "focusloss" && !this.noHideOnThisFocusLoss) {
5664
+ if (!this.isPopoverVisible && eventType !== "focusloss") {
5706
5665
  // wait til the bib gets fully closed and rendered
5707
5666
  setTimeout(() => {
5708
5667
  // Skip if the bib re-opened, or if focus moved intentionally outside the dropdown (not to body).
@@ -5714,7 +5673,7 @@ class AuroDropdown extends AuroElement$2 {
5714
5673
  return;
5715
5674
  }
5716
5675
  // Restore focus to the trigger.
5717
- this.focusTrigger();
5676
+ this.trigger.focus();
5718
5677
  });
5719
5678
  }
5720
5679
  }
@@ -16888,10 +16847,9 @@ class DomHandler {
16888
16847
  class BaseInput extends AuroElement$1 {
16889
16848
 
16890
16849
  // Delegate focus to the native <input> inside the shadow root so that
16891
- // clicking anywhere on the input wrapper focuses the native input, and
16892
- // programmatic .focus() calls on elements in the shadow DOM work correctly.
16893
- // The initial-load focus theft was caused by the static `autofocus`
16894
- // attribute on the bib input (now conditional), not by delegatesFocus.
16850
+ // showModal()'s dialog focusing steps reach the input element.
16851
+ // This keeps the mobile virtual keyboard open when the fullscreen dialog
16852
+ // opens, because the browser sees an input-to-input focus transfer.
16895
16853
  static get shadowRootOptions() {
16896
16854
  return {
16897
16855
  ...AuroElement$1.shadowRootOptions,
@@ -18568,7 +18526,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
18568
18526
  }
18569
18527
  };
18570
18528
 
18571
- var formkitVersion$1 = '202607160654';
18529
+ var formkitVersion$1 = '202607152222';
18572
18530
 
18573
18531
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18574
18532
  // See LICENSE in the project root for license information.
@@ -18854,42 +18812,15 @@ class AuroInput extends BaseInput {
18854
18812
  * @returns {void}
18855
18813
  */
18856
18814
  checkDisplayValueSlotChange() {
18857
- const slot = this.shadowRoot?.querySelector('slot[name="displayValue"]');
18858
- if (!slot) {
18859
- // Shadow slot not yet rendered — fall back to checking light-DOM
18860
- // children so hasDisplayValueContent isn't stuck false when called
18861
- // before firstUpdated (e.g. from auro-combobox during mount).
18862
- // Check for any element (including custom elements like <auro-icon>
18863
- // that render via shadow DOM with no text content).
18864
- const lightDomContent = this.querySelector('[slot="displayValue"]:not(slot)');
18865
- this.hasDisplayValueContent = Boolean(lightDomContent && (
18866
- lightDomContent.textContent.trim().length > 0 ||
18867
- lightDomContent.children.length > 0 ||
18868
- lightDomContent.shadowRoot !== null
18869
- ));
18870
- return;
18871
- }
18815
+ // flatten:true resolves through auro-combobox's forwarding slot
18816
+ // (<slot name="displayValue" slot="displayValue">) so a clone appended
18817
+ // directly to auro-input's light DOM alongside the forwarder still
18818
+ // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
18819
+ // discarded any siblings past the forwarder.
18820
+ const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
18872
18821
  const nodes = slot.assignedNodes({ flatten: true });
18873
18822
 
18874
- // Check for actual visible content, not just node existence.
18875
- // An empty <span slot="displayValue"></span> forwarded from the
18876
- // consumer should not be treated as "has content" — it causes the
18877
- // displayValue wrapper to render (with hasContent class) but show
18878
- // nothing, blocking the combobox's synthetic displayValue from
18879
- // being visible on preset/deeplink load.
18880
- // Custom elements (e.g. <auro-icon>) that render via shadow DOM are
18881
- // treated as content even when they have no text or light-DOM children.
18882
- this.hasDisplayValueContent = nodes.some((node) => {
18883
- if (node.nodeType === Node.TEXT_NODE) {
18884
- return node.textContent.trim().length > 0;
18885
- }
18886
- if (node.nodeType === Node.ELEMENT_NODE) {
18887
- return node.textContent.trim().length > 0 ||
18888
- node.children.length > 0 ||
18889
- node.shadowRoot !== null;
18890
- }
18891
- return false;
18892
- });
18823
+ this.hasDisplayValueContent = nodes.length > 0;
18893
18824
  }
18894
18825
 
18895
18826
  firstUpdated() {
@@ -19716,7 +19647,7 @@ class AuroBibtemplate extends LitElement {
19716
19647
  }
19717
19648
  }
19718
19649
 
19719
- var formkitVersion = '202607160654';
19650
+ var formkitVersion = '202607152222';
19720
19651
 
19721
19652
  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}`;
19722
19653
 
@@ -20753,36 +20684,14 @@ class AuroCombobox extends AuroElement {
20753
20684
  const displayValueEl = this.menu.optionSelected.querySelector("[slot='displayValue']");
20754
20685
  if (displayValueEl) {
20755
20686
  this.input.appendChild(displayValueEl.cloneNode(true));
20756
- }
20757
-
20758
- // auro-input's hasDisplayValueContent is non-reactive; nudge it to
20759
- // re-evaluate the slot and re-render so the displayValue wrapper
20760
- // gets its hasContent class. Without this, the apple/icon stays
20761
- // hidden when input.value is set in the same tick as the append.
20762
- if (typeof this.input.checkDisplayValueSlotChange === 'function') {
20763
- this.input.checkDisplayValueSlotChange();
20764
- this.input.requestUpdate();
20765
- }
20766
- } else if (this.value) {
20767
- // No optionSelected yet (e.g. setMenuValue was called but the menu's
20768
- // auroMenu-selectedOption event hasn't fired yet, or we're on remount
20769
- // with no options loaded). Synthesize a displayValue from the value so
20770
- // the overlay isn't blank.
20771
- //
20772
- // NOTE: This renders the raw machine value (e.g. "SEA"), not the
20773
- // human-readable label (e.g. "Seattle, WA"). For consumers where
20774
- // value ≠ label, this produces a brief flash of the raw value until
20775
- // the option elements load and updateTriggerTextDisplay re-runs with
20776
- // the correct label. This is intentionally preferred over a blank
20777
- // state — the displayValueInTrigger.remove() cleanup above ensures
20778
- // this placeholder is replaced once the real option is available.
20779
- const syntheticDV = document.createElement('span');
20780
- syntheticDV.setAttribute('slot', 'displayValue');
20781
- syntheticDV.textContent = this.value;
20782
- this.input.appendChild(syntheticDV);
20783
- if (typeof this.input.checkDisplayValueSlotChange === 'function') {
20784
- this.input.checkDisplayValueSlotChange();
20785
- this.input.requestUpdate();
20687
+ // auro-input's hasDisplayValueContent is non-reactive; nudge it to
20688
+ // re-evaluate the slot and re-render so the displayValue wrapper
20689
+ // gets its hasContent class. Without this, the apple/icon stays
20690
+ // hidden when input.value is set in the same tick as the append.
20691
+ if (typeof this.input.checkDisplayValueSlotChange === 'function') {
20692
+ this.input.checkDisplayValueSlotChange();
20693
+ this.input.requestUpdate();
20694
+ }
20786
20695
  }
20787
20696
  }
20788
20697
 
@@ -21028,11 +20937,7 @@ class AuroCombobox extends AuroElement {
21028
20937
  // after the dropdown layout settles.
21029
20938
 
21030
20939
  doubleRaf(() => {
21031
- // Guard: skip if the dropdown closed before this rAF fired
21032
- // (e.g. user selected an option immediately after the bib opened).
21033
- if (this.dropdownOpen) {
21034
- this.setInputFocus();
21035
- }
20940
+ this.setInputFocus();
21036
20941
  if (this._inFullscreenTransition) {
21037
20942
  this._inFullscreenTransition = false;
21038
20943
  }
@@ -21079,9 +20984,7 @@ class AuroCombobox extends AuroElement {
21079
20984
  }
21080
20985
 
21081
20986
  this._scheduleTimer(() => {
21082
- if (this.dropdown.isPopoverVisible) {
21083
- this.setInputFocus();
21084
- }
20987
+ this.setInputFocus();
21085
20988
  }, 0);
21086
20989
  });
21087
20990
  }
@@ -21090,19 +20993,14 @@ class AuroCombobox extends AuroElement {
21090
20993
  * @private
21091
20994
  */
21092
20995
  setClearBtnFocus() {
21093
- doubleRaf(() => {
21094
- // First establish focus inside the input's shadow root.
21095
- // Without this, clearBtn.focus() silently fails when focus is on
21096
- // document.body (e.g. after a click selection closes the bib dialog).
21097
- // delegatesFocus on BaseInput routes this to the native <input>.
21098
- this.input.focus();
21099
-
21100
- // Now move focus to the clear button within the same shadow root.
21101
- const clearBtn = this.input.shadowRoot.querySelector('.clearBtn');
21102
- if (clearBtn) {
20996
+ const clearBtn = this.input.shadowRoot.querySelector('.clearBtn');
20997
+ if (clearBtn) {
20998
+ // Wait for the element to fully render across
20999
+ // multiple Lit update cycles before moving focus
21000
+ doubleRaf(() => {
21103
21001
  clearBtn.focus();
21104
- }
21105
- });
21002
+ });
21003
+ }
21106
21004
  }
21107
21005
 
21108
21006
  /**
@@ -21313,9 +21211,6 @@ class AuroCombobox extends AuroElement {
21313
21211
  // only — fresh user selections take the existing hideBib path.
21314
21212
  if (isEcho && this.menu.optionSelected) {
21315
21213
  this._programmaticFilterRefresh = true;
21316
- this.updateComplete.then(() => {
21317
- this._programmaticFilterRefresh = false;
21318
- });
21319
21214
  }
21320
21215
  });
21321
21216
 
@@ -21568,6 +21463,10 @@ class AuroCombobox extends AuroElement {
21568
21463
  if (this.dropdown.isBibFullscreen && this.input.value && this.input.value.length > 0 && this.dropdown.isPopoverVisible) {
21569
21464
  this.setInputFocus();
21570
21465
  }
21466
+
21467
+ if (this._programmaticFilterRefresh) {
21468
+ this._programmaticFilterRefresh = false;
21469
+ }
21571
21470
  }
21572
21471
 
21573
21472
  /**
@@ -21581,12 +21480,10 @@ class AuroCombobox extends AuroElement {
21581
21480
  inputResolver: (comp, ctx) => (ctx.isModal && comp.inputInBib ? comp.inputInBib : comp.input),
21582
21481
  });
21583
21482
 
21584
- this.addEventListener('focusin', (event) => {
21483
+ this.addEventListener('focusin', () => {
21585
21484
  this.touched = true;
21586
21485
 
21587
- if (event.composedPath()[0] === this) {
21588
- this.focus();
21589
- }
21486
+ this.focus();
21590
21487
  });
21591
21488
 
21592
21489
  this.addEventListener('auroFormElement-validated', (evt) => {
@@ -21766,12 +21663,6 @@ class AuroCombobox extends AuroElement {
21766
21663
  // setting the flag unconditionally here masks the user-typed open path.
21767
21664
  if (!this._userTyped) {
21768
21665
  this._programmaticFilterRefresh = true;
21769
- // Self-clear after this update cycle completes. This collapses
21770
- // the previous scattered clear-points into one and prevents the
21771
- // flag from surviving into the next user interaction.
21772
- this.updateComplete.then(() => {
21773
- this._programmaticFilterRefresh = false;
21774
- });
21775
21666
  }
21776
21667
 
21777
21668
  if (this.input.value !== this.value) {
@@ -21861,6 +21752,10 @@ class AuroCombobox extends AuroElement {
21861
21752
  } else if (!this.dropdown.isBibFullscreen) {
21862
21753
  this.hideBib();
21863
21754
  }
21755
+
21756
+ if (this._programmaticFilterRefresh) {
21757
+ this._programmaticFilterRefresh = false;
21758
+ }
21864
21759
  }
21865
21760
 
21866
21761
  if (changedProperties.has('error')) {
@@ -22042,7 +21937,7 @@ class AuroCombobox extends AuroElement {
22042
21937
  <slot @slotchange="${this.handleSlotChange}"></slot>
22043
21938
  <${this.inputTag}
22044
21939
  id="inputInBib"
22045
- ?autofocus="${this.dropdownOpen && this.dropdown?.isBibFullscreen}"
21940
+ autofocus
22046
21941
  @input="${this.handleInputValueChange}"
22047
21942
  .a11yActivedescendant="${this.dropdownOpen && this.optionActive ? this.optionActive.id : undefined}"
22048
21943
  .a11yControls=${`${this.dropdownId}-floater-bib`}