@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
@@ -4215,7 +4215,7 @@ function applyKeyboardStrategy(component, strategy, options = {}) {
4215
4215
  });
4216
4216
  }
4217
4217
 
4218
- var styleCss$2$1 = css`: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}`;
4218
+ var styleCss$2$1 = css`: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}`;
4219
4219
 
4220
4220
  var colorCss$2 = css`.container{background-color:var(--ds-auro-dropdownbib-container-color);box-shadow:var(--ds-auro-dropdownbib-boxshadow-color);color:var(--ds-auro-dropdownbib-text-color)}`;
4221
4221
 
@@ -4846,7 +4846,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
4846
4846
  }
4847
4847
  };
4848
4848
 
4849
- var formkitVersion$1 = '202606081518';
4849
+ var formkitVersion$1 = '202606081833';
4850
4850
 
4851
4851
  class AuroElement extends LitElement {
4852
4852
  static get properties() {
@@ -5026,6 +5026,7 @@ class AuroDropdown extends AuroElement {
5026
5026
  _intializeDefaults() {
5027
5027
  this.appearance = 'default';
5028
5028
  this.chevron = false;
5029
+ this.desktopModal = false;
5029
5030
  this.disabled = false;
5030
5031
  this.disableKeyboardHandling = false;
5031
5032
  this.error = false;
@@ -5206,6 +5207,14 @@ class AuroDropdown extends AuroElement {
5206
5207
  reflect: true
5207
5208
  },
5208
5209
 
5210
+ /**
5211
+ * If declared, the dropdown will behave as a modal dialog when in a desktop viewport size.
5212
+ */
5213
+ desktopModal: {
5214
+ type: Boolean,
5215
+ reflect: true
5216
+ },
5217
+
5209
5218
  /**
5210
5219
  * If declared, the dropdown will only show by calling the API .show() public method.
5211
5220
  */
@@ -5493,6 +5502,15 @@ class AuroDropdown extends AuroElement {
5493
5502
 
5494
5503
  disconnectedCallback() {
5495
5504
  super.disconnectedCallback();
5505
+ this._clearPageInert();
5506
+ if (this._bibTabHandler) {
5507
+ this.removeEventListener('keydown', this._bibTabHandler);
5508
+ this._bibTabHandler = undefined;
5509
+ }
5510
+ if (this.focusTrap) {
5511
+ this.focusTrap.disconnect();
5512
+ this.focusTrap = undefined;
5513
+ }
5496
5514
  if (this.floater) {
5497
5515
  this.floater.hideBib('disconnect');
5498
5516
  this.floater.disconnect();
@@ -5520,19 +5538,45 @@ class AuroDropdown extends AuroElement {
5520
5538
  if (this.isPopoverVisible) {
5521
5539
  // Fullscreen: use showModal() for native accessibility (inert outside, focus trap)
5522
5540
  // Desktop: use show() for Floating UI positioning + FocusTrap for focus management
5523
- const useModal = this.isBibFullscreen;
5524
- this.bibElement.value.open(useModal);
5541
+ this.bibElement.value.open(this.isBibFullscreen);
5542
+ this.updateFocusTrap();
5543
+
5544
+ // Desktop modal: make siblings inert so content outside is not interactive
5545
+ if (this.desktopModal && !this.isBibFullscreen) {
5546
+ this._setPageInert();
5547
+ }
5525
5548
  } else {
5526
5549
  this.bibElement.value.close();
5550
+ this._clearPageInert();
5527
5551
  }
5528
5552
  }
5529
5553
 
5530
5554
  // When fullscreen strategy changes while open, re-open dialog with correct mode
5531
5555
  // (e.g. resizing from desktop → mobile while dropdown is open)
5532
5556
  if (changedProperties.has('isBibFullscreen') && this.isPopoverVisible && this.bibElement.value) {
5533
- const useModal = this.isBibFullscreen;
5534
5557
  this.bibElement.value.close();
5535
- this.bibElement.value.open(useModal);
5558
+ this.bibElement.value.open(this.isBibFullscreen);
5559
+
5560
+ // Re-initialize focus management for the new strategy
5561
+ this.updateFocusTrap();
5562
+
5563
+ // Toggle inert: desktop modal needs it, fullscreen showModal() handles it natively
5564
+ if (this.desktopModal && !this.isBibFullscreen) {
5565
+ this._setPageInert();
5566
+ } else {
5567
+ this._clearPageInert();
5568
+ }
5569
+ }
5570
+
5571
+ // Handle desktopModal toggled while the dropdown is already open.
5572
+ // Re-initialize focus trapping and page inert state to match the new mode.
5573
+ if (changedProperties.has('desktopModal') && this.isPopoverVisible && !this.isBibFullscreen) {
5574
+ this.updateFocusTrap();
5575
+ if (this.desktopModal) {
5576
+ this._setPageInert();
5577
+ } else {
5578
+ this._clearPageInert();
5579
+ }
5536
5580
  }
5537
5581
  }
5538
5582
 
@@ -5542,8 +5586,14 @@ class AuroDropdown extends AuroElement {
5542
5586
  * @param {CustomEvent} event - The custom event that contains the dropdown toggle information.
5543
5587
  */
5544
5588
  handleDropdownToggle(event) {
5545
- this.updateFocusTrap();
5546
5589
  this.isPopoverVisible = event.detail.expanded;
5590
+
5591
+ // Tear down FocusTrap when closing. Creation happens in updated()
5592
+ // after the dialog is open so getFocusableElements can find content.
5593
+ if (!this.isPopoverVisible) {
5594
+ this.updateFocusTrap();
5595
+ }
5596
+
5547
5597
  const eventType = event.detail.eventType || "unknown";
5548
5598
  if (!this.isPopoverVisible && this.hasFocus && eventType === "keydown") {
5549
5599
  this.trigger.focus();
@@ -5642,19 +5692,194 @@ class AuroDropdown extends AuroElement {
5642
5692
  * @private
5643
5693
  */
5644
5694
  updateFocusTrap() {
5695
+ // Always clean up existing handlers/traps before setting up new ones
5696
+ // to prevent duplicate listeners on repeated calls.
5697
+ if (this._bibTabHandler) {
5698
+ this.removeEventListener('keydown', this._bibTabHandler);
5699
+ this._bibTabHandler = undefined;
5700
+ }
5701
+
5702
+ if (this.focusTrap) {
5703
+ this.focusTrap.disconnect();
5704
+ this.focusTrap = undefined;
5705
+ }
5706
+
5645
5707
  if (this.isPopoverVisible) {
5646
5708
  if (!this.isBibFullscreen) {
5647
- // Desktop: show() doesn't trap focus, so use FocusTrap
5648
- this.focusTrap = new FocusTrap(this.bibContent);
5649
- this.focusTrap.focusFirstElement();
5709
+ if (this.desktopModal) {
5710
+ // Desktop modal: trap focus only within the bib content.
5711
+ // Can't use FocusTrap on the bib element because keydown events
5712
+ // from slotted content bubble through the dropdown host (light DOM),
5713
+ // not through the bib (shadow projection target). Using FocusTrap
5714
+ // on the dropdown would include the trigger in the tab cycle.
5715
+ // Instead, listen for Tab on the dropdown and manually wrap focus
5716
+ // within the bib's focusable elements.
5717
+ this._bibTabHandler = (event) => {
5718
+ if (event.key !== 'Tab') {
5719
+ return;
5720
+ }
5721
+
5722
+ // Collect focusable elements from the bib content.
5723
+ const focusables = getFocusableElements(this.bibContent);
5724
+
5725
+ // Fallback: try from slotted content directly
5726
+ if (!focusables.length) {
5727
+ const slot = this.shadowRoot.querySelector('.slotContent slot');
5728
+ const assignedNodes = slot ? slot.assignedNodes({ flatten: true }) : [];
5729
+
5730
+ for (const node of assignedNodes) {
5731
+ if (node.nodeType === Node.ELEMENT_NODE) {
5732
+ focusables.push(...getFocusableElements(node));
5733
+ }
5734
+ }
5735
+ }
5736
+
5737
+ if (!focusables.length) {
5738
+ return;
5739
+ }
5740
+
5741
+ event.preventDefault();
5742
+
5743
+ const direction = event.shiftKey ? -1 : 1; // eslint-disable-line no-magic-numbers
5744
+
5745
+ // Walk the active element chain through shadow roots
5746
+ const actives = this._getActiveElements();
5747
+
5748
+ let idx = focusables.findIndex((el) => actives.includes(el));
5749
+
5750
+ if (idx === -1) { // eslint-disable-line no-magic-numbers
5751
+ // Focus is not on a known element — move to first/last
5752
+ idx = direction === 1 ? -1 : focusables.length; // eslint-disable-line no-magic-numbers
5753
+ }
5754
+
5755
+ // Try each element in order, skipping any that can't receive focus
5756
+ // (e.g. hidden elements, elements in collapsed sections)
5757
+ for (let index = 0; index < focusables.length; index++) { // eslint-disable-line no-plusplus
5758
+ let nextIdx = idx + direction;
5759
+
5760
+ // Wrap around
5761
+ if (nextIdx < 0) {
5762
+ nextIdx = focusables.length - 1;
5763
+ } else if (nextIdx >= focusables.length) {
5764
+ nextIdx = 0;
5765
+ }
5766
+
5767
+ focusables[nextIdx].focus();
5768
+
5769
+ // Verify focus actually moved to the target
5770
+ const newActives = this._getActiveElements();
5771
+
5772
+ if (newActives.includes(focusables[nextIdx])) {
5773
+ return;
5774
+ }
5775
+
5776
+ // Focus didn't stick — skip this element and try the next
5777
+ idx = nextIdx;
5778
+ }
5779
+ };
5780
+ this.addEventListener('keydown', this._bibTabHandler);
5781
+
5782
+ // Move initial focus into the bib content, matching FocusTrap behavior
5783
+ requestAnimationFrame(() => {
5784
+ const focusables = getFocusableElements(this.bibContent);
5785
+ if (focusables.length) {
5786
+ focusables[0].focus();
5787
+ }
5788
+ });
5789
+ } else {
5790
+ // Normal desktop: use FocusTrap on the bib element
5791
+ this.focusTrap = new FocusTrap(this.bibContent);
5792
+ this.focusTrap.focusFirstElement();
5793
+ }
5650
5794
  }
5651
5795
  // Fullscreen: showModal() provides native focus trapping
5796
+ }
5797
+ }
5798
+
5799
+ /**
5800
+ * Returns the chain of active (focused) elements through shadow roots.
5801
+ * @private
5802
+ * @returns {Array<HTMLElement>}
5803
+ */
5804
+ _getActiveElements() {
5805
+ let { activeElement } = document;
5806
+ const actives = [activeElement];
5807
+
5808
+ while (activeElement?.shadowRoot?.activeElement) {
5809
+ activeElement = activeElement.shadowRoot.activeElement;
5810
+ actives.push(activeElement);
5811
+ }
5812
+
5813
+ return actives;
5814
+ }
5815
+
5816
+ /**
5817
+ * Sets `inert` on sibling elements of the dropdown's top-level host
5818
+ * so that content outside the dropdown is not interactive while the modal is open.
5819
+ * Walks up through shadow DOM boundaries to find the outermost host element
5820
+ * in the light DOM, then sets `inert` on siblings at each ancestor level
5821
+ * to ensure all page content outside the host subtree is inert.
5822
+ * @private
5823
+ */
5824
+ _setPageInert() {
5825
+ if (this._inertSiblings) {
5652
5826
  return;
5653
5827
  }
5654
5828
 
5655
- if (this.focusTrap) {
5656
- this.focusTrap.disconnect();
5657
- this.focusTrap = undefined;
5829
+ this._inertSiblings = [];
5830
+
5831
+ // Walk up through shadow DOM boundaries to find the topmost host
5832
+ // element in the light DOM. For example, if this dropdown is inside
5833
+ // auro-datepicker's shadow DOM, we walk up to the datepicker element
5834
+ // so we set inert on its siblings — not on the datepicker itself.
5835
+ let host = this;
5836
+ while (host.getRootNode() instanceof ShadowRoot) {
5837
+ host = host.getRootNode().host;
5838
+ }
5839
+
5840
+ // Walk up the ancestor chain, inerting siblings at each level
5841
+ // to ensure the entire page outside the host subtree is inert.
5842
+ // Uses a reference counter (data-auro-inert-count) so multiple
5843
+ // simultaneous modal dropdowns share inert state safely.
5844
+ let current = host;
5845
+ while (current.parentElement) {
5846
+ const parent = current.parentElement;
5847
+ for (const sibling of parent.children) {
5848
+ if (sibling !== current) {
5849
+ const count = parseInt(sibling.dataset.auroInertCount || '0', 10);
5850
+ if (count === 0) {
5851
+ sibling.dataset.auroInertWas = sibling.inert ? 'true' : 'false';
5852
+ }
5853
+ sibling.dataset.auroInertCount = String(count + 1);
5854
+ sibling.inert = true;
5855
+ this._inertSiblings.push(sibling);
5856
+ }
5857
+ }
5858
+ current = parent;
5859
+ }
5860
+ }
5861
+
5862
+ /**
5863
+ * Restores `inert` state on siblings that were tracked by `_setPageInert`.
5864
+ * Uses reference counting so inert is only cleared when the last modal
5865
+ * dropdown releases a given element. Preserves the original inert state
5866
+ * so externally-inerted elements are not inadvertently re-enabled.
5867
+ * @private
5868
+ */
5869
+ _clearPageInert() {
5870
+ if (this._inertSiblings) {
5871
+ for (const sibling of this._inertSiblings) {
5872
+ const count = parseInt(sibling.dataset.auroInertCount || '1', 10) - 1;
5873
+ if (count <= 0) {
5874
+ const wasInert = sibling.dataset.auroInertWas === 'true';
5875
+ delete sibling.dataset.auroInertCount;
5876
+ delete sibling.dataset.auroInertWas;
5877
+ sibling.inert = wasInert;
5878
+ } else {
5879
+ sibling.dataset.auroInertCount = String(count);
5880
+ }
5881
+ }
5882
+ this._inertSiblings = undefined;
5658
5883
  }
5659
5884
  }
5660
5885
 
@@ -5893,6 +6118,7 @@ class AuroDropdown extends AuroElement {
5893
6118
  shape="${this.shape}"
5894
6119
  ?data-show="${this.isPopoverVisible}"
5895
6120
  ?isfullscreen="${this.isBibFullscreen}"
6121
+ ?desktopmodal="${this.desktopModal}"
5896
6122
  .dialogLabel="${this.bibDialogLabel}"
5897
6123
  ${ref(this.bibElement)}
5898
6124
  >
@@ -6260,6 +6486,14 @@ class AuroBibtemplate extends LitElement {
6260
6486
  large: {
6261
6487
  type: Boolean,
6262
6488
  reflect: true
6489
+ },
6490
+
6491
+ /**
6492
+ * If declared, the footer slot will be rendered even when not in fullscreen mode.
6493
+ */
6494
+ showFooter: {
6495
+ type: Boolean,
6496
+ reflect: true
6263
6497
  }
6264
6498
  };
6265
6499
  }
@@ -6362,7 +6596,7 @@ class AuroBibtemplate extends LitElement {
6362
6596
  <slot></slot>
6363
6597
  </div>
6364
6598
 
6365
- ${this.isFullscreen ? html`
6599
+ ${this.isFullscreen || this.showFooter ? html`
6366
6600
  <div id="footerContainer">
6367
6601
  <slot name="footer"></slot>
6368
6602
  </div>` : null}
@@ -6599,7 +6833,7 @@ class AuroHelpText extends LitElement {
6599
6833
  }
6600
6834
  }
6601
6835
 
6602
- var formkitVersion = '202606081518';
6836
+ var formkitVersion = '202606081833';
6603
6837
 
6604
6838
  var styleCss = 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}.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}`;
6605
6839