@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
@@ -4313,7 +4313,7 @@ function applyKeyboardStrategy(component, strategy, options = {}) {
4313
4313
  });
4314
4314
  }
4315
4315
 
4316
- var styleCss$2$1 = i$6`: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}`;
4316
+ var styleCss$2$1 = i$6`: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}`;
4317
4317
 
4318
4318
  var colorCss$2$1 = i$6`.container{background-color:var(--ds-auro-dropdownbib-container-color);box-shadow:var(--ds-auro-dropdownbib-boxshadow-color);color:var(--ds-auro-dropdownbib-text-color)}`;
4319
4319
 
@@ -4944,7 +4944,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
4944
4944
  }
4945
4945
  };
4946
4946
 
4947
- var formkitVersion$1 = '202606081518';
4947
+ var formkitVersion$1 = '202606081833';
4948
4948
 
4949
4949
  class AuroElement extends i$3 {
4950
4950
  static get properties() {
@@ -5124,6 +5124,7 @@ class AuroDropdown extends AuroElement {
5124
5124
  _intializeDefaults() {
5125
5125
  this.appearance = 'default';
5126
5126
  this.chevron = false;
5127
+ this.desktopModal = false;
5127
5128
  this.disabled = false;
5128
5129
  this.disableKeyboardHandling = false;
5129
5130
  this.error = false;
@@ -5304,6 +5305,14 @@ class AuroDropdown extends AuroElement {
5304
5305
  reflect: true
5305
5306
  },
5306
5307
 
5308
+ /**
5309
+ * If declared, the dropdown will behave as a modal dialog when in a desktop viewport size.
5310
+ */
5311
+ desktopModal: {
5312
+ type: Boolean,
5313
+ reflect: true
5314
+ },
5315
+
5307
5316
  /**
5308
5317
  * If declared, the dropdown will only show by calling the API .show() public method.
5309
5318
  */
@@ -5591,6 +5600,15 @@ class AuroDropdown extends AuroElement {
5591
5600
 
5592
5601
  disconnectedCallback() {
5593
5602
  super.disconnectedCallback();
5603
+ this._clearPageInert();
5604
+ if (this._bibTabHandler) {
5605
+ this.removeEventListener('keydown', this._bibTabHandler);
5606
+ this._bibTabHandler = undefined;
5607
+ }
5608
+ if (this.focusTrap) {
5609
+ this.focusTrap.disconnect();
5610
+ this.focusTrap = undefined;
5611
+ }
5594
5612
  if (this.floater) {
5595
5613
  this.floater.hideBib('disconnect');
5596
5614
  this.floater.disconnect();
@@ -5618,19 +5636,45 @@ class AuroDropdown extends AuroElement {
5618
5636
  if (this.isPopoverVisible) {
5619
5637
  // Fullscreen: use showModal() for native accessibility (inert outside, focus trap)
5620
5638
  // Desktop: use show() for Floating UI positioning + FocusTrap for focus management
5621
- const useModal = this.isBibFullscreen;
5622
- this.bibElement.value.open(useModal);
5639
+ this.bibElement.value.open(this.isBibFullscreen);
5640
+ this.updateFocusTrap();
5641
+
5642
+ // Desktop modal: make siblings inert so content outside is not interactive
5643
+ if (this.desktopModal && !this.isBibFullscreen) {
5644
+ this._setPageInert();
5645
+ }
5623
5646
  } else {
5624
5647
  this.bibElement.value.close();
5648
+ this._clearPageInert();
5625
5649
  }
5626
5650
  }
5627
5651
 
5628
5652
  // When fullscreen strategy changes while open, re-open dialog with correct mode
5629
5653
  // (e.g. resizing from desktop → mobile while dropdown is open)
5630
5654
  if (changedProperties.has('isBibFullscreen') && this.isPopoverVisible && this.bibElement.value) {
5631
- const useModal = this.isBibFullscreen;
5632
5655
  this.bibElement.value.close();
5633
- this.bibElement.value.open(useModal);
5656
+ this.bibElement.value.open(this.isBibFullscreen);
5657
+
5658
+ // Re-initialize focus management for the new strategy
5659
+ this.updateFocusTrap();
5660
+
5661
+ // Toggle inert: desktop modal needs it, fullscreen showModal() handles it natively
5662
+ if (this.desktopModal && !this.isBibFullscreen) {
5663
+ this._setPageInert();
5664
+ } else {
5665
+ this._clearPageInert();
5666
+ }
5667
+ }
5668
+
5669
+ // Handle desktopModal toggled while the dropdown is already open.
5670
+ // Re-initialize focus trapping and page inert state to match the new mode.
5671
+ if (changedProperties.has('desktopModal') && this.isPopoverVisible && !this.isBibFullscreen) {
5672
+ this.updateFocusTrap();
5673
+ if (this.desktopModal) {
5674
+ this._setPageInert();
5675
+ } else {
5676
+ this._clearPageInert();
5677
+ }
5634
5678
  }
5635
5679
  }
5636
5680
 
@@ -5640,8 +5684,14 @@ class AuroDropdown extends AuroElement {
5640
5684
  * @param {CustomEvent} event - The custom event that contains the dropdown toggle information.
5641
5685
  */
5642
5686
  handleDropdownToggle(event) {
5643
- this.updateFocusTrap();
5644
5687
  this.isPopoverVisible = event.detail.expanded;
5688
+
5689
+ // Tear down FocusTrap when closing. Creation happens in updated()
5690
+ // after the dialog is open so getFocusableElements can find content.
5691
+ if (!this.isPopoverVisible) {
5692
+ this.updateFocusTrap();
5693
+ }
5694
+
5645
5695
  const eventType = event.detail.eventType || "unknown";
5646
5696
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
5647
5697
  this.trigger.focus();
@@ -5740,19 +5790,194 @@ class AuroDropdown extends AuroElement {
5740
5790
  * @private
5741
5791
  */
5742
5792
  updateFocusTrap() {
5793
+ // Always clean up existing handlers/traps before setting up new ones
5794
+ // to prevent duplicate listeners on repeated calls.
5795
+ if (this._bibTabHandler) {
5796
+ this.removeEventListener('keydown', this._bibTabHandler);
5797
+ this._bibTabHandler = undefined;
5798
+ }
5799
+
5800
+ if (this.focusTrap) {
5801
+ this.focusTrap.disconnect();
5802
+ this.focusTrap = undefined;
5803
+ }
5804
+
5743
5805
  if (this.isPopoverVisible) {
5744
5806
  if (!this.isBibFullscreen) {
5745
- // Desktop: show() doesn't trap focus, so use FocusTrap
5746
- this.focusTrap = new FocusTrap(this.bibContent);
5747
- this.focusTrap.focusFirstElement();
5807
+ if (this.desktopModal) {
5808
+ // Desktop modal: trap focus only within the bib content.
5809
+ // Can't use FocusTrap on the bib element because keydown events
5810
+ // from slotted content bubble through the dropdown host (light DOM),
5811
+ // not through the bib (shadow projection target). Using FocusTrap
5812
+ // on the dropdown would include the trigger in the tab cycle.
5813
+ // Instead, listen for Tab on the dropdown and manually wrap focus
5814
+ // within the bib's focusable elements.
5815
+ this._bibTabHandler = (event) => {
5816
+ if (event.key !== 'Tab') {
5817
+ return;
5818
+ }
5819
+
5820
+ // Collect focusable elements from the bib content.
5821
+ const focusables = getFocusableElements(this.bibContent);
5822
+
5823
+ // Fallback: try from slotted content directly
5824
+ if (!focusables.length) {
5825
+ const slot = this.shadowRoot.querySelector('.slotContent slot');
5826
+ const assignedNodes = slot ? slot.assignedNodes({ flatten: true }) : [];
5827
+
5828
+ for (const node of assignedNodes) {
5829
+ if (node.nodeType === Node.ELEMENT_NODE) {
5830
+ focusables.push(...getFocusableElements(node));
5831
+ }
5832
+ }
5833
+ }
5834
+
5835
+ if (!focusables.length) {
5836
+ return;
5837
+ }
5838
+
5839
+ event.preventDefault();
5840
+
5841
+ const direction = event.shiftKey ? -1 : 1; // eslint-disable-line no-magic-numbers
5842
+
5843
+ // Walk the active element chain through shadow roots
5844
+ const actives = this._getActiveElements();
5845
+
5846
+ let idx = focusables.findIndex((el) => actives.includes(el));
5847
+
5848
+ if (idx === -1) { // eslint-disable-line no-magic-numbers
5849
+ // Focus is not on a known element — move to first/last
5850
+ idx = direction === 1 ? -1 : focusables.length; // eslint-disable-line no-magic-numbers
5851
+ }
5852
+
5853
+ // Try each element in order, skipping any that can't receive focus
5854
+ // (e.g. hidden elements, elements in collapsed sections)
5855
+ for (let index = 0; index < focusables.length; index++) { // eslint-disable-line no-plusplus
5856
+ let nextIdx = idx + direction;
5857
+
5858
+ // Wrap around
5859
+ if (nextIdx < 0) {
5860
+ nextIdx = focusables.length - 1;
5861
+ } else if (nextIdx >= focusables.length) {
5862
+ nextIdx = 0;
5863
+ }
5864
+
5865
+ focusables[nextIdx].focus();
5866
+
5867
+ // Verify focus actually moved to the target
5868
+ const newActives = this._getActiveElements();
5869
+
5870
+ if (newActives.includes(focusables[nextIdx])) {
5871
+ return;
5872
+ }
5873
+
5874
+ // Focus didn't stick — skip this element and try the next
5875
+ idx = nextIdx;
5876
+ }
5877
+ };
5878
+ this.addEventListener('keydown', this._bibTabHandler);
5879
+
5880
+ // Move initial focus into the bib content, matching FocusTrap behavior
5881
+ requestAnimationFrame(() => {
5882
+ const focusables = getFocusableElements(this.bibContent);
5883
+ if (focusables.length) {
5884
+ focusables[0].focus();
5885
+ }
5886
+ });
5887
+ } else {
5888
+ // Normal desktop: use FocusTrap on the bib element
5889
+ this.focusTrap = new FocusTrap(this.bibContent);
5890
+ this.focusTrap.focusFirstElement();
5891
+ }
5748
5892
  }
5749
5893
  // Fullscreen: showModal() provides native focus trapping
5894
+ }
5895
+ }
5896
+
5897
+ /**
5898
+ * Returns the chain of active (focused) elements through shadow roots.
5899
+ * @private
5900
+ * @returns {Array<HTMLElement>}
5901
+ */
5902
+ _getActiveElements() {
5903
+ let { activeElement } = document;
5904
+ const actives = [activeElement];
5905
+
5906
+ while (activeElement?.shadowRoot?.activeElement) {
5907
+ activeElement = activeElement.shadowRoot.activeElement;
5908
+ actives.push(activeElement);
5909
+ }
5910
+
5911
+ return actives;
5912
+ }
5913
+
5914
+ /**
5915
+ * Sets `inert` on sibling elements of the dropdown's top-level host
5916
+ * so that content outside the dropdown is not interactive while the modal is open.
5917
+ * Walks up through shadow DOM boundaries to find the outermost host element
5918
+ * in the light DOM, then sets `inert` on siblings at each ancestor level
5919
+ * to ensure all page content outside the host subtree is inert.
5920
+ * @private
5921
+ */
5922
+ _setPageInert() {
5923
+ if (this._inertSiblings) {
5750
5924
  return;
5751
5925
  }
5752
5926
 
5753
- if (this.focusTrap) {
5754
- this.focusTrap.disconnect();
5755
- this.focusTrap = undefined;
5927
+ this._inertSiblings = [];
5928
+
5929
+ // Walk up through shadow DOM boundaries to find the topmost host
5930
+ // element in the light DOM. For example, if this dropdown is inside
5931
+ // auro-datepicker's shadow DOM, we walk up to the datepicker element
5932
+ // so we set inert on its siblings — not on the datepicker itself.
5933
+ let host = this;
5934
+ while (host.getRootNode() instanceof ShadowRoot) {
5935
+ host = host.getRootNode().host;
5936
+ }
5937
+
5938
+ // Walk up the ancestor chain, inerting siblings at each level
5939
+ // to ensure the entire page outside the host subtree is inert.
5940
+ // Uses a reference counter (data-auro-inert-count) so multiple
5941
+ // simultaneous modal dropdowns share inert state safely.
5942
+ let current = host;
5943
+ while (current.parentElement) {
5944
+ const parent = current.parentElement;
5945
+ for (const sibling of parent.children) {
5946
+ if (sibling !== current) {
5947
+ const count = parseInt(sibling.dataset.auroInertCount || '0', 10);
5948
+ if (count === 0) {
5949
+ sibling.dataset.auroInertWas = sibling.inert ? 'true' : 'false';
5950
+ }
5951
+ sibling.dataset.auroInertCount = String(count + 1);
5952
+ sibling.inert = true;
5953
+ this._inertSiblings.push(sibling);
5954
+ }
5955
+ }
5956
+ current = parent;
5957
+ }
5958
+ }
5959
+
5960
+ /**
5961
+ * Restores `inert` state on siblings that were tracked by `_setPageInert`.
5962
+ * Uses reference counting so inert is only cleared when the last modal
5963
+ * dropdown releases a given element. Preserves the original inert state
5964
+ * so externally-inerted elements are not inadvertently re-enabled.
5965
+ * @private
5966
+ */
5967
+ _clearPageInert() {
5968
+ if (this._inertSiblings) {
5969
+ for (const sibling of this._inertSiblings) {
5970
+ const count = parseInt(sibling.dataset.auroInertCount || '1', 10) - 1;
5971
+ if (count <= 0) {
5972
+ const wasInert = sibling.dataset.auroInertWas === 'true';
5973
+ delete sibling.dataset.auroInertCount;
5974
+ delete sibling.dataset.auroInertWas;
5975
+ sibling.inert = wasInert;
5976
+ } else {
5977
+ sibling.dataset.auroInertCount = String(count);
5978
+ }
5979
+ }
5980
+ this._inertSiblings = undefined;
5756
5981
  }
5757
5982
  }
5758
5983
 
@@ -5991,6 +6216,7 @@ class AuroDropdown extends AuroElement {
5991
6216
  shape="${this.shape}"
5992
6217
  ?data-show="${this.isPopoverVisible}"
5993
6218
  ?isfullscreen="${this.isBibFullscreen}"
6219
+ ?desktopmodal="${this.desktopModal}"
5994
6220
  .dialogLabel="${this.bibDialogLabel}"
5995
6221
  ${n$2(this.bibElement)}
5996
6222
  >
@@ -6358,6 +6584,14 @@ class AuroBibtemplate extends i$3 {
6358
6584
  large: {
6359
6585
  type: Boolean,
6360
6586
  reflect: true
6587
+ },
6588
+
6589
+ /**
6590
+ * If declared, the footer slot will be rendered even when not in fullscreen mode.
6591
+ */
6592
+ showFooter: {
6593
+ type: Boolean,
6594
+ reflect: true
6361
6595
  }
6362
6596
  };
6363
6597
  }
@@ -6460,7 +6694,7 @@ class AuroBibtemplate extends i$3 {
6460
6694
  <slot></slot>
6461
6695
  </div>
6462
6696
 
6463
- ${this.isFullscreen ? u$4`
6697
+ ${this.isFullscreen || this.showFooter ? u$4`
6464
6698
  <div id="footerContainer">
6465
6699
  <slot name="footer"></slot>
6466
6700
  </div>` : null}
@@ -6697,7 +6931,7 @@ class AuroHelpText extends i$3 {
6697
6931
  }
6698
6932
  }
6699
6933
 
6700
- var formkitVersion = '202606081518';
6934
+ var formkitVersion = '202606081833';
6701
6935
 
6702
6936
  var styleCss$2 = 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}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 300);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 300);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
6703
6937