@ionic/core 8.8.1-dev.11773665268.1511a6c7 → 8.8.1-dev.11773873479.192398dc

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 (79) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-action-sheet.js +1 -1
  3. package/components/ion-alert.js +1 -1
  4. package/components/ion-datetime.js +1 -1
  5. package/components/ion-loading.js +1 -1
  6. package/components/ion-menu.js +1 -1
  7. package/components/ion-modal.js +1 -1
  8. package/components/ion-picker-legacy.js +1 -1
  9. package/components/ion-popover.js +1 -1
  10. package/components/ion-select-modal.js +1 -1
  11. package/components/ion-select-popover.js +1 -1
  12. package/components/ion-select.js +1 -1
  13. package/components/ion-toast.js +1 -1
  14. package/components/p-0npDmDEs.js +4 -0
  15. package/components/p-7hlGym-0.js +4 -0
  16. package/components/p-BO_M4HrR.js +4 -0
  17. package/components/p-C5gHGV8-.js +4 -0
  18. package/components/{p-DMGp52tQ.js → p-CEmYm-1e.js} +1 -1
  19. package/components/p-CWnwVrC4.js +4 -0
  20. package/components/{p-CUevoqWT.js → p-Dfrz4Vqg.js} +1 -1
  21. package/dist/cjs/index.cjs.js +1 -1
  22. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -10
  23. package/dist/cjs/ion-alert.cjs.entry.js +5 -9
  24. package/dist/cjs/ion-datetime_3.cjs.entry.js +7 -3
  25. package/dist/cjs/ion-loading.cjs.entry.js +5 -9
  26. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  27. package/dist/cjs/ion-modal.cjs.entry.js +7 -17
  28. package/dist/cjs/ion-popover.cjs.entry.js +5 -9
  29. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  30. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  31. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  32. package/dist/cjs/{overlays-Bn4qxNhB.js → overlays-MjvhwPt2.js} +3 -0
  33. package/dist/collection/components/action-sheet/action-sheet.js +6 -10
  34. package/dist/collection/components/alert/alert.js +5 -9
  35. package/dist/collection/components/loading/loading.js +5 -9
  36. package/dist/collection/components/modal/modal.js +7 -17
  37. package/dist/collection/components/picker-legacy/picker.js +7 -3
  38. package/dist/collection/components/popover/popover.js +5 -9
  39. package/dist/collection/utils/overlays.js +3 -0
  40. package/dist/docs.json +1 -1
  41. package/dist/esm/index.js +1 -1
  42. package/dist/esm/ion-action-sheet.entry.js +6 -10
  43. package/dist/esm/ion-alert.entry.js +5 -9
  44. package/dist/esm/ion-datetime_3.entry.js +7 -3
  45. package/dist/esm/ion-loading.entry.js +5 -9
  46. package/dist/esm/ion-menu_3.entry.js +1 -1
  47. package/dist/esm/ion-modal.entry.js +7 -17
  48. package/dist/esm/ion-popover.entry.js +5 -9
  49. package/dist/esm/ion-select-modal.entry.js +1 -1
  50. package/dist/esm/ion-select_3.entry.js +1 -1
  51. package/dist/esm/ion-toast.entry.js +1 -1
  52. package/dist/esm/{overlays-Ie5kkCl2.js → overlays-CCsdmuZR.js} +3 -0
  53. package/dist/ionic/index.esm.js +1 -1
  54. package/dist/ionic/ionic.esm.js +1 -1
  55. package/dist/ionic/p-50b13f63.entry.js +4 -0
  56. package/dist/ionic/p-53399c0b.entry.js +4 -0
  57. package/dist/ionic/{p-2b30f1a2.entry.js → p-80bea9dd.entry.js} +1 -1
  58. package/dist/ionic/p-Bx-dQ-64.js +4 -0
  59. package/dist/ionic/p-b30c0226.entry.js +4 -0
  60. package/dist/ionic/{p-770e90c9.entry.js → p-c1854ee5.entry.js} +1 -1
  61. package/dist/ionic/p-c7f46ed5.entry.js +4 -0
  62. package/dist/ionic/{p-57d09155.entry.js → p-cfeb806a.entry.js} +1 -1
  63. package/dist/ionic/{p-f9c1530c.entry.js → p-e2e9d04e.entry.js} +1 -1
  64. package/dist/ionic/{p-4c63b74a.entry.js → p-f5506e4e.entry.js} +1 -1
  65. package/dist/ionic/p-f83088b5.entry.js +4 -0
  66. package/hydrate/index.js +32 -51
  67. package/hydrate/index.mjs +32 -51
  68. package/package.json +1 -1
  69. package/components/p-5ZSxeDaQ.js +0 -4
  70. package/components/p-Cp1mV8on.js +0 -4
  71. package/components/p-D0Qi4M5h.js +0 -4
  72. package/components/p-EjNcvXpr.js +0 -4
  73. package/components/p-QyvDHa31.js +0 -4
  74. package/dist/ionic/p-066cf4b9.entry.js +0 -4
  75. package/dist/ionic/p-982a2080.entry.js +0 -4
  76. package/dist/ionic/p-BCTW1Nwr.js +0 -4
  77. package/dist/ionic/p-a3ccd99d.entry.js +0 -4
  78. package/dist/ionic/p-a5b1c583.entry.js +0 -4
  79. package/dist/ionic/p-acb9b50c.entry.js +0 -4
@@ -7,7 +7,7 @@ import { createButtonActiveGesture } from "../../utils/gesture/button-active";
7
7
  import { raf } from "../../utils/helpers";
8
8
  import { createLockController } from "../../utils/lock-controller";
9
9
  import { printIonWarning } from "../../utils/logging/index";
10
- import { createDelegateController, createTriggerController, BACKDROP, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, cleanupRootFocusTrapAccessibility, } from "../../utils/overlays";
10
+ import { BACKDROP, cleanupRootFocusTrapAccessibility, createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
11
11
  import { sanitizeDOMString } from "../../utils/sanitization/index";
12
12
  import { getClassMap } from "../../utils/theme";
13
13
  import { config } from "../../global/config";
@@ -207,13 +207,9 @@ export class Alert {
207
207
  this.gesture.destroy();
208
208
  this.gesture = undefined;
209
209
  }
210
+ // Clean up aria-hidden if removed without dismiss() being called
210
211
  if (this.presented) {
211
- const el = this.el;
212
- setTimeout(() => {
213
- if (!el.isConnected) {
214
- cleanupRootFocusTrapAccessibility();
215
- }
216
- }, 0);
212
+ cleanupRootFocusTrapAccessibility();
217
213
  }
218
214
  }
219
215
  componentDidLoad() {
@@ -448,9 +444,9 @@ export class Alert {
448
444
  * If neither are defined, do not set aria-labelledby.
449
445
  */
450
446
  const ariaLabelledBy = header && subHeader ? `${hdrId} ${subHdrId}` : header ? hdrId : subHeader ? subHdrId : null;
451
- return (h(Host, { key: '905a4c79854006d1a30198105506d646b4ae91f1', tabindex: "-1", style: {
447
+ return (h(Host, { key: '51ccec282f165dbaa02d7ee0c6413b870abae1d5', tabindex: "-1", style: {
452
448
  zIndex: `${20000 + overlayIndex}`,
453
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, h("ion-backdrop", { key: '494296a9ee259eb01300532fa152dd4e9b3dfeb3', tappable: this.backdropDismiss }), h("div", { key: '92262e204e0340326deccf2c00934b2ac84a42c5', tabindex: "0", "aria-hidden": "true" }), h("div", Object.assign({ key: '8b6956165eec27e79d3620a4ef33dd09f19a7877', class: "alert-wrapper ion-overlay-wrapper", role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "0", ref: (el) => (this.wrapperEl = el) }, htmlAttributes), h("div", { key: '9e1f9398946b44649b94b65d43bffaace0052fbd', class: "alert-head" }, header && (h("h2", { key: 'a4c30a47bab67dba3931c2d80f8ac2a7efb44011', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (h("h2", { key: 'f6567532ff2b64469ef1b4ccd97583b0ca838e56', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (h("h3", { key: '7c5d201cf22c96056cf03f232f8c0c1ba34875ab', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: '0fcf76a02448116d9948eee6c70fabac02af47f8', tabindex: "0", "aria-hidden": "true" })));
449
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, h("ion-backdrop", { key: '555fb7a0048d1ada0182925ca460956e65f43322', tappable: this.backdropDismiss }), h("div", { key: 'bce7b1466f5d3c2615a7478ec8903f9567c9b101', tabindex: "0", "aria-hidden": "true" }), h("div", Object.assign({ key: '8b0e8793070fee6cb3a69f0fc9b828b07672d0f9', class: "alert-wrapper ion-overlay-wrapper", role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "0", ref: (el) => (this.wrapperEl = el) }, htmlAttributes), h("div", { key: 'f9c99afdd4389421e9eaabaa7e2f9c17e2cb88f4', class: "alert-head" }, header && (h("h2", { key: '7aa37fe49189d714e7d4bc786d9895ab8191f25c', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (h("h2", { key: '1c32cbb4d615672b669bfacff35079791a0ab50a', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (h("h3", { key: 'fc7285499cee4cef323085e501d974d423102e94', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: 'b69334b5643b2592053bc408a9ab3b623e2d2b9d', tabindex: "0", "aria-hidden": "true" })));
454
450
  }
455
451
  static get is() { return "ion-alert"; }
456
452
  static get encapsulation() { return "scoped"; }
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
5
5
  import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
6
6
  import { raf } from "../../utils/helpers";
7
7
  import { createLockController } from "../../utils/lock-controller";
8
- import { BACKDROP, dismiss, eventMethod, prepareOverlay, present, createDelegateController, createTriggerController, setOverlayId, cleanupRootFocusTrapAccessibility, } from "../../utils/overlays";
8
+ import { BACKDROP, cleanupRootFocusTrapAccessibility, createDelegateController, createTriggerController, dismiss, eventMethod, prepareOverlay, present, setOverlayId, } from "../../utils/overlays";
9
9
  import { sanitizeDOMString } from "../../utils/sanitization/index";
10
10
  import { getClassMap } from "../../utils/theme";
11
11
  import { config } from "../../global/config";
@@ -114,13 +114,9 @@ export class Loading {
114
114
  }
115
115
  disconnectedCallback() {
116
116
  this.triggerController.removeClickListener();
117
+ // Clean up aria-hidden if removed without dismiss() being called
117
118
  if (this.presented) {
118
- const el = this.el;
119
- setTimeout(() => {
120
- if (!el.isConnected) {
121
- cleanupRootFocusTrapAccessibility();
122
- }
123
- }, 0);
119
+ cleanupRootFocusTrapAccessibility();
124
120
  }
125
121
  }
126
122
  /**
@@ -187,9 +183,9 @@ export class Loading {
187
183
  * Otherwise, don't set aria-labelledby.
188
184
  */
189
185
  const ariaLabelledBy = message !== undefined ? msgId : null;
190
- return (h(Host, Object.assign({ key: '65eb9e96b3fb937ff30c3145858f5e4ca6cf739c', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
186
+ return (h(Host, Object.assign({ key: 'ab48bfcee8f7e3e33847a2f262fdc08b9ea804ca', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
191
187
  zIndex: `${40000 + this.overlayIndex}`,
192
- }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: 'c21c1701a641a56b98b248b4963aa3888530a3bc', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '0d3aacc605bda9cee34c08daab8a80766a934f72', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '675c9f582002f4306c9d6ccdf7560a3562f16e15', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: 'ff610d72cdd1ebdb0ac57753d76a57e8630bcc4a', class: "loading-spinner" }, h("ion-spinner", { key: '4a48bbb926f71fba9d97dc51f9e398e6af59a34e', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '0721486e2be7e3c687bbd864d3efc1aeaa61068c', tabindex: "0", "aria-hidden": "true" })));
188
+ }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '41baccc7fb6474389a3a3431c208e829ef738b75', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '7b7290974abbe8db8739b19835aca9f8b5c271c2', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'e32466abfcc92aaad47ea03b1dcb49f66abe4b63', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: 'c5e6e6f9e3f39dba0225d08d7dd2c1b96a1d83c7', class: "loading-spinner" }, h("ion-spinner", { key: 'f428038959d879404ea898011363aac0b807ad11', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '490e531367b86c319fa4260722dcff4dd631fa88', tabindex: "0", "aria-hidden": "true" })));
193
189
  }
194
190
  static get is() { return "ion-loading"; }
195
191
  static get encapsulation() { return "scoped"; }
@@ -8,7 +8,7 @@ import { raf, inheritAttributes, hasLazyBuild, getElementRoot } from "../../util
8
8
  import { createLockController } from "../../utils/lock-controller";
9
9
  import { printIonWarning } from "../../utils/logging/index";
10
10
  import { Style as StatusBarStyle, StatusBar } from "../../utils/native/status-bar";
11
- import { GESTURE, BACKDROP, dismiss, eventMethod, prepareOverlay, present, createTriggerController, setOverlayId, FOCUS_TRAP_DISABLE_CLASS, cleanupRootFocusTrapAccessibility, } from "../../utils/overlays";
11
+ import { BACKDROP, cleanupRootFocusTrapAccessibility, createTriggerController, dismiss, eventMethod, FOCUS_TRAP_DISABLE_CLASS, GESTURE, prepareOverlay, present, setOverlayId, } from "../../utils/overlays";
12
12
  import { getClassMap } from "../../utils/theme";
13
13
  import { deepReady, waitForMount } from "../../utils/transition/index";
14
14
  import { config } from "../../global/config";
@@ -277,19 +277,9 @@ export class Modal {
277
277
  // Also called in dismiss() — intentional dual cleanup covers both
278
278
  // dismiss-then-remove and direct DOM removal without dismiss.
279
279
  this.cleanupSafeAreaOverrides();
280
- // If the modal was removed from the DOM while still presented
281
- // (e.g., a framework unmounted it during a route change without
282
- // calling dismiss()), clean up aria-hidden on the root outlet
283
- // so the app remains accessible.
284
- // Deferred to a microtask so DOM moves (disconnect + reconnect in
285
- // the same tick, e.g. React portals) don't prematurely clear it.
280
+ // Clean up aria-hidden if removed without dismiss() being called
286
281
  if (this.presented) {
287
- const el = this.el;
288
- setTimeout(() => {
289
- if (!el.isConnected) {
290
- cleanupRootFocusTrapAccessibility();
291
- }
292
- }, 0);
282
+ cleanupRootFocusTrapAccessibility();
293
283
  }
294
284
  }
295
285
  componentWillLoad() {
@@ -1147,20 +1137,20 @@ export class Modal {
1147
1137
  const isCardModal = presentingElement !== undefined && mode === 'ios';
1148
1138
  const isHandleCycle = handleBehavior === 'cycle';
1149
1139
  const isSheetModalWithHandle = isSheetModal && showHandle;
1150
- return (h(Host, Object.assign({ key: '06c06b4b475da99c8bdb63663265d62f77e1716f', "no-router": true,
1140
+ return (h(Host, Object.assign({ key: 'e6df0917ac03a8d6bf67cc9bebf075d2b804ba22', "no-router": true,
1151
1141
  // Allow the modal to be navigable when the handle is focusable
1152
1142
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
1153
1143
  zIndex: `${20000 + this.overlayIndex}`,
1154
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '356b54af9039b40ff0d5431d2c800943d0b5bc03', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'e5b75d40f069e8c79b7ffeab49849bea994fc4b1', class: "modal-shadow" }), h("div", Object.assign({ key: '5144554b1bb7c119eef03936b55df44f3d745f5c',
1144
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '710ed1cbb6ae9c1a1fa7ae774fd44aa3bbee8381', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'c9051fcd099e9b73e17f015dea6e16fbd73e4df4', class: "modal-shadow" }), h("div", Object.assign({ key: '21e42d40099a569d95a4e04aa6d314c7d45c6192',
1155
1145
  /*
1156
1146
  role and aria-modal must be used on the
1157
1147
  same element. They must also be set inside the
1158
1148
  shadow DOM otherwise ion-button will not be highlighted
1159
1149
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
1160
1150
  */
1161
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '8740ede37e0f38fc70dd555494e3b49bb02c6622', class: "modal-handle",
1151
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'b48a6c32c9a7ebe5e070e8d9f3510d55d4bd1f9f', class: "modal-handle",
1162
1152
  // Prevents the handle from receiving keyboard focus when it does not cycle
1163
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: 'bff95653b5c2629ec5348e0a5f7055d4a45e8490', onSlotchange: this.onSlotChange }))));
1153
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '2a20160f66629c14e3414bbe01e5ee89101d02be', onSlotchange: this.onSlotChange }))));
1164
1154
  }
1165
1155
  static get is() { return "ion-modal"; }
1166
1156
  static get encapsulation() { return "shadow"; }
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
5
5
  import { raf } from "../../utils/helpers";
6
6
  import { createLockController } from "../../utils/lock-controller";
7
7
  import { printIonWarning } from "../../utils/logging/index";
8
- import { createDelegateController, createTriggerController, BACKDROP, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
8
+ import { BACKDROP, cleanupRootFocusTrapAccessibility, createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
9
9
  import { getClassMap } from "../../utils/theme";
10
10
  import { getIonMode } from "../../global/ionic-global";
11
11
  import { iosEnterAnimation } from "./animations/ios.enter";
@@ -89,6 +89,10 @@ export class Picker {
89
89
  }
90
90
  disconnectedCallback() {
91
91
  this.triggerController.removeClickListener();
92
+ // Clean up aria-hidden if removed without dismiss() being called
93
+ if (this.presented) {
94
+ cleanupRootFocusTrapAccessibility();
95
+ }
92
96
  }
93
97
  componentWillLoad() {
94
98
  var _a;
@@ -207,11 +211,11 @@ export class Picker {
207
211
  render() {
208
212
  const { htmlAttributes } = this;
209
213
  const mode = getIonMode(this);
210
- return (h(Host, Object.assign({ key: '80f66d33780d8a1352d24be9cb63a0cc03d01ab5', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
214
+ return (h(Host, Object.assign({ key: '4d6531bfff4eb466f897cf2227d51783604ff439', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
211
215
  zIndex: `${20000 + this.overlayIndex}`,
212
216
  }, class: Object.assign({ [mode]: true,
213
217
  // Used internally for styling
214
- [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '97fb8e10ba08b197610cb8c0cdea61103883d55f', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: 'b3969cb6fbf7153623d14e3ca1493d3370efb211', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '299268483c3727e698d9135bfdf40349a7050ac1', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: '95394de3ef691899b7dbf416f56fd3e86bbdce3f', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: '05f18bb8d00dc0e22f691b7e41f90f729a6c66d7', class: "picker-columns" }, h("div", { key: '4a8fdf224effc0af67fd413e2e6aca8a78d1cf43', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-legacy-column", { col: c })), h("div", { key: 'e50a31db45e3f39e9d0fed36a21be9257eec09bf', class: "picker-below-highlight" }))), h("div", { key: '5a78cb2176ac807ea0c195c6b76cd0e8eef9d4c0', tabindex: "0", "aria-hidden": "true" })));
218
+ [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '754a80de29087f7e793b232c4276fc1f6b1c937f', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '9fcffb91109d6082ed338cd37a997254e5ea5bce', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'de066bda70a9cb831fc88493873d7ebf879122d0', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: '03a502e2e1aa38abd582ecfca60da8b7d1045701', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: 'f9e4d9eff3c2df866f15eed63f715a51c912eac6', class: "picker-columns" }, h("div", { key: '78656d3265f9d4c82387f942c896a9d67c1fcedf', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-legacy-column", { col: c })), h("div", { key: '1afd96cfa38fa9f52f61a867f2aa116a9ef3bedb', class: "picker-below-highlight" }))), h("div", { key: '4d533e132d70f6ab32c461e3e4f6f9dfbe6bab15', tabindex: "0", "aria-hidden": "true" })));
215
219
  }
216
220
  static get is() { return "ion-picker-legacy"; }
217
221
  static get encapsulation() { return "scoped"; }
@@ -7,7 +7,7 @@ import { CoreDelegate, attachComponent, detachComponent } from "../../utils/fram
7
7
  import { addEventListener, raf, hasLazyBuild } from "../../utils/helpers";
8
8
  import { createLockController } from "../../utils/lock-controller";
9
9
  import { printIonWarning } from "../../utils/logging/index";
10
- import { BACKDROP, dismiss, eventMethod, prepareOverlay, present, setOverlayId, FOCUS_TRAP_DISABLE_CLASS, cleanupRootFocusTrapAccessibility, } from "../../utils/overlays";
10
+ import { BACKDROP, cleanupRootFocusTrapAccessibility, dismiss, eventMethod, FOCUS_TRAP_DISABLE_CLASS, prepareOverlay, present, setOverlayId, } from "../../utils/overlays";
11
11
  import { isPlatform } from "../../utils/platform";
12
12
  import { getClassMap } from "../../utils/theme";
13
13
  import { deepReady, waitForMount } from "../../utils/transition/index";
@@ -229,13 +229,9 @@ export class Popover {
229
229
  this.headerResizeObserver.disconnect();
230
230
  this.headerResizeObserver = undefined;
231
231
  }
232
+ // Clean up aria-hidden if removed without dismiss() being called
232
233
  if (this.presented) {
233
- const el = this.el;
234
- setTimeout(() => {
235
- if (!el.isConnected) {
236
- cleanupRootFocusTrapAccessibility();
237
- }
238
- }, 0);
234
+ cleanupRootFocusTrapAccessibility();
239
235
  }
240
236
  }
241
237
  componentWillLoad() {
@@ -475,9 +471,9 @@ export class Popover {
475
471
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
476
472
  const desktop = isPlatform('desktop');
477
473
  const enableArrow = arrow && !parentPopover;
478
- return (h(Host, Object.assign({ key: 'ffe93d304b75ddd2caac4678e0ac34fa590eca12', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
474
+ return (h(Host, Object.assign({ key: 'afc292b6b4eeb571c1cd832bc7ac03e0fea3dc28', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
479
475
  zIndex: `${20000 + this.overlayIndex}`,
480
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: '7c8fb1caa06e45a721923011debccc0bebc993af', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: 'cedaee91689606a705b3272b9ca2c74cc2ca4193', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: '6046d50f5b7593f385ce1a5e4f651e3a39171b26', class: "popover-arrow", part: "arrow" }), h("div", { key: 'ec8feab51ec81bac7b4ef6e6d84570f95033e3a2', class: "popover-content", part: "content" }, h("slot", { key: 'cbe3ac604048509fcf481786a5eefd8bce65ad1a' })))));
476
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: '301a33645918c7feb807a6fe857e462b83291c40', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: 'f66123d36601ce61af3bce3c68c73002fe3a6d73', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: '39c92c94d01748d499f2db2513ecf022be2577dd', class: "popover-arrow", part: "arrow" }), h("div", { key: '827552221533f7b5676e6e313cd7517275ea76d7', class: "popover-content", part: "content" }, h("slot", { key: 'f874b8dfb78bfbc02e3bcad104819bf8d181d42f' })))));
481
477
  }
482
478
  static get is() { return "ion-popover"; }
483
479
  static get encapsulation() { return "shadow"; }
@@ -442,6 +442,9 @@ export const setRootAriaHidden = (hidden = false) => {
442
442
  * when the overlay was still presented at the time of removal.
443
443
  */
444
444
  export const cleanupRootFocusTrapAccessibility = () => {
445
+ if (typeof document === 'undefined') {
446
+ return;
447
+ }
445
448
  const remainingOverlays = getPresentedOverlays(document);
446
449
  const hasRemainingLocking = remainingOverlays.some((o) => {
447
450
  const el = o;
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-03-16T12:49:40",
2
+ "timestamp": "2026-03-18T22:40:01",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.43.0",
package/dist/esm/index.js CHANGED
@@ -13,7 +13,7 @@ export { L as LogLevel } from './index-IGIE5vDm.js';
13
13
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-TO1rZH52.js';
14
14
  export { o as openURL } from './theme-DiVJyqlX.js';
15
15
  export { m as menuController } from './index-B2KwgBLx.js';
16
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-Ie5kkCl2.js';
16
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-CCsdmuZR.js';
17
17
  import './index-ZjP4CjeZ.js';
18
18
  import './gesture-controller-BTEOs1at.js';
19
19
  import './hardware-back-button-CTe4XmL7.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, c as createEvent, a as readTask, h, d as Host, g
5
5
  import { c as createButtonActiveGesture } from './button-active-BBx21brx.js';
6
6
  import { r as raf } from './helpers-Tl8jw6S2.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as cleanupRootFocusTrapAccessibility, n as setOverlayId } from './overlays-Ie5kkCl2.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as cleanupRootFocusTrapAccessibility, n as setOverlayId } from './overlays-CCsdmuZR.js';
9
9
  import { g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-DfbeLwcV.js';
11
11
  import { c as createAnimation } from './animation-CnGMT4ji.js';
@@ -383,13 +383,9 @@ const ActionSheet = class {
383
383
  this.gesture = undefined;
384
384
  }
385
385
  this.triggerController.removeClickListener();
386
+ // Clean up aria-hidden if removed without dismiss() being called
386
387
  if (this.presented) {
387
- const el = this.el;
388
- setTimeout(() => {
389
- if (!el.isConnected) {
390
- cleanupRootFocusTrapAccessibility();
391
- }
392
- }, 0);
388
+ cleanupRootFocusTrapAccessibility();
393
389
  }
394
390
  }
395
391
  componentWillLoad() {
@@ -494,12 +490,12 @@ const ActionSheet = class {
494
490
  const cancelButton = allButtons.find((b) => b.role === 'cancel');
495
491
  const buttons = allButtons.filter((b) => b.role !== 'cancel');
496
492
  const headerID = `action-sheet-${overlayIndex}-header`;
497
- return (h(Host, Object.assign({ key: '3e5413d627089cebe5dfd236512d4d9681209c29', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
493
+ return (h(Host, Object.assign({ key: 'fc8e6c837c7e16d78348a3109f5dc992f111784a', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
498
494
  zIndex: `${20000 + this.overlayIndex}`,
499
- }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: '9e3dc9a6934be6ecd5700eb4fc9069d874c67405', tappable: this.backdropDismiss }), h("div", { key: 'd81be64948960867544029199d05939fa36778c7', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'd7ecc0c52868b2e62aa0b8e17fdfa34a24137764', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: 'b8860377b8feda32d137b059bf211cdc7b07ee2d', class: "action-sheet-container" }, h("div", { key: '93e070908c8c51384eab547bdb6fbce259957b5b', class: "action-sheet-group", ref: (el) => (this.groupEl = el), role: hasRadioButtons ? 'radiogroup' : undefined }, header !== undefined && (h("div", { key: '2649f19074f1e2ba562f91e36ac963420c61f4cc', id: headerID, class: {
495
+ }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: 'e558804050a8ba80dcca73308bbcb4b31687ba70', tappable: this.backdropDismiss }), h("div", { key: '6697622f6a62a460eac489afc5cd504eda002140', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '4c05e7a9a20953faaa8ea0eab739b9b400895137', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '43bbc9b7217570cfc62789b4987e61a6e51a1c5f', class: "action-sheet-container" }, h("div", { key: '5f9b36b5396043997d7b74e29ad3738b2af8821e', class: "action-sheet-group", ref: (el) => (this.groupEl = el), role: hasRadioButtons ? 'radiogroup' : undefined }, header !== undefined && (h("div", { key: '3306e90dace90046d226b1eb95b06af11eebba5e', id: headerID, class: {
500
496
  'action-sheet-title': true,
501
497
  'action-sheet-has-sub-title': this.subHeader !== undefined,
502
- } }, header, this.subHeader && h("div", { key: '07ccf243adfa9383616f848e86729e6e62fc00d0', class: "action-sheet-sub-title" }, this.subHeader))), this.renderActionSheetButtons(buttons)), cancelButton && (h("div", { key: '8945e66b5fc0b15ad96c3545b91b461ee7b6a88c', class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({ key: '47c16b28caf3d8ae6954c254bcc6d1879b5f2cf0' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { key: '4e2947ab7c74210bb66744324a904287bc4b6d0d', class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { key: '138e5f954b7e000ce2d6dcdec114a1d232549977', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", { key: 'd546d12794f42da5c13e0d84a8c55f6705ca0900' })))))), h("div", { key: '37479a217f671085855e565f7b9a0c0b713e28e4', tabindex: "0", "aria-hidden": "true" })));
498
+ } }, header, this.subHeader && h("div", { key: 'ee8e87e627e8eb6afdb1f4c3f0ef34c29a2b69c6', class: "action-sheet-sub-title" }, this.subHeader))), this.renderActionSheetButtons(buttons)), cancelButton && (h("div", { key: 'cb568ea8502afd8d913c0d0107db4fc98b5e50c6', class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({ key: 'd11ca6898fa308f494f2183ffc45bbcf971c14cb' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { key: 'b18e80930fdd0515d3647846729d392971c7c511', class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { key: '4e0a3fdcedaa480329080a8597df29746c14fd06', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", { key: 'fd2be8895b57b74bc83ee54a5d738472ad5fdb00' })))))), h("div", { key: 'b08dba5d658f9a5a64d76dc7eb8aba720c9333c3', tabindex: "0", "aria-hidden": "true" })));
503
499
  }
504
500
  get el() { return getElement(this); }
505
501
  static get watchers() { return {
@@ -6,7 +6,7 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './conf
6
6
  import { c as createButtonActiveGesture } from './button-active-BBx21brx.js';
7
7
  import { r as raf } from './helpers-Tl8jw6S2.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
9
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, n as setOverlayId, k as cleanupRootFocusTrapAccessibility, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-Ie5kkCl2.js';
9
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, n as setOverlayId, k as cleanupRootFocusTrapAccessibility, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-CCsdmuZR.js';
10
10
  import { g as getClassMap } from './theme-DiVJyqlX.js';
11
11
  import { b as getIonMode } from './ionic-global-DfbeLwcV.js';
12
12
  import { c as createAnimation } from './animation-CnGMT4ji.js';
@@ -303,13 +303,9 @@ const Alert = class {
303
303
  this.gesture.destroy();
304
304
  this.gesture = undefined;
305
305
  }
306
+ // Clean up aria-hidden if removed without dismiss() being called
306
307
  if (this.presented) {
307
- const el = this.el;
308
- setTimeout(() => {
309
- if (!el.isConnected) {
310
- cleanupRootFocusTrapAccessibility();
311
- }
312
- }, 0);
308
+ cleanupRootFocusTrapAccessibility();
313
309
  }
314
310
  }
315
311
  componentDidLoad() {
@@ -544,9 +540,9 @@ const Alert = class {
544
540
  * If neither are defined, do not set aria-labelledby.
545
541
  */
546
542
  const ariaLabelledBy = header && subHeader ? `${hdrId} ${subHdrId}` : header ? hdrId : subHeader ? subHdrId : null;
547
- return (h(Host, { key: '905a4c79854006d1a30198105506d646b4ae91f1', tabindex: "-1", style: {
543
+ return (h(Host, { key: '51ccec282f165dbaa02d7ee0c6413b870abae1d5', tabindex: "-1", style: {
548
544
  zIndex: `${20000 + overlayIndex}`,
549
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, h("ion-backdrop", { key: '494296a9ee259eb01300532fa152dd4e9b3dfeb3', tappable: this.backdropDismiss }), h("div", { key: '92262e204e0340326deccf2c00934b2ac84a42c5', tabindex: "0", "aria-hidden": "true" }), h("div", Object.assign({ key: '8b6956165eec27e79d3620a4ef33dd09f19a7877', class: "alert-wrapper ion-overlay-wrapper", role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "0", ref: (el) => (this.wrapperEl = el) }, htmlAttributes), h("div", { key: '9e1f9398946b44649b94b65d43bffaace0052fbd', class: "alert-head" }, header && (h("h2", { key: 'a4c30a47bab67dba3931c2d80f8ac2a7efb44011', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (h("h2", { key: 'f6567532ff2b64469ef1b4ccd97583b0ca838e56', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (h("h3", { key: '7c5d201cf22c96056cf03f232f8c0c1ba34875ab', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: '0fcf76a02448116d9948eee6c70fabac02af47f8', tabindex: "0", "aria-hidden": "true" })));
545
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, h("ion-backdrop", { key: '555fb7a0048d1ada0182925ca460956e65f43322', tappable: this.backdropDismiss }), h("div", { key: 'bce7b1466f5d3c2615a7478ec8903f9567c9b101', tabindex: "0", "aria-hidden": "true" }), h("div", Object.assign({ key: '8b0e8793070fee6cb3a69f0fc9b828b07672d0f9', class: "alert-wrapper ion-overlay-wrapper", role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "0", ref: (el) => (this.wrapperEl = el) }, htmlAttributes), h("div", { key: 'f9c99afdd4389421e9eaabaa7e2f9c17e2cb88f4', class: "alert-head" }, header && (h("h2", { key: '7aa37fe49189d714e7d4bc786d9895ab8191f25c', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (h("h2", { key: '1c32cbb4d615672b669bfacff35079791a0ab50a', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (h("h3", { key: 'fc7285499cee4cef323085e501d974d423102e94', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: 'b69334b5643b2592053bc408a9ab3b623e2d2b9d', tabindex: "0", "aria-hidden": "true" })));
550
546
  }
551
547
  get el() { return getElement(this); }
552
548
  static get watchers() { return {
@@ -4,7 +4,7 @@
4
4
  import { j as printIonError, f as printIonWarning, r as registerInstance, c as createEvent, w as writeTask, h, d as Host, g as getElement } from './index-IGIE5vDm.js';
5
5
  import { startFocusVisible } from './focus-visible-BmVRXR1y.js';
6
6
  import { r as raf, g as getElementRoot, a as renderHiddenInput, e as clamp } from './helpers-Tl8jw6S2.js';
7
- import { F as FOCUS_TRAP_DISABLE_CLASS, d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, n as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-Ie5kkCl2.js';
7
+ import { F as FOCUS_TRAP_DISABLE_CLASS, d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as cleanupRootFocusTrapAccessibility, n as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-CCsdmuZR.js';
8
8
  import { i as isRTL } from './dir-C53feagD.js';
9
9
  import { c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { l as chevronDown, o as caretUpSharp, p as chevronForward, q as caretDownSharp, c as chevronBack } from './index-DV3sJJW8.js';
@@ -2084,6 +2084,10 @@ const Picker = class {
2084
2084
  }
2085
2085
  disconnectedCallback() {
2086
2086
  this.triggerController.removeClickListener();
2087
+ // Clean up aria-hidden if removed without dismiss() being called
2088
+ if (this.presented) {
2089
+ cleanupRootFocusTrapAccessibility();
2090
+ }
2087
2091
  }
2088
2092
  componentWillLoad() {
2089
2093
  var _a;
@@ -2202,11 +2206,11 @@ const Picker = class {
2202
2206
  render() {
2203
2207
  const { htmlAttributes } = this;
2204
2208
  const mode = getIonMode(this);
2205
- return (h(Host, Object.assign({ key: '80f66d33780d8a1352d24be9cb63a0cc03d01ab5', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
2209
+ return (h(Host, Object.assign({ key: '4d6531bfff4eb466f897cf2227d51783604ff439', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
2206
2210
  zIndex: `${20000 + this.overlayIndex}`,
2207
2211
  }, class: Object.assign({ [mode]: true,
2208
2212
  // Used internally for styling
2209
- [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '97fb8e10ba08b197610cb8c0cdea61103883d55f', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: 'b3969cb6fbf7153623d14e3ca1493d3370efb211', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '299268483c3727e698d9135bfdf40349a7050ac1', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: '95394de3ef691899b7dbf416f56fd3e86bbdce3f', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: '05f18bb8d00dc0e22f691b7e41f90f729a6c66d7', class: "picker-columns" }, h("div", { key: '4a8fdf224effc0af67fd413e2e6aca8a78d1cf43', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-legacy-column", { col: c })), h("div", { key: 'e50a31db45e3f39e9d0fed36a21be9257eec09bf', class: "picker-below-highlight" }))), h("div", { key: '5a78cb2176ac807ea0c195c6b76cd0e8eef9d4c0', tabindex: "0", "aria-hidden": "true" })));
2213
+ [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '754a80de29087f7e793b232c4276fc1f6b1c937f', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '9fcffb91109d6082ed338cd37a997254e5ea5bce', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'de066bda70a9cb831fc88493873d7ebf879122d0', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: '03a502e2e1aa38abd582ecfca60da8b7d1045701', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: 'f9e4d9eff3c2df866f15eed63f715a51c912eac6', class: "picker-columns" }, h("div", { key: '78656d3265f9d4c82387f942c896a9d67c1fcedf', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-legacy-column", { col: c })), h("div", { key: '1afd96cfa38fa9f52f61a867f2aa116a9ef3bedb', class: "picker-below-highlight" }))), h("div", { key: '4d533e132d70f6ab32c461e3e4f6f9dfbe6bab15', tabindex: "0", "aria-hidden": "true" })));
2210
2214
  }
2211
2215
  get el() { return getElement(this); }
2212
2216
  static get watchers() { return {
@@ -5,7 +5,7 @@ import { r as registerInstance, c as createEvent, e as config, h, d as Host, g a
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-TO1rZH52.js';
6
6
  import { r as raf } from './helpers-Tl8jw6S2.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, n as setOverlayId, k as cleanupRootFocusTrapAccessibility, f as present, g as dismiss, h as eventMethod } from './overlays-Ie5kkCl2.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, n as setOverlayId, k as cleanupRootFocusTrapAccessibility, f as present, g as dismiss, h as eventMethod } from './overlays-CCsdmuZR.js';
9
9
  import { g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-DfbeLwcV.js';
11
11
  import { c as createAnimation } from './animation-CnGMT4ji.js';
@@ -211,13 +211,9 @@ const Loading = class {
211
211
  }
212
212
  disconnectedCallback() {
213
213
  this.triggerController.removeClickListener();
214
+ // Clean up aria-hidden if removed without dismiss() being called
214
215
  if (this.presented) {
215
- const el = this.el;
216
- setTimeout(() => {
217
- if (!el.isConnected) {
218
- cleanupRootFocusTrapAccessibility();
219
- }
220
- }, 0);
216
+ cleanupRootFocusTrapAccessibility();
221
217
  }
222
218
  }
223
219
  /**
@@ -284,9 +280,9 @@ const Loading = class {
284
280
  * Otherwise, don't set aria-labelledby.
285
281
  */
286
282
  const ariaLabelledBy = message !== undefined ? msgId : null;
287
- return (h(Host, Object.assign({ key: '65eb9e96b3fb937ff30c3145858f5e4ca6cf739c', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
283
+ return (h(Host, Object.assign({ key: 'ab48bfcee8f7e3e33847a2f262fdc08b9ea804ca', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
288
284
  zIndex: `${40000 + this.overlayIndex}`,
289
- }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: 'c21c1701a641a56b98b248b4963aa3888530a3bc', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '0d3aacc605bda9cee34c08daab8a80766a934f72', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '675c9f582002f4306c9d6ccdf7560a3562f16e15', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: 'ff610d72cdd1ebdb0ac57753d76a57e8630bcc4a', class: "loading-spinner" }, h("ion-spinner", { key: '4a48bbb926f71fba9d97dc51f9e398e6af59a34e', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '0721486e2be7e3c687bbd864d3efc1aeaa61068c', tabindex: "0", "aria-hidden": "true" })));
285
+ }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '41baccc7fb6474389a3a3431c208e829ef738b75', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '7b7290974abbe8db8739b19835aca9f8b5c271c2', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'e32466abfcc92aaad47ea03b1dcb49f66abe4b63', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: 'c5e6e6f9e3f39dba0225d08d7dd2c1b96a1d83c7', class: "loading-spinner" }, h("ion-spinner", { key: 'f428038959d879404ea898011363aac0b807ad11', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '490e531367b86c319fa4260722dcff4dd631fa88', tabindex: "0", "aria-hidden": "true" })));
290
286
  }
291
287
  get el() { return getElement(this); }
292
288
  static get watchers() { return {
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { r as registerInstance, c as createEvent, e as config, j as printIonError, h, d as Host, g as getElement } from './index-IGIE5vDm.js';
5
5
  import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
6
- import { q as getPresentedOverlay, B as BACKDROP, o as focusFirstDescendant, r as focusLastDescendant, G as GESTURE } from './overlays-Ie5kkCl2.js';
6
+ import { q as getPresentedOverlay, B as BACKDROP, o as focusFirstDescendant, r as focusLastDescendant, G as GESTURE } from './overlays-CCsdmuZR.js';
7
7
  import { G as GESTURE_CONTROLLER } from './gesture-controller-BTEOs1at.js';
8
8
  import { shouldUseCloseWatcher } from './hardware-back-button-CTe4XmL7.js';
9
9
  import { o as isEndSide, i as inheritAriaAttributes, l as assert, e as clamp } from './helpers-Tl8jw6S2.js';
@@ -7,7 +7,7 @@ import { C as CoreDelegate, a as attachComponent, d as detachComponent } from '.
7
7
  import { e as clamp, g as getElementRoot, r as raf, b as inheritAttributes, h as hasLazyBuild } from './helpers-Tl8jw6S2.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
9
9
  import { g as getCapacitor } from './capacitor-CFERIeaU.js';
10
- import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as cleanupRootFocusTrapAccessibility, n as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-Ie5kkCl2.js';
10
+ import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as cleanupRootFocusTrapAccessibility, n as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-CCsdmuZR.js';
11
11
  import { g as getClassMap } from './theme-DiVJyqlX.js';
12
12
  import { e as deepReady, w as waitForMount } from './index-B-hkiOUh.js';
13
13
  import { b as getIonMode } from './ionic-global-DfbeLwcV.js';
@@ -2056,19 +2056,9 @@ const Modal = class {
2056
2056
  // Also called in dismiss() — intentional dual cleanup covers both
2057
2057
  // dismiss-then-remove and direct DOM removal without dismiss.
2058
2058
  this.cleanupSafeAreaOverrides();
2059
- // If the modal was removed from the DOM while still presented
2060
- // (e.g., a framework unmounted it during a route change without
2061
- // calling dismiss()), clean up aria-hidden on the root outlet
2062
- // so the app remains accessible.
2063
- // Deferred to a microtask so DOM moves (disconnect + reconnect in
2064
- // the same tick, e.g. React portals) don't prematurely clear it.
2059
+ // Clean up aria-hidden if removed without dismiss() being called
2065
2060
  if (this.presented) {
2066
- const el = this.el;
2067
- setTimeout(() => {
2068
- if (!el.isConnected) {
2069
- cleanupRootFocusTrapAccessibility();
2070
- }
2071
- }, 0);
2061
+ cleanupRootFocusTrapAccessibility();
2072
2062
  }
2073
2063
  }
2074
2064
  componentWillLoad() {
@@ -2918,20 +2908,20 @@ const Modal = class {
2918
2908
  const isCardModal = presentingElement !== undefined && mode === 'ios';
2919
2909
  const isHandleCycle = handleBehavior === 'cycle';
2920
2910
  const isSheetModalWithHandle = isSheetModal && showHandle;
2921
- return (h(Host, Object.assign({ key: '06c06b4b475da99c8bdb63663265d62f77e1716f', "no-router": true,
2911
+ return (h(Host, Object.assign({ key: 'e6df0917ac03a8d6bf67cc9bebf075d2b804ba22', "no-router": true,
2922
2912
  // Allow the modal to be navigable when the handle is focusable
2923
2913
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
2924
2914
  zIndex: `${20000 + this.overlayIndex}`,
2925
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '356b54af9039b40ff0d5431d2c800943d0b5bc03', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'e5b75d40f069e8c79b7ffeab49849bea994fc4b1', class: "modal-shadow" }), h("div", Object.assign({ key: '5144554b1bb7c119eef03936b55df44f3d745f5c',
2915
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '710ed1cbb6ae9c1a1fa7ae774fd44aa3bbee8381', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'c9051fcd099e9b73e17f015dea6e16fbd73e4df4', class: "modal-shadow" }), h("div", Object.assign({ key: '21e42d40099a569d95a4e04aa6d314c7d45c6192',
2926
2916
  /*
2927
2917
  role and aria-modal must be used on the
2928
2918
  same element. They must also be set inside the
2929
2919
  shadow DOM otherwise ion-button will not be highlighted
2930
2920
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
2931
2921
  */
2932
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '8740ede37e0f38fc70dd555494e3b49bb02c6622', class: "modal-handle",
2922
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'b48a6c32c9a7ebe5e070e8d9f3510d55d4bd1f9f', class: "modal-handle",
2933
2923
  // Prevents the handle from receiving keyboard focus when it does not cycle
2934
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: 'bff95653b5c2629ec5348e0a5f7055d4a45e8490', onSlotchange: this.onSlotChange }))));
2924
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '2a20160f66629c14e3414bbe01e5ee89101d02be', onSlotchange: this.onSlotChange }))));
2935
2925
  }
2936
2926
  get el() { return getElement(this); }
2937
2927
  static get watchers() { return {
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { r as registerInstance, c as createEvent, f as printIonWarning, h, d as Host, g as getElement } from './index-IGIE5vDm.js';
5
- import { B as BACKDROP, j as prepareOverlay, k as cleanupRootFocusTrapAccessibility, n as setOverlayId, f as present, o as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-Ie5kkCl2.js';
5
+ import { B as BACKDROP, j as prepareOverlay, k as cleanupRootFocusTrapAccessibility, n as setOverlayId, f as present, o as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-CCsdmuZR.js';
6
6
  import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-CyxE1S_P.js';
7
7
  import { g as getElementRoot, r as raf, f as addEventListener, h as hasLazyBuild } from './helpers-Tl8jw6S2.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
@@ -1304,13 +1304,9 @@ const Popover = class {
1304
1304
  this.headerResizeObserver.disconnect();
1305
1305
  this.headerResizeObserver = undefined;
1306
1306
  }
1307
+ // Clean up aria-hidden if removed without dismiss() being called
1307
1308
  if (this.presented) {
1308
- const el = this.el;
1309
- setTimeout(() => {
1310
- if (!el.isConnected) {
1311
- cleanupRootFocusTrapAccessibility();
1312
- }
1313
- }, 0);
1309
+ cleanupRootFocusTrapAccessibility();
1314
1310
  }
1315
1311
  }
1316
1312
  componentWillLoad() {
@@ -1550,9 +1546,9 @@ const Popover = class {
1550
1546
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
1551
1547
  const desktop = isPlatform('desktop');
1552
1548
  const enableArrow = arrow && !parentPopover;
1553
- return (h(Host, Object.assign({ key: 'ffe93d304b75ddd2caac4678e0ac34fa590eca12', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1549
+ return (h(Host, Object.assign({ key: 'afc292b6b4eeb571c1cd832bc7ac03e0fea3dc28', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1554
1550
  zIndex: `${20000 + this.overlayIndex}`,
1555
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: '7c8fb1caa06e45a721923011debccc0bebc993af', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: 'cedaee91689606a705b3272b9ca2c74cc2ca4193', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: '6046d50f5b7593f385ce1a5e4f651e3a39171b26', class: "popover-arrow", part: "arrow" }), h("div", { key: 'ec8feab51ec81bac7b4ef6e6d84570f95033e3a2', class: "popover-content", part: "content" }, h("slot", { key: 'cbe3ac604048509fcf481786a5eefd8bce65ad1a' })))));
1551
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: '301a33645918c7feb807a6fe857e462b83291c40', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: 'f66123d36601ce61af3bce3c68c73002fe3a6d73', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: '39c92c94d01748d499f2db2513ecf022be2577dd', class: "popover-arrow", part: "arrow" }), h("div", { key: '827552221533f7b5676e6e313cd7517275ea76d7', class: "popover-content", part: "content" }, h("slot", { key: 'f874b8dfb78bfbc02e3bcad104819bf8d181d42f' })))));
1556
1552
  }
1557
1553
  get el() { return getElement(this); }
1558
1554
  static get watchers() { return {
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { r as registerInstance, h, i as forceUpdate, d as Host, g as getElement } from './index-IGIE5vDm.js';
5
5
  import { b as getIonMode } from './ionic-global-DfbeLwcV.js';
6
- import { s as safeCall } from './overlays-Ie5kkCl2.js';
6
+ import { s as safeCall } from './overlays-CCsdmuZR.js';
7
7
  import { g as getClassMap } from './theme-DiVJyqlX.js';
8
8
  import './index-ZjP4CjeZ.js';
9
9
  import './helpers-Tl8jw6S2.js';
@@ -6,7 +6,7 @@ import { c as createNotchController } from './notch-controller-DAcvKU57.js';
6
6
  import { i as isOptionSelected, c as compareOptions } from './compare-with-utils-sObYyvOy.js';
7
7
  import { c as checkInvalidState } from './validity-DJztqcrH.js';
8
8
  import { b as inheritAttributes, a as renderHiddenInput, n as focusVisibleElement } from './helpers-Tl8jw6S2.js';
9
- import { c as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-Ie5kkCl2.js';
9
+ import { c as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-CCsdmuZR.js';
10
10
  import { i as isRTL } from './dir-C53feagD.js';
11
11
  import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
12
12
  import { w as watchForOptions } from './watch-options-Dtdm8lKC.js';
@@ -5,7 +5,7 @@ import { f as printIonWarning, r as registerInstance, c as createEvent, e as con
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-TO1rZH52.js';
6
6
  import { g as getElementRoot, r as raf } from './helpers-Tl8jw6S2.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
8
- import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, n as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-Ie5kkCl2.js';
8
+ import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, n as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-CCsdmuZR.js';
9
9
  import { c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-DfbeLwcV.js';
11
11
  import { c as createAnimation } from './animation-CnGMT4ji.js';
@@ -521,6 +521,9 @@ const setRootAriaHidden = (hidden = false) => {
521
521
  * when the overlay was still presented at the time of removal.
522
522
  */
523
523
  const cleanupRootFocusTrapAccessibility = () => {
524
+ if (typeof document === 'undefined') {
525
+ return;
526
+ }
524
527
  const remainingOverlays = getPresentedOverlays(document);
525
528
  const hasRemainingLocking = remainingOverlays.some((o) => {
526
529
  const el = o;