@aurodesignsystem-dev/auro-formkit 0.0.0-pr1497.0 → 0.0.0-pr1497.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 (132) hide show
  1. package/components/bibtemplate/dist/auro-bibtemplate.d.ts +7 -0
  2. package/components/bibtemplate/dist/index.js +9 -1
  3. package/components/bibtemplate/dist/registered.js +9 -1
  4. package/components/checkbox/demo/css-only.html +57 -0
  5. package/components/checkbox/demo/css-only.md +146 -0
  6. package/components/checkbox/demo/customize.min.js +1 -1
  7. package/components/checkbox/demo/getting-started.min.js +1 -1
  8. package/components/checkbox/demo/index.min.js +1 -1
  9. package/components/checkbox/demo/pages.json +1 -1
  10. package/components/checkbox/demo/styles.min.css +1 -1
  11. package/components/checkbox/demo/why-checkbox.html +57 -0
  12. package/components/checkbox/demo/why-checkbox.md +86 -0
  13. package/components/checkbox/dist/index.js +1 -1
  14. package/components/checkbox/dist/registered.js +1 -1
  15. package/components/combobox/demo/css-only.html +57 -0
  16. package/components/combobox/demo/css-only.md +209 -0
  17. package/components/combobox/demo/customize.min.js +250 -16
  18. package/components/combobox/demo/getting-started.min.js +250 -16
  19. package/components/combobox/demo/index.min.js +250 -16
  20. package/components/combobox/demo/pages.json +1 -1
  21. package/components/combobox/demo/styles.min.css +1 -1
  22. package/components/combobox/demo/why-combobox.html +57 -0
  23. package/components/combobox/demo/why-combobox.md +113 -0
  24. package/components/combobox/dist/index.js +250 -16
  25. package/components/combobox/dist/registered.js +250 -16
  26. package/components/counter/demo/css-only.html +57 -0
  27. package/components/counter/demo/css-only.md +184 -0
  28. package/components/counter/demo/customize.min.js +249 -15
  29. package/components/counter/demo/index.min.js +249 -15
  30. package/components/counter/demo/keyboard-behavior.md +1 -0
  31. package/components/counter/demo/pages.json +1 -1
  32. package/components/counter/demo/styles.min.css +1 -1
  33. package/components/counter/demo/why-counter.html +57 -0
  34. package/components/counter/demo/why-counter.md +108 -0
  35. package/components/counter/dist/index.js +10 -2
  36. package/components/counter/dist/registered.js +10 -2
  37. package/components/datepicker/demo/accessibility.md +54 -3
  38. package/components/datepicker/demo/api.md +63 -53
  39. package/components/datepicker/demo/css-only.html +57 -0
  40. package/components/datepicker/demo/css-only.md +151 -0
  41. package/components/datepicker/demo/customize.html +2 -0
  42. package/components/datepicker/demo/customize.js +19 -0
  43. package/components/datepicker/demo/customize.md +56 -0
  44. package/components/datepicker/demo/customize.min.js +36147 -0
  45. package/components/datepicker/demo/design.md +3 -1
  46. package/components/datepicker/demo/index.js +5 -1
  47. package/components/datepicker/demo/index.md +104 -15
  48. package/components/datepicker/demo/index.min.js +2485 -261
  49. package/components/datepicker/demo/keyboard-behavior.md +201 -2
  50. package/components/datepicker/demo/pages.json +1 -1
  51. package/components/datepicker/demo/styles.min.css +1 -1
  52. package/components/datepicker/demo/voiceover.md +21 -12
  53. package/components/datepicker/demo/why-datepicker.html +57 -0
  54. package/components/datepicker/demo/why-datepicker.md +133 -0
  55. package/components/datepicker/dist/index.js +2348 -211
  56. package/components/datepicker/dist/registered.js +2348 -211
  57. package/components/datepicker/dist/src/auro-calendar-cell.d.ts +113 -13
  58. package/components/datepicker/dist/src/auro-calendar-month.d.ts +38 -1
  59. package/components/datepicker/dist/src/auro-calendar.d.ts +258 -0
  60. package/components/datepicker/dist/src/auro-datepicker.d.ts +141 -41
  61. package/components/datepicker/dist/src/datepickerKeyboardStrategy.d.ts +5 -3
  62. package/components/dropdown/demo/accessibility.md +11 -0
  63. package/components/dropdown/demo/api.md +1 -0
  64. package/components/dropdown/demo/css-only.html +57 -0
  65. package/components/dropdown/demo/css-only.md +219 -0
  66. package/components/dropdown/demo/customize.md +3 -0
  67. package/components/dropdown/demo/customize.min.js +239 -13
  68. package/components/dropdown/demo/getting-started.min.js +239 -13
  69. package/components/dropdown/demo/index.min.js +239 -13
  70. package/components/dropdown/demo/keyboard-behavior.md +1 -0
  71. package/components/dropdown/demo/pages.json +1 -1
  72. package/components/dropdown/demo/styles.min.css +1 -1
  73. package/components/dropdown/demo/why-dropdown.html +57 -0
  74. package/components/dropdown/demo/why-dropdown.md +97 -0
  75. package/components/dropdown/dist/auro-dropdown.d.ts +34 -1
  76. package/components/dropdown/dist/index.js +239 -13
  77. package/components/dropdown/dist/registered.js +239 -13
  78. package/components/form/demo/css-only.html +57 -0
  79. package/components/form/demo/css-only.md +156 -0
  80. package/components/form/demo/customize.min.js +3098 -259
  81. package/components/form/demo/getting-started.min.js +3098 -259
  82. package/components/form/demo/index.min.js +3098 -259
  83. package/components/form/demo/pages.json +1 -1
  84. package/components/form/demo/registerDemoDeps.min.js +3098 -259
  85. package/components/form/demo/styles.min.css +1 -1
  86. package/components/form/demo/why-form.html +57 -0
  87. package/components/form/demo/why-form.md +101 -0
  88. package/components/input/demo/css-only.html +57 -0
  89. package/components/input/demo/css-only.md +199 -0
  90. package/components/input/demo/customize.min.js +1 -1
  91. package/components/input/demo/getting-started.min.js +1 -1
  92. package/components/input/demo/index.min.js +1 -1
  93. package/components/input/demo/pages.json +1 -1
  94. package/components/input/demo/styles.min.css +1 -1
  95. package/components/input/demo/why-input.html +57 -0
  96. package/components/input/demo/why-input.md +121 -0
  97. package/components/input/dist/index.js +1 -1
  98. package/components/input/dist/registered.js +1 -1
  99. package/components/menu/demo/css-only.html +57 -0
  100. package/components/menu/demo/css-only.md +166 -0
  101. package/components/menu/demo/pages.json +1 -1
  102. package/components/menu/demo/styles.min.css +1 -1
  103. package/components/menu/demo/why-menu.html +57 -0
  104. package/components/menu/demo/why-menu.md +104 -0
  105. package/components/radio/demo/css-only.html +57 -0
  106. package/components/radio/demo/css-only.md +151 -0
  107. package/components/radio/demo/customize.min.js +1764 -0
  108. package/components/radio/demo/demo-support.min.js +55807 -0
  109. package/components/radio/demo/getting-started.js +1 -1
  110. package/components/radio/demo/getting-started.md +1 -1
  111. package/components/radio/demo/getting-started.min.js +1783 -0
  112. package/components/radio/demo/index.min.js +1 -1
  113. package/components/radio/demo/pages.json +1 -1
  114. package/components/radio/demo/styles.min.css +1 -1
  115. package/components/radio/demo/why-radio.html +57 -0
  116. package/components/radio/demo/why-radio.md +92 -0
  117. package/components/radio/dist/index.js +1 -1
  118. package/components/radio/dist/registered.js +1 -1
  119. package/components/select/demo/css-only.html +57 -0
  120. package/components/select/demo/css-only.md +203 -0
  121. package/components/select/demo/customize.min.js +249 -15
  122. package/components/select/demo/getting-started.min.js +249 -15
  123. package/components/select/demo/index.min.js +249 -15
  124. package/components/select/demo/keyboard-behavior.md +1 -0
  125. package/components/select/demo/pages.json +1 -1
  126. package/components/select/demo/styles.min.css +1 -1
  127. package/components/select/demo/why-select.html +57 -0
  128. package/components/select/demo/why-select.md +128 -0
  129. package/components/select/dist/index.js +249 -15
  130. package/components/select/dist/registered.js +249 -15
  131. package/custom-elements.json +2700 -1621
  132. package/package.json +8 -8
@@ -4225,7 +4225,7 @@ function applyKeyboardStrategy(component, strategy, options = {}) {
4225
4225
  });
4226
4226
  }
4227
4227
 
4228
- var styleCss$2$1 = i$7`:host{position:fixed;z-index:var(--depth-tooltip, 400);display:none;isolation:isolate}:host dialog{width:auto;max-width:none;height:auto;max-height:none;padding:0;border:none;margin:0;outline:none;transform:translateZ(0)}:host dialog::backdrop{background:transparent}:host(:not([isfullscreen])) dialog{position:relative;inset:unset}:host(:not([isfullscreen])) .container.shape-box{border-radius:unset}:host(:not([isfullscreen])) .container[class*=shape-pill],:host(:not([isfullscreen])) .container[class*=shape-snowflake]{border-radius:30px}:host(:not([isfullscreen])) .container[class*=shape-rounded]{border-radius:16px}:host(:not([matchWidth])) .container{min-width:fit-content}:host([isfullscreen]){position:fixed;top:0;left:0}:host([isfullscreen]) .container{width:100dvw;max-width:none;height:100dvh;max-height:none;border-radius:unset;margin-top:0;box-shadow:unset;overscroll-behavior:contain}:host([isfullscreen]) .container::backdrop{background:var(--ds-color-background-primary, #fff)}:host(:popover-open){position:fixed;overflow:visible;padding:0;border:none;margin:0;background:transparent;inset:unset;outline:none}:host([data-show]){display:flex}:host([common]:not([isfullscreen])) .container,:host([rounded]:not([isfullscreen])) .container{border-radius:var(--ds-border-radius, 0.375rem)}:host([common][isfullscreen]) .container,:host([rounded][isfullscreen]) .container{border-radius:unset;box-shadow:unset}.container{display:inline-block;overflow:auto;box-sizing:border-box;border-radius:var(--ds-border-radius, 0.375rem);margin:var(--ds-size-50, 0.25rem) 0}.util_displayHiddenVisually{position:absolute;overflow:hidden;width:1px;height:1px;padding:0;border:0;margin:-1px;clip-path:inset(50%);white-space:nowrap}`;
4228
+ var styleCss$2$1 = i$7`:host{position:fixed;z-index:var(--depth-tooltip, 400);display:none;isolation:isolate}:host dialog{width:auto;max-width:none;height:auto;max-height:none;padding:0;border:none;margin:0;outline:none;transform:translateZ(0)}:host dialog::backdrop{background:transparent}:host(:not([isfullscreen])) dialog{position:relative;inset:unset}:host(:not([isfullscreen])) .container.shape-box{border-radius:unset}:host(:not([isfullscreen])) .container[class*=shape-pill],:host(:not([isfullscreen])) .container[class*=shape-snowflake]{border-radius:30px}:host(:not([isfullscreen])) .container[class*=shape-rounded]{border-radius:16px}:host([desktopmodal]:popover-open)::backdrop{background:transparent}:host(:not([matchWidth])) .container{min-width:fit-content}:host([isfullscreen]){position:fixed;top:0;left:0}:host([isfullscreen]) .container{width:100dvw;max-width:none;height:100dvh;max-height:none;border-radius:unset;margin-top:0;box-shadow:unset;overscroll-behavior:contain}:host([isfullscreen]) .container::backdrop{background:var(--ds-color-background-primary, #fff)}:host(:popover-open){position:fixed;overflow:visible;padding:0;border:none;margin:0;background:transparent;inset:unset;outline:none}:host([data-show]){display:flex}:host([common]:not([isfullscreen])) .container,:host([rounded]:not([isfullscreen])) .container{border-radius:var(--ds-border-radius, 0.375rem)}:host([common][isfullscreen]) .container,:host([rounded][isfullscreen]) .container{border-radius:unset;box-shadow:unset}.container{display:inline-block;overflow:auto;box-sizing:border-box;border-radius:var(--ds-border-radius, 0.375rem);margin:var(--ds-size-50, 0.25rem) 0}.util_displayHiddenVisually{position:absolute;overflow:hidden;width:1px;height:1px;padding:0;border:0;margin:-1px;clip-path:inset(50%);white-space:nowrap}`;
4229
4229
 
4230
4230
  var colorCss$2$1 = i$7`.container{background-color:var(--ds-auro-dropdownbib-container-color);box-shadow:var(--ds-auro-dropdownbib-boxshadow-color);color:var(--ds-auro-dropdownbib-text-color)}`;
4231
4231
 
@@ -4856,7 +4856,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$4 {
4856
4856
  }
4857
4857
  };
4858
4858
 
4859
- var formkitVersion$2 = '202606081518';
4859
+ var formkitVersion$2 = '202606081833';
4860
4860
 
4861
4861
  let AuroElement$2 = class AuroElement extends i$4 {
4862
4862
  static get properties() {
@@ -5036,6 +5036,7 @@ class AuroDropdown extends AuroElement$2 {
5036
5036
  _intializeDefaults() {
5037
5037
  this.appearance = 'default';
5038
5038
  this.chevron = false;
5039
+ this.desktopModal = false;
5039
5040
  this.disabled = false;
5040
5041
  this.disableKeyboardHandling = false;
5041
5042
  this.error = false;
@@ -5216,6 +5217,14 @@ class AuroDropdown extends AuroElement$2 {
5216
5217
  reflect: true
5217
5218
  },
5218
5219
 
5220
+ /**
5221
+ * If declared, the dropdown will behave as a modal dialog when in a desktop viewport size.
5222
+ */
5223
+ desktopModal: {
5224
+ type: Boolean,
5225
+ reflect: true
5226
+ },
5227
+
5219
5228
  /**
5220
5229
  * If declared, the dropdown will only show by calling the API .show() public method.
5221
5230
  */
@@ -5503,6 +5512,15 @@ class AuroDropdown extends AuroElement$2 {
5503
5512
 
5504
5513
  disconnectedCallback() {
5505
5514
  super.disconnectedCallback();
5515
+ this._clearPageInert();
5516
+ if (this._bibTabHandler) {
5517
+ this.removeEventListener('keydown', this._bibTabHandler);
5518
+ this._bibTabHandler = undefined;
5519
+ }
5520
+ if (this.focusTrap) {
5521
+ this.focusTrap.disconnect();
5522
+ this.focusTrap = undefined;
5523
+ }
5506
5524
  if (this.floater) {
5507
5525
  this.floater.hideBib('disconnect');
5508
5526
  this.floater.disconnect();
@@ -5530,19 +5548,45 @@ class AuroDropdown extends AuroElement$2 {
5530
5548
  if (this.isPopoverVisible) {
5531
5549
  // Fullscreen: use showModal() for native accessibility (inert outside, focus trap)
5532
5550
  // Desktop: use show() for Floating UI positioning + FocusTrap for focus management
5533
- const useModal = this.isBibFullscreen;
5534
- this.bibElement.value.open(useModal);
5551
+ this.bibElement.value.open(this.isBibFullscreen);
5552
+ this.updateFocusTrap();
5553
+
5554
+ // Desktop modal: make siblings inert so content outside is not interactive
5555
+ if (this.desktopModal && !this.isBibFullscreen) {
5556
+ this._setPageInert();
5557
+ }
5535
5558
  } else {
5536
5559
  this.bibElement.value.close();
5560
+ this._clearPageInert();
5537
5561
  }
5538
5562
  }
5539
5563
 
5540
5564
  // When fullscreen strategy changes while open, re-open dialog with correct mode
5541
5565
  // (e.g. resizing from desktop → mobile while dropdown is open)
5542
5566
  if (changedProperties.has('isBibFullscreen') && this.isPopoverVisible && this.bibElement.value) {
5543
- const useModal = this.isBibFullscreen;
5544
5567
  this.bibElement.value.close();
5545
- this.bibElement.value.open(useModal);
5568
+ this.bibElement.value.open(this.isBibFullscreen);
5569
+
5570
+ // Re-initialize focus management for the new strategy
5571
+ this.updateFocusTrap();
5572
+
5573
+ // Toggle inert: desktop modal needs it, fullscreen showModal() handles it natively
5574
+ if (this.desktopModal && !this.isBibFullscreen) {
5575
+ this._setPageInert();
5576
+ } else {
5577
+ this._clearPageInert();
5578
+ }
5579
+ }
5580
+
5581
+ // Handle desktopModal toggled while the dropdown is already open.
5582
+ // Re-initialize focus trapping and page inert state to match the new mode.
5583
+ if (changedProperties.has('desktopModal') && this.isPopoverVisible && !this.isBibFullscreen) {
5584
+ this.updateFocusTrap();
5585
+ if (this.desktopModal) {
5586
+ this._setPageInert();
5587
+ } else {
5588
+ this._clearPageInert();
5589
+ }
5546
5590
  }
5547
5591
  }
5548
5592
 
@@ -5552,8 +5596,14 @@ class AuroDropdown extends AuroElement$2 {
5552
5596
  * @param {CustomEvent} event - The custom event that contains the dropdown toggle information.
5553
5597
  */
5554
5598
  handleDropdownToggle(event) {
5555
- this.updateFocusTrap();
5556
5599
  this.isPopoverVisible = event.detail.expanded;
5600
+
5601
+ // Tear down FocusTrap when closing. Creation happens in updated()
5602
+ // after the dialog is open so getFocusableElements can find content.
5603
+ if (!this.isPopoverVisible) {
5604
+ this.updateFocusTrap();
5605
+ }
5606
+
5557
5607
  const eventType = event.detail.eventType || "unknown";
5558
5608
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
5559
5609
  this.trigger.focus();
@@ -5652,19 +5702,194 @@ class AuroDropdown extends AuroElement$2 {
5652
5702
  * @private
5653
5703
  */
5654
5704
  updateFocusTrap() {
5705
+ // Always clean up existing handlers/traps before setting up new ones
5706
+ // to prevent duplicate listeners on repeated calls.
5707
+ if (this._bibTabHandler) {
5708
+ this.removeEventListener('keydown', this._bibTabHandler);
5709
+ this._bibTabHandler = undefined;
5710
+ }
5711
+
5712
+ if (this.focusTrap) {
5713
+ this.focusTrap.disconnect();
5714
+ this.focusTrap = undefined;
5715
+ }
5716
+
5655
5717
  if (this.isPopoverVisible) {
5656
5718
  if (!this.isBibFullscreen) {
5657
- // Desktop: show() doesn't trap focus, so use FocusTrap
5658
- this.focusTrap = new FocusTrap(this.bibContent);
5659
- this.focusTrap.focusFirstElement();
5719
+ if (this.desktopModal) {
5720
+ // Desktop modal: trap focus only within the bib content.
5721
+ // Can't use FocusTrap on the bib element because keydown events
5722
+ // from slotted content bubble through the dropdown host (light DOM),
5723
+ // not through the bib (shadow projection target). Using FocusTrap
5724
+ // on the dropdown would include the trigger in the tab cycle.
5725
+ // Instead, listen for Tab on the dropdown and manually wrap focus
5726
+ // within the bib's focusable elements.
5727
+ this._bibTabHandler = (event) => {
5728
+ if (event.key !== 'Tab') {
5729
+ return;
5730
+ }
5731
+
5732
+ // Collect focusable elements from the bib content.
5733
+ const focusables = getFocusableElements(this.bibContent);
5734
+
5735
+ // Fallback: try from slotted content directly
5736
+ if (!focusables.length) {
5737
+ const slot = this.shadowRoot.querySelector('.slotContent slot');
5738
+ const assignedNodes = slot ? slot.assignedNodes({ flatten: true }) : [];
5739
+
5740
+ for (const node of assignedNodes) {
5741
+ if (node.nodeType === Node.ELEMENT_NODE) {
5742
+ focusables.push(...getFocusableElements(node));
5743
+ }
5744
+ }
5745
+ }
5746
+
5747
+ if (!focusables.length) {
5748
+ return;
5749
+ }
5750
+
5751
+ event.preventDefault();
5752
+
5753
+ const direction = event.shiftKey ? -1 : 1; // eslint-disable-line no-magic-numbers
5754
+
5755
+ // Walk the active element chain through shadow roots
5756
+ const actives = this._getActiveElements();
5757
+
5758
+ let idx = focusables.findIndex((el) => actives.includes(el));
5759
+
5760
+ if (idx === -1) { // eslint-disable-line no-magic-numbers
5761
+ // Focus is not on a known element — move to first/last
5762
+ idx = direction === 1 ? -1 : focusables.length; // eslint-disable-line no-magic-numbers
5763
+ }
5764
+
5765
+ // Try each element in order, skipping any that can't receive focus
5766
+ // (e.g. hidden elements, elements in collapsed sections)
5767
+ for (let index = 0; index < focusables.length; index++) { // eslint-disable-line no-plusplus
5768
+ let nextIdx = idx + direction;
5769
+
5770
+ // Wrap around
5771
+ if (nextIdx < 0) {
5772
+ nextIdx = focusables.length - 1;
5773
+ } else if (nextIdx >= focusables.length) {
5774
+ nextIdx = 0;
5775
+ }
5776
+
5777
+ focusables[nextIdx].focus();
5778
+
5779
+ // Verify focus actually moved to the target
5780
+ const newActives = this._getActiveElements();
5781
+
5782
+ if (newActives.includes(focusables[nextIdx])) {
5783
+ return;
5784
+ }
5785
+
5786
+ // Focus didn't stick — skip this element and try the next
5787
+ idx = nextIdx;
5788
+ }
5789
+ };
5790
+ this.addEventListener('keydown', this._bibTabHandler);
5791
+
5792
+ // Move initial focus into the bib content, matching FocusTrap behavior
5793
+ requestAnimationFrame(() => {
5794
+ const focusables = getFocusableElements(this.bibContent);
5795
+ if (focusables.length) {
5796
+ focusables[0].focus();
5797
+ }
5798
+ });
5799
+ } else {
5800
+ // Normal desktop: use FocusTrap on the bib element
5801
+ this.focusTrap = new FocusTrap(this.bibContent);
5802
+ this.focusTrap.focusFirstElement();
5803
+ }
5660
5804
  }
5661
5805
  // Fullscreen: showModal() provides native focus trapping
5806
+ }
5807
+ }
5808
+
5809
+ /**
5810
+ * Returns the chain of active (focused) elements through shadow roots.
5811
+ * @private
5812
+ * @returns {Array<HTMLElement>}
5813
+ */
5814
+ _getActiveElements() {
5815
+ let { activeElement } = document;
5816
+ const actives = [activeElement];
5817
+
5818
+ while (activeElement?.shadowRoot?.activeElement) {
5819
+ activeElement = activeElement.shadowRoot.activeElement;
5820
+ actives.push(activeElement);
5821
+ }
5822
+
5823
+ return actives;
5824
+ }
5825
+
5826
+ /**
5827
+ * Sets `inert` on sibling elements of the dropdown's top-level host
5828
+ * so that content outside the dropdown is not interactive while the modal is open.
5829
+ * Walks up through shadow DOM boundaries to find the outermost host element
5830
+ * in the light DOM, then sets `inert` on siblings at each ancestor level
5831
+ * to ensure all page content outside the host subtree is inert.
5832
+ * @private
5833
+ */
5834
+ _setPageInert() {
5835
+ if (this._inertSiblings) {
5662
5836
  return;
5663
5837
  }
5664
5838
 
5665
- if (this.focusTrap) {
5666
- this.focusTrap.disconnect();
5667
- this.focusTrap = undefined;
5839
+ this._inertSiblings = [];
5840
+
5841
+ // Walk up through shadow DOM boundaries to find the topmost host
5842
+ // element in the light DOM. For example, if this dropdown is inside
5843
+ // auro-datepicker's shadow DOM, we walk up to the datepicker element
5844
+ // so we set inert on its siblings — not on the datepicker itself.
5845
+ let host = this;
5846
+ while (host.getRootNode() instanceof ShadowRoot) {
5847
+ host = host.getRootNode().host;
5848
+ }
5849
+
5850
+ // Walk up the ancestor chain, inerting siblings at each level
5851
+ // to ensure the entire page outside the host subtree is inert.
5852
+ // Uses a reference counter (data-auro-inert-count) so multiple
5853
+ // simultaneous modal dropdowns share inert state safely.
5854
+ let current = host;
5855
+ while (current.parentElement) {
5856
+ const parent = current.parentElement;
5857
+ for (const sibling of parent.children) {
5858
+ if (sibling !== current) {
5859
+ const count = parseInt(sibling.dataset.auroInertCount || '0', 10);
5860
+ if (count === 0) {
5861
+ sibling.dataset.auroInertWas = sibling.inert ? 'true' : 'false';
5862
+ }
5863
+ sibling.dataset.auroInertCount = String(count + 1);
5864
+ sibling.inert = true;
5865
+ this._inertSiblings.push(sibling);
5866
+ }
5867
+ }
5868
+ current = parent;
5869
+ }
5870
+ }
5871
+
5872
+ /**
5873
+ * Restores `inert` state on siblings that were tracked by `_setPageInert`.
5874
+ * Uses reference counting so inert is only cleared when the last modal
5875
+ * dropdown releases a given element. Preserves the original inert state
5876
+ * so externally-inerted elements are not inadvertently re-enabled.
5877
+ * @private
5878
+ */
5879
+ _clearPageInert() {
5880
+ if (this._inertSiblings) {
5881
+ for (const sibling of this._inertSiblings) {
5882
+ const count = parseInt(sibling.dataset.auroInertCount || '1', 10) - 1;
5883
+ if (count <= 0) {
5884
+ const wasInert = sibling.dataset.auroInertWas === 'true';
5885
+ delete sibling.dataset.auroInertCount;
5886
+ delete sibling.dataset.auroInertWas;
5887
+ sibling.inert = wasInert;
5888
+ } else {
5889
+ sibling.dataset.auroInertCount = String(count);
5890
+ }
5891
+ }
5892
+ this._inertSiblings = undefined;
5668
5893
  }
5669
5894
  }
5670
5895
 
@@ -5903,6 +6128,7 @@ class AuroDropdown extends AuroElement$2 {
5903
6128
  shape="${this.shape}"
5904
6129
  ?data-show="${this.isPopoverVisible}"
5905
6130
  ?isfullscreen="${this.isBibFullscreen}"
6131
+ ?desktopmodal="${this.desktopModal}"
5906
6132
  .dialogLabel="${this.bibDialogLabel}"
5907
6133
  ${n$2(this.bibElement)}
5908
6134
  >
@@ -18114,7 +18340,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$4 {
18114
18340
  }
18115
18341
  };
18116
18342
 
18117
- var formkitVersion$1 = '202606081518';
18343
+ var formkitVersion$1 = '202606081833';
18118
18344
 
18119
18345
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18120
18346
  // See LICENSE in the project root for license information.
@@ -19120,6 +19346,14 @@ class AuroBibtemplate extends i$4 {
19120
19346
  large: {
19121
19347
  type: Boolean,
19122
19348
  reflect: true
19349
+ },
19350
+
19351
+ /**
19352
+ * If declared, the footer slot will be rendered even when not in fullscreen mode.
19353
+ */
19354
+ showFooter: {
19355
+ type: Boolean,
19356
+ reflect: true
19123
19357
  }
19124
19358
  };
19125
19359
  }
@@ -19222,7 +19456,7 @@ class AuroBibtemplate extends i$4 {
19222
19456
  <slot></slot>
19223
19457
  </div>
19224
19458
 
19225
- ${this.isFullscreen ? u$7`
19459
+ ${this.isFullscreen || this.showFooter ? u$7`
19226
19460
  <div id="footerContainer">
19227
19461
  <slot name="footer"></slot>
19228
19462
  </div>` : null}
@@ -19231,7 +19465,7 @@ class AuroBibtemplate extends i$4 {
19231
19465
  }
19232
19466
  }
19233
19467
 
19234
- var formkitVersion = '202606081518';
19468
+ var formkitVersion = '202606081833';
19235
19469
 
19236
19470
  var styleCss$3 = i$7`.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}`;
19237
19471