@ionic/core 7.3.3-dev.11693454416.1cb6a7ec → 7.3.3-dev.11693533652.1969cc78

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 (142) hide show
  1. package/components/action-sheet.js +8 -16
  2. package/components/alert.js +8 -16
  3. package/components/framework-delegate.js +21 -2
  4. package/components/ion-loading.js +8 -16
  5. package/components/ion-modal.js +21 -29
  6. package/components/ion-nav-link.js +1 -7
  7. package/components/ion-picker.js +8 -16
  8. package/components/ion-router-outlet.js +1 -0
  9. package/components/ion-toast.js +8 -16
  10. package/components/lock-controller.js +38 -0
  11. package/components/popover.js +15 -29
  12. package/dist/cjs/{framework-delegate-e8174951.js → framework-delegate-c0873a6f.js} +21 -2
  13. package/dist/cjs/index.cjs.js +2 -2
  14. package/dist/cjs/ion-action-sheet.cjs.entry.js +10 -18
  15. package/dist/cjs/ion-alert.cjs.entry.js +10 -18
  16. package/dist/cjs/ion-app_8.cjs.entry.js +2 -1
  17. package/dist/cjs/ion-datetime_3.cjs.entry.js +10 -18
  18. package/dist/cjs/ion-loading.cjs.entry.js +10 -18
  19. package/dist/cjs/ion-menu_3.cjs.entry.js +2 -2
  20. package/dist/cjs/ion-modal.cjs.entry.js +23 -31
  21. package/dist/cjs/ion-nav_2.cjs.entry.js +2 -8
  22. package/dist/cjs/ion-popover.cjs.entry.js +17 -31
  23. package/dist/cjs/ion-select_3.cjs.entry.js +2 -2
  24. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  25. package/dist/cjs/ion-toast.cjs.entry.js +10 -18
  26. package/dist/cjs/lock-controller-4ae2eb59.js +40 -0
  27. package/dist/cjs/{overlays-0ea06fcb.js → overlays-5c1706ed.js} +1 -1
  28. package/dist/collection/components/action-sheet/action-sheet.js +8 -16
  29. package/dist/collection/components/alert/alert.js +8 -16
  30. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +48 -17
  31. package/dist/collection/components/loading/loading.js +8 -16
  32. package/dist/collection/components/modal/modal.js +21 -29
  33. package/dist/collection/components/nav-link/nav-link.js +1 -7
  34. package/dist/collection/components/picker/picker.js +8 -16
  35. package/dist/collection/components/popover/popover.js +15 -29
  36. package/dist/collection/components/popover/test/async/popover.e2e.js +42 -0
  37. package/dist/collection/components/router-outlet/router-outlet.js +1 -0
  38. package/dist/collection/components/textarea/test/bottom-content/textarea.e2e.js +6 -6
  39. package/dist/collection/components/textarea/test/card/textarea.e2e.js +1 -1
  40. package/dist/collection/components/textarea/test/color/textarea.e2e.js +15 -15
  41. package/dist/collection/components/textarea/test/fill/textarea.e2e.js +10 -10
  42. package/dist/collection/components/textarea/test/highlight/textarea.e2e.js +9 -9
  43. package/dist/collection/components/textarea/test/item/textarea.e2e.js +2 -2
  44. package/dist/collection/components/textarea/test/label-placement/textarea.e2e.js +21 -21
  45. package/dist/collection/components/textarea/test/legacy/autogrow/textarea.e2e.js +5 -5
  46. package/dist/collection/components/textarea/test/states/textarea.e2e.js +2 -2
  47. package/dist/collection/components/toast/toast.js +8 -16
  48. package/dist/collection/utils/framework-delegate.js +21 -2
  49. package/dist/collection/utils/lock-controller.js +36 -0
  50. package/dist/docs.json +1 -1
  51. package/dist/esm/{framework-delegate-2b76c681.js → framework-delegate-aa433dea.js} +21 -2
  52. package/dist/esm/index.js +2 -2
  53. package/dist/esm/ion-action-sheet.entry.js +10 -18
  54. package/dist/esm/ion-alert.entry.js +10 -18
  55. package/dist/esm/ion-app_8.entry.js +2 -1
  56. package/dist/esm/ion-datetime_3.entry.js +10 -18
  57. package/dist/esm/ion-loading.entry.js +10 -18
  58. package/dist/esm/ion-menu_3.entry.js +2 -2
  59. package/dist/esm/ion-modal.entry.js +23 -31
  60. package/dist/esm/ion-nav_2.entry.js +2 -8
  61. package/dist/esm/ion-popover.entry.js +17 -31
  62. package/dist/esm/ion-select_3.entry.js +2 -2
  63. package/dist/esm/ion-tab_2.entry.js +1 -1
  64. package/dist/esm/ion-toast.entry.js +10 -18
  65. package/dist/esm/lock-controller-e8c6c051.js +38 -0
  66. package/dist/esm/{overlays-c3387ec0.js → overlays-e1dadfe6.js} +1 -1
  67. package/dist/esm-es5/framework-delegate-aa433dea.js +4 -0
  68. package/dist/esm-es5/index.js +1 -1
  69. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  70. package/dist/esm-es5/ion-alert.entry.js +1 -1
  71. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  72. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  73. package/dist/esm-es5/ion-loading.entry.js +1 -1
  74. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  75. package/dist/esm-es5/ion-modal.entry.js +1 -1
  76. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  77. package/dist/esm-es5/ion-popover.entry.js +1 -1
  78. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  79. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  80. package/dist/esm-es5/ion-toast.entry.js +1 -1
  81. package/dist/esm-es5/lock-controller-e8c6c051.js +4 -0
  82. package/dist/esm-es5/{overlays-c3387ec0.js → overlays-e1dadfe6.js} +1 -1
  83. package/dist/ionic/index.esm.js +1 -1
  84. package/dist/ionic/ionic.esm.js +1 -1
  85. package/dist/ionic/{p-958bde76.entry.js → p-091cd81e.entry.js} +1 -1
  86. package/dist/ionic/{p-c32e09fe.system.entry.js → p-0b68c41d.system.entry.js} +1 -1
  87. package/dist/ionic/p-0cc2bf5a.system.entry.js +4 -0
  88. package/dist/ionic/p-208f640c.entry.js +4 -0
  89. package/dist/ionic/p-2539e967.system.entry.js +4 -0
  90. package/dist/ionic/{p-74bd26b8.system.entry.js → p-28f5715a.system.entry.js} +1 -1
  91. package/dist/ionic/p-38dd9aec.entry.js +4 -0
  92. package/dist/ionic/p-3ff018da.entry.js +4 -0
  93. package/dist/ionic/{p-8074bdd7.system.entry.js → p-45ee211b.system.entry.js} +1 -1
  94. package/dist/ionic/p-5009cb46.entry.js +4 -0
  95. package/dist/ionic/p-53b2a46f.js +4 -0
  96. package/dist/ionic/{p-5ef91692.js → p-582dc7c1.js} +1 -1
  97. package/dist/ionic/{p-c0d1e5a1.entry.js → p-5c17f888.entry.js} +1 -1
  98. package/dist/ionic/{p-8d9475b5.system.js → p-613d4042.system.js} +1 -1
  99. package/dist/ionic/p-647d15d4.system.entry.js +4 -0
  100. package/dist/ionic/p-653f2fc6.entry.js +4 -0
  101. package/dist/ionic/p-721933ff.system.js +1 -1
  102. package/dist/ionic/p-772f6c84.system.js +4 -0
  103. package/dist/ionic/p-87383d00.system.entry.js +4 -0
  104. package/dist/ionic/{p-db46fc66.system.js → p-8843b046.system.js} +1 -1
  105. package/dist/ionic/p-93e47822.entry.js +4 -0
  106. package/dist/ionic/{p-0e6ca480.entry.js → p-98ebc376.entry.js} +1 -1
  107. package/dist/ionic/p-af0bc751.system.entry.js +4 -0
  108. package/dist/ionic/p-b0e9e0b8.system.entry.js +4 -0
  109. package/dist/ionic/p-b287ab05.js +4 -0
  110. package/dist/ionic/{p-81b46714.system.js → p-b32742f3.system.js} +1 -1
  111. package/dist/ionic/p-b3394798.system.entry.js +4 -0
  112. package/dist/ionic/{p-20087c90.entry.js → p-c759a704.entry.js} +1 -1
  113. package/dist/ionic/{p-6b9bf14c.system.entry.js → p-d1d3b740.system.entry.js} +1 -1
  114. package/dist/ionic/{p-8fa43732.system.entry.js → p-d693e765.system.entry.js} +1 -1
  115. package/dist/ionic/{p-5c96dc4e.entry.js → p-f7faa32d.entry.js} +1 -1
  116. package/dist/ionic/p-fabb7294.entry.js +4 -0
  117. package/dist/types/components/action-sheet/action-sheet.d.ts +1 -1
  118. package/dist/types/components/alert/alert.d.ts +1 -1
  119. package/dist/types/components/loading/loading.d.ts +1 -1
  120. package/dist/types/components/modal/modal.d.ts +1 -1
  121. package/dist/types/components/picker/picker.d.ts +1 -1
  122. package/dist/types/components/popover/popover.d.ts +1 -1
  123. package/dist/types/components/toast/toast.d.ts +1 -1
  124. package/dist/types/utils/lock-controller.d.ts +10 -0
  125. package/hydrate/index.js +126 -147
  126. package/package.json +1 -1
  127. package/dist/esm-es5/framework-delegate-2b76c681.js +0 -4
  128. package/dist/ionic/p-06f1f560.system.entry.js +0 -4
  129. package/dist/ionic/p-2936ec7f.system.entry.js +0 -4
  130. package/dist/ionic/p-29b3e70a.entry.js +0 -4
  131. package/dist/ionic/p-2bc49e5d.system.entry.js +0 -4
  132. package/dist/ionic/p-2da3e015.system.entry.js +0 -4
  133. package/dist/ionic/p-423d5a4d.entry.js +0 -4
  134. package/dist/ionic/p-564aaba3.entry.js +0 -4
  135. package/dist/ionic/p-61769039.entry.js +0 -4
  136. package/dist/ionic/p-74723f41.entry.js +0 -4
  137. package/dist/ionic/p-9b3c3564.entry.js +0 -4
  138. package/dist/ionic/p-b34c1ae1.js +0 -4
  139. package/dist/ionic/p-ccea9adc.system.entry.js +0 -4
  140. package/dist/ionic/p-d5db0834.system.entry.js +0 -4
  141. package/dist/ionic/p-d8538837.entry.js +0 -4
  142. package/dist/ionic/p-dd0b6889.system.entry.js +0 -4
@@ -5,7 +5,8 @@ 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 { c as createLockController } from './lock-controller-e8c6c051.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-e1dadfe6.js';
9
10
  import { g as getClassMap } from './theme-17531cdf.js';
10
11
  import { c as config, b as getIonMode } from './ionic-global-1ef19007.js';
11
12
  import { c as createAnimation } from './animation-a1d9e088.js';
@@ -14,7 +15,7 @@ import './capacitor-b4979570.js';
14
15
  import './index-7a14ecec.js';
15
16
  import './index-ff313b19.js';
16
17
  import './gesture-controller-0fa396c4.js';
17
- import './framework-delegate-2b76c681.js';
18
+ import './framework-delegate-aa433dea.js';
18
19
  import './hardware-back-button-39299f84.js';
19
20
  import './index-595d62c9.js';
20
21
 
@@ -119,6 +120,7 @@ const Alert = class {
119
120
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
120
121
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
121
122
  this.delegateController = createDelegateController(this);
123
+ this.lockController = createLockController();
122
124
  this.triggerController = createTriggerController();
123
125
  this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
124
126
  this.processedInputs = [];
@@ -285,21 +287,10 @@ const Alert = class {
285
287
  * Present the alert overlay after it has been created.
286
288
  */
287
289
  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
- }
290
+ const unlock = await this.lockController.lock();
299
291
  await this.delegateController.attachViewToDom();
300
- this.currentTransition = present(this, 'alertEnter', iosEnterAnimation, mdEnterAnimation);
301
- await this.currentTransition;
302
- this.currentTransition = undefined;
292
+ await present(this, 'alertEnter', iosEnterAnimation, mdEnterAnimation);
293
+ unlock();
303
294
  }
304
295
  /**
305
296
  * Dismiss the alert overlay after it has been presented.
@@ -311,11 +302,12 @@ const Alert = class {
311
302
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
312
303
  */
313
304
  async dismiss(data, role) {
314
- this.currentTransition = dismiss(this, data, role, 'alertLeave', iosLeaveAnimation, mdLeaveAnimation);
315
- const dismissed = await this.currentTransition;
305
+ const unlock = await this.lockController.lock();
306
+ const dismissed = await dismiss(this, data, role, 'alertLeave', iosLeaveAnimation, mdLeaveAnimation);
316
307
  if (dismissed) {
317
308
  this.delegateController.removeViewFromDom();
318
309
  }
310
+ unlock();
319
311
  return dismissed;
320
312
  }
321
313
  /**
@@ -9,7 +9,7 @@ import { c as createColorClasses, h as hostContext } from './theme-17531cdf.js';
9
9
  import { a as findIonContent, p as printIonContentErrorMsg, g as getScrollElement } from './index-746a238e.js';
10
10
  import { c as createKeyboardController } from './keyboard-controller-0c2dce71.js';
11
11
  import { g as getTimeGivenProgression } from './cubic-bezier-66542bc5.js';
12
- import { a as attachComponent, d as detachComponent } from './framework-delegate-2b76c681.js';
12
+ import { a as attachComponent, d as detachComponent } from './framework-delegate-aa433dea.js';
13
13
  import { t as transition } from './index-6391de89.js';
14
14
  import './index-595d62c9.js';
15
15
  import './index-7a14ecec.js';
@@ -1107,6 +1107,7 @@ const RouterOutlet = class {
1107
1107
  this.ionNavDidChange.emit();
1108
1108
  return true;
1109
1109
  }
1110
+ // TODO: FW-5048 - Remove this code in favor of using lock controller from utils
1110
1111
  async lock() {
1111
1112
  const p = this.waitPromise;
1112
1113
  let resolve;
@@ -10,10 +10,11 @@ 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 { c as createLockController } from './lock-controller-e8c6c051.js';
14
+ 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-e1dadfe6.js';
14
15
  import { c as createAnimation } from './animation-a1d9e088.js';
15
16
  import { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic-6447af60.js';
16
- import './framework-delegate-2b76c681.js';
17
+ import './framework-delegate-aa433dea.js';
17
18
  import './hardware-back-button-39299f84.js';
18
19
  import './index-7a14ecec.js';
19
20
  import './capacitor-b4979570.js';
@@ -1726,6 +1727,7 @@ const Picker = class {
1726
1727
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
1727
1728
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
1728
1729
  this.delegateController = createDelegateController(this);
1730
+ this.lockController = createLockController();
1729
1731
  this.triggerController = createTriggerController();
1730
1732
  this.onBackdropTap = () => {
1731
1733
  this.dismiss(undefined, BACKDROP);
@@ -1792,24 +1794,13 @@ const Picker = class {
1792
1794
  * Present the picker overlay after it has been created.
1793
1795
  */
1794
1796
  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
- }
1797
+ const unlock = await this.lockController.lock();
1806
1798
  await this.delegateController.attachViewToDom();
1807
- this.currentTransition = present(this, 'pickerEnter', iosEnterAnimation, iosEnterAnimation, undefined);
1808
- await this.currentTransition;
1809
- this.currentTransition = undefined;
1799
+ await present(this, 'pickerEnter', iosEnterAnimation, iosEnterAnimation, undefined);
1810
1800
  if (this.duration > 0) {
1811
1801
  this.durationTimeout = setTimeout(() => this.dismiss(), this.duration);
1812
1802
  }
1803
+ unlock();
1813
1804
  }
1814
1805
  /**
1815
1806
  * Dismiss the picker overlay after it has been presented.
@@ -1821,14 +1812,15 @@ const Picker = class {
1821
1812
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
1822
1813
  */
1823
1814
  async dismiss(data, role) {
1815
+ const unlock = await this.lockController.lock();
1824
1816
  if (this.durationTimeout) {
1825
1817
  clearTimeout(this.durationTimeout);
1826
1818
  }
1827
- this.currentTransition = dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation, iosLeaveAnimation);
1828
- const dismissed = await this.currentTransition;
1819
+ const dismissed = await dismiss(this, data, role, 'pickerLeave', iosLeaveAnimation, iosLeaveAnimation);
1829
1820
  if (dismissed) {
1830
1821
  this.delegateController.removeViewFromDom();
1831
1822
  }
1823
+ unlock();
1832
1824
  return dismissed;
1833
1825
  }
1834
1826
  /**
@@ -4,11 +4,12 @@
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 { c as createLockController } from './lock-controller-e8c6c051.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-e1dadfe6.js';
8
9
  import { g as getClassMap } from './theme-17531cdf.js';
9
10
  import { c as config, b as getIonMode } from './ionic-global-1ef19007.js';
10
11
  import { c as createAnimation } from './animation-a1d9e088.js';
11
- import './framework-delegate-2b76c681.js';
12
+ import './framework-delegate-aa433dea.js';
12
13
  import './hardware-back-button-39299f84.js';
13
14
  import './index-595d62c9.js';
14
15
  import './index-7a14ecec.js';
@@ -117,6 +118,7 @@ const Loading = class {
117
118
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
118
119
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
119
120
  this.delegateController = createDelegateController(this);
121
+ this.lockController = createLockController();
120
122
  this.triggerController = createTriggerController();
121
123
  this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
122
124
  this.presented = false;
@@ -182,24 +184,13 @@ const Loading = class {
182
184
  * Present the loading overlay after it has been created.
183
185
  */
184
186
  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
- }
187
+ const unlock = await this.lockController.lock();
196
188
  await this.delegateController.attachViewToDom();
197
- this.currentTransition = present(this, 'loadingEnter', iosEnterAnimation, mdEnterAnimation);
198
- await this.currentTransition;
189
+ await present(this, 'loadingEnter', iosEnterAnimation, mdEnterAnimation);
199
190
  if (this.duration > 0) {
200
191
  this.durationTimeout = setTimeout(() => this.dismiss(), this.duration + 10);
201
192
  }
202
- this.currentTransition = undefined;
193
+ unlock();
203
194
  }
204
195
  /**
205
196
  * Dismiss the loading overlay after it has been presented.
@@ -211,14 +202,15 @@ const Loading = class {
211
202
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
212
203
  */
213
204
  async dismiss(data, role) {
205
+ const unlock = await this.lockController.lock();
214
206
  if (this.durationTimeout) {
215
207
  clearTimeout(this.durationTimeout);
216
208
  }
217
- this.currentTransition = dismiss(this, data, role, 'loadingLeave', iosLeaveAnimation, mdLeaveAnimation);
218
- const dismissed = await this.currentTransition;
209
+ const dismissed = await dismiss(this, data, role, 'loadingLeave', iosLeaveAnimation, mdLeaveAnimation);
219
210
  if (dismissed) {
220
211
  this.delegateController.removeViewFromDom();
221
212
  }
213
+ unlock();
222
214
  return dismissed;
223
215
  }
224
216
  /**
@@ -7,13 +7,13 @@ 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 { q as getOverlay } from './overlays-e1dadfe6.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';
14
14
  import './hardware-back-button-39299f84.js';
15
15
  import './animation-a1d9e088.js';
16
- import './framework-delegate-2b76c681.js';
16
+ import './framework-delegate-aa433dea.js';
17
17
  import './index-595d62c9.js';
18
18
 
19
19
  const menuIosCss = ":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{-webkit-transform:translateX(-9999px);transform:translateX(-9999px);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);contain:strict}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;top:0;bottom:0}@supports (inset-inline-start: 0){:host(.menu-side-start) .menu-inner{inset-inline-start:0;inset-inline-end:auto}}@supports not (inset-inline-start: 0){:host(.menu-side-start) .menu-inner{left:0;right:auto}:host-context([dir=rtl]):host(.menu-side-start) .menu-inner,:host-context([dir=rtl]).menu-side-start .menu-inner{left:unset;right:unset;left:auto;right:0}@supports selector(:dir(rtl)){:host(.menu-side-start) .menu-inner:dir(rtl){left:unset;right:unset;left:auto;right:0}}}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;top:0;bottom:0}@supports (inset-inline-start: 0){:host(.menu-side-end) .menu-inner{inset-inline-start:auto;inset-inline-end:0}}@supports not (inset-inline-start: 0){:host(.menu-side-end) .menu-inner{left:auto;right:0}:host-context([dir=rtl]):host(.menu-side-end) .menu-inner,:host-context([dir=rtl]).menu-side-end .menu-inner{left:unset;right:unset;left:0;right:auto}@supports selector(:dir(rtl)){:host(.menu-side-end) .menu-inner:dir(rtl){left:unset;right:unset;left:0;right:auto}}}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){width:var(--width);min-width:var(--min-width);max-width:var(--max-width)}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none !important;transform:none !important;-webkit-box-shadow:none !important;box-shadow:none !important}:host(.menu-pane-visible) ion-backdrop{display:hidden !important;}:host(.menu-type-push){z-index:1000}:host(.menu-type-push) .show-backdrop{display:block}";
@@ -3,11 +3,12 @@
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, w as writeTask, h, H as Host, f as getElement } from './index-847f2fde.js';
5
5
  import { f as findClosestIonContent, i as isIonContent, d as disableContentScrollY, r as resetContentScrollY, a as findIonContent, p as printIonContentErrorMsg } from './index-746a238e.js';
6
- import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-2b76c681.js';
6
+ import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-aa433dea.js';
7
7
  import { g as getElementRoot, l as clamp, r as raf, k as inheritAttributes, m as hasLazyBuild } from './helpers-3379ba19.js';
8
+ import { c as createLockController } from './lock-controller-e8c6c051.js';
8
9
  import { p as printIonWarning } from './index-595d62c9.js';
9
10
  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';
11
+ 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-e1dadfe6.js';
11
12
  import { g as getClassMap } from './theme-17531cdf.js';
12
13
  import { e as deepReady, w as waitForMount } from './index-6391de89.js';
13
14
  import { b as getIonMode, c as config } from './ionic-global-1ef19007.js';
@@ -1113,6 +1114,7 @@ const Modal = class {
1113
1114
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
1114
1115
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
1115
1116
  this.ionMount = createEvent(this, "ionMount", 7);
1117
+ this.lockController = createLockController();
1116
1118
  this.triggerController = createTriggerController();
1117
1119
  this.coreDelegate = CoreDelegate();
1118
1120
  this.isSheetModal = false;
@@ -1277,29 +1279,25 @@ const Modal = class {
1277
1279
  * Present the modal overlay after it has been created.
1278
1280
  */
1279
1281
  async present() {
1282
+ const unlock = await this.lockController.lock();
1280
1283
  if (this.presented) {
1284
+ unlock();
1281
1285
  return;
1282
1286
  }
1283
1287
  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
1288
  /**
1296
1289
  * If the modal is presented multiple times (inline modals), we
1297
1290
  * need to reset the current breakpoint to the initial breakpoint.
1298
1291
  */
1299
1292
  this.currentBreakpoint = this.initialBreakpoint;
1300
1293
  const { inline, delegate } = this.getDelegate(true);
1301
- this.usersElement = await attachComponent(delegate, el, this.component, ['ion-page'], this.componentProps, inline);
1294
+ /**
1295
+ * Emit ionMount so JS Frameworks have an opportunity
1296
+ * to add the child component to the DOM. The child
1297
+ * component will be assigned to this.usersElement below.
1298
+ */
1302
1299
  this.ionMount.emit();
1300
+ this.usersElement = await attachComponent(delegate, el, this.component, ['ion-page'], this.componentProps, inline);
1303
1301
  /**
1304
1302
  * When using the lazy loaded build of Stencil, we need to wait
1305
1303
  * for every Stencil component instance to be ready before presenting
@@ -1323,7 +1321,7 @@ const Modal = class {
1323
1321
  await waitForMount();
1324
1322
  }
1325
1323
  writeTask(() => this.el.classList.add('show-modal'));
1326
- this.currentTransition = present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
1324
+ await present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
1327
1325
  presentingEl: presentingElement,
1328
1326
  currentBreakpoint: this.initialBreakpoint,
1329
1327
  backdropBreakpoint: this.backdropBreakpoint,
@@ -1370,14 +1368,13 @@ const Modal = class {
1370
1368
  this.statusBarStyle = await StatusBar.getStyle();
1371
1369
  setCardStatusBarDark();
1372
1370
  }
1373
- await this.currentTransition;
1374
1371
  if (this.isSheetModal) {
1375
1372
  this.initSheetGesture();
1376
1373
  }
1377
1374
  else if (hasCardModal) {
1378
1375
  this.initSwipeToClose();
1379
1376
  }
1380
- this.currentTransition = undefined;
1377
+ unlock();
1381
1378
  }
1382
1379
  initSwipeToClose() {
1383
1380
  var _a;
@@ -1467,12 +1464,19 @@ const Modal = class {
1467
1464
  if (this.gestureAnimationDismissing && role !== GESTURE) {
1468
1465
  return false;
1469
1466
  }
1467
+ /**
1468
+ * Because the canDismiss check below is async,
1469
+ * we need to claim a lock before the check happens,
1470
+ * in case the dismiss transition does run.
1471
+ */
1472
+ const unlock = await this.lockController.lock();
1470
1473
  /**
1471
1474
  * If a canDismiss handler is responsible
1472
1475
  * for calling the dismiss method, we should
1473
1476
  * not run the canDismiss check again.
1474
1477
  */
1475
1478
  if (role !== 'handler' && !(await this.checkCanDismiss(data, role))) {
1479
+ unlock();
1476
1480
  return false;
1477
1481
  }
1478
1482
  const { presentingElement } = this;
@@ -1490,24 +1494,12 @@ const Modal = class {
1490
1494
  window.removeEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
1491
1495
  this.keyboardOpenCallback = undefined;
1492
1496
  }
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
1497
  const enteringAnimation = activeAnimations.get(this) || [];
1505
- this.currentTransition = dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
1498
+ const dismissed = await dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
1506
1499
  presentingEl: presentingElement,
1507
1500
  currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
1508
1501
  backdropBreakpoint: this.backdropBreakpoint,
1509
1502
  });
1510
- const dismissed = await this.currentTransition;
1511
1503
  if (dismissed) {
1512
1504
  const { delegate } = this.getDelegate();
1513
1505
  await detachComponent(delegate, this.usersElement);
@@ -1521,8 +1513,8 @@ const Modal = class {
1521
1513
  enteringAnimation.forEach((ani) => ani.destroy());
1522
1514
  }
1523
1515
  this.currentBreakpoint = undefined;
1524
- this.currentTransition = undefined;
1525
1516
  this.animation = undefined;
1517
+ unlock();
1526
1518
  return dismissed;
1527
1519
  }
1528
1520
  /**
@@ -6,7 +6,7 @@ import { g as getTimeGivenProgression } from './cubic-bezier-66542bc5.js';
6
6
  import { o as assert, s as shallowEqualStringMap } from './helpers-3379ba19.js';
7
7
  import { l as lifecycle, t as transition, s as setPageHidden, d as LIFECYCLE_WILL_UNLOAD, b as LIFECYCLE_WILL_LEAVE, c as LIFECYCLE_DID_LEAVE } from './index-6391de89.js';
8
8
  import { b as getIonMode, c as config } from './ionic-global-1ef19007.js';
9
- import { a as attachComponent } from './framework-delegate-2b76c681.js';
9
+ import { a as attachComponent } from './framework-delegate-aa433dea.js';
10
10
 
11
11
  const VIEW_STATE_NEW = 1;
12
12
  const VIEW_STATE_ATTACHED = 2;
@@ -927,13 +927,7 @@ const NavLink = class {
927
927
  constructor(hostRef) {
928
928
  registerInstance(this, hostRef);
929
929
  this.onClick = () => {
930
- const { el } = this;
931
- const button = el.querySelector('button,ion-button,a');
932
- if (button === null || button === void 0 ? void 0 : button.hasAttribute('disabled')) {
933
- // Do not navigate if the button is disabled
934
- return;
935
- }
936
- return navLink(el, this.routerDirection, this.component, this.componentProps, this.routerAnimation);
930
+ return navLink(this.el, this.routerDirection, this.component, this.componentProps, this.routerAnimation);
937
931
  };
938
932
  this.component = undefined;
939
933
  this.componentProps = undefined;
@@ -2,10 +2,11 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, H as Host, f as getElement } from './index-847f2fde.js';
5
- import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-2b76c681.js';
5
+ import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-aa433dea.js';
6
6
  import { r as raf, g as getElementRoot, a as addEventListener, m as hasLazyBuild } from './helpers-3379ba19.js';
7
+ import { c as createLockController } from './lock-controller-e8c6c051.js';
7
8
  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';
9
+ import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, o as focusFirstDescendant, g as dismiss, h as eventMethod } from './overlays-e1dadfe6.js';
9
10
  import { b as getIonMode, a as isPlatform } from './ionic-global-1ef19007.js';
10
11
  import { g as getClassMap } from './theme-17531cdf.js';
11
12
  import { e as deepReady, w as waitForMount } from './index-6391de89.js';
@@ -983,6 +984,7 @@ const Popover = class {
983
984
  this.ionMount = createEvent(this, "ionMount", 7);
984
985
  this.parentPopover = null;
985
986
  this.coreDelegate = CoreDelegate();
987
+ this.lockController = createLockController();
986
988
  this.inline = false;
987
989
  this.focusDescendantOnPresent = false;
988
990
  this.onBackdropTap = () => {
@@ -1156,28 +1158,24 @@ const Popover = class {
1156
1158
  * was dispatched.
1157
1159
  */
1158
1160
  async present(event) {
1161
+ const unlock = await this.lockController.lock();
1159
1162
  if (this.presented) {
1163
+ unlock();
1160
1164
  return;
1161
1165
  }
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
- }
1173
1166
  const { el } = this;
1174
1167
  const { inline, delegate } = this.getDelegate(true);
1168
+ /**
1169
+ * Emit ionMount so JS Frameworks have an opportunity
1170
+ * to add the child component to the DOM. The child
1171
+ * component will be assigned to this.usersElement below.
1172
+ */
1173
+ this.ionMount.emit();
1175
1174
  this.usersElement = await attachComponent(delegate, el, this.component, ['popover-viewport'], this.componentProps, inline);
1176
1175
  if (!this.keyboardEvents) {
1177
1176
  this.configureKeyboardInteraction();
1178
1177
  }
1179
1178
  this.configureDismissInteraction();
1180
- this.ionMount.emit();
1181
1179
  /**
1182
1180
  * When using the lazy loaded build of Stencil, we need to wait
1183
1181
  * for every Stencil component instance to be ready before presenting
@@ -1200,7 +1198,7 @@ const Popover = class {
1200
1198
  else if (!this.keepContentsMounted) {
1201
1199
  await waitForMount();
1202
1200
  }
1203
- this.currentTransition = present(this, 'popoverEnter', iosEnterAnimation, mdEnterAnimation, {
1201
+ await present(this, 'popoverEnter', iosEnterAnimation, mdEnterAnimation, {
1204
1202
  event: event || this.event,
1205
1203
  size: this.size,
1206
1204
  trigger: this.triggerEl,
@@ -1208,8 +1206,6 @@ const Popover = class {
1208
1206
  side: this.side,
1209
1207
  align: this.alignment,
1210
1208
  });
1211
- await this.currentTransition;
1212
- this.currentTransition = undefined;
1213
1209
  /**
1214
1210
  * If popover is nested and was
1215
1211
  * presented using the "Right" arrow key,
@@ -1219,6 +1215,7 @@ const Popover = class {
1219
1215
  if (this.focusDescendantOnPresent) {
1220
1216
  focusFirstDescendant(this.el, this.el);
1221
1217
  }
1218
+ unlock();
1222
1219
  }
1223
1220
  /**
1224
1221
  * Dismiss the popover overlay after it has been presented.
@@ -1229,23 +1226,12 @@ const Popover = class {
1229
1226
  * a parent popover if this popover is nested. Defaults to `true`.
1230
1227
  */
1231
1228
  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
- }
1229
+ const unlock = await this.lockController.lock();
1243
1230
  const { destroyKeyboardInteraction, destroyDismissInteraction } = this;
1244
1231
  if (dismissParentPopover && this.parentPopover) {
1245
1232
  this.parentPopover.dismiss(data, role, dismissParentPopover);
1246
1233
  }
1247
- this.currentTransition = dismiss(this, data, role, 'popoverLeave', iosLeaveAnimation, mdLeaveAnimation, this.event);
1248
- const shouldDismiss = await this.currentTransition;
1234
+ const shouldDismiss = await dismiss(this, data, role, 'popoverLeave', iosLeaveAnimation, mdLeaveAnimation, this.event);
1249
1235
  if (shouldDismiss) {
1250
1236
  if (destroyKeyboardInteraction) {
1251
1237
  destroyKeyboardInteraction();
@@ -1263,7 +1249,7 @@ const Popover = class {
1263
1249
  const { delegate } = this.getDelegate();
1264
1250
  await detachComponent(delegate, this.usersElement);
1265
1251
  }
1266
- this.currentTransition = undefined;
1252
+ unlock();
1267
1253
  return shouldDismiss;
1268
1254
  }
1269
1255
  /**
@@ -6,14 +6,14 @@ 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-e1dadfe6.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';
13
13
  import { w as chevronExpand, q as caretDownSharp } from './index-ecfc2c9f.js';
14
14
  import { b as getIonMode } from './ionic-global-1ef19007.js';
15
15
  import './index-7a14ecec.js';
16
- import './framework-delegate-2b76c681.js';
16
+ import './framework-delegate-aa433dea.js';
17
17
  import './hardware-back-button-39299f84.js';
18
18
 
19
19
  const selectIosCss = ":host{--padding-top:0px;--padding-end:0px;--padding-bottom:0px;--padding-start:0px;--placeholder-color:currentColor;--placeholder-opacity:0.6;--background:transparent;--border-style:solid;--highlight-color-focused:var(--ion-color-primary, #3880ff);--highlight-color-valid:var(--ion-color-success, #2dd36f);--highlight-color-invalid:var(--ion-color-danger, #eb445a);--highlight-color:var(--highlight-color-focused);display:block;position:relative;font-family:var(--ion-font-family, inherit);white-space:nowrap;cursor:pointer;z-index:2}:host(:not(.legacy-select)){width:100%}:host(.ion-color){--highlight-color-focused:var(--ion-color-base)}:host(.legacy-select){-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;overflow:hidden}:host(.in-item.legacy-select){position:static;max-width:45%}:host(.select-disabled){pointer-events:none}:host(.ion-focused) button{border:2px solid #5e9ed6}:host([slot=start]:not(.legacy-select)),:host([slot=end]:not(.legacy-select)){width:auto}.select-placeholder{color:var(--placeholder-color);opacity:var(--placeholder-opacity)}:host(.legacy-select) label{top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;opacity:0}@supports (inset-inline-start: 0){:host(.legacy-select) label{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host(.legacy-select) label{left:0}:host-context([dir=rtl]):host(.legacy-select) label,:host-context([dir=rtl]).legacy-select label{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host(.legacy-select) label:dir(rtl){left:unset;right:unset;right:0}}}:host(.legacy-select) label::-moz-focus-inner{border:0}button{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.select-icon{-webkit-margin-start:4px;margin-inline-start:4px;-webkit-margin-end:0;margin-inline-end:0;margin-top:0;margin-bottom:0;position:relative}:host(.in-item-color) .select-icon{color:inherit}:host(.select-label-placement-stacked) .select-icon,:host(.select-label-placement-floating) .select-icon{position:absolute;height:100%}:host(.select-ltr.select-label-placement-stacked) .select-icon,:host(.select-ltr.select-label-placement-floating) .select-icon{right:var(--padding-end, 0)}:host(.select-rtl.select-label-placement-stacked) .select-icon,:host(.select-rtl.select-label-placement-floating) .select-icon{left:var(--padding-start, 0)}.select-text{-ms-flex:1;flex:1;min-width:16px;font-size:inherit;text-overflow:ellipsis;white-space:inherit;overflow:hidden}.select-wrapper{-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);border-radius:var(--border-radius);display:-ms-flexbox;display:flex;position:relative;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;height:inherit;min-height:inherit;-webkit-transition:background-color 15ms linear;transition:background-color 15ms linear;background:var(--background);line-height:normal;cursor:inherit;-webkit-box-sizing:border-box;box-sizing:border-box}.select-wrapper .select-placeholder{-webkit-transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}:host(.ion-touched.ion-invalid){--highlight-color:var(--highlight-color-invalid)}:host(.ion-valid){--highlight-color:var(--highlight-color-valid)}.label-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;max-width:200px;-webkit-transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);pointer-events:none}.label-text,::slotted([slot=label]){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.label-text-wrapper-hidden,.select-outline-notch-hidden{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);overflow:hidden}:host(.select-justify-space-between) .select-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.select-justify-start) .select-wrapper{-ms-flex-pack:start;justify-content:start}:host(.select-justify-end) .select-wrapper{-ms-flex-pack:end;justify-content:end}:host(.select-label-placement-start) .select-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.select-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:0;margin-bottom:0}:host(.select-label-placement-end) .select-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.select-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0;margin-top:0;margin-bottom:0}:host(.select-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px;margin-top:0;margin-bottom:0}:host(.select-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.select-label-placement-stacked) .select-wrapper,:host(.select-label-placement-floating) .select-wrapper{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:start}:host(.select-label-placement-stacked) .label-text-wrapper,:host(.select-label-placement-floating) .label-text-wrapper{max-width:100%}:host(.select-ltr.select-label-placement-stacked) .label-text-wrapper,:host(.select-ltr.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host(.select-rtl.select-label-placement-stacked) .label-text-wrapper,:host(.select-rtl.select-label-placement-floating) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}:host(.select-label-placement-stacked) .native-wrapper,:host(.select-label-placement-floating) .native-wrapper{margin-left:0;margin-right:0;margin-top:1px;margin-bottom:0;-ms-flex-positive:1;flex-grow:1;width:100%}:host(.select-label-placement-floating) .label-text-wrapper{-webkit-transform:translateY(100%) scale(1);transform:translateY(100%) scale(1)}:host(.select-label-placement-floating) .native-wrapper .select-placeholder{opacity:0}:host(.select-expanded.select-label-placement-floating) .native-wrapper .select-placeholder,:host(.ion-focused.select-label-placement-floating) .native-wrapper .select-placeholder,:host(.has-value.select-label-placement-floating) .native-wrapper .select-placeholder{opacity:1}:host(.select-label-placement-stacked) .label-text-wrapper,:host(.select-expanded.select-label-placement-floating) .label-text-wrapper,:host(.ion-focused.select-label-placement-floating) .label-text-wrapper,:host(.has-value.select-label-placement-floating) .label-text-wrapper{-webkit-transform:translateY(50%) scale(0.75);transform:translateY(50%) scale(0.75);max-width:calc(100% / 0.75)}:host(.legacy-select){--padding-top:10px;--padding-end:8px;--padding-bottom:10px;--padding-start:16px}:host(:not(.legacy-select)){min-height:44px}:host(.select-label-placement-floating),:host(.select-label-placement-stacked){min-height:56px}.select-icon{width:18px;height:18px;color:var(--ion-color-step-650, #595959)}:host(.select-label-placement-stacked) .native-wrapper,:host(.select-label-placement-floating) .native-wrapper{width:calc(100% - 18px - 4px)}:host(.select-disabled){opacity:0.3}";
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { r as registerInstance, h, H as Host, f as getElement, d as createEvent } from './index-847f2fde.js';
5
- import { a as attachComponent } from './framework-delegate-2b76c681.js';
5
+ import { a as attachComponent } from './framework-delegate-aa433dea.js';
6
6
  import './helpers-3379ba19.js';
7
7
 
8
8
  const tabCss = ":host(.tab-hidden){display:none !important}";
@@ -4,12 +4,13 @@
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 { g as getElementRoot, r as raf } from './helpers-3379ba19.js';
7
+ import { c as createLockController } from './lock-controller-e8c6c051.js';
7
8
  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';
9
+ 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-e1dadfe6.js';
9
10
  import { g as getClassMap, c as createColorClasses } from './theme-17531cdf.js';
10
11
  import { c as config, b as getIonMode } from './ionic-global-1ef19007.js';
11
12
  import { c as createAnimation } from './animation-a1d9e088.js';
12
- import './framework-delegate-2b76c681.js';
13
+ import './framework-delegate-aa433dea.js';
13
14
  import './hardware-back-button-39299f84.js';
14
15
  import './index-7a14ecec.js';
15
16
 
@@ -122,6 +123,7 @@ const Toast = class {
122
123
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
123
124
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
124
125
  this.delegateController = createDelegateController(this);
126
+ this.lockController = createLockController();
125
127
  this.triggerController = createTriggerController();
126
128
  this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
127
129
  this.presented = false;
@@ -191,30 +193,19 @@ const Toast = class {
191
193
  * Present the toast overlay after it has been created.
192
194
  */
193
195
  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
- }
196
+ const unlock = await this.lockController.lock();
205
197
  await this.delegateController.attachViewToDom();
206
- this.currentTransition = present(this, 'toastEnter', iosEnterAnimation, mdEnterAnimation, this.position);
207
- await this.currentTransition;
198
+ await present(this, 'toastEnter', iosEnterAnimation, mdEnterAnimation, this.position);
208
199
  /**
209
200
  * Content is revealed to screen readers after
210
201
  * the transition to avoid jank since this
211
202
  * state updates will cause a re-render.
212
203
  */
213
204
  this.revealContentToScreenReader = true;
214
- this.currentTransition = undefined;
215
205
  if (this.duration > 0) {
216
206
  this.durationTimeout = setTimeout(() => this.dismiss(undefined, 'timeout'), this.duration);
217
207
  }
208
+ unlock();
218
209
  }
219
210
  /**
220
211
  * Dismiss the toast overlay after it has been presented.
@@ -226,15 +217,16 @@ const Toast = class {
226
217
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
227
218
  */
228
219
  async dismiss(data, role) {
220
+ const unlock = await this.lockController.lock();
229
221
  if (this.durationTimeout) {
230
222
  clearTimeout(this.durationTimeout);
231
223
  }
232
- this.currentTransition = dismiss(this, data, role, 'toastLeave', iosLeaveAnimation, mdLeaveAnimation, this.position);
233
- const dismissed = await this.currentTransition;
224
+ const dismissed = await dismiss(this, data, role, 'toastLeave', iosLeaveAnimation, mdLeaveAnimation, this.position);
234
225
  if (dismissed) {
235
226
  this.delegateController.removeViewFromDom();
236
227
  this.revealContentToScreenReader = false;
237
228
  }
229
+ unlock();
238
230
  return dismissed;
239
231
  }
240
232
  /**