@ionic/core 8.7.4 → 8.7.5-dev.11758560050.1d0c4f0a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/components/overlays.js +17 -12
  2. package/dist/cjs/index.cjs.js +1 -1
  3. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  4. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  5. package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
  6. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  7. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  8. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  9. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  10. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  11. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  12. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  13. package/dist/cjs/{overlays-v_jc1Hok.js → overlays-CPUTc8An.js} +17 -12
  14. package/dist/collection/utils/overlays.js +17 -12
  15. package/dist/docs.json +1 -1
  16. package/dist/esm/index.js +1 -1
  17. package/dist/esm/ion-action-sheet.entry.js +1 -1
  18. package/dist/esm/ion-alert.entry.js +1 -1
  19. package/dist/esm/ion-datetime_3.entry.js +1 -1
  20. package/dist/esm/ion-loading.entry.js +1 -1
  21. package/dist/esm/ion-menu_3.entry.js +1 -1
  22. package/dist/esm/ion-modal.entry.js +1 -1
  23. package/dist/esm/ion-popover.entry.js +1 -1
  24. package/dist/esm/ion-select-modal.entry.js +1 -1
  25. package/dist/esm/ion-select_3.entry.js +1 -1
  26. package/dist/esm/ion-toast.entry.js +1 -1
  27. package/dist/esm/{overlays-BJaRj3Rj.js → overlays-BOalOTUe.js} +17 -12
  28. package/dist/ionic/index.esm.js +1 -1
  29. package/dist/ionic/ionic.esm.js +1 -1
  30. package/dist/ionic/{p-5a9be5a3.entry.js → p-12d04c28.entry.js} +1 -1
  31. package/dist/ionic/{p-22a0f820.entry.js → p-1bd0a347.entry.js} +1 -1
  32. package/dist/ionic/{p-2060feb1.entry.js → p-26ed5106.entry.js} +1 -1
  33. package/dist/ionic/{p-1ab0fc21.entry.js → p-2e1782af.entry.js} +1 -1
  34. package/dist/ionic/{p-89c2e0a3.entry.js → p-3f07313b.entry.js} +1 -1
  35. package/dist/ionic/{p-cd93c119.entry.js → p-4a95b96c.entry.js} +1 -1
  36. package/dist/ionic/{p-095073c6.entry.js → p-97f8294e.entry.js} +1 -1
  37. package/dist/ionic/p-JK8qe2uI.js +4 -0
  38. package/dist/ionic/{p-b17f0554.entry.js → p-de2bedb6.entry.js} +1 -1
  39. package/dist/ionic/{p-60ff6bf6.entry.js → p-f4dfce09.entry.js} +1 -1
  40. package/dist/ionic/p-fd46b48a.entry.js +4 -0
  41. package/hydrate/index.js +17 -12
  42. package/hydrate/index.mjs +17 -12
  43. package/package.json +1 -1
  44. package/dist/ionic/p-CoDfkBuk.js +0 -4
  45. package/dist/ionic/p-dc8d0bb9.entry.js +0 -4
@@ -524,9 +524,13 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
524
524
  * focus traps.
525
525
  *
526
526
  * All other overlays should have focus traps to prevent
527
- * the keyboard focus from leaving the overlay.
527
+ * the keyboard focus from leaving the overlay unless
528
+ * developers explicitly opt out (for example, sheet
529
+ * modals that should permit background interaction).
528
530
  */
529
- if (overlay.el.tagName !== 'ION-TOAST') {
531
+ const overlayEl = overlay.el;
532
+ const shouldTrapFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
533
+ if (shouldTrapFocus) {
530
534
  setRootAriaHidden(true);
531
535
  document.body.classList.add(BACKDROP_NO_SCROLL);
532
536
  }
@@ -628,20 +632,21 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
628
632
  * For accessibility, toasts lack focus traps and don't receive
629
633
  * `aria-hidden` on the root element when presented.
630
634
  *
631
- * All other overlays use focus traps to keep keyboard focus
632
- * within the overlay, setting `aria-hidden` on the root element
633
- * to enhance accessibility.
634
- *
635
- * Therefore, we must remove `aria-hidden` from the root element
636
- * when the last non-toast overlay is dismissed.
635
+ * Overlays that opt into focus trapping set `aria-hidden`
636
+ * on the root element to keep keyboard focus and pointer
637
+ * events inside the overlay. We must remove `aria-hidden`
638
+ * from the root element when the last focus-trapping overlay
639
+ * is dismissed.
637
640
  */
638
- const overlaysNotToast = presentedOverlays.filter((o) => o.tagName !== 'ION-TOAST');
639
- const lastOverlayNotToast = overlaysNotToast.length === 1 && overlaysNotToast[0].id === overlay.el.id;
641
+ const overlaysTrappingFocus = presentedOverlays.filter((o) => o.tagName !== 'ION-TOAST' && o.focusTrap !== false);
642
+ const overlayEl = overlay.el;
643
+ const trapsFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
640
644
  /**
641
- * If this is the last visible overlay that is not a toast
645
+ * If this is the last visible overlay that is trapping focus
642
646
  * then we want to re-add the root to the accessibility tree.
643
647
  */
644
- if (lastOverlayNotToast) {
648
+ const lastOverlayTrappingFocus = trapsFocus && overlaysTrappingFocus.length === 1 && overlaysTrappingFocus[0].id === overlayEl.id;
649
+ if (lastOverlayTrappingFocus) {
645
650
  setRootAriaHidden(false);
646
651
  document.body.classList.remove(BACKDROP_NO_SCROLL);
647
652
  }
@@ -15,7 +15,7 @@ var index$2 = require('./index-DNh170BW.js');
15
15
  var config = require('./config-CKhELRRu.js');
16
16
  var theme = require('./theme-CeDs6Hcv.js');
17
17
  var index$3 = require('./index-D24wggHR.js');
18
- var overlays = require('./overlays-v_jc1Hok.js');
18
+ var overlays = require('./overlays-CPUTc8An.js');
19
19
  require('./index-DkNv4J_i.js');
20
20
  require('./gesture-controller-dtqlP_q4.js');
21
21
  require('./hardware-back-button-BxdNu76F.js');
@@ -7,7 +7,7 @@ var index = require('./index-DNh170BW.js');
7
7
  var buttonActive = require('./button-active-BzZenWWH.js');
8
8
  var helpers = require('./helpers-DgwmcYAu.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-v_jc1Hok.js');
10
+ var overlays = require('./overlays-CPUTc8An.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
13
13
  var animation = require('./animation-ZJ1lAkZD.js');
@@ -8,7 +8,7 @@ var config = require('./config-CKhELRRu.js');
8
8
  var buttonActive = require('./button-active-BzZenWWH.js');
9
9
  var helpers = require('./helpers-DgwmcYAu.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
11
- var overlays = require('./overlays-v_jc1Hok.js');
11
+ var overlays = require('./overlays-CPUTc8An.js');
12
12
  var theme = require('./theme-CeDs6Hcv.js');
13
13
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
14
14
  var animation = require('./animation-ZJ1lAkZD.js');
@@ -6,7 +6,7 @@
6
6
  var index = require('./index-DNh170BW.js');
7
7
  var focusVisible = require('./focus-visible-CCvKiLh3.js');
8
8
  var helpers = require('./helpers-DgwmcYAu.js');
9
- var overlays = require('./overlays-v_jc1Hok.js');
9
+ var overlays = require('./overlays-CPUTc8An.js');
10
10
  var dir = require('./dir-Cn0z1rJH.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var index$1 = require('./index-DqmRDbxg.js');
@@ -7,7 +7,7 @@ var index = require('./index-DNh170BW.js');
7
7
  var config = require('./config-CKhELRRu.js');
8
8
  var helpers = require('./helpers-DgwmcYAu.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-v_jc1Hok.js');
10
+ var overlays = require('./overlays-CPUTc8An.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
13
13
  var animation = require('./animation-ZJ1lAkZD.js');
@@ -5,7 +5,7 @@
5
5
 
6
6
  var index = require('./index-DNh170BW.js');
7
7
  var cubicBezier = require('./cubic-bezier-DAjy1V-e.js');
8
- var overlays = require('./overlays-v_jc1Hok.js');
8
+ var overlays = require('./overlays-CPUTc8An.js');
9
9
  var gestureController = require('./gesture-controller-dtqlP_q4.js');
10
10
  var hardwareBackButton = require('./hardware-back-button-BxdNu76F.js');
11
11
  var helpers = require('./helpers-DgwmcYAu.js');
@@ -9,7 +9,7 @@ var frameworkDelegate = require('./framework-delegate-WkyjrnCx.js');
9
9
  var helpers = require('./helpers-DgwmcYAu.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
11
11
  var capacitor = require('./capacitor-DmA66EwP.js');
12
- var overlays = require('./overlays-v_jc1Hok.js');
12
+ var overlays = require('./overlays-CPUTc8An.js');
13
13
  var theme = require('./theme-CeDs6Hcv.js');
14
14
  var index$4 = require('./index-BzEyuIww.js');
15
15
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-DNh170BW.js');
7
- var overlays = require('./overlays-v_jc1Hok.js');
7
+ var overlays = require('./overlays-CPUTc8An.js');
8
8
  var frameworkDelegate = require('./framework-delegate-WkyjrnCx.js');
9
9
  var helpers = require('./helpers-DgwmcYAu.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
@@ -5,7 +5,7 @@
5
5
 
6
6
  var index = require('./index-DNh170BW.js');
7
7
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
8
- var overlays = require('./overlays-v_jc1Hok.js');
8
+ var overlays = require('./overlays-CPUTc8An.js');
9
9
  var theme = require('./theme-CeDs6Hcv.js');
10
10
  require('./index-DkNv4J_i.js');
11
11
  require('./helpers-DgwmcYAu.js');
@@ -7,7 +7,7 @@ var index = require('./index-DNh170BW.js');
7
7
  var notchController = require('./notch-controller-Bf5Rr4R5.js');
8
8
  var compareWithUtils = require('./compare-with-utils-DSicavqM.js');
9
9
  var helpers = require('./helpers-DgwmcYAu.js');
10
- var overlays = require('./overlays-v_jc1Hok.js');
10
+ var overlays = require('./overlays-CPUTc8An.js');
11
11
  var dir = require('./dir-Cn0z1rJH.js');
12
12
  var theme = require('./theme-CeDs6Hcv.js');
13
13
  var watchOptions = require('./watch-options-CviOsrTS.js');
@@ -7,7 +7,7 @@ var index$1 = require('./index-DNh170BW.js');
7
7
  var config = require('./config-CKhELRRu.js');
8
8
  var helpers = require('./helpers-DgwmcYAu.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-v_jc1Hok.js');
10
+ var overlays = require('./overlays-CPUTc8An.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
13
13
  var animation = require('./animation-ZJ1lAkZD.js');
@@ -526,9 +526,13 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
526
526
  * focus traps.
527
527
  *
528
528
  * All other overlays should have focus traps to prevent
529
- * the keyboard focus from leaving the overlay.
529
+ * the keyboard focus from leaving the overlay unless
530
+ * developers explicitly opt out (for example, sheet
531
+ * modals that should permit background interaction).
530
532
  */
531
- if (overlay.el.tagName !== 'ION-TOAST') {
533
+ const overlayEl = overlay.el;
534
+ const shouldTrapFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
535
+ if (shouldTrapFocus) {
532
536
  setRootAriaHidden(true);
533
537
  document.body.classList.add(gestureController.BACKDROP_NO_SCROLL);
534
538
  }
@@ -630,20 +634,21 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
630
634
  * For accessibility, toasts lack focus traps and don't receive
631
635
  * `aria-hidden` on the root element when presented.
632
636
  *
633
- * All other overlays use focus traps to keep keyboard focus
634
- * within the overlay, setting `aria-hidden` on the root element
635
- * to enhance accessibility.
636
- *
637
- * Therefore, we must remove `aria-hidden` from the root element
638
- * when the last non-toast overlay is dismissed.
637
+ * Overlays that opt into focus trapping set `aria-hidden`
638
+ * on the root element to keep keyboard focus and pointer
639
+ * events inside the overlay. We must remove `aria-hidden`
640
+ * from the root element when the last focus-trapping overlay
641
+ * is dismissed.
639
642
  */
640
- const overlaysNotToast = presentedOverlays.filter((o) => o.tagName !== 'ION-TOAST');
641
- const lastOverlayNotToast = overlaysNotToast.length === 1 && overlaysNotToast[0].id === overlay.el.id;
643
+ const overlaysTrappingFocus = presentedOverlays.filter((o) => o.tagName !== 'ION-TOAST' && o.focusTrap !== false);
644
+ const overlayEl = overlay.el;
645
+ const trapsFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
642
646
  /**
643
- * If this is the last visible overlay that is not a toast
647
+ * If this is the last visible overlay that is trapping focus
644
648
  * then we want to re-add the root to the accessibility tree.
645
649
  */
646
- if (lastOverlayNotToast) {
650
+ const lastOverlayTrappingFocus = trapsFocus && overlaysTrappingFocus.length === 1 && overlaysTrappingFocus[0].id === overlayEl.id;
651
+ if (lastOverlayTrappingFocus) {
647
652
  setRootAriaHidden(false);
648
653
  document.body.classList.remove(gestureController.BACKDROP_NO_SCROLL);
649
654
  }
@@ -445,9 +445,13 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
445
445
  * focus traps.
446
446
  *
447
447
  * All other overlays should have focus traps to prevent
448
- * the keyboard focus from leaving the overlay.
448
+ * the keyboard focus from leaving the overlay unless
449
+ * developers explicitly opt out (for example, sheet
450
+ * modals that should permit background interaction).
449
451
  */
450
- if (overlay.el.tagName !== 'ION-TOAST') {
452
+ const overlayEl = overlay.el;
453
+ const shouldTrapFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
454
+ if (shouldTrapFocus) {
451
455
  setRootAriaHidden(true);
452
456
  document.body.classList.add(BACKDROP_NO_SCROLL);
453
457
  }
@@ -549,20 +553,21 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
549
553
  * For accessibility, toasts lack focus traps and don't receive
550
554
  * `aria-hidden` on the root element when presented.
551
555
  *
552
- * All other overlays use focus traps to keep keyboard focus
553
- * within the overlay, setting `aria-hidden` on the root element
554
- * to enhance accessibility.
555
- *
556
- * Therefore, we must remove `aria-hidden` from the root element
557
- * when the last non-toast overlay is dismissed.
556
+ * Overlays that opt into focus trapping set `aria-hidden`
557
+ * on the root element to keep keyboard focus and pointer
558
+ * events inside the overlay. We must remove `aria-hidden`
559
+ * from the root element when the last focus-trapping overlay
560
+ * is dismissed.
558
561
  */
559
- const overlaysNotToast = presentedOverlays.filter((o) => o.tagName !== 'ION-TOAST');
560
- const lastOverlayNotToast = overlaysNotToast.length === 1 && overlaysNotToast[0].id === overlay.el.id;
562
+ const overlaysTrappingFocus = presentedOverlays.filter((o) => o.tagName !== 'ION-TOAST' && o.focusTrap !== false);
563
+ const overlayEl = overlay.el;
564
+ const trapsFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
561
565
  /**
562
- * If this is the last visible overlay that is not a toast
566
+ * If this is the last visible overlay that is trapping focus
563
567
  * then we want to re-add the root to the accessibility tree.
564
568
  */
565
- if (lastOverlayNotToast) {
569
+ const lastOverlayTrappingFocus = trapsFocus && overlaysTrappingFocus.length === 1 && overlaysTrappingFocus[0].id === overlayEl.id;
570
+ if (lastOverlayTrappingFocus) {
566
571
  setRootAriaHidden(false);
567
572
  document.body.classList.remove(BACKDROP_NO_SCROLL);
568
573
  }
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2025-09-17T15:50:50",
2
+ "timestamp": "2025-09-22T16:55:58",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.36.2",
package/dist/esm/index.js CHANGED
@@ -13,7 +13,7 @@ export { L as LogLevel } from './index-4DxY6_gG.js';
13
13
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-Dx_6wPIJ.js';
14
14
  export { o as openURL } from './theme-DiVJyqlX.js';
15
15
  export { m as menuController } from './index-CXSTcaAW.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-BJaRj3Rj.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-BOalOTUe.js';
17
17
  import './index-ZjP4CjeZ.js';
18
18
  import './gesture-controller-BTEOs1at.js';
19
19
  import './hardware-back-button-Dhbd-23H.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-DBUPuLNw.js';
6
6
  import { r as raf } from './helpers-8KSQQGQy.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 setOverlayId } from './overlays-BJaRj3Rj.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 setOverlayId } from './overlays-BOalOTUe.js';
9
9
  import { g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-CTSyufhF.js';
11
11
  import { c as createAnimation } from './animation-BvhAtgca.js';
@@ -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-DBUPuLNw.js';
7
7
  import { r as raf } from './helpers-8KSQQGQy.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, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-BJaRj3Rj.js';
9
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-BOalOTUe.js';
10
10
  import { g as getClassMap } from './theme-DiVJyqlX.js';
11
11
  import { b as getIonMode } from './ionic-global-CTSyufhF.js';
12
12
  import { c as createAnimation } from './animation-BvhAtgca.js';
@@ -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-4DxY6_gG.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-8KSQQGQy.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 setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-BJaRj3Rj.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 setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-BOalOTUe.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';
@@ -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-Dx_6wPIJ.js';
6
6
  import { r as raf } from './helpers-8KSQQGQy.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, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-BJaRj3Rj.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-BOalOTUe.js';
9
9
  import { g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-CTSyufhF.js';
11
11
  import { c as createAnimation } from './animation-BvhAtgca.js';
@@ -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-4DxY6_gG.js';
5
5
  import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
6
- import { o as getPresentedOverlay, B as BACKDROP, n as focusFirstDescendant, q as focusLastDescendant, G as GESTURE } from './overlays-BJaRj3Rj.js';
6
+ import { o as getPresentedOverlay, B as BACKDROP, n as focusFirstDescendant, q as focusLastDescendant, G as GESTURE } from './overlays-BOalOTUe.js';
7
7
  import { G as GESTURE_CONTROLLER } from './gesture-controller-BTEOs1at.js';
8
8
  import { shouldUseCloseWatcher } from './hardware-back-button-Dhbd-23H.js';
9
9
  import { o as isEndSide, i as inheritAriaAttributes, l as assert, e as clamp } from './helpers-8KSQQGQy.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-8KSQQGQy.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 setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-BJaRj3Rj.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 setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-BOalOTUe.js';
11
11
  import { g as getClassMap } from './theme-DiVJyqlX.js';
12
12
  import { e as deepReady, w as waitForMount } from './index-Dp7GXH1z.js';
13
13
  import { b as getIonMode } from './ionic-global-CTSyufhF.js';
@@ -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-4DxY6_gG.js';
5
- import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, n as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-BJaRj3Rj.js';
5
+ import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, n as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-BOalOTUe.js';
6
6
  import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-BLEBgH06.js';
7
7
  import { g as getElementRoot, r as raf, f as addEventListener, h as hasLazyBuild } from './helpers-8KSQQGQy.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { r as registerInstance, h, i as forceUpdate, d as Host, g as getElement } from './index-4DxY6_gG.js';
5
5
  import { b as getIonMode } from './ionic-global-CTSyufhF.js';
6
- import { s as safeCall } from './overlays-BJaRj3Rj.js';
6
+ import { s as safeCall } from './overlays-BOalOTUe.js';
7
7
  import { g as getClassMap } from './theme-DiVJyqlX.js';
8
8
  import './index-ZjP4CjeZ.js';
9
9
  import './helpers-8KSQQGQy.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, c as createEvent, f as printIonWarning, h, d as
5
5
  import { c as createNotchController } from './notch-controller-lb417-kU.js';
6
6
  import { i as isOptionSelected, c as compareOptions } from './compare-with-utils-sObYyvOy.js';
7
7
  import { b as inheritAttributes, a as renderHiddenInput, n as focusVisibleElement } from './helpers-8KSQQGQy.js';
8
- import { c as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-BJaRj3Rj.js';
8
+ import { c as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-BOalOTUe.js';
9
9
  import { i as isRTL } from './dir-C53feagD.js';
10
10
  import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
11
11
  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-Dx_6wPIJ.js';
6
6
  import { g as getElementRoot, r as raf } from './helpers-8KSQQGQy.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, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-BJaRj3Rj.js';
8
+ import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-BOalOTUe.js';
9
9
  import { c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-CTSyufhF.js';
11
11
  import { c as createAnimation } from './animation-BvhAtgca.js';
@@ -524,9 +524,13 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
524
524
  * focus traps.
525
525
  *
526
526
  * All other overlays should have focus traps to prevent
527
- * the keyboard focus from leaving the overlay.
527
+ * the keyboard focus from leaving the overlay unless
528
+ * developers explicitly opt out (for example, sheet
529
+ * modals that should permit background interaction).
528
530
  */
529
- if (overlay.el.tagName !== 'ION-TOAST') {
531
+ const overlayEl = overlay.el;
532
+ const shouldTrapFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
533
+ if (shouldTrapFocus) {
530
534
  setRootAriaHidden(true);
531
535
  document.body.classList.add(BACKDROP_NO_SCROLL);
532
536
  }
@@ -628,20 +632,21 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
628
632
  * For accessibility, toasts lack focus traps and don't receive
629
633
  * `aria-hidden` on the root element when presented.
630
634
  *
631
- * All other overlays use focus traps to keep keyboard focus
632
- * within the overlay, setting `aria-hidden` on the root element
633
- * to enhance accessibility.
634
- *
635
- * Therefore, we must remove `aria-hidden` from the root element
636
- * when the last non-toast overlay is dismissed.
635
+ * Overlays that opt into focus trapping set `aria-hidden`
636
+ * on the root element to keep keyboard focus and pointer
637
+ * events inside the overlay. We must remove `aria-hidden`
638
+ * from the root element when the last focus-trapping overlay
639
+ * is dismissed.
637
640
  */
638
- const overlaysNotToast = presentedOverlays.filter((o) => o.tagName !== 'ION-TOAST');
639
- const lastOverlayNotToast = overlaysNotToast.length === 1 && overlaysNotToast[0].id === overlay.el.id;
641
+ const overlaysTrappingFocus = presentedOverlays.filter((o) => o.tagName !== 'ION-TOAST' && o.focusTrap !== false);
642
+ const overlayEl = overlay.el;
643
+ const trapsFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
640
644
  /**
641
- * If this is the last visible overlay that is not a toast
645
+ * If this is the last visible overlay that is trapping focus
642
646
  * then we want to re-add the root to the accessibility tree.
643
647
  */
644
- if (lastOverlayNotToast) {
648
+ const lastOverlayTrappingFocus = trapsFocus && overlaysTrappingFocus.length === 1 && overlaysTrappingFocus[0].id === overlayEl.id;
649
+ if (lastOverlayTrappingFocus) {
645
650
  setRootAriaHidden(false);
646
651
  document.body.classList.remove(BACKDROP_NO_SCROLL);
647
652
  }
@@ -1,4 +1,4 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- export{c as createAnimation}from"./p-C87oPMMF.js";export{a as LIFECYCLE_DID_ENTER,c as LIFECYCLE_DID_LEAVE,L as LIFECYCLE_WILL_ENTER,b as LIFECYCLE_WILL_LEAVE,d as LIFECYCLE_WILL_UNLOAD,g as getIonPageElement}from"./p-DCuOL88l.js";export{iosTransitionAnimation}from"./p-BB-JoKGB.js";export{mdTransitionAnimation}from"./p-LaGjiAVo.js";export{g as getTimeGivenProgression}from"./p-hHmYLOfE.js";export{createGesture}from"./p-Cl0B-RWe.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./p-Br3vSlYh.js";export{c as componentOnReady}from"./p-C-Cct-6D.js";export{L as LogLevel}from"./p-4DxY6_gG.js";export{I as IonicSafeString,g as getMode,s as setupConfig}from"./p-EnaLTYYj.js";export{o as openURL}from"./p-DiVJyqlX.js";export{m as menuController}from"./p-C8d2ebIg.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as pickerController,c as popoverController,t as toastController}from"./p-CoDfkBuk.js";import"./p-ZjP4CjeZ.js";import"./p-BTEOs1at.js";import"./p-CvaZMP6T.js";import"./p-DAfH9Iif.js";const e=e=>{const{swiper:o,extendParams:t}=e,s={effect:void 0,direction:"horizontal",initialSlide:0,loop:!1,parallax:!1,slidesPerView:1,spaceBetween:0,speed:300,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,touchEventsTarget:"container",freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,zoom:{maxRatio:3,minRatio:1,toggle:!1},touchRatio:1,touchAngle:45,simulateTouch:!0,touchStartPreventDefault:!1,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loopAdditionalSlides:0,noSwiping:!0,runCallbacksOnInit:!0,coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flipEffect:{slideShadows:!0,limitRotation:!0},cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fadeEffect:{crossFade:!1},a11y:{prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide"}};o.pagination&&(s.pagination={type:"bullets",clickable:!1,hideOnClick:!1}),o.scrollbar&&(s.scrollbar={hide:!0}),t(s)};export{e as IonicSlides}
4
+ export{c as createAnimation}from"./p-C87oPMMF.js";export{a as LIFECYCLE_DID_ENTER,c as LIFECYCLE_DID_LEAVE,L as LIFECYCLE_WILL_ENTER,b as LIFECYCLE_WILL_LEAVE,d as LIFECYCLE_WILL_UNLOAD,g as getIonPageElement}from"./p-DCuOL88l.js";export{iosTransitionAnimation}from"./p-BB-JoKGB.js";export{mdTransitionAnimation}from"./p-LaGjiAVo.js";export{g as getTimeGivenProgression}from"./p-hHmYLOfE.js";export{createGesture}from"./p-Cl0B-RWe.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./p-Br3vSlYh.js";export{c as componentOnReady}from"./p-C-Cct-6D.js";export{L as LogLevel}from"./p-4DxY6_gG.js";export{I as IonicSafeString,g as getMode,s as setupConfig}from"./p-EnaLTYYj.js";export{o as openURL}from"./p-DiVJyqlX.js";export{m as menuController}from"./p-C8d2ebIg.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as pickerController,c as popoverController,t as toastController}from"./p-JK8qe2uI.js";import"./p-ZjP4CjeZ.js";import"./p-BTEOs1at.js";import"./p-CvaZMP6T.js";import"./p-DAfH9Iif.js";const e=e=>{const{swiper:o,extendParams:t}=e,s={effect:void 0,direction:"horizontal",initialSlide:0,loop:!1,parallax:!1,slidesPerView:1,spaceBetween:0,speed:300,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,touchEventsTarget:"container",freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,zoom:{maxRatio:3,minRatio:1,toggle:!1},touchRatio:1,touchAngle:45,simulateTouch:!0,touchStartPreventDefault:!1,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loopAdditionalSlides:0,noSwiping:!0,runCallbacksOnInit:!0,coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flipEffect:{slideShadows:!0,limitRotation:!0},cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fadeEffect:{crossFade:!1},a11y:{prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide"}};o.pagination&&(s.pagination={type:"bullets",clickable:!1,hideOnClick:!1}),o.scrollbar&&(s.scrollbar={hide:!0}),t(s)};export{e as IonicSlides}