@ionic/core 7.3.2-dev.11692887667.1614d10a → 7.3.2-dev.11693262117.17edbf6d

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 (105) hide show
  1. package/components/action-sheet.js +8 -17
  2. package/components/alert.js +8 -17
  3. package/components/ion-loading.js +8 -17
  4. package/components/ion-menu.js +15 -2
  5. package/components/ion-modal.js +12 -33
  6. package/components/ion-picker.js +8 -17
  7. package/components/ion-toast.js +8 -17
  8. package/components/overlays.js +22 -1
  9. package/components/popover.js +8 -29
  10. package/dist/cjs/index.cjs.js +1 -1
  11. package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -17
  12. package/dist/cjs/ion-alert.cjs.entry.js +8 -17
  13. package/dist/cjs/ion-datetime_3.cjs.entry.js +8 -17
  14. package/dist/cjs/ion-loading.cjs.entry.js +8 -17
  15. package/dist/cjs/ion-menu_3.cjs.entry.js +15 -2
  16. package/dist/cjs/ion-modal.cjs.entry.js +12 -33
  17. package/dist/cjs/ion-popover.cjs.entry.js +8 -29
  18. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  19. package/dist/cjs/ion-toast.cjs.entry.js +8 -17
  20. package/dist/cjs/{overlays-0ea06fcb.js → overlays-2b9fa92e.js} +22 -0
  21. package/dist/collection/components/action-sheet/action-sheet.js +8 -17
  22. package/dist/collection/components/alert/alert.js +8 -17
  23. package/dist/collection/components/loading/loading.js +8 -17
  24. package/dist/collection/components/menu/menu.js +14 -1
  25. package/dist/collection/components/menu-button/test/async/menu-button.e2e.js +23 -0
  26. package/dist/collection/components/modal/modal.js +12 -33
  27. package/dist/collection/components/picker/picker.js +8 -17
  28. package/dist/collection/components/popover/popover.js +8 -29
  29. package/dist/collection/components/toast/toast.js +8 -17
  30. package/dist/collection/utils/overlays.js +21 -0
  31. package/dist/docs.json +1 -1
  32. package/dist/esm/index.js +1 -1
  33. package/dist/esm/ion-action-sheet.entry.js +8 -17
  34. package/dist/esm/ion-alert.entry.js +8 -17
  35. package/dist/esm/ion-datetime_3.entry.js +8 -17
  36. package/dist/esm/ion-loading.entry.js +8 -17
  37. package/dist/esm/ion-menu_3.entry.js +15 -2
  38. package/dist/esm/ion-modal.entry.js +12 -33
  39. package/dist/esm/ion-popover.entry.js +8 -29
  40. package/dist/esm/ion-select_3.entry.js +1 -1
  41. package/dist/esm/ion-toast.entry.js +8 -17
  42. package/dist/esm/{overlays-c3387ec0.js → overlays-66222f79.js} +22 -1
  43. package/dist/esm-es5/index.js +1 -1
  44. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  45. package/dist/esm-es5/ion-alert.entry.js +1 -1
  46. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  47. package/dist/esm-es5/ion-loading.entry.js +1 -1
  48. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  49. package/dist/esm-es5/ion-modal.entry.js +1 -1
  50. package/dist/esm-es5/ion-popover.entry.js +1 -1
  51. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  52. package/dist/esm-es5/ion-toast.entry.js +1 -1
  53. package/dist/esm-es5/{overlays-c3387ec0.js → overlays-66222f79.js} +1 -1
  54. package/dist/ionic/index.esm.js +1 -1
  55. package/dist/ionic/ionic.esm.js +1 -1
  56. package/dist/ionic/{p-8fa43732.system.entry.js → p-0494a5b7.system.entry.js} +1 -1
  57. package/dist/ionic/p-16fd72f2.entry.js +4 -0
  58. package/dist/ionic/p-1c9e3bc7.entry.js +4 -0
  59. package/dist/ionic/p-2a51c81c.entry.js +4 -0
  60. package/dist/ionic/p-2a649b3e.system.entry.js +4 -0
  61. package/dist/ionic/p-3ef9e271.system.entry.js +4 -0
  62. package/dist/ionic/p-6d484719.system.entry.js +4 -0
  63. package/dist/ionic/p-70d137a0.js +4 -0
  64. package/dist/ionic/p-721933ff.system.js +1 -1
  65. package/dist/ionic/{p-c0d1e5a1.entry.js → p-7776d062.entry.js} +1 -1
  66. package/dist/ionic/p-7ac9bdfa.system.entry.js +4 -0
  67. package/dist/ionic/p-8d53d5a5.entry.js +4 -0
  68. package/dist/ionic/p-9888a5a7.entry.js +4 -0
  69. package/dist/ionic/{p-db46fc66.system.js → p-a0ffdd91.system.js} +1 -1
  70. package/dist/ionic/p-a133c215.system.entry.js +4 -0
  71. package/dist/ionic/p-b2098e96.system.entry.js +4 -0
  72. package/dist/ionic/p-c0b4ca5c.system.entry.js +4 -0
  73. package/dist/ionic/p-cf768a4f.entry.js +4 -0
  74. package/dist/ionic/p-ddffbfa9.entry.js +4 -0
  75. package/dist/ionic/p-e2e2c2b0.entry.js +4 -0
  76. package/dist/ionic/p-ebb442c4.system.entry.js +4 -0
  77. package/dist/ionic/{p-81b46714.system.js → p-f8e4da48.system.js} +1 -1
  78. package/dist/types/components/action-sheet/action-sheet.d.ts +1 -1
  79. package/dist/types/components/alert/alert.d.ts +1 -1
  80. package/dist/types/components/loading/loading.d.ts +1 -1
  81. package/dist/types/components/menu/menu.d.ts +2 -0
  82. package/dist/types/components/modal/modal.d.ts +1 -1
  83. package/dist/types/components/picker/picker.d.ts +1 -1
  84. package/dist/types/components/popover/popover.d.ts +1 -1
  85. package/dist/types/components/toast/toast.d.ts +1 -1
  86. package/dist/types/utils/overlays.d.ts +9 -0
  87. package/hydrate/index.js +87 -141
  88. package/package.json +2 -2
  89. package/dist/ionic/p-06f1f560.system.entry.js +0 -4
  90. package/dist/ionic/p-2936ec7f.system.entry.js +0 -4
  91. package/dist/ionic/p-29b3e70a.entry.js +0 -4
  92. package/dist/ionic/p-2bc49e5d.system.entry.js +0 -4
  93. package/dist/ionic/p-2da3e015.system.entry.js +0 -4
  94. package/dist/ionic/p-423d5a4d.entry.js +0 -4
  95. package/dist/ionic/p-564aaba3.entry.js +0 -4
  96. package/dist/ionic/p-5ef91692.js +0 -4
  97. package/dist/ionic/p-61769039.entry.js +0 -4
  98. package/dist/ionic/p-74723f41.entry.js +0 -4
  99. package/dist/ionic/p-8b55f026.entry.js +0 -4
  100. package/dist/ionic/p-9b3c3564.entry.js +0 -4
  101. package/dist/ionic/p-ac80da6c.system.entry.js +0 -4
  102. package/dist/ionic/p-ccea9adc.system.entry.js +0 -4
  103. package/dist/ionic/p-d5db0834.system.entry.js +0 -4
  104. package/dist/ionic/p-d8538837.entry.js +0 -4
  105. package/dist/ionic/p-dd0b6889.system.entry.js +0 -4
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, i as forceUpdate, h, H as Host
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-96c9ace3.js';
6
6
  import { c as createButtonActiveGesture } from './button-active-2da0f611.js';
7
7
  import { r as raf } from './helpers-3379ba19.js';
8
- 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-c3387ec0.js';
8
+ import { d as createDelegateController, e as createLockController, f as createTriggerController, B as BACKDROP, i as isCancel, k as prepareOverlay, n as setOverlayId, g as present, h as dismiss, j as eventMethod, s as safeCall } from './overlays-66222f79.js';
9
9
  import { g as getClassMap } from './theme-17531cdf.js';
10
10
  import { c as config, b as getIonMode } from './ionic-global-1ef19007.js';
11
11
  import { c as createAnimation } from './animation-a1d9e088.js';
@@ -119,6 +119,7 @@ const Alert = class {
119
119
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
120
120
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
121
121
  this.delegateController = createDelegateController(this);
122
+ this.lockController = createLockController();
122
123
  this.triggerController = createTriggerController();
123
124
  this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
124
125
  this.processedInputs = [];
@@ -285,21 +286,10 @@ const Alert = class {
285
286
  * Present the alert overlay after it has been created.
286
287
  */
287
288
  async present() {
288
- /**
289
- * When using an inline alert
290
- * and dismissing an alert it is possible to
291
- * quickly present the alert while it is
292
- * dismissing. We need to await any current
293
- * transition to allow the dismiss to finish
294
- * before presenting again.
295
- */
296
- if (this.currentTransition !== undefined) {
297
- await this.currentTransition;
298
- }
289
+ const unlock = await this.lockController.lock();
299
290
  await this.delegateController.attachViewToDom();
300
- this.currentTransition = present(this, 'alertEnter', iosEnterAnimation, mdEnterAnimation);
301
- await this.currentTransition;
302
- this.currentTransition = undefined;
291
+ await present(this, 'alertEnter', iosEnterAnimation, mdEnterAnimation);
292
+ unlock();
303
293
  }
304
294
  /**
305
295
  * Dismiss the alert overlay after it has been presented.
@@ -311,11 +301,12 @@ const Alert = class {
311
301
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
312
302
  */
313
303
  async dismiss(data, role) {
314
- this.currentTransition = dismiss(this, data, role, 'alertLeave', iosLeaveAnimation, mdLeaveAnimation);
315
- const dismissed = await this.currentTransition;
304
+ const unlock = await this.lockController.lock();
305
+ const dismissed = await dismiss(this, data, role, 'alertLeave', iosLeaveAnimation, mdLeaveAnimation);
316
306
  if (dismissed) {
317
307
  this.delegateController.removeViewFromDom();
318
308
  }
309
+ unlock();
319
310
  return dismissed;
320
311
  }
321
312
  /**
@@ -10,7 +10,7 @@ import { c as createColorClasses, g as getClassMap } from './theme-17531cdf.js';
10
10
  import { c as chevronBack, o as chevronForward, l as chevronDown, p as caretUpSharp, q as caretDownSharp } from './index-ecfc2c9f.js';
11
11
  import { b as getIonMode } from './ionic-global-1ef19007.js';
12
12
  import { g as generateDayAriaLabel, a as getDay, i as isBefore, b as isAfter, c as isSameDay, d as getPreviousMonth, e as getNextMonth, v as validateParts, f as getPartsFromCalendarDay, h as getEndOfWeek, j as getStartOfWeek, k as getPreviousDay, l as getNextDay, m as getPreviousWeek, n as getNextWeek, p as parseMinParts, o as parseMaxParts, q as parseDate, w as warnIfValueOutOfBounds, r as convertToArrayOfNumbers, s as convertDataToISO, t as getToday, u as getClosestValidDate, x as getNumDaysInMonth, y as getCombinedDateColumnData, z as getMonthColumnData, A as getDayColumnData, B as getYearColumnData, C as isMonthFirstLocale, D as getTimeColumnsData, E as isLocaleDayPeriodRTL, F as getDaysOfWeek, G as getMonthAndYear, H as getDaysOfMonth, I as generateMonths, J as is24Hour, K as getLocalizedTime, L as getMonthAndDay, M as formatValue, N as getNextYear, O as getPreviousYear, P as clampDate, Q as parseAmPm, R as calculateHourFromAMPM } from './data-4b448e3a.js';
13
- 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-c3387ec0.js';
13
+ import { d as createDelegateController, e as createLockController, f as createTriggerController, B as BACKDROP, i as isCancel, k as prepareOverlay, n as setOverlayId, g as present, h as dismiss, j as eventMethod, s as safeCall } from './overlays-66222f79.js';
14
14
  import { c as createAnimation } from './animation-a1d9e088.js';
15
15
  import { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic-6447af60.js';
16
16
  import './framework-delegate-2b76c681.js';
@@ -1726,6 +1726,7 @@ const Picker = class {
1726
1726
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
1727
1727
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
1728
1728
  this.delegateController = createDelegateController(this);
1729
+ this.lockController = createLockController();
1729
1730
  this.triggerController = createTriggerController();
1730
1731
  this.onBackdropTap = () => {
1731
1732
  this.dismiss(undefined, BACKDROP);
@@ -1792,24 +1793,13 @@ const Picker = class {
1792
1793
  * Present the picker overlay after it has been created.
1793
1794
  */
1794
1795
  async present() {
1795
- /**
1796
- * When using an inline picker
1797
- * and dismissing an picker it is possible to
1798
- * quickly present the picker while it is
1799
- * dismissing. We need to await any current
1800
- * transition to allow the dismiss to finish
1801
- * before presenting again.
1802
- */
1803
- if (this.currentTransition !== undefined) {
1804
- await this.currentTransition;
1805
- }
1796
+ const unlock = await this.lockController.lock();
1806
1797
  await this.delegateController.attachViewToDom();
1807
- this.currentTransition = present(this, 'pickerEnter', iosEnterAnimation, iosEnterAnimation, undefined);
1808
- await this.currentTransition;
1809
- this.currentTransition = undefined;
1798
+ await present(this, 'pickerEnter', iosEnterAnimation, iosEnterAnimation, undefined);
1810
1799
  if (this.duration > 0) {
1811
1800
  this.durationTimeout = setTimeout(() => this.dismiss(), this.duration);
1812
1801
  }
1802
+ unlock();
1813
1803
  }
1814
1804
  /**
1815
1805
  * Dismiss the picker overlay after it has been presented.
@@ -1821,14 +1811,15 @@ const Picker = class {
1821
1811
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
1822
1812
  */
1823
1813
  async dismiss(data, role) {
1814
+ const unlock = await this.lockController.lock();
1824
1815
  if (this.durationTimeout) {
1825
1816
  clearTimeout(this.durationTimeout);
1826
1817
  }
1827
- this.currentTransition = dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation, iosLeaveAnimation);
1828
- const dismissed = await this.currentTransition;
1818
+ const dismissed = await dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation, iosLeaveAnimation);
1829
1819
  if (dismissed) {
1830
1820
  this.delegateController.removeViewFromDom();
1831
1821
  }
1822
+ unlock();
1832
1823
  return dismissed;
1833
1824
  }
1834
1825
  /**
@@ -4,7 +4,7 @@
4
4
  import { r as registerInstance, d as createEvent, h, H as Host, f as getElement } from './index-847f2fde.js';
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-96c9ace3.js';
6
6
  import { r as raf } from './helpers-3379ba19.js';
7
- 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-c3387ec0.js';
7
+ import { d as createDelegateController, e as createLockController, f as createTriggerController, B as BACKDROP, k as prepareOverlay, n as setOverlayId, g as present, h as dismiss, j as eventMethod } from './overlays-66222f79.js';
8
8
  import { g as getClassMap } from './theme-17531cdf.js';
9
9
  import { c as config, b as getIonMode } from './ionic-global-1ef19007.js';
10
10
  import { c as createAnimation } from './animation-a1d9e088.js';
@@ -117,6 +117,7 @@ const Loading = class {
117
117
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
118
118
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
119
119
  this.delegateController = createDelegateController(this);
120
+ this.lockController = createLockController();
120
121
  this.triggerController = createTriggerController();
121
122
  this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
122
123
  this.presented = false;
@@ -182,24 +183,13 @@ const Loading = class {
182
183
  * Present the loading overlay after it has been created.
183
184
  */
184
185
  async present() {
185
- /**
186
- * When using an inline loading indicator
187
- * and dismissing a loading indicator it is possible to
188
- * quickly present the loading indicator while it is
189
- * dismissing. We need to await any current
190
- * transition to allow the dismiss to finish
191
- * before presenting again.
192
- */
193
- if (this.currentTransition !== undefined) {
194
- await this.currentTransition;
195
- }
186
+ const unlock = await this.lockController.lock();
196
187
  await this.delegateController.attachViewToDom();
197
- this.currentTransition = present(this, 'loadingEnter', iosEnterAnimation, mdEnterAnimation);
198
- await this.currentTransition;
188
+ await present(this, 'loadingEnter', iosEnterAnimation, mdEnterAnimation);
199
189
  if (this.duration > 0) {
200
190
  this.durationTimeout = setTimeout(() => this.dismiss(), this.duration + 10);
201
191
  }
202
- this.currentTransition = undefined;
192
+ unlock();
203
193
  }
204
194
  /**
205
195
  * Dismiss the loading overlay after it has been presented.
@@ -211,14 +201,15 @@ const Loading = class {
211
201
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
212
202
  */
213
203
  async dismiss(data, role) {
204
+ const unlock = await this.lockController.lock();
214
205
  if (this.durationTimeout) {
215
206
  clearTimeout(this.durationTimeout);
216
207
  }
217
- this.currentTransition = dismiss(this, data, role, 'loadingLeave', iosLeaveAnimation, mdLeaveAnimation);
218
- const dismissed = await this.currentTransition;
208
+ const dismissed = await dismiss(this, data, role, 'loadingLeave', iosLeaveAnimation, mdLeaveAnimation);
219
209
  if (dismissed) {
220
210
  this.delegateController.removeViewFromDom();
221
211
  }
212
+ unlock();
222
213
  return dismissed;
223
214
  }
224
215
  /**
@@ -7,7 +7,7 @@ import { d as doc } from './index-7a14ecec.js';
7
7
  import { G as GESTURE_CONTROLLER } from './gesture-controller-0fa396c4.js';
8
8
  import { p as isEndSide, i as inheritAriaAttributes, o as assert, l as clamp } from './helpers-3379ba19.js';
9
9
  import { m as menuController } from './index-b3e05099.js';
10
- import { q as getOverlay } from './overlays-c3387ec0.js';
10
+ import { r as getOverlay } from './overlays-66222f79.js';
11
11
  import { c as config, b as getIonMode } from './ionic-global-1ef19007.js';
12
12
  import { c as createColorClasses, h as hostContext } from './theme-17531cdf.js';
13
13
  import { u as menuOutline, v as menuSharp } from './index-ecfc2c9f.js';
@@ -35,6 +35,7 @@ const Menu = class {
35
35
  this.ionMenuChange = createEvent(this, "ionMenuChange", 7);
36
36
  this.lastOnEnd = 0;
37
37
  this.blocker = GESTURE_CONTROLLER.createBlocker({ disableScroll: true });
38
+ this.didLoad = false;
38
39
  this.isAnimating = false;
39
40
  this._isOpen = false;
40
41
  this.inheritedAttributes = {};
@@ -119,6 +120,7 @@ const Menu = class {
119
120
  this.sideChanged();
120
121
  // register this menu with the app's menu controller
121
122
  menuController._register(this);
123
+ this.menuChanged();
122
124
  this.gesture = (await import('./index-ff313b19.js')).createGesture({
123
125
  el: document,
124
126
  gestureName: 'menu-swipe',
@@ -137,9 +139,20 @@ const Menu = class {
137
139
  this.inheritedAttributes = inheritAriaAttributes(this.el);
138
140
  }
139
141
  async componentDidLoad() {
140
- this.ionMenuChange.emit({ disabled: this.disabled, open: this._isOpen });
142
+ this.didLoad = true;
143
+ this.menuChanged();
141
144
  this.updateState();
142
145
  }
146
+ menuChanged() {
147
+ /**
148
+ * Inform dependent components such as ion-menu-button
149
+ * that the menu is ready. Note that we only want to do this
150
+ * once the menu has been rendered which is why we check for didLoad.
151
+ */
152
+ if (this.didLoad) {
153
+ this.ionMenuChange.emit({ disabled: this.disabled, open: this._isOpen });
154
+ }
155
+ }
143
156
  async disconnectedCallback() {
144
157
  /**
145
158
  * The menu should be closed when it is
@@ -7,7 +7,7 @@ import { C as CoreDelegate, a as attachComponent, d as detachComponent } from '.
7
7
  import { g as getElementRoot, l as clamp, r as raf, k as inheritAttributes, m as hasLazyBuild } from './helpers-3379ba19.js';
8
8
  import { p as printIonWarning } from './index-595d62c9.js';
9
9
  import { g as getCapacitor } from './capacitor-b4979570.js';
10
- import { G as GESTURE, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, n as activeAnimations, g as dismiss, h as eventMethod } from './overlays-c3387ec0.js';
10
+ import { G as GESTURE, e as createLockController, f as createTriggerController, B as BACKDROP, k as prepareOverlay, n as setOverlayId, g as present, o as activeAnimations, h as dismiss, j as eventMethod } from './overlays-66222f79.js';
11
11
  import { g as getClassMap } from './theme-17531cdf.js';
12
12
  import { e as deepReady, w as waitForMount } from './index-6391de89.js';
13
13
  import { b as getIonMode, c as config } from './ionic-global-1ef19007.js';
@@ -1113,6 +1113,7 @@ const Modal = class {
1113
1113
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
1114
1114
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
1115
1115
  this.ionMount = createEvent(this, "ionMount", 7);
1116
+ this.lockController = createLockController();
1116
1117
  this.triggerController = createTriggerController();
1117
1118
  this.coreDelegate = CoreDelegate();
1118
1119
  this.isSheetModal = false;
@@ -1280,18 +1281,8 @@ const Modal = class {
1280
1281
  if (this.presented) {
1281
1282
  return;
1282
1283
  }
1284
+ const unlock = await this.lockController.lock();
1283
1285
  const { presentingElement, el } = this;
1284
- /**
1285
- * When using an inline modal
1286
- * and dismissing a modal it is possible to
1287
- * quickly present the modal while it is
1288
- * dismissing. We need to await any current
1289
- * transition to allow the dismiss to finish
1290
- * before presenting again.
1291
- */
1292
- if (this.currentTransition !== undefined) {
1293
- await this.currentTransition;
1294
- }
1295
1286
  /**
1296
1287
  * If the modal is presented multiple times (inline modals), we
1297
1288
  * need to reset the current breakpoint to the initial breakpoint.
@@ -1323,11 +1314,6 @@ const Modal = class {
1323
1314
  await waitForMount();
1324
1315
  }
1325
1316
  writeTask(() => this.el.classList.add('show-modal'));
1326
- this.currentTransition = present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
1327
- presentingEl: presentingElement,
1328
- currentBreakpoint: this.initialBreakpoint,
1329
- backdropBreakpoint: this.backdropBreakpoint,
1330
- });
1331
1317
  /* tslint:disable-next-line */
1332
1318
  if (typeof window !== 'undefined') {
1333
1319
  /**
@@ -1370,14 +1356,18 @@ const Modal = class {
1370
1356
  this.statusBarStyle = await StatusBar.getStyle();
1371
1357
  setCardStatusBarDark();
1372
1358
  }
1373
- await this.currentTransition;
1359
+ await present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
1360
+ presentingEl: presentingElement,
1361
+ currentBreakpoint: this.initialBreakpoint,
1362
+ backdropBreakpoint: this.backdropBreakpoint,
1363
+ });
1374
1364
  if (this.isSheetModal) {
1375
1365
  this.initSheetGesture();
1376
1366
  }
1377
1367
  else if (hasCardModal) {
1378
1368
  this.initSwipeToClose();
1379
1369
  }
1380
- this.currentTransition = undefined;
1370
+ unlock();
1381
1371
  }
1382
1372
  initSwipeToClose() {
1383
1373
  var _a;
@@ -1467,6 +1457,7 @@ const Modal = class {
1467
1457
  if (this.gestureAnimationDismissing && role !== GESTURE) {
1468
1458
  return false;
1469
1459
  }
1460
+ const unlock = await this.lockController.lock();
1470
1461
  /**
1471
1462
  * If a canDismiss handler is responsible
1472
1463
  * for calling the dismiss method, we should
@@ -1490,24 +1481,12 @@ const Modal = class {
1490
1481
  window.removeEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
1491
1482
  this.keyboardOpenCallback = undefined;
1492
1483
  }
1493
- /**
1494
- * When using an inline modal
1495
- * and presenting a modal it is possible to
1496
- * quickly dismiss the modal while it is
1497
- * presenting. We need to await any current
1498
- * transition to allow the present to finish
1499
- * before dismissing again.
1500
- */
1501
- if (this.currentTransition !== undefined) {
1502
- await this.currentTransition;
1503
- }
1504
1484
  const enteringAnimation = activeAnimations.get(this) || [];
1505
- this.currentTransition = dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
1485
+ const dismissed = await dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
1506
1486
  presentingEl: presentingElement,
1507
1487
  currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
1508
1488
  backdropBreakpoint: this.backdropBreakpoint,
1509
1489
  });
1510
- const dismissed = await this.currentTransition;
1511
1490
  if (dismissed) {
1512
1491
  const { delegate } = this.getDelegate();
1513
1492
  await detachComponent(delegate, this.usersElement);
@@ -1521,8 +1500,8 @@ const Modal = class {
1521
1500
  enteringAnimation.forEach((ani) => ani.destroy());
1522
1501
  }
1523
1502
  this.currentBreakpoint = undefined;
1524
- this.currentTransition = undefined;
1525
1503
  this.animation = undefined;
1504
+ unlock();
1526
1505
  return dismissed;
1527
1506
  }
1528
1507
  /**
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, h, H as Host, f as getElement
5
5
  import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-2b76c681.js';
6
6
  import { r as raf, g as getElementRoot, a as addEventListener, m as hasLazyBuild } from './helpers-3379ba19.js';
7
7
  import { p as printIonWarning } from './index-595d62c9.js';
8
- import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, o as focusFirstDescendant, g as dismiss, h as eventMethod } from './overlays-c3387ec0.js';
8
+ import { e as createLockController, B as BACKDROP, k as prepareOverlay, n as setOverlayId, g as present, q as focusFirstDescendant, h as dismiss, j as eventMethod } from './overlays-66222f79.js';
9
9
  import { b as getIonMode, a as isPlatform } from './ionic-global-1ef19007.js';
10
10
  import { g as getClassMap } from './theme-17531cdf.js';
11
11
  import { e as deepReady, w as waitForMount } from './index-6391de89.js';
@@ -983,6 +983,7 @@ const Popover = class {
983
983
  this.ionMount = createEvent(this, "ionMount", 7);
984
984
  this.parentPopover = null;
985
985
  this.coreDelegate = CoreDelegate();
986
+ this.lockController = createLockController();
986
987
  this.inline = false;
987
988
  this.focusDescendantOnPresent = false;
988
989
  this.onBackdropTap = () => {
@@ -1159,17 +1160,7 @@ const Popover = class {
1159
1160
  if (this.presented) {
1160
1161
  return;
1161
1162
  }
1162
- /**
1163
- * When using an inline popover
1164
- * and dismissing a popover it is possible to
1165
- * quickly present the popover while it is
1166
- * dismissing. We need to await any current
1167
- * transition to allow the dismiss to finish
1168
- * before presenting again.
1169
- */
1170
- if (this.currentTransition !== undefined) {
1171
- await this.currentTransition;
1172
- }
1163
+ const unlock = await this.lockController.lock();
1173
1164
  const { el } = this;
1174
1165
  const { inline, delegate } = this.getDelegate(true);
1175
1166
  this.usersElement = await attachComponent(delegate, el, this.component, ['popover-viewport'], this.componentProps, inline);
@@ -1200,7 +1191,7 @@ const Popover = class {
1200
1191
  else if (!this.keepContentsMounted) {
1201
1192
  await waitForMount();
1202
1193
  }
1203
- this.currentTransition = present(this, 'popoverEnter', iosEnterAnimation, mdEnterAnimation, {
1194
+ await present(this, 'popoverEnter', iosEnterAnimation, mdEnterAnimation, {
1204
1195
  event: event || this.event,
1205
1196
  size: this.size,
1206
1197
  trigger: this.triggerEl,
@@ -1208,8 +1199,6 @@ const Popover = class {
1208
1199
  side: this.side,
1209
1200
  align: this.alignment,
1210
1201
  });
1211
- await this.currentTransition;
1212
- this.currentTransition = undefined;
1213
1202
  /**
1214
1203
  * If popover is nested and was
1215
1204
  * presented using the "Right" arrow key,
@@ -1219,6 +1208,7 @@ const Popover = class {
1219
1208
  if (this.focusDescendantOnPresent) {
1220
1209
  focusFirstDescendant(this.el, this.el);
1221
1210
  }
1211
+ unlock();
1222
1212
  }
1223
1213
  /**
1224
1214
  * Dismiss the popover overlay after it has been presented.
@@ -1229,23 +1219,12 @@ const Popover = class {
1229
1219
  * a parent popover if this popover is nested. Defaults to `true`.
1230
1220
  */
1231
1221
  async dismiss(data, role, dismissParentPopover = true) {
1232
- /**
1233
- * When using an inline popover
1234
- * and presenting a popover it is possible to
1235
- * quickly dismiss the popover while it is
1236
- * presenting. We need to await any current
1237
- * transition to allow the present to finish
1238
- * before dismissing again.
1239
- */
1240
- if (this.currentTransition !== undefined) {
1241
- await this.currentTransition;
1242
- }
1222
+ const unlock = await this.lockController.lock();
1243
1223
  const { destroyKeyboardInteraction, destroyDismissInteraction } = this;
1244
1224
  if (dismissParentPopover && this.parentPopover) {
1245
1225
  this.parentPopover.dismiss(data, role, dismissParentPopover);
1246
1226
  }
1247
- this.currentTransition = dismiss(this, data, role, 'popoverLeave', iosLeaveAnimation, mdLeaveAnimation, this.event);
1248
- const shouldDismiss = await this.currentTransition;
1227
+ const shouldDismiss = await dismiss(this, data, role, 'popoverLeave', iosLeaveAnimation, mdLeaveAnimation, this.event);
1249
1228
  if (shouldDismiss) {
1250
1229
  if (destroyKeyboardInteraction) {
1251
1230
  destroyKeyboardInteraction();
@@ -1263,7 +1242,7 @@ const Popover = class {
1263
1242
  const { delegate } = this.getDelegate();
1264
1243
  await detachComponent(delegate, this.usersElement);
1265
1244
  }
1266
- this.currentTransition = undefined;
1245
+ unlock();
1267
1246
  return shouldDismiss;
1268
1247
  }
1269
1248
  /**
@@ -6,7 +6,7 @@ import { c as createLegacyFormController } from './form-controller-ed77647a.js';
6
6
  import { c as createNotchController } from './notch-controller-cb5bbe6a.js';
7
7
  import { k as inheritAttributes, f as focusElement, h as findItemLabel, d as renderHiddenInput, e as getAriaLabel } from './helpers-3379ba19.js';
8
8
  import { p as printIonWarning } from './index-595d62c9.js';
9
- import { c as popoverController, b as actionSheetController, a as alertController, s as safeCall } from './overlays-c3387ec0.js';
9
+ import { c as popoverController, b as actionSheetController, a as alertController, s as safeCall } from './overlays-66222f79.js';
10
10
  import { i as isRTL } from './dir-912e3e13.js';
11
11
  import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-17531cdf.js';
12
12
  import { w as watchForOptions } from './watch-options-355a920a.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, h, H as Host, f as getElement
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-96c9ace3.js';
6
6
  import { g as getElementRoot, r as raf } from './helpers-3379ba19.js';
7
7
  import { p as printIonWarning } from './index-595d62c9.js';
8
- import { 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 } from './overlays-c3387ec0.js';
8
+ import { d as createDelegateController, e as createLockController, f as createTriggerController, i as isCancel, k as prepareOverlay, n as setOverlayId, g as present, h as dismiss, j as eventMethod, s as safeCall } from './overlays-66222f79.js';
9
9
  import { g as getClassMap, c as createColorClasses } from './theme-17531cdf.js';
10
10
  import { c as config, b as getIonMode } from './ionic-global-1ef19007.js';
11
11
  import { c as createAnimation } from './animation-a1d9e088.js';
@@ -122,6 +122,7 @@ const Toast = class {
122
122
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
123
123
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
124
124
  this.delegateController = createDelegateController(this);
125
+ this.lockController = createLockController();
125
126
  this.triggerController = createTriggerController();
126
127
  this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
127
128
  this.presented = false;
@@ -191,30 +192,19 @@ const Toast = class {
191
192
  * Present the toast overlay after it has been created.
192
193
  */
193
194
  async present() {
194
- /**
195
- * When using an inline toast
196
- * and dismissing a toast it is possible to
197
- * quickly present the toast while it is
198
- * dismissing. We need to await any current
199
- * transition to allow the dismiss to finish
200
- * before presenting again.
201
- */
202
- if (this.currentTransition !== undefined) {
203
- await this.currentTransition;
204
- }
195
+ const unlock = await this.lockController.lock();
205
196
  await this.delegateController.attachViewToDom();
206
- this.currentTransition = present(this, 'toastEnter', iosEnterAnimation, mdEnterAnimation, this.position);
207
- await this.currentTransition;
197
+ await present(this, 'toastEnter', iosEnterAnimation, mdEnterAnimation, this.position);
208
198
  /**
209
199
  * Content is revealed to screen readers after
210
200
  * the transition to avoid jank since this
211
201
  * state updates will cause a re-render.
212
202
  */
213
203
  this.revealContentToScreenReader = true;
214
- this.currentTransition = undefined;
215
204
  if (this.duration > 0) {
216
205
  this.durationTimeout = setTimeout(() => this.dismiss(undefined, 'timeout'), this.duration);
217
206
  }
207
+ unlock();
218
208
  }
219
209
  /**
220
210
  * Dismiss the toast overlay after it has been presented.
@@ -226,15 +216,16 @@ const Toast = class {
226
216
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
227
217
  */
228
218
  async dismiss(data, role) {
219
+ const unlock = await this.lockController.lock();
229
220
  if (this.durationTimeout) {
230
221
  clearTimeout(this.durationTimeout);
231
222
  }
232
- this.currentTransition = dismiss(this, data, role, 'toastLeave', iosLeaveAnimation, mdLeaveAnimation, this.position);
233
- const dismissed = await this.currentTransition;
223
+ const dismissed = await dismiss(this, data, role, 'toastLeave', iosLeaveAnimation, mdLeaveAnimation, this.position);
234
224
  if (dismissed) {
235
225
  this.delegateController.removeViewFromDom();
236
226
  this.revealContentToScreenReader = false;
237
227
  }
228
+ unlock();
238
229
  return dismissed;
239
230
  }
240
231
  /**
@@ -617,6 +617,27 @@ const createDelegateController = (ref) => {
617
617
  removeViewFromDom,
618
618
  };
619
619
  };
620
+ /**
621
+ * Creates a lock controller.
622
+ *
623
+ * This function locks transitions.
624
+ * The unlock() function within it calls resolve on this function, unlocking the transitions.
625
+ */
626
+ const createLockController = () => {
627
+ let waitPromise;
628
+ const lock = async () => {
629
+ const p = waitPromise;
630
+ let resolve;
631
+ waitPromise = new Promise((r) => (resolve = r));
632
+ if (p !== undefined) {
633
+ await p;
634
+ }
635
+ return resolve;
636
+ };
637
+ return {
638
+ lock,
639
+ };
640
+ };
620
641
  /**
621
642
  * Constructs a trigger interaction for an overlay.
622
643
  * Presents an overlay when the trigger is clicked.
@@ -668,4 +689,4 @@ const createTriggerController = () => {
668
689
  };
669
690
  };
670
691
 
671
- export { BACKDROP as B, GESTURE as G, alertController as a, actionSheetController as b, popoverController as c, createDelegateController as d, createTriggerController as e, present as f, dismiss as g, eventMethod as h, isCancel as i, prepareOverlay as j, setOverlayId as k, loadingController as l, modalController as m, activeAnimations as n, focusFirstDescendant as o, pickerController as p, getOverlay as q, safeCall as s, toastController as t };
692
+ export { BACKDROP as B, GESTURE as G, alertController as a, actionSheetController as b, popoverController as c, createDelegateController as d, createLockController as e, createTriggerController as f, present as g, dismiss as h, isCancel as i, eventMethod as j, prepareOverlay as k, loadingController as l, modalController as m, setOverlayId as n, activeAnimations as o, pickerController as p, focusFirstDescendant as q, getOverlay as r, safeCall as s, toastController as t };
@@ -1,4 +1,4 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- export{c as createAnimation}from"./animation-a1d9e088.js";export{iosTransitionAnimation}from"./ios.transition-3137d23e.js";export{mdTransitionAnimation}from"./md.transition-48b3b77c.js";export{g as getTimeGivenProgression}from"./cubic-bezier-66542bc5.js";export{createGesture}from"./index-ff313b19.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./ionic-global-1ef19007.js";export{c as componentOnReady}from"./helpers-3379ba19.js";export{I as IonicSafeString,g as getMode,s as setupConfig}from"./config-96c9ace3.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}from"./index-6391de89.js";export{m as menuController}from"./index-b3e05099.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as pickerController,c as popoverController,t as toastController}from"./overlays-c3387ec0.js";import"./index-7a14ecec.js";import"./gesture-controller-0fa396c4.js";import"./index-847f2fde.js";import"./hardware-back-button-39299f84.js";import"./framework-delegate-2b76c681.js";import"./index-595d62c9.js";var IonicSlides=function(e){var o=e.swiper,t=e.extendParams;var s={effect:undefined,direction:"horizontal",initialSlide:0,loop:false,parallax:false,slidesPerView:1,spaceBetween:0,speed:300,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:false,slidesOffsetBefore:0,slidesOffsetAfter:0,touchEventsTarget:"container",freeMode:false,freeModeMomentum:true,freeModeMomentumRatio:1,freeModeMomentumBounce:true,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:false,freeModeMinimumVelocity:.02,autoHeight:false,setWrapperSize:false,zoom:{maxRatio:3,minRatio:1,toggle:false},touchRatio:1,touchAngle:45,simulateTouch:true,touchStartPreventDefault:false,shortSwipes:true,longSwipes:true,longSwipesRatio:.5,longSwipesMs:300,followFinger:true,threshold:0,touchMoveStopPropagation:true,touchReleaseOnEdges:false,iOSEdgeSwipeDetection:false,iOSEdgeSwipeThreshold:20,resistance:true,resistanceRatio:.85,watchSlidesProgress:false,watchSlidesVisibility:false,preventClicks:true,preventClicksPropagation:true,slideToClickedSlide:false,loopAdditionalSlides:0,noSwiping:true,runCallbacksOnInit:true,coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:true},flipEffect:{slideShadows:true,limitRotation:true},cubeEffect:{slideShadows:true,shadow:true,shadowOffset:20,shadowScale:.94},fadeEffect:{crossFade:false},a11y:{prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide"}};if(o.pagination){s.pagination={type:"bullets",clickable:false,hideOnClick:false}}if(o.scrollbar){s.scrollbar={hide:true}}t(s)};export{IonicSlides};
4
+ export{c as createAnimation}from"./animation-a1d9e088.js";export{iosTransitionAnimation}from"./ios.transition-3137d23e.js";export{mdTransitionAnimation}from"./md.transition-48b3b77c.js";export{g as getTimeGivenProgression}from"./cubic-bezier-66542bc5.js";export{createGesture}from"./index-ff313b19.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./ionic-global-1ef19007.js";export{c as componentOnReady}from"./helpers-3379ba19.js";export{I as IonicSafeString,g as getMode,s as setupConfig}from"./config-96c9ace3.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}from"./index-6391de89.js";export{m as menuController}from"./index-b3e05099.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as pickerController,c as popoverController,t as toastController}from"./overlays-66222f79.js";import"./index-7a14ecec.js";import"./gesture-controller-0fa396c4.js";import"./index-847f2fde.js";import"./hardware-back-button-39299f84.js";import"./framework-delegate-2b76c681.js";import"./index-595d62c9.js";var IonicSlides=function(e){var o=e.swiper,t=e.extendParams;var s={effect:undefined,direction:"horizontal",initialSlide:0,loop:false,parallax:false,slidesPerView:1,spaceBetween:0,speed:300,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:false,slidesOffsetBefore:0,slidesOffsetAfter:0,touchEventsTarget:"container",freeMode:false,freeModeMomentum:true,freeModeMomentumRatio:1,freeModeMomentumBounce:true,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:false,freeModeMinimumVelocity:.02,autoHeight:false,setWrapperSize:false,zoom:{maxRatio:3,minRatio:1,toggle:false},touchRatio:1,touchAngle:45,simulateTouch:true,touchStartPreventDefault:false,shortSwipes:true,longSwipes:true,longSwipesRatio:.5,longSwipesMs:300,followFinger:true,threshold:0,touchMoveStopPropagation:true,touchReleaseOnEdges:false,iOSEdgeSwipeDetection:false,iOSEdgeSwipeThreshold:20,resistance:true,resistanceRatio:.85,watchSlidesProgress:false,watchSlidesVisibility:false,preventClicks:true,preventClicksPropagation:true,slideToClickedSlide:false,loopAdditionalSlides:0,noSwiping:true,runCallbacksOnInit:true,coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:true},flipEffect:{slideShadows:true,limitRotation:true},cubeEffect:{slideShadows:true,shadow:true,shadowOffset:20,shadowScale:.94},fadeEffect:{crossFade:false},a11y:{prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide"}};if(o.pagination){s.pagination={type:"bullets",clickable:false,hideOnClick:false}}if(o.scrollbar){s.scrollbar={hide:true}}t(s)};export{IonicSlides};