@ionic/core 9.0.7-dev.11790870774.174de601 → 9.0.7-dev.11790887756.13f9320e

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 (104) 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-app.js +1 -1
  5. package/components/ion-content.js +1 -1
  6. package/components/ion-datetime.js +1 -1
  7. package/components/ion-loading.js +1 -1
  8. package/components/ion-menu-button.js +1 -1
  9. package/components/ion-menu-toggle.js +1 -1
  10. package/components/ion-menu.js +1 -1
  11. package/components/ion-modal.js +1 -1
  12. package/components/ion-popover.js +1 -1
  13. package/components/ion-select-modal.js +1 -1
  14. package/components/ion-select-popover.js +1 -1
  15. package/components/ion-select.js +1 -1
  16. package/components/ion-toast.js +1 -1
  17. package/components/{p-BinR4_P7.js → p-4QPSgC9s.js} +1 -1
  18. package/components/{p-CiXOsJF2.js → p-BHFF2Rku.js} +1 -1
  19. package/components/{p-DPyjiKOq.js → p-BRCkmCrc.js} +1 -1
  20. package/components/p-BsOZAFNI.js +4 -0
  21. package/components/p-CArDvZQz.js +4 -0
  22. package/components/{p-PPagT42x.js → p-CB2RQcuo.js} +1 -1
  23. package/components/p-CKtw0kcb.js +4 -0
  24. package/components/{p-CvzE7FFp.js → p-CZlKzXag.js} +1 -1
  25. package/components/p-CgwJ4NuD.js +4 -0
  26. package/components/{p-CQjNc-Pz.js → p-DjbwrsJd.js} +1 -1
  27. package/components/p-vg8joG77.js +4 -0
  28. package/css/core.css.map +1 -1
  29. package/css/display.css.map +1 -1
  30. package/css/flex-utils.css.map +1 -1
  31. package/css/float-elements.css +1 -1
  32. package/css/float-elements.css.map +1 -1
  33. package/css/global.bundle.css.map +1 -1
  34. package/css/ionic.bundle.css +1 -1
  35. package/css/ionic.bundle.css.map +1 -1
  36. package/css/padding.css.map +1 -1
  37. package/css/structure.css.map +1 -1
  38. package/css/text-alignment.css.map +1 -1
  39. package/css/text-transformation.css.map +1 -1
  40. package/css/typography.css.map +1 -1
  41. package/css/utils.bundle.css +1 -1
  42. package/css/utils.bundle.css.map +1 -1
  43. package/dist/cjs/{index-CElfU-dK.js → index-fm08amr6.js} +2 -1
  44. package/dist/cjs/index.cjs.js +2 -2
  45. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  46. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  47. package/dist/cjs/ion-app_8.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-datetime.cjs.entry.js +1 -1
  49. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  50. package/dist/cjs/ion-menu_3.cjs.entry.js +5 -4
  51. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  52. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  53. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  54. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  55. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  56. package/dist/cjs/{overlays-C68wNDWY.js → overlays-CEt1Pxnd.js} +75 -16
  57. package/dist/collection/components/menu/menu.js +4 -3
  58. package/dist/collection/utils/hardware-back-button.js +41 -12
  59. package/dist/collection/utils/menu-controller/index.js +2 -1
  60. package/dist/collection/utils/overlays.js +30 -4
  61. package/dist/docs.json +1 -1
  62. package/dist/esm/{index-B9jhwvmO.js → index-CzPyKjAQ.js} +2 -1
  63. package/dist/esm/index.js +2 -2
  64. package/dist/esm/ion-action-sheet.entry.js +1 -1
  65. package/dist/esm/ion-alert.entry.js +1 -1
  66. package/dist/esm/ion-app_8.entry.js +2 -2
  67. package/dist/esm/ion-datetime.entry.js +1 -1
  68. package/dist/esm/ion-loading.entry.js +1 -1
  69. package/dist/esm/ion-menu_3.entry.js +5 -4
  70. package/dist/esm/ion-modal.entry.js +1 -1
  71. package/dist/esm/ion-popover.entry.js +1 -1
  72. package/dist/esm/ion-select-modal.entry.js +1 -1
  73. package/dist/esm/ion-select_3.entry.js +1 -1
  74. package/dist/esm/ion-toast.entry.js +1 -1
  75. package/dist/esm/{overlays-BQnV0HAU.js → overlays-D5W_ly69.js} +74 -17
  76. package/dist/ionic/index.esm.js +1 -1
  77. package/dist/ionic/ionic.esm.js +1 -1
  78. package/dist/ionic/{p-3a5faaa8.entry.js → p-0111c108.entry.js} +1 -1
  79. package/dist/ionic/{p-636349e2.entry.js → p-22160ced.entry.js} +1 -1
  80. package/dist/ionic/{p-24b0a961.entry.js → p-5112a8ba.entry.js} +1 -1
  81. package/dist/ionic/{p-f9057f70.entry.js → p-5edc856b.entry.js} +1 -1
  82. package/dist/ionic/{p-3bd7e5df.entry.js → p-8a00d904.entry.js} +1 -1
  83. package/dist/ionic/p-C036rEeA.js +4 -0
  84. package/dist/ionic/p-OJpZr8fg.js +4 -0
  85. package/dist/ionic/p-b3346b86.entry.js +4 -0
  86. package/dist/ionic/{p-efa00ce5.entry.js → p-b798b4ec.entry.js} +1 -1
  87. package/dist/ionic/{p-30dcf43b.entry.js → p-d0451c11.entry.js} +1 -1
  88. package/dist/ionic/{p-76309bab.entry.js → p-e063a7bf.entry.js} +1 -1
  89. package/dist/ionic/{p-b1164028.entry.js → p-ff664022.entry.js} +1 -1
  90. package/dist/ionic/{p-7441ed2b.entry.js → p-ffd45970.entry.js} +1 -1
  91. package/dist/types/utils/config.d.ts +4 -1
  92. package/dist/types/utils/hardware-back-button.d.ts +11 -0
  93. package/dist/types/utils/overlays.d.ts +5 -2
  94. package/hydrate/index.js +13 -5
  95. package/hydrate/index.mjs +13 -5
  96. package/package.json +1 -1
  97. package/components/p-BNnmwjuy.js +0 -4
  98. package/components/p-BsLM9eQu.js +0 -4
  99. package/components/p-DGLuPe1e.js +0 -4
  100. package/components/p-WMQuK_Tj.js +0 -4
  101. package/components/p-q2WJ5Igc.js +0 -4
  102. package/dist/ionic/p-83448626.entry.js +0 -4
  103. package/dist/ionic/p-Ba6ZV-qU.js +0 -4
  104. package/dist/ionic/p-DZUqAr_6.js +0 -4
@@ -30,6 +30,23 @@ export const shouldUseCloseWatcher = () => config.get('experimentalCloseWatcher'
30
30
  export const blockHardwareBackButton = () => {
31
31
  document.addEventListener('backbutton', () => { });
32
32
  };
33
+ const closeWatcherConditions = [];
34
+ let syncCloseWatcher;
35
+ /**
36
+ * Registers a check for whether the back button
37
+ * has something to close. The CloseWatcher is only
38
+ * active while one of these checks passes.
39
+ */
40
+ export const addCloseWatcherCondition = (condition) => {
41
+ closeWatcherConditions.push(condition);
42
+ };
43
+ /**
44
+ * Call this whenever something the back button
45
+ * can close opens or closes.
46
+ */
47
+ export const updateCloseWatcher = () => {
48
+ syncCloseWatcher?.();
49
+ };
33
50
  export const startHardwareBackButton = () => {
34
51
  const doc = document;
35
52
  let busy = false;
@@ -81,32 +98,44 @@ export const startHardwareBackButton = () => {
81
98
  processHandlers();
82
99
  };
83
100
  /**
84
- * If the CloseWatcher is defined then
85
- * we don't want to also listen for the native
86
- * backbutton event otherwise we may get duplicate
87
- * events firing.
101
+ * Android WebView never sends the hardware back
102
+ * button to a CloseWatcher, so hybrid apps still
103
+ * need this. Browsers never fire backbutton.
88
104
  */
105
+ doc.addEventListener('backbutton', backButtonCallback);
89
106
  if (shouldUseCloseWatcher()) {
90
107
  let watcher;
91
- const configureWatcher = () => {
92
- watcher?.destroy();
108
+ /**
109
+ * An active CloseWatcher stops the back button from
110
+ * navigating, so only keep one while there's something to close.
111
+ */
112
+ syncCloseWatcher = () => {
113
+ const canClose = closeWatcherConditions.some((condition) => condition());
114
+ if (!canClose) {
115
+ watcher?.destroy();
116
+ watcher = undefined;
117
+ return;
118
+ }
119
+ if (watcher !== undefined) {
120
+ return;
121
+ }
93
122
  watcher = new win.CloseWatcher();
94
123
  /**
95
124
  * Once a close request happens
96
125
  * the watcher gets destroyed.
97
126
  * As a result, we need to re-configure
98
127
  * the watcher so we can respond to other
99
- * close requests.
128
+ * close requests, including after one that
129
+ * closed nothing, like a modal whose canDismiss
130
+ * returned false.
100
131
  */
101
132
  watcher.onclose = () => {
133
+ watcher = undefined;
102
134
  backButtonCallback();
103
- configureWatcher();
135
+ syncCloseWatcher?.();
104
136
  };
105
137
  };
106
- configureWatcher();
107
- }
108
- else {
109
- doc.addEventListener('backbutton', backButtonCallback);
138
+ syncCloseWatcher();
110
139
  }
111
140
  };
112
141
  export const OVERLAY_BACK_BUTTON_PRIORITY = 100;
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { doc } from "../browser/index";
5
- import { MENU_BACK_BUTTON_PRIORITY } from "../hardware-back-button";
5
+ import { MENU_BACK_BUTTON_PRIORITY, addCloseWatcherCondition } from "../hardware-back-button";
6
6
  import { printIonWarning } from "../logging/index";
7
7
  import { componentOnReady } from "../helpers";
8
8
  import { menuOverlayAnimation } from "./animations/overlay";
@@ -184,6 +184,7 @@ const createMenuController = () => {
184
184
  registerAnimation('reveal', menuRevealAnimation);
185
185
  registerAnimation('push', menuPushAnimation);
186
186
  registerAnimation('overlay', menuOverlayAnimation);
187
+ addCloseWatcherCondition(() => _getOpenSync() !== undefined);
187
188
  doc?.addEventListener('ionBackButton', (ev) => {
188
189
  const openMenu = _getOpenSync();
189
190
  if (openMenu) {
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { doc } from "./browser/index";
5
5
  import { focusFirstDescendant, focusLastDescendant, focusableQueryString } from "./focus-trap";
6
- import { shouldUseCloseWatcher } from "./hardware-back-button";
6
+ import { addCloseWatcherCondition, shouldUseCloseWatcher, updateCloseWatcher } from "./hardware-back-button";
7
7
  import { printIonError, printIonWarning } from "./logging/index";
8
8
  import { config } from "../global/config";
9
9
  import { getIonMode } from "../global/ionic-global";
@@ -13,6 +13,11 @@ import { OVERLAY_BACK_BUTTON_PRIORITY } from "./hardware-back-button";
13
13
  import { addEventListener, componentOnReady, focusVisibleElement, getElementRoot, removeEventListener, } from "./helpers";
14
14
  let lastOverlayIndex = 0;
15
15
  let lastId = 0;
16
+ /**
17
+ * Every overlay except toast, which doesn't trap
18
+ * focus or close on back.
19
+ */
20
+ const NON_TOAST_OVERLAYS = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover';
16
21
  export const activeAnimations = new WeakMap();
17
22
  /**
18
23
  * Determines if the overlay's backdrop is always blocking (no background interaction).
@@ -139,7 +144,7 @@ const focusElementInOverlay = (hostToFocus, overlay) => {
139
144
  * Should NOT include: Toast
140
145
  */
141
146
  const trapKeyboardFocus = (ev, doc) => {
142
- const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover');
147
+ const lastOverlay = getPresentedOverlay(doc, NON_TOAST_OVERLAYS);
143
148
  const target = ev.target;
144
149
  /**
145
150
  * If no active overlay, ignore this event.
@@ -322,6 +327,11 @@ const connectListeners = (doc) => {
322
327
  doc.addEventListener('focus', (ev) => {
323
328
  trapKeyboardFocus(ev, doc);
324
329
  }, true);
330
+ /**
331
+ * Whether the overlay actually dismisses is checked at press time,
332
+ * since `backdropDismiss` can change while it's open.
333
+ */
334
+ addCloseWatcherCondition(() => getPresentedOverlay(doc, NON_TOAST_OVERLAYS) !== undefined);
325
335
  // handle back-button click
326
336
  doc.addEventListener('ionBackButton', (ev) => {
327
337
  const lastOverlay = getPresentedOverlay(doc);
@@ -445,7 +455,8 @@ export const setRootAriaHidden = (hidden = false) => {
445
455
  * Cleans up root `aria-hidden` and `backdrop-no-scroll` when
446
456
  * an overlay is removed from the DOM without going through
447
457
  * the `dismiss()` flow (e.g., when a framework unmounts the
448
- * overlay during a route change).
458
+ * overlay during a route change). Also releases the
459
+ * CloseWatcher if nothing is left to close.
449
460
  *
450
461
  * Should be called from an overlay's `disconnectedCallback`
451
462
  * when the overlay was still presented at the time of removal.
@@ -454,6 +465,7 @@ export const cleanupRootFocusTrapAccessibility = () => {
454
465
  if (typeof document === 'undefined') {
455
466
  return;
456
467
  }
468
+ updateCloseWatcher();
457
469
  const remainingOverlays = getPresentedOverlays(document);
458
470
  const hasRemainingLocking = remainingOverlays.some((o) => locksAppRoot(o));
459
471
  if (!hasRemainingLocking) {
@@ -475,7 +487,9 @@ const applyRootLock = (el) => {
475
487
  };
476
488
  /**
477
489
  * Re-applies the root lock that `cleanupRootFocusTrapAccessibility()` released.
478
- * Call from `connectedCallback` when the overlay is still presented.
490
+ * Call from `connectedCallback` when the overlay is still presented. Also
491
+ * re-arms the CloseWatcher, which every overlay needs, so that happens
492
+ * before the `locksAppRoot` check.
479
493
  *
480
494
  * A synchronous move keeps the overlay connected, so the lock survives. A
481
495
  * detach with a re-insert in a later task releases it, which is the shape a
@@ -485,6 +499,7 @@ export const restoreRootFocusTrapAccessibility = (overlayEl) => {
485
499
  if (typeof document === 'undefined') {
486
500
  return;
487
501
  }
502
+ updateCloseWatcher();
488
503
  const el = overlayEl;
489
504
  if (!locksAppRoot(el)) {
490
505
  return;
@@ -698,6 +713,11 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
698
713
  printIonError(`[${overlay.el.tagName.toLowerCase()}] - `, err);
699
714
  }
700
715
  overlay.el.remove();
716
+ /**
717
+ * Release the back button if nothing
718
+ * else is left to close.
719
+ */
720
+ updateCloseWatcher();
701
721
  return true;
702
722
  };
703
723
  const getAppRoot = (doc) => {
@@ -706,6 +726,12 @@ const getAppRoot = (doc) => {
706
726
  const overlayAnimation = async (overlay, animationBuilder, baseEl, opts) => {
707
727
  // Make overlay visible in case it's hidden
708
728
  baseEl.classList.remove('overlay-hidden');
729
+ /**
730
+ * Removing `overlay-hidden` makes the overlay count
731
+ * as presented, so back can dismiss it while it
732
+ * animates in.
733
+ */
734
+ updateCloseWatcher();
709
735
  const aniRoot = overlay.el;
710
736
  const animation = animationBuilder(aniRoot, opts);
711
737
  if (!overlay.animated || !config.getBoolean('animated', true)) {
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-10-01T16:08:05",
2
+ "timestamp": "2026-10-01T20:51:08",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.45.1",
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { n as doc, c as componentOnReady } from './helpers-B54ynME_.js';
5
- import { M as MENU_BACK_BUTTON_PRIORITY } from './overlays-BQnV0HAU.js';
5
+ import { M as MENU_BACK_BUTTON_PRIORITY, q as addCloseWatcherCondition } from './overlays-D5W_ly69.js';
6
6
  import { a as printIonWarning } from './index-D9OR05yj.js';
7
7
  import { b as getIonMode } from './ionic-global-B-G43ddm.js';
8
8
  import { c as createAnimation } from './animation-CFd8Olt3.js';
@@ -271,6 +271,7 @@ const createMenuController = () => {
271
271
  registerAnimation('reveal', menuRevealAnimation);
272
272
  registerAnimation('push', menuPushAnimation);
273
273
  registerAnimation('overlay', menuOverlayAnimation);
274
+ addCloseWatcherCondition(() => _getOpenSync() !== undefined);
274
275
  doc?.addEventListener('ionBackButton', (ev) => {
275
276
  const openMenu = _getOpenSync();
276
277
  if (openMenu) {
package/dist/esm/index.js CHANGED
@@ -13,8 +13,8 @@ export { L as LogLevel, c as printIonError, a as printIonWarning } from './index
13
13
  export { I as IonicSafeString } from './index-D4ZMZz_3.js';
14
14
  export { g as getMode, s as setupConfig } from './config-DWCzVL3Y.js';
15
15
  export { o as openURL } from './theme-byZM6qHV.js';
16
- export { m as menuController } from './index-B9jhwvmO.js';
17
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as popoverController, t as toastController } from './overlays-BQnV0HAU.js';
16
+ export { m as menuController } from './index-CzPyKjAQ.js';
17
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as popoverController, t as toastController } from './overlays-D5W_ly69.js';
18
18
  import './gesture-controller-B_gJaBk0.js';
19
19
  import './dir-Dojwmvde.js';
20
20
  import './framework-delegate-DeT5pmPB.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, e as readTask, h, f as Host, g
5
5
  import { c as createButtonActiveGesture } from './button-active-DMuYeDQN.js';
6
6
  import { r as raf } from './helpers-B54ynME_.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
8
- import { c as createDelegateController, d as createTriggerController, B as BACKDROP, i as isCancel, e as present, f as dismiss, g as eventMethod, s as safeCall, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, j as cleanupRootFocusTrapAccessibility, k as setOverlayId } from './overlays-BQnV0HAU.js';
8
+ import { c as createDelegateController, d as createTriggerController, B as BACKDROP, i as isCancel, e as present, f as dismiss, g as eventMethod, s as safeCall, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, j as cleanupRootFocusTrapAccessibility, k as setOverlayId } from './overlays-D5W_ly69.js';
9
9
  import { r as renderOptionLabel } from './select-option-render-CGxPejmz.js';
10
10
  import { g as getClassMap } from './theme-byZM6qHV.js';
11
11
  import { b as getIonMode } from './ionic-global-B-G43ddm.js';
@@ -7,7 +7,7 @@ import { c as createButtonActiveGesture } from './button-active-DMuYeDQN.js';
7
7
  import { r as raf } from './helpers-B54ynME_.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
9
9
  import { g as getOverlayLabelJustify, a as getOverlayLabelPlacement } from './overlay-control-label-BSQPZ79H.js';
10
- import { c as createDelegateController, d as createTriggerController, B as BACKDROP, i as isCancel, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, k as setOverlayId, j as cleanupRootFocusTrapAccessibility, e as present, f as dismiss, g as eventMethod, s as safeCall } from './overlays-BQnV0HAU.js';
10
+ import { c as createDelegateController, d as createTriggerController, B as BACKDROP, i as isCancel, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, k as setOverlayId, j as cleanupRootFocusTrapAccessibility, e as present, f as dismiss, g as eventMethod, s as safeCall } from './overlays-D5W_ly69.js';
11
11
  import { s as sanitizeDOMString } from './index-D4ZMZz_3.js';
12
12
  import { r as renderOptionLabel } from './select-option-render-CGxPejmz.js';
13
13
  import { g as getClassMap } from './theme-byZM6qHV.js';
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { r as registerInstance, i as config, a as printIonWarning, h, f as Host, g as getElement, d as createEvent, e as readTask, j as forceUpdate, w as writeTask, c as printIonError } from './index-D9OR05yj.js';
5
- import { v as shouldUseCloseWatcher, n as getOverlaySizeType } from './overlays-BQnV0HAU.js';
5
+ import { w as shouldUseCloseWatcher, n as getOverlaySizeType } from './overlays-D5W_ly69.js';
6
6
  import { a as isPlatform, b as getIonMode } from './ionic-global-B-G43ddm.js';
7
7
  import { i as inheritAriaAttributes, h as hasLazyBuild, c as componentOnReady, e as clamp, v as shallowEqualStringMap } from './helpers-B54ynME_.js';
8
8
  import { i as isRTL } from './dir-Dojwmvde.js';
@@ -41,7 +41,7 @@ const App = class {
41
41
  const platform = isPlatform(window, 'ios') ? 'ios' : 'android';
42
42
  import('./input-shims-MCrhq67U.js').then((module) => module.startInputShims(config, platform));
43
43
  }
44
- const hardwareBackButtonModule = await import('./overlays-BQnV0HAU.js').then(function (n) { return n.w; });
44
+ const hardwareBackButtonModule = await import('./overlays-D5W_ly69.js').then(function (n) { return n.y; });
45
45
  const supportsHardwareBackButtonEvents = isHybrid || shouldUseCloseWatcher();
46
46
  if (config.getBoolean('hardwareBackButton', supportsHardwareBackButtonEvents)) {
47
47
  hardwareBackButtonModule.startHardwareBackButton();
@@ -4,7 +4,7 @@
4
4
  import { c as printIonError, a as printIonWarning, r as registerInstance, d as createEvent, w as writeTask, i as config, h, f as Host, g as getElement } from './index-D9OR05yj.js';
5
5
  import { startFocusVisible } from './focus-visible-BmVRXR1y.js';
6
6
  import { r as raf, g as getElementRoot, a as renderHiddenInput } from './helpers-B54ynME_.js';
7
- import { F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-BQnV0HAU.js';
7
+ import { F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-D5W_ly69.js';
8
8
  import { i as isRTL } from './dir-Dojwmvde.js';
9
9
  import { c as createColorClasses } from './theme-byZM6qHV.js';
10
10
  import { b as chevronDown, d as caretUpSharp, e as chevronForward, f as caretDownSharp, c as chevronBack } from './index-BvabGprD.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, i as config, h, f as Host, g a
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT } from './config-DWCzVL3Y.js';
6
6
  import { r as raf } from './helpers-B54ynME_.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
8
- import { c as createDelegateController, d as createTriggerController, B as BACKDROP, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, k as setOverlayId, j as cleanupRootFocusTrapAccessibility, e as present, f as dismiss, g as eventMethod } from './overlays-BQnV0HAU.js';
8
+ import { c as createDelegateController, d as createTriggerController, B as BACKDROP, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, k as setOverlayId, j as cleanupRootFocusTrapAccessibility, e as present, f as dismiss, g as eventMethod } from './overlays-D5W_ly69.js';
9
9
  import { s as sanitizeDOMString } from './index-D4ZMZz_3.js';
10
10
  import { g as getClassMap } from './theme-byZM6qHV.js';
11
11
  import { b as getIonMode } from './ionic-global-B-G43ddm.js';
@@ -3,10 +3,10 @@
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, i as config, c as printIonError, h, f as Host, g as getElement } from './index-D9OR05yj.js';
5
5
  import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
6
- import { q as getPresentedOverlay, B as BACKDROP, o as focusFirstDescendant, u as focusLastDescendant, G as GESTURE, v as shouldUseCloseWatcher } from './overlays-BQnV0HAU.js';
6
+ import { u as getPresentedOverlay, B as BACKDROP, o as focusFirstDescendant, v as focusLastDescendant, G as GESTURE, w as shouldUseCloseWatcher, x as updateCloseWatcher } from './overlays-D5W_ly69.js';
7
7
  import { G as GESTURE_CONTROLLER } from './gesture-controller-B_gJaBk0.js';
8
8
  import { s as isEndSide, i as inheritAriaAttributes, l as assert, e as clamp } from './helpers-B54ynME_.js';
9
- import { m as menuController } from './index-B9jhwvmO.js';
9
+ import { m as menuController } from './index-CzPyKjAQ.js';
10
10
  import { b as getIonMode, a as isPlatform } from './ionic-global-B-G43ddm.js';
11
11
  import { h as hostContext, c as createColorClasses } from './theme-byZM6qHV.js';
12
12
  import { u as menuOutline, v as menuSharp } from './index-BvabGprD.js';
@@ -563,6 +563,7 @@ const Menu = class {
563
563
  // emit opened/closed events
564
564
  this._isOpen = isOpen;
565
565
  this.isAnimating = false;
566
+ updateCloseWatcher();
566
567
  if (!this._isOpen) {
567
568
  this.blocker.unblock();
568
569
  }
@@ -659,14 +660,14 @@ const Menu = class {
659
660
  * the ionBackButton listener in the menu controller
660
661
  * will handle closing the menu when Escape is pressed.
661
662
  */
662
- return (h(Host, { key: '1208ba437fa58680325408d3d4c8580950da1d68', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
663
+ return (h(Host, { key: '5cf26df26d4e539860cbeaea98ec621b98c3fcfc', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
663
664
  [mode]: true,
664
665
  [`menu-type-${type}`]: true,
665
666
  'menu-enabled': !disabled,
666
667
  [`menu-side-${side}`]: true,
667
668
  'menu-pane-visible': isPaneVisible,
668
669
  'split-pane-side': hostContext('ion-split-pane', el),
669
- } }, h("div", { key: 'c0ddc957b7a7956b41901d77ae02d91e73071c55', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '6e44c56116431a024f114ab85ded1b822c942fac' })), h("ion-backdrop", { key: '5f4bbcf84444d96ec6b02bf567e1aaf95f59078d', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
670
+ } }, h("div", { key: 'f337016e293bb8665c99762e0c389dd6c372bb33', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '4c3fe331aa42cd57d7ad9bd1f5910f8eeb62d7da' })), h("ion-backdrop", { key: '61af7ea876d81574841e1dd3e81e2352e555d096', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
670
671
  }
671
672
  get el() { return getElement(this); }
672
673
  static get watchers() { return {
@@ -7,7 +7,7 @@ import { C as CoreDelegate, a as attachComponent, d as detachComponent } from '.
7
7
  import { w as win, o as onCustomPropertyChange, g as getElementRoot, e as clamp, r as raf, b as inheritAttributes, h as hasLazyBuild } from './helpers-B54ynME_.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
9
9
  import { g as getCapacitor } from './capacitor-CoEgIpR9.js';
10
- import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, n as getOverlaySizeType, d as createTriggerController, B as BACKDROP, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, j as cleanupRootFocusTrapAccessibility, k as setOverlayId, e as present, f as dismiss, g as eventMethod } from './overlays-BQnV0HAU.js';
10
+ import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, n as getOverlaySizeType, d as createTriggerController, B as BACKDROP, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, j as cleanupRootFocusTrapAccessibility, k as setOverlayId, e as present, f as dismiss, g as eventMethod } from './overlays-D5W_ly69.js';
11
11
  import { g as getClassMap } from './theme-byZM6qHV.js';
12
12
  import { e as deepReady, w as waitForMount } from './index-B8iieOdw.js';
13
13
  import { b as getIonMode } from './ionic-global-B-G43ddm.js';
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, a as printIonWarning, h, f as Host, g as getElement } from './index-D9OR05yj.js';
5
- import { B as BACKDROP, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, j as cleanupRootFocusTrapAccessibility, k as setOverlayId, e as present, o as focusFirstDescendant, f as dismiss, g as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-BQnV0HAU.js';
5
+ import { B as BACKDROP, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, j as cleanupRootFocusTrapAccessibility, k as setOverlayId, e as present, o as focusFirstDescendant, f as dismiss, g as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-D5W_ly69.js';
6
6
  import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-DeT5pmPB.js';
7
7
  import { g as getElementRoot, r as raf, f as addEventListener, h as hasLazyBuild } from './helpers-B54ynME_.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
@@ -4,7 +4,7 @@
4
4
  import { r as registerInstance, h, j as forceUpdate, f as Host, g as getElement } from './index-D9OR05yj.js';
5
5
  import { b as getIonMode } from './ionic-global-B-G43ddm.js';
6
6
  import { a as getOverlayLabelPlacement, g as getOverlayLabelJustify } from './overlay-control-label-BSQPZ79H.js';
7
- import { s as safeCall } from './overlays-BQnV0HAU.js';
7
+ import { s as safeCall } from './overlays-D5W_ly69.js';
8
8
  import { r as renderOptionLabel } from './select-option-render-CGxPejmz.js';
9
9
  import { g as getClassMap } from './theme-byZM6qHV.js';
10
10
  import './helpers-B54ynME_.js';
@@ -7,7 +7,7 @@ import { g as getSlottedClickContent, c as createSlotMutationController, a as cr
7
7
  import { c as compareOptions, i as isOptionSelected } from './compare-with-utils-sObYyvOy.js';
8
8
  import { c as checkInvalidState } from './validity-DJztqcrH.js';
9
9
  import { b as inheritAttributes, a as renderHiddenInput, p as focusVisibleElement } from './helpers-B54ynME_.js';
10
- import { p as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-BQnV0HAU.js';
10
+ import { p as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-D5W_ly69.js';
11
11
  import { i as isRTL } from './dir-Dojwmvde.js';
12
12
  import { r as reflectPropertiesToAttributes, a as sanitizeDOMTree, b as blockedTags } from './index-D4ZMZz_3.js';
13
13
  import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-byZM6qHV.js';
@@ -5,7 +5,7 @@ import { a as printIonWarning, r as registerInstance, d as createEvent, i as con
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT } from './config-DWCzVL3Y.js';
6
6
  import { w as win, g as getElementRoot, r as raf } from './helpers-B54ynME_.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
8
- import { O as OVERLAY_GESTURE_PRIORITY, c as createDelegateController, d as createTriggerController, i as isCancel, h as prepareOverlay, k as setOverlayId, e as present, f as dismiss, g as eventMethod, s as safeCall, G as GESTURE } from './overlays-BQnV0HAU.js';
8
+ import { O as OVERLAY_GESTURE_PRIORITY, c as createDelegateController, d as createTriggerController, i as isCancel, h as prepareOverlay, k as setOverlayId, e as present, f as dismiss, g as eventMethod, s as safeCall, G as GESTURE } from './overlays-D5W_ly69.js';
9
9
  import { s as sanitizeDOMString } from './index-D4ZMZz_3.js';
10
10
  import { c as createColorClasses, g as getClassMap } from './theme-byZM6qHV.js';
11
11
  import { b as getIonMode } from './ionic-global-B-G43ddm.js';
@@ -33,6 +33,23 @@ const shouldUseCloseWatcher = () => config.get('experimentalCloseWatcher', false
33
33
  const blockHardwareBackButton = () => {
34
34
  document.addEventListener('backbutton', () => { });
35
35
  };
36
+ const closeWatcherConditions = [];
37
+ let syncCloseWatcher;
38
+ /**
39
+ * Registers a check for whether the back button
40
+ * has something to close. The CloseWatcher is only
41
+ * active while one of these checks passes.
42
+ */
43
+ const addCloseWatcherCondition = (condition) => {
44
+ closeWatcherConditions.push(condition);
45
+ };
46
+ /**
47
+ * Call this whenever something the back button
48
+ * can close opens or closes.
49
+ */
50
+ const updateCloseWatcher = () => {
51
+ syncCloseWatcher?.();
52
+ };
36
53
  const startHardwareBackButton = () => {
37
54
  const doc = document;
38
55
  let busy = false;
@@ -84,32 +101,44 @@ const startHardwareBackButton = () => {
84
101
  processHandlers();
85
102
  };
86
103
  /**
87
- * If the CloseWatcher is defined then
88
- * we don't want to also listen for the native
89
- * backbutton event otherwise we may get duplicate
90
- * events firing.
104
+ * Android WebView never sends the hardware back
105
+ * button to a CloseWatcher, so hybrid apps still
106
+ * need this. Browsers never fire backbutton.
91
107
  */
108
+ doc.addEventListener('backbutton', backButtonCallback);
92
109
  if (shouldUseCloseWatcher()) {
93
110
  let watcher;
94
- const configureWatcher = () => {
95
- watcher?.destroy();
111
+ /**
112
+ * An active CloseWatcher stops the back button from
113
+ * navigating, so only keep one while there's something to close.
114
+ */
115
+ syncCloseWatcher = () => {
116
+ const canClose = closeWatcherConditions.some((condition) => condition());
117
+ if (!canClose) {
118
+ watcher?.destroy();
119
+ watcher = undefined;
120
+ return;
121
+ }
122
+ if (watcher !== undefined) {
123
+ return;
124
+ }
96
125
  watcher = new win.CloseWatcher();
97
126
  /**
98
127
  * Once a close request happens
99
128
  * the watcher gets destroyed.
100
129
  * As a result, we need to re-configure
101
130
  * the watcher so we can respond to other
102
- * close requests.
131
+ * close requests, including after one that
132
+ * closed nothing, like a modal whose canDismiss
133
+ * returned false.
103
134
  */
104
135
  watcher.onclose = () => {
136
+ watcher = undefined;
105
137
  backButtonCallback();
106
- configureWatcher();
138
+ syncCloseWatcher?.();
107
139
  };
108
140
  };
109
- configureWatcher();
110
- }
111
- else {
112
- doc.addEventListener('backbutton', backButtonCallback);
141
+ syncCloseWatcher();
113
142
  }
114
143
  };
115
144
  const OVERLAY_BACK_BUTTON_PRIORITY = 100;
@@ -119,9 +148,11 @@ var hardwareBackButton = /*#__PURE__*/Object.freeze({
119
148
  __proto__: null,
120
149
  MENU_BACK_BUTTON_PRIORITY: MENU_BACK_BUTTON_PRIORITY,
121
150
  OVERLAY_BACK_BUTTON_PRIORITY: OVERLAY_BACK_BUTTON_PRIORITY,
151
+ addCloseWatcherCondition: addCloseWatcherCondition,
122
152
  blockHardwareBackButton: blockHardwareBackButton,
123
153
  shouldUseCloseWatcher: shouldUseCloseWatcher,
124
- startHardwareBackButton: startHardwareBackButton
154
+ startHardwareBackButton: startHardwareBackButton,
155
+ updateCloseWatcher: updateCloseWatcher
125
156
  });
126
157
 
127
158
  /**
@@ -207,6 +238,11 @@ const focusElementInContext = (hostToFocus, fallbackElement) => {
207
238
 
208
239
  let lastOverlayIndex = 0;
209
240
  let lastId = 0;
241
+ /**
242
+ * Every overlay except toast, which doesn't trap
243
+ * focus or close on back.
244
+ */
245
+ const NON_TOAST_OVERLAYS = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover';
210
246
  const activeAnimations = new WeakMap();
211
247
  /**
212
248
  * Determines if the overlay's backdrop is always blocking (no background interaction).
@@ -333,7 +369,7 @@ const focusElementInOverlay = (hostToFocus, overlay) => {
333
369
  * Should NOT include: Toast
334
370
  */
335
371
  const trapKeyboardFocus = (ev, doc) => {
336
- const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover');
372
+ const lastOverlay = getPresentedOverlay(doc, NON_TOAST_OVERLAYS);
337
373
  const target = ev.target;
338
374
  /**
339
375
  * If no active overlay, ignore this event.
@@ -516,6 +552,11 @@ const connectListeners = (doc) => {
516
552
  doc.addEventListener('focus', (ev) => {
517
553
  trapKeyboardFocus(ev, doc);
518
554
  }, true);
555
+ /**
556
+ * Whether the overlay actually dismisses is checked at press time,
557
+ * since `backdropDismiss` can change while it's open.
558
+ */
559
+ addCloseWatcherCondition(() => getPresentedOverlay(doc, NON_TOAST_OVERLAYS) !== undefined);
519
560
  // handle back-button click
520
561
  doc.addEventListener('ionBackButton', (ev) => {
521
562
  const lastOverlay = getPresentedOverlay(doc);
@@ -639,7 +680,8 @@ const setRootAriaHidden = (hidden = false) => {
639
680
  * Cleans up root `aria-hidden` and `backdrop-no-scroll` when
640
681
  * an overlay is removed from the DOM without going through
641
682
  * the `dismiss()` flow (e.g., when a framework unmounts the
642
- * overlay during a route change).
683
+ * overlay during a route change). Also releases the
684
+ * CloseWatcher if nothing is left to close.
643
685
  *
644
686
  * Should be called from an overlay's `disconnectedCallback`
645
687
  * when the overlay was still presented at the time of removal.
@@ -648,6 +690,7 @@ const cleanupRootFocusTrapAccessibility = () => {
648
690
  if (typeof document === 'undefined') {
649
691
  return;
650
692
  }
693
+ updateCloseWatcher();
651
694
  const remainingOverlays = getPresentedOverlays(document);
652
695
  const hasRemainingLocking = remainingOverlays.some((o) => locksAppRoot(o));
653
696
  if (!hasRemainingLocking) {
@@ -669,7 +712,9 @@ const applyRootLock = (el) => {
669
712
  };
670
713
  /**
671
714
  * Re-applies the root lock that `cleanupRootFocusTrapAccessibility()` released.
672
- * Call from `connectedCallback` when the overlay is still presented.
715
+ * Call from `connectedCallback` when the overlay is still presented. Also
716
+ * re-arms the CloseWatcher, which every overlay needs, so that happens
717
+ * before the `locksAppRoot` check.
673
718
  *
674
719
  * A synchronous move keeps the overlay connected, so the lock survives. A
675
720
  * detach with a re-insert in a later task releases it, which is the shape a
@@ -679,6 +724,7 @@ const restoreRootFocusTrapAccessibility = (overlayEl) => {
679
724
  if (typeof document === 'undefined') {
680
725
  return;
681
726
  }
727
+ updateCloseWatcher();
682
728
  const el = overlayEl;
683
729
  if (!locksAppRoot(el)) {
684
730
  return;
@@ -892,6 +938,11 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
892
938
  printIonError(`[${overlay.el.tagName.toLowerCase()}] - `, err);
893
939
  }
894
940
  overlay.el.remove();
941
+ /**
942
+ * Release the back button if nothing
943
+ * else is left to close.
944
+ */
945
+ updateCloseWatcher();
895
946
  return true;
896
947
  };
897
948
  const getAppRoot = (doc) => {
@@ -900,6 +951,12 @@ const getAppRoot = (doc) => {
900
951
  const overlayAnimation = async (overlay, animationBuilder, baseEl, opts) => {
901
952
  // Make overlay visible in case it's hidden
902
953
  baseEl.classList.remove('overlay-hidden');
954
+ /**
955
+ * Removing `overlay-hidden` makes the overlay count
956
+ * as presented, so back can dismiss it while it
957
+ * animates in.
958
+ */
959
+ updateCloseWatcher();
903
960
  const aniRoot = overlay.el;
904
961
  const animation = animationBuilder(aniRoot, opts);
905
962
  if (!overlay.animated || !config.getBoolean('animated', true)) {
@@ -1123,4 +1180,4 @@ const createTriggerController = () => {
1123
1180
  };
1124
1181
  const FOCUS_TRAP_DISABLE_CLASS = 'ion-disable-focus-trap';
1125
1182
 
1126
- export { BACKDROP as B, FOCUS_TRAP_DISABLE_CLASS as F, GESTURE as G, MENU_BACK_BUTTON_PRIORITY as M, OVERLAY_GESTURE_PRIORITY as O, alertController as a, actionSheetController as b, createDelegateController as c, createTriggerController as d, present as e, dismiss as f, eventMethod as g, prepareOverlay as h, isCancel as i, cleanupRootFocusTrapAccessibility as j, setOverlayId as k, loadingController as l, modalController as m, getOverlaySizeType as n, focusFirstDescendant as o, popoverController as p, getPresentedOverlay as q, restoreRootFocusTrapAccessibility as r, safeCall as s, toastController as t, focusLastDescendant as u, shouldUseCloseWatcher as v, hardwareBackButton as w };
1183
+ export { BACKDROP as B, FOCUS_TRAP_DISABLE_CLASS as F, GESTURE as G, MENU_BACK_BUTTON_PRIORITY as M, OVERLAY_GESTURE_PRIORITY as O, alertController as a, actionSheetController as b, createDelegateController as c, createTriggerController as d, present as e, dismiss as f, eventMethod as g, prepareOverlay as h, isCancel as i, cleanupRootFocusTrapAccessibility as j, setOverlayId as k, loadingController as l, modalController as m, getOverlaySizeType as n, focusFirstDescendant as o, popoverController as p, addCloseWatcherCondition as q, restoreRootFocusTrapAccessibility as r, safeCall as s, toastController as t, getPresentedOverlay as u, focusLastDescendant as v, shouldUseCloseWatcher as w, updateCloseWatcher as x, hardwareBackButton as y };
@@ -1,4 +1,4 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- export{c as createAnimation}from"./p-B4wzg4z4.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-PkaVMJga.js";export{iosTransitionAnimation}from"./p-kKvGoaEe.js";export{mdTransitionAnimation}from"./p-BVEsh7-M.js";export{g as getTimeGivenProgression}from"./p-hHmYLOfE.js";export{createGesture}from"./p-D0YpjgON.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./p-CrAPHbJ3.js";export{c as componentOnReady}from"./p-B4xjg_Qu.js";export{L as LogLevel,c as printIonError,a as printIonWarning}from"./p-D9OR05yj.js";export{I as IonicSafeString}from"./p-BhMQahM6.js";export{g as getMode,s as setupConfig}from"./p-DWCzVL3Y.js";export{o as openURL}from"./p-byZM6qHV.js";export{m as menuController}from"./p-Ba6ZV-qU.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as popoverController,t as toastController}from"./p-DZUqAr_6.js";import"./p-B_gJaBk0.js";import"./p-Dojwmvde.js";import"./p-B4ELlbJE.js";const e=e=>{const{swiper:o,extendParams:s}=e,t={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&&(t.pagination={type:"bullets",clickable:!1,hideOnClick:!1}),o.scrollbar&&(t.scrollbar={hide:!0}),s(t)};export{e as IonicSlides}
4
+ export{c as createAnimation}from"./p-B4wzg4z4.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-PkaVMJga.js";export{iosTransitionAnimation}from"./p-kKvGoaEe.js";export{mdTransitionAnimation}from"./p-BVEsh7-M.js";export{g as getTimeGivenProgression}from"./p-hHmYLOfE.js";export{createGesture}from"./p-D0YpjgON.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./p-CrAPHbJ3.js";export{c as componentOnReady}from"./p-B4xjg_Qu.js";export{L as LogLevel,c as printIonError,a as printIonWarning}from"./p-D9OR05yj.js";export{I as IonicSafeString}from"./p-BhMQahM6.js";export{g as getMode,s as setupConfig}from"./p-DWCzVL3Y.js";export{o as openURL}from"./p-byZM6qHV.js";export{m as menuController}from"./p-OJpZr8fg.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as popoverController,t as toastController}from"./p-C036rEeA.js";import"./p-B_gJaBk0.js";import"./p-Dojwmvde.js";import"./p-B4ELlbJE.js";const e=e=>{const{swiper:o,extendParams:s}=e,t={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&&(t.pagination={type:"bullets",clickable:!1,hideOnClick:!1}),o.scrollbar&&(t.scrollbar={hide:!0}),s(t)};export{e as IonicSlides}