@ionic/core 8.7.5-dev.11758311583.14f4e9d9 → 8.7.5-dev.11758642453.13b1da5d

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 (48) hide show
  1. package/components/modal.js +9 -2
  2. package/components/overlays.js +17 -12
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  5. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  6. package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
  7. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  8. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  9. package/dist/cjs/ion-modal.cjs.entry.js +10 -3
  10. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  11. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  12. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  13. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  14. package/dist/cjs/{overlays-v_jc1Hok.js → overlays-CPUTc8An.js} +17 -12
  15. package/dist/collection/components/modal/gestures/sheet.js +9 -2
  16. package/dist/collection/utils/overlays.js +17 -12
  17. package/dist/docs.json +1 -1
  18. package/dist/esm/index.js +1 -1
  19. package/dist/esm/ion-action-sheet.entry.js +1 -1
  20. package/dist/esm/ion-alert.entry.js +1 -1
  21. package/dist/esm/ion-datetime_3.entry.js +1 -1
  22. package/dist/esm/ion-loading.entry.js +1 -1
  23. package/dist/esm/ion-menu_3.entry.js +1 -1
  24. package/dist/esm/ion-modal.entry.js +10 -3
  25. package/dist/esm/ion-popover.entry.js +1 -1
  26. package/dist/esm/ion-select-modal.entry.js +1 -1
  27. package/dist/esm/ion-select_3.entry.js +1 -1
  28. package/dist/esm/ion-toast.entry.js +1 -1
  29. package/dist/esm/{overlays-BJaRj3Rj.js → overlays-BOalOTUe.js} +17 -12
  30. package/dist/ionic/index.esm.js +1 -1
  31. package/dist/ionic/ionic.esm.js +1 -1
  32. package/dist/ionic/{p-5a9be5a3.entry.js → p-12d04c28.entry.js} +1 -1
  33. package/dist/ionic/{p-22a0f820.entry.js → p-1bd0a347.entry.js} +1 -1
  34. package/dist/ionic/{p-1ab0fc21.entry.js → p-2e1782af.entry.js} +1 -1
  35. package/dist/ionic/{p-89c2e0a3.entry.js → p-3f07313b.entry.js} +1 -1
  36. package/dist/ionic/{p-cd93c119.entry.js → p-4a95b96c.entry.js} +1 -1
  37. package/dist/ionic/{p-095073c6.entry.js → p-97f8294e.entry.js} +1 -1
  38. package/dist/ionic/p-JK8qe2uI.js +4 -0
  39. package/dist/ionic/{p-b17f0554.entry.js → p-de2bedb6.entry.js} +1 -1
  40. package/dist/ionic/{p-60ff6bf6.entry.js → p-f4dfce09.entry.js} +1 -1
  41. package/dist/ionic/p-f8900d24.entry.js +4 -0
  42. package/dist/ionic/p-fd46b48a.entry.js +4 -0
  43. package/hydrate/index.js +26 -14
  44. package/hydrate/index.mjs +26 -14
  45. package/package.json +1 -1
  46. package/dist/ionic/p-2060feb1.entry.js +0 -4
  47. package/dist/ionic/p-CoDfkBuk.js +0 -4
  48. package/dist/ionic/p-dc8d0bb9.entry.js +0 -4
@@ -984,6 +984,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
984
984
  const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
985
985
  const contentAnimation = animation.childAnimations.find((ani) => ani.id === 'contentAnimation');
986
986
  const enableBackdrop = () => {
987
+ // Respect explicit opt-out of focus trapping/backdrop interactions
988
+ // If focusTrap is false, do not enable the backdrop or re-enable focus trap
989
+ if (baseEl.focusTrap === false) {
990
+ return;
991
+ }
987
992
  baseEl.style.setProperty('pointer-events', 'auto');
988
993
  backdropEl.style.setProperty('pointer-events', 'auto');
989
994
  /**
@@ -1108,7 +1113,8 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1108
1113
  * ion-backdrop and .modal-wrapper always have pointer-events: auto
1109
1114
  * applied, so the modal content can still be interacted with.
1110
1115
  */
1111
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
1116
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint &&
1117
+ baseEl.focusTrap !== false;
1112
1118
  if (shouldEnableBackdrop) {
1113
1119
  enableBackdrop();
1114
1120
  }
@@ -1416,7 +1422,8 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1416
1422
  * Backdrop should become enabled
1417
1423
  * after the backdropBreakpoint value
1418
1424
  */
1419
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
1425
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint &&
1426
+ baseEl.focusTrap !== false;
1420
1427
  if (shouldEnableBackdrop) {
1421
1428
  enableBackdrop();
1422
1429
  }
@@ -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');
@@ -987,6 +987,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
987
987
  const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
988
988
  const contentAnimation = animation.childAnimations.find((ani) => ani.id === 'contentAnimation');
989
989
  const enableBackdrop = () => {
990
+ // Respect explicit opt-out of focus trapping/backdrop interactions
991
+ // If focusTrap is false, do not enable the backdrop or re-enable focus trap
992
+ if (baseEl.focusTrap === false) {
993
+ return;
994
+ }
990
995
  baseEl.style.setProperty('pointer-events', 'auto');
991
996
  backdropEl.style.setProperty('pointer-events', 'auto');
992
997
  /**
@@ -1111,7 +1116,8 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1111
1116
  * ion-backdrop and .modal-wrapper always have pointer-events: auto
1112
1117
  * applied, so the modal content can still be interacted with.
1113
1118
  */
1114
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
1119
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint &&
1120
+ baseEl.focusTrap !== false;
1115
1121
  if (shouldEnableBackdrop) {
1116
1122
  enableBackdrop();
1117
1123
  }
@@ -1419,7 +1425,8 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1419
1425
  * Backdrop should become enabled
1420
1426
  * after the backdropBreakpoint value
1421
1427
  */
1422
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
1428
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint &&
1429
+ baseEl.focusTrap !== false;
1423
1430
  if (shouldEnableBackdrop) {
1424
1431
  enableBackdrop();
1425
1432
  }
@@ -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
  }
@@ -45,6 +45,11 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
45
45
  const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
46
46
  const contentAnimation = animation.childAnimations.find((ani) => ani.id === 'contentAnimation');
47
47
  const enableBackdrop = () => {
48
+ // Respect explicit opt-out of focus trapping/backdrop interactions
49
+ // If focusTrap is false, do not enable the backdrop or re-enable focus trap
50
+ if (baseEl.focusTrap === false) {
51
+ return;
52
+ }
48
53
  baseEl.style.setProperty('pointer-events', 'auto');
49
54
  backdropEl.style.setProperty('pointer-events', 'auto');
50
55
  /**
@@ -169,7 +174,8 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
169
174
  * ion-backdrop and .modal-wrapper always have pointer-events: auto
170
175
  * applied, so the modal content can still be interacted with.
171
176
  */
172
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
177
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint &&
178
+ baseEl.focusTrap !== false;
173
179
  if (shouldEnableBackdrop) {
174
180
  enableBackdrop();
175
181
  }
@@ -477,7 +483,8 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
477
483
  * Backdrop should become enabled
478
484
  * after the backdropBreakpoint value
479
485
  */
480
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
486
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint &&
487
+ baseEl.focusTrap !== false;
481
488
  if (shouldEnableBackdrop) {
482
489
  enableBackdrop();
483
490
  }
@@ -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-19T19:55:00",
2
+ "timestamp": "2025-09-23T15:49:23",
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';
@@ -985,6 +985,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
985
985
  const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
986
986
  const contentAnimation = animation.childAnimations.find((ani) => ani.id === 'contentAnimation');
987
987
  const enableBackdrop = () => {
988
+ // Respect explicit opt-out of focus trapping/backdrop interactions
989
+ // If focusTrap is false, do not enable the backdrop or re-enable focus trap
990
+ if (baseEl.focusTrap === false) {
991
+ return;
992
+ }
988
993
  baseEl.style.setProperty('pointer-events', 'auto');
989
994
  backdropEl.style.setProperty('pointer-events', 'auto');
990
995
  /**
@@ -1109,7 +1114,8 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1109
1114
  * ion-backdrop and .modal-wrapper always have pointer-events: auto
1110
1115
  * applied, so the modal content can still be interacted with.
1111
1116
  */
1112
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
1117
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint &&
1118
+ baseEl.focusTrap !== false;
1113
1119
  if (shouldEnableBackdrop) {
1114
1120
  enableBackdrop();
1115
1121
  }
@@ -1417,7 +1423,8 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1417
1423
  * Backdrop should become enabled
1418
1424
  * after the backdropBreakpoint value
1419
1425
  */
1420
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
1426
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint &&
1427
+ baseEl.focusTrap !== false;
1421
1428
  if (shouldEnableBackdrop) {
1422
1429
  enableBackdrop();
1423
1430
  }
@@ -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}