@ionic/core 8.8.4-dev.11776710869.1a81ced2 → 8.8.4-dev.11776868665.169e5ee1

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/index.js +1 -1
  2. package/components/ion-action-sheet.js +1 -1
  3. package/components/ion-alert.js +1 -1
  4. package/components/ion-datetime.js +1 -1
  5. package/components/ion-loading.js +1 -1
  6. package/components/ion-menu.js +1 -1
  7. package/components/ion-modal.js +1 -1
  8. package/components/ion-picker-legacy.js +1 -1
  9. package/components/ion-popover.js +1 -1
  10. package/components/ion-select-modal.js +1 -1
  11. package/components/ion-select-popover.js +1 -1
  12. package/components/ion-select.js +1 -1
  13. package/components/ion-tab-bar.js +1 -1
  14. package/components/ion-toast.js +1 -1
  15. package/components/{p-9o5mMwql.js → p-BAJR2rtd.js} +1 -1
  16. package/components/p-CtiqM786.js +4 -0
  17. package/components/p-D1bKIW7n.js +4 -0
  18. package/components/{p-Ch9P0ikq.js → p-DWhesBL8.js} +1 -1
  19. package/components/{p-C7nyAr3p.js → p-DbmwH3zj.js} +1 -1
  20. package/components/{p-B6czg-mf.js → p-DlHXJAF8.js} +1 -1
  21. package/components/{p-BGHaEUgp.js → p-qx-oKGQ-.js} +1 -1
  22. package/css/core.css +1 -1
  23. package/css/core.css.map +1 -1
  24. package/css/ionic/bundle.ionic.css +1 -1
  25. package/css/ionic/bundle.ionic.css.map +1 -1
  26. package/css/ionic/core.ionic.css +1 -1
  27. package/css/ionic/core.ionic.css.map +1 -1
  28. package/css/ionic/global.bundle.ionic.css.map +1 -1
  29. package/css/ionic/link.ionic.css.map +1 -1
  30. package/css/ionic/typography.ionic.css.map +1 -1
  31. package/css/ionic.bundle.css +1 -1
  32. package/css/ionic.bundle.css.map +1 -1
  33. package/dist/cjs/index.cjs.js +1 -1
  34. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  35. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  36. package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
  37. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  38. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  39. package/dist/cjs/ion-modal.cjs.entry.js +177 -80
  40. package/dist/cjs/ion-popover.cjs.entry.js +4 -4
  41. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  42. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  43. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +74 -4
  44. package/dist/cjs/ion-toast.cjs.entry.js +4 -4
  45. package/dist/cjs/ionic.cjs.js +1 -1
  46. package/dist/cjs/loader.cjs.js +1 -1
  47. package/dist/cjs/{overlays-Dhoy6v_5.js → overlays-Hci_7vw_.js} +8 -4
  48. package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
  49. package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
  50. package/dist/collection/components/modal/gestures/sheet.js +72 -10
  51. package/dist/collection/components/modal/modal.ionic.css +1 -1
  52. package/dist/collection/components/modal/modal.js +6 -5
  53. package/dist/collection/components/popover/popover.js +3 -3
  54. package/dist/collection/components/tab-bar/tab-bar.ionic.css +17 -0
  55. package/dist/collection/components/tab-bar/tab-bar.js +96 -5
  56. package/dist/collection/components/toast/toast.js +3 -3
  57. package/dist/collection/utils/overlays.js +9 -5
  58. package/dist/docs.json +30 -1
  59. package/dist/esm/index.js +1 -1
  60. package/dist/esm/ion-action-sheet.entry.js +1 -1
  61. package/dist/esm/ion-alert.entry.js +1 -1
  62. package/dist/esm/ion-datetime_3.entry.js +1 -1
  63. package/dist/esm/ion-loading.entry.js +1 -1
  64. package/dist/esm/ion-menu_3.entry.js +1 -1
  65. package/dist/esm/ion-modal.entry.js +178 -81
  66. package/dist/esm/ion-popover.entry.js +4 -4
  67. package/dist/esm/ion-select-modal.entry.js +1 -1
  68. package/dist/esm/ion-select_3.entry.js +1 -1
  69. package/dist/esm/ion-tab-bar_2.entry.js +75 -5
  70. package/dist/esm/ion-toast.entry.js +4 -4
  71. package/dist/esm/ionic.js +1 -1
  72. package/dist/esm/loader.js +1 -1
  73. package/dist/esm/{overlays-CvFHfO3y.js → overlays-rwDDzEs4.js} +9 -5
  74. package/dist/html.html-data.json +4 -0
  75. package/dist/ionic/index.esm.js +1 -1
  76. package/dist/ionic/ionic.esm.js +1 -1
  77. package/dist/ionic/{p-9ca814ab.entry.js → p-092e92b0.entry.js} +1 -1
  78. package/dist/ionic/p-09338ca0.entry.js +4 -0
  79. package/dist/ionic/p-228b6a9c.entry.js +4 -0
  80. package/dist/ionic/p-49c92227.entry.js +4 -0
  81. package/dist/ionic/{p-6be2b2d3.entry.js → p-4ce731be.entry.js} +1 -1
  82. package/dist/ionic/p-575d972f.entry.js +4 -0
  83. package/dist/ionic/{p-b27ae20f.entry.js → p-5b7eaf60.entry.js} +1 -1
  84. package/dist/ionic/{p-06de164d.entry.js → p-79ae0425.entry.js} +1 -1
  85. package/dist/ionic/{p-6bffc700.entry.js → p-7fd3311f.entry.js} +1 -1
  86. package/dist/ionic/p-C4uUM9DM.js +4 -0
  87. package/dist/ionic/{p-15ea9223.entry.js → p-b8b20b7e.entry.js} +1 -1
  88. package/dist/ionic/p-e45be51f.entry.js +4 -0
  89. package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
  90. package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
  91. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  92. package/dist/types/components/tab-bar/tab-bar.d.ts +15 -0
  93. package/dist/types/components.d.ts +11 -0
  94. package/dist/types/utils/overlays.d.ts +1 -1
  95. package/hydrate/index.js +266 -94
  96. package/hydrate/index.mjs +266 -94
  97. package/package.json +2 -2
  98. package/components/p-GytrfCp8.js +0 -4
  99. package/components/p-ZeIAjDcZ.js +0 -4
  100. package/dist/ionic/p-3884bfa4.entry.js +0 -4
  101. package/dist/ionic/p-4b0f5ffd.entry.js +0 -4
  102. package/dist/ionic/p-57aeb097.entry.js +0 -4
  103. package/dist/ionic/p-BYtS2rae.js +0 -4
  104. package/dist/ionic/p-e9d6ce67.entry.js +0 -4
  105. package/dist/ionic/p-ef0c281a.entry.js +0 -4
@@ -7,7 +7,7 @@ var index = require('./index-CzcLEdQ5.js');
7
7
  var buttonActive = require('./button-active-JoIWyYri.js');
8
8
  var helpers = require('./helpers-DJYxKN5U.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-Dhoy6v_5.js');
10
+ var overlays = require('./overlays-Hci_7vw_.js');
11
11
  var theme = require('./theme-IlOsGAz7.js');
12
12
  var ionicGlobal = require('./ionic-global-CSEbHD_F.js');
13
13
  var animation = require('./animation-DknMeJ3x.js');
@@ -8,7 +8,7 @@ var config = require('./config-B0utyWaD.js');
8
8
  var buttonActive = require('./button-active-JoIWyYri.js');
9
9
  var helpers = require('./helpers-DJYxKN5U.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
11
- var overlays = require('./overlays-Dhoy6v_5.js');
11
+ var overlays = require('./overlays-Hci_7vw_.js');
12
12
  var theme = require('./theme-IlOsGAz7.js');
13
13
  var ionicGlobal = require('./ionic-global-CSEbHD_F.js');
14
14
  var animation = require('./animation-DknMeJ3x.js');
@@ -8,7 +8,7 @@ var caretLeft = require('./caret-left-CxZXLRv5.js');
8
8
  var caretRight = require('./caret-right-CRCgv98E.js');
9
9
  var focusVisible = require('./focus-visible-BIj-I3-C.js');
10
10
  var helpers = require('./helpers-DJYxKN5U.js');
11
- var overlays = require('./overlays-Dhoy6v_5.js');
11
+ var overlays = require('./overlays-Hci_7vw_.js');
12
12
  var dir = require('./dir-Cn0z1rJH.js');
13
13
  var theme = require('./theme-IlOsGAz7.js');
14
14
  var index$1 = require('./index-CgAbCW6L.js');
@@ -7,7 +7,7 @@ var index = require('./index-CzcLEdQ5.js');
7
7
  var config = require('./config-B0utyWaD.js');
8
8
  var helpers = require('./helpers-DJYxKN5U.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-Dhoy6v_5.js');
10
+ var overlays = require('./overlays-Hci_7vw_.js');
11
11
  var theme = require('./theme-IlOsGAz7.js');
12
12
  var ionicGlobal = require('./ionic-global-CSEbHD_F.js');
13
13
  var animation = require('./animation-DknMeJ3x.js');
@@ -5,7 +5,7 @@
5
5
 
6
6
  var index = require('./index-CzcLEdQ5.js');
7
7
  var cubicBezier = require('./cubic-bezier-DAjy1V-e.js');
8
- var overlays = require('./overlays-Dhoy6v_5.js');
8
+ var overlays = require('./overlays-Hci_7vw_.js');
9
9
  var gestureController = require('./gesture-controller-dtqlP_q4.js');
10
10
  var ionicGlobal = require('./ionic-global-CSEbHD_F.js');
11
11
  var helpers = require('./helpers-DJYxKN5U.js');
@@ -9,7 +9,7 @@ var frameworkDelegate = require('./framework-delegate-Dx9FrqAC.js');
9
9
  var helpers = require('./helpers-DJYxKN5U.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
11
11
  var capacitor = require('./capacitor-BnRBm_ys.js');
12
- var overlays = require('./overlays-Dhoy6v_5.js');
12
+ var overlays = require('./overlays-Hci_7vw_.js');
13
13
  var theme = require('./theme-IlOsGAz7.js');
14
14
  var index$3 = require('./index-D_mPAIqF.js');
15
15
  var ionicGlobal = require('./ionic-global-CSEbHD_F.js');
@@ -128,6 +128,104 @@ const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
128
128
  StatusBar.setStyle({ style: defaultStyle });
129
129
  };
130
130
 
131
+ const createSheetEnterAnimation = (opts) => {
132
+ const { currentBreakpoint, backdropBreakpoint, expandToScroll, staticBackdropOpacity } = opts;
133
+ /**
134
+ * If the backdropBreakpoint is undefined, then the backdrop
135
+ * should always fade in. If the backdropBreakpoint came before the
136
+ * current breakpoint, then the backdrop should be fading in.
137
+ */
138
+ const shouldShowBackdrop = backdropBreakpoint === undefined || backdropBreakpoint < currentBreakpoint;
139
+ let initialBackdrop = '0';
140
+ if (staticBackdropOpacity) {
141
+ initialBackdrop = 'calc(var(--backdrop-opacity)';
142
+ }
143
+ else if (shouldShowBackdrop) {
144
+ initialBackdrop = `calc(var(--backdrop-opacity) * ${currentBreakpoint})`;
145
+ }
146
+ const backdropAnimation = animation.createAnimation('backdropAnimation').fromTo('opacity', 0, initialBackdrop);
147
+ if (shouldShowBackdrop) {
148
+ backdropAnimation
149
+ .beforeStyles({
150
+ 'pointer-events': 'none',
151
+ })
152
+ .afterClearStyles(['pointer-events']);
153
+ }
154
+ const wrapperAnimation = animation.createAnimation('wrapperAnimation').keyframes([
155
+ { offset: 0, opacity: 1, transform: 'translateY(100%)' },
156
+ { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
157
+ ]);
158
+ /**
159
+ * This allows the content to be scrollable at any breakpoint.
160
+ */
161
+ const contentAnimation = !expandToScroll
162
+ ? animation.createAnimation('contentAnimation').keyframes([
163
+ { offset: 0, opacity: 1, maxHeight: `${(1 - currentBreakpoint) * 100}%` },
164
+ { offset: 1, opacity: 1, maxHeight: `${currentBreakpoint * 100}%` },
165
+ ])
166
+ : undefined;
167
+ return { wrapperAnimation, backdropAnimation, contentAnimation };
168
+ };
169
+ const createSheetLeaveAnimation = (opts) => {
170
+ const { currentBreakpoint, backdropBreakpoint } = opts;
171
+ /**
172
+ * Backdrop does not always fade in from 0 to 1 if backdropBreakpoint
173
+ * is defined, so we need to account for that offset by figuring out
174
+ * what the current backdrop value should be.
175
+ */
176
+ const backdropValue = `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(currentBreakpoint, backdropBreakpoint)})`;
177
+ const defaultBackdrop = [
178
+ { offset: 0, opacity: backdropValue },
179
+ { offset: 1, opacity: 0 },
180
+ ];
181
+ const customBackdrop = [
182
+ { offset: 0, opacity: backdropValue },
183
+ { offset: backdropBreakpoint, opacity: 0 },
184
+ { offset: 1, opacity: 0 },
185
+ ];
186
+ const backdropAnimation = animation.createAnimation('backdropAnimation').keyframes(backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop);
187
+ const wrapperAnimation = animation.createAnimation('wrapperAnimation').keyframes([
188
+ { offset: 0, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
189
+ { offset: 1, opacity: 1, transform: `translateY(100%)` },
190
+ ]);
191
+ return { wrapperAnimation, backdropAnimation };
192
+ };
193
+
194
+ const createEnterAnimation$2 = () => {
195
+ const backdropAnimation = animation.createAnimation()
196
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
197
+ .beforeStyles({
198
+ 'pointer-events': 'none',
199
+ })
200
+ .afterClearStyles(['pointer-events']);
201
+ const wrapperAnimation = animation.createAnimation().keyframes([
202
+ { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
203
+ { offset: 1, opacity: 1, transform: `translateY(0px)` },
204
+ ]);
205
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
206
+ };
207
+ /**
208
+ * Ionic Modal Enter Animation
209
+ */
210
+ const ionicEnterAnimation = (baseEl, opts) => {
211
+ const { currentBreakpoint, expandToScroll } = opts;
212
+ const root = helpers.getElementRoot(baseEl);
213
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$2();
214
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
215
+ wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
216
+ // The content animation is only added if scrolling is enabled for
217
+ // all the breakpoints.
218
+ !expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
219
+ backdropAnimation.duration(300).easing('ease-out');
220
+ wrapperAnimation.duration(400).easing('cubic-bezier(0.32, 0.68, 0, 1)');
221
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.duration(400).easing('cubic-bezier(0.32, 0.68, 0, 1)');
222
+ const baseAnimation = animation.createAnimation().addElement(baseEl).addAnimation([backdropAnimation, wrapperAnimation]);
223
+ if (contentAnimation) {
224
+ baseAnimation.addAnimation(contentAnimation);
225
+ }
226
+ return baseAnimation;
227
+ };
228
+
131
229
  const handleCanDismiss = async (el, animation) => {
132
230
  /**
133
231
  * If canDismiss is not a function
@@ -554,69 +652,6 @@ const calculateProgress = (el, deltaY) => {
554
652
  return Math.max(0, Math.min(1, roundedProgress));
555
653
  };
556
654
 
557
- const createSheetEnterAnimation = (opts) => {
558
- const { currentBreakpoint, backdropBreakpoint, expandToScroll, staticBackdropOpacity } = opts;
559
- /**
560
- * If the backdropBreakpoint is undefined, then the backdrop
561
- * should always fade in. If the backdropBreakpoint came before the
562
- * current breakpoint, then the backdrop should be fading in.
563
- */
564
- const shouldShowBackdrop = backdropBreakpoint === undefined || backdropBreakpoint < currentBreakpoint;
565
- let initialBackdrop = '0';
566
- if (staticBackdropOpacity) {
567
- initialBackdrop = 'calc(var(--backdrop-opacity)';
568
- }
569
- else if (shouldShowBackdrop) {
570
- initialBackdrop = `calc(var(--backdrop-opacity) * ${currentBreakpoint})`;
571
- }
572
- const backdropAnimation = animation.createAnimation('backdropAnimation').fromTo('opacity', 0, initialBackdrop);
573
- if (shouldShowBackdrop) {
574
- backdropAnimation
575
- .beforeStyles({
576
- 'pointer-events': 'none',
577
- })
578
- .afterClearStyles(['pointer-events']);
579
- }
580
- const wrapperAnimation = animation.createAnimation('wrapperAnimation').keyframes([
581
- { offset: 0, opacity: 1, transform: 'translateY(100%)' },
582
- { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
583
- ]);
584
- /**
585
- * This allows the content to be scrollable at any breakpoint.
586
- */
587
- const contentAnimation = !expandToScroll
588
- ? animation.createAnimation('contentAnimation').keyframes([
589
- { offset: 0, opacity: 1, maxHeight: `${(1 - currentBreakpoint) * 100}%` },
590
- { offset: 1, opacity: 1, maxHeight: `${currentBreakpoint * 100}%` },
591
- ])
592
- : undefined;
593
- return { wrapperAnimation, backdropAnimation, contentAnimation };
594
- };
595
- const createSheetLeaveAnimation = (opts) => {
596
- const { currentBreakpoint, backdropBreakpoint } = opts;
597
- /**
598
- * Backdrop does not always fade in from 0 to 1 if backdropBreakpoint
599
- * is defined, so we need to account for that offset by figuring out
600
- * what the current backdrop value should be.
601
- */
602
- const backdropValue = `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(currentBreakpoint, backdropBreakpoint)})`;
603
- const defaultBackdrop = [
604
- { offset: 0, opacity: backdropValue },
605
- { offset: 1, opacity: 0 },
606
- ];
607
- const customBackdrop = [
608
- { offset: 0, opacity: backdropValue },
609
- { offset: backdropBreakpoint, opacity: 0 },
610
- { offset: 1, opacity: 0 },
611
- ];
612
- const backdropAnimation = animation.createAnimation('backdropAnimation').keyframes(backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop);
613
- const wrapperAnimation = animation.createAnimation('wrapperAnimation').keyframes([
614
- { offset: 0, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
615
- { offset: 1, opacity: 1, transform: `translateY(100%)` },
616
- ]);
617
- return { wrapperAnimation, backdropAnimation };
618
- };
619
-
620
655
  const createEnterAnimation$1 = () => {
621
656
  const backdropAnimation = animation.createAnimation()
622
657
  .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
@@ -1007,16 +1042,16 @@ const mdLeaveAnimation = (baseEl, opts) => {
1007
1042
  return baseAnimation;
1008
1043
  };
1009
1044
 
1010
- const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange, staticBackdropOpacity, onDragStart, onDragMove, onDragEnd) => {
1045
+ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange, usePhysicsBasedGesture, onDragStart, onDragMove, onDragEnd) => {
1011
1046
  // Defaults for the sheet swipe animation
1012
1047
  const defaultBackdrop = [
1013
1048
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
1014
- { offset: 1, opacity: staticBackdropOpacity ? 'var(--backdrop-opacity)' : 0.01 },
1049
+ { offset: 1, opacity: usePhysicsBasedGesture ? 'var(--backdrop-opacity)' : 0.01 },
1015
1050
  ];
1016
1051
  const customBackdrop = [
1017
1052
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
1018
- { offset: 1 - backdropBreakpoint, opacity: staticBackdropOpacity ? 'var(--backdrop-opacity)' : 0 },
1019
- { offset: 1, opacity: staticBackdropOpacity ? 'var(--backdrop-opacity)' : 0 },
1053
+ { offset: 1 - backdropBreakpoint, opacity: usePhysicsBasedGesture ? 'var(--backdrop-opacity)' : 0 },
1054
+ { offset: 1, opacity: usePhysicsBasedGesture ? 'var(--backdrop-opacity)' : 0 },
1020
1055
  ];
1021
1056
  const SheetDefaults = {
1022
1057
  WRAPPER_KEYFRAMES: [
@@ -1339,7 +1374,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1339
1374
  : step;
1340
1375
  offset = helpers.clamp(0.0001, processedStep, maxStep);
1341
1376
  animation.progressStep(offset);
1342
- const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY);
1377
+ const snapBreakpoint = usePhysicsBasedGesture
1378
+ ? calculateVelocitySnapBreakpoint(detail.deltaY, detail.velocityY, detail.currentY)
1379
+ : calculatePositionSnapBreakpoint(detail.deltaY);
1343
1380
  const eventDetail = {
1344
1381
  currentY: detail.currentY,
1345
1382
  deltaY: detail.deltaY,
@@ -1350,7 +1387,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1350
1387
  onDragMove(eventDetail);
1351
1388
  };
1352
1389
  const onEnd = (detail) => {
1353
- const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY);
1390
+ const snapBreakpoint = usePhysicsBasedGesture
1391
+ ? calculateVelocitySnapBreakpoint(detail.deltaY, detail.velocityY, detail.currentY)
1392
+ : calculatePositionSnapBreakpoint(detail.deltaY);
1354
1393
  const eventDetail = {
1355
1394
  currentY: detail.currentY,
1356
1395
  deltaY: detail.deltaY,
@@ -1397,6 +1436,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1397
1436
  */
1398
1437
  const shouldPreventDismiss = canDismiss && breakpoint === 0;
1399
1438
  const snapToBreakpoint = shouldPreventDismiss ? currentBreakpoint : breakpoint;
1439
+ /**
1440
+ * Detect snap-back behavior: when the snap target is the same as the current breakpoint,
1441
+ * the user released before crossing the threshold to a new breakpoint.
1442
+ * Apply different timing and easing for snap-back vs. snap-to-new.
1443
+ */
1444
+ const isSnapBack = snapToBreakpoint === currentBreakpoint;
1445
+ const duration = usePhysicsBasedGesture ? (isSnapBack ? 300 : 400) : 500;
1446
+ const easing = isSnapBack ? 'cubic-bezier(0.34, 1.4, 0.64, 1)' : 'cubic-bezier(0.32, 0.68, 0, 1)';
1400
1447
  const shouldRemainOpen = snapToBreakpoint !== 0;
1401
1448
  currentBreakpoint = 0;
1402
1449
  /**
@@ -1411,13 +1458,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1411
1458
  backdropAnimation.keyframes([
1412
1459
  {
1413
1460
  offset: 0,
1414
- opacity: staticBackdropOpacity
1461
+ opacity: usePhysicsBasedGesture
1415
1462
  ? 'var(--backdrop-opacity)'
1416
1463
  : `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(1 - breakpointOffset, backdropBreakpoint)})`,
1417
1464
  },
1418
1465
  {
1419
1466
  offset: 1,
1420
- opacity: staticBackdropOpacity
1467
+ opacity: usePhysicsBasedGesture
1421
1468
  ? 'var(--backdrop-opacity)'
1422
1469
  : `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
1423
1470
  },
@@ -1437,6 +1484,12 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1437
1484
  }
1438
1485
  animation.progressStep(0);
1439
1486
  }
1487
+ /**
1488
+ * Apply the appropriate easing curve for this snap behavior.
1489
+ */
1490
+ if (usePhysicsBasedGesture) {
1491
+ animation.easing(easing);
1492
+ }
1440
1493
  /**
1441
1494
  * Gesture should remain disabled until the
1442
1495
  * snapping animation completes.
@@ -1526,7 +1579,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1526
1579
  * be added every time onEnd runs.
1527
1580
  */
1528
1581
  }, { oneTimeCallback: true })
1529
- .progressEnd(1, 0, animated ? 500 : 0);
1582
+ .progressEnd(1, 0, animated ? duration : 0);
1530
1583
  });
1531
1584
  };
1532
1585
  /**
@@ -1537,7 +1590,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1537
1590
  * @param deltaY The change in Y position since the gesture started.
1538
1591
  * @returns The snap breakpoint value.
1539
1592
  */
1540
- const calculateSnapBreakpoint = (deltaY) => {
1593
+ const calculatePositionSnapBreakpoint = (deltaY) => {
1541
1594
  /**
1542
1595
  * Calculates the real-time vertical position of the modal.
1543
1596
  * We combine the wrapper's current bounding box position with the
@@ -1557,6 +1610,50 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1557
1610
  });
1558
1611
  return snapBreakpoint;
1559
1612
  };
1613
+ /**
1614
+ * Calculates the snap breakpoint using velocity-based logic.
1615
+ * This provides a more intuitive and responsive sheet behavior for the Ionic theme.
1616
+ *
1617
+ * Rules:
1618
+ * 1. Fast downward flick (> 500 px/s) always dismisses, regardless of position
1619
+ * 2. Fast upward flick (> 400 px/s) snaps to the next breakpoint above
1620
+ * 3. If dragged 40% below current snap point without fast upward flick, dismisses
1621
+ * 4. Otherwise, falls back to position-based snap (closest breakpoint)
1622
+ *
1623
+ * @param deltaY The change in Y position since gesture started
1624
+ * @param velocityY The velocity in pixels per millisecond
1625
+ * @param currentY The current Y position of the gesture
1626
+ * @returns The snap breakpoint value
1627
+ */
1628
+ const calculateVelocitySnapBreakpoint = (deltaY, velocityY, currentY) => {
1629
+ // Convert velocity from px/ms to px/s for easier threshold comparison
1630
+ const velocityYPerSecond = velocityY * 1000;
1631
+ // Calculate current progress (0 = fully closed, 1 = fully expanded)
1632
+ const currentProgress = calculateProgress(currentY);
1633
+ // Rule 1: Fast downward flick always dismisses
1634
+ if (velocityYPerSecond > 500) {
1635
+ return minBreakpoint;
1636
+ }
1637
+ // Rule 2: Fast upward flick moves to next breakpoint above
1638
+ if (velocityYPerSecond < -400) {
1639
+ // Find next breakpoint above current position
1640
+ const nextBreakpoint = breakpoints.find((bp) => bp > currentProgress);
1641
+ // If no breakpoint above, stay at max breakpoint
1642
+ return nextBreakpoint !== null && nextBreakpoint !== void 0 ? nextBreakpoint : maxBreakpoint;
1643
+ }
1644
+ // Rule 3: 40% dismissal rule (only if not flicking up and 0 breakpoint exists)
1645
+ if (minBreakpoint === 0 && currentBreakpoint > 0) {
1646
+ // Calculate how far we've moved below the current snap point
1647
+ const distanceBelowSnap = currentBreakpoint - currentProgress;
1648
+ const percentageBelowSnap = distanceBelowSnap / currentBreakpoint;
1649
+ // If dragged more than 40% below and not flicking up, dismiss
1650
+ if (percentageBelowSnap > 0.4 && velocityYPerSecond <= 400) {
1651
+ return 0;
1652
+ }
1653
+ }
1654
+ // Rule 4: Fallback to position-based snap (existing logic)
1655
+ return calculatePositionSnapBreakpoint(deltaY);
1656
+ };
1560
1657
  /**
1561
1658
  * Calculates the progress of the swipe gesture.
1562
1659
  *
@@ -1805,7 +1902,7 @@ const clearSafeAreaOverrides = (hostEl) => {
1805
1902
  hostEl.style.removeProperty('--ion-safe-area-right');
1806
1903
  };
1807
1904
 
1808
- const modalIonicCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-width:0;--border-style:none;--border-color:transparent;--box-shadow:none;right:0;left:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}.modal-handle{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;cursor:pointer;z-index:11}.modal-handle::before{position:absolute;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--background:var(--token-bg-surface-default, var(--token-primitives-base-white, #ffffff));--box-shadow:var(--token-elevation-3, 0px 2px 7px 0px rgba(0, 0, 0, 0.05), 0px 6px 32px 0px rgba(0, 0, 0, 0.16));--backdrop-opacity:1;color:var(--token-text-default, var(--token-primitives-neutral-1200, #242424))}:host(.modal-round){--border-radius:var(--token-border-radius-1000, var(--token-scale-1000, 40px))}:host(.modal-soft){--border-radius:var(--token-border-radius-400, var(--token-scale-400, 16px))}:host(.modal-rectangular){--border-radius:var(--token-border-radius-0, var(--token-scale-0, 0px))}:host(.select-modal.modal-default){--max-height:45%;--max-width:calc(100% - (var(--token-space-400, var(--token-scale-400, 16px)) * 2));--min-height:340px}.modal-handle{right:0px;left:0px;top:var(--token-space-300, var(--token-scale-300, 12px));border-radius:var(--token-border-radius-100, var(--token-scale-100, 4px));width:var(--token-scale-1100, 44px);height:var(--token-scale-100, 4px);background-color:var(--token-primitives-neutral-300, #e0e0e0)}.modal-handle::before{-webkit-padding-start:var(--token-space-100, var(--token-scale-100, 4px));padding-inline-start:var(--token-space-100, var(--token-scale-100, 4px));-webkit-padding-end:var(--token-space-100, var(--token-scale-100, 4px));padding-inline-end:var(--token-space-100, var(--token-scale-100, 4px));padding-top:var(--token-space-100, var(--token-scale-100, 4px));padding-bottom:var(--token-space-100, var(--token-scale-100, 4px))}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + var(--token-scale-250, 10px)))}`;
1905
+ const modalIonicCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-width:0;--border-style:none;--border-color:transparent;--box-shadow:none;right:0;left:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}.modal-handle{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;cursor:pointer;z-index:11}.modal-handle::before{position:absolute;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--background:var(--token-bg-surface-default, var(--token-primitives-base-white, #ffffff));--box-shadow:var(--token-elevation-3, 0px 2px 7px 0px rgba(0, 0, 0, 0.05), 0px 6px 32px 0px rgba(0, 0, 0, 0.16));--backdrop-opacity:0.7;color:var(--token-text-default, var(--token-primitives-neutral-1200, #242424))}:host(.modal-round){--border-radius:var(--token-border-radius-1000, var(--token-scale-1000, 40px))}:host(.modal-soft){--border-radius:var(--token-border-radius-400, var(--token-scale-400, 16px))}:host(.modal-rectangular){--border-radius:var(--token-border-radius-0, var(--token-scale-0, 0px))}:host(.select-modal.modal-default){--max-height:45%;--max-width:calc(100% - (var(--token-space-400, var(--token-scale-400, 16px)) * 2));--min-height:340px}.modal-handle{right:0px;left:0px;top:var(--token-space-300, var(--token-scale-300, 12px));border-radius:var(--token-border-radius-100, var(--token-scale-100, 4px));width:var(--token-scale-1100, 44px);height:var(--token-scale-100, 4px);background-color:var(--token-primitives-neutral-300, #e0e0e0)}.modal-handle::before{-webkit-padding-start:var(--token-space-100, var(--token-scale-100, 4px));padding-inline-start:var(--token-space-100, var(--token-scale-100, 4px));-webkit-padding-end:var(--token-space-100, var(--token-scale-100, 4px));padding-inline-end:var(--token-space-100, var(--token-scale-100, 4px));padding-top:var(--token-space-100, var(--token-scale-100, 4px));padding-bottom:var(--token-space-100, var(--token-scale-100, 4px))}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + var(--token-scale-250, 10px)))}`;
1809
1906
 
1810
1907
  const modalIosCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-width:0;--border-style:none;--border-color:transparent;--box-shadow:none;right:0;left:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}.modal-handle{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;cursor:pointer;z-index:11}.modal-handle::before{position:absolute;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--background:var(--ion-background-color, #fff);--border-radius:0;--backdrop-opacity:0;color:var(--ion-text-color, #000)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{right:0px;left:0px;top:5px;border-radius:8px;width:36px;height:5px;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be))}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;width:36px;height:5px}:host(.modal-sheet){--height:calc(100% - (var(--ion-modal-offset-top, 0px) + 10px))}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.4)}:host(.modal-card),:host(.modal-sheet){--border-radius:10px}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:10px}}.modal-wrapper{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}@media screen and (max-width: 767px){@supports (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - max(30px, var(--ion-safe-area-top)) - 10px)}}@supports not (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - 40px)}}:host(.modal-card) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;-ms-flex-align:end;align-items:flex-end}:host(.modal-card) .modal-shadow{display:none}:host(.modal-card) ion-backdrop{pointer-events:none}}@media screen and (min-width: 768px){:host(.modal-card){--width:calc(100% - 120px);--height:calc(100% - (120px + var(--ion-safe-area-top) + var(--ion-safe-area-bottom)));--max-width:720px;--max-height:1000px;--backdrop-opacity:0;--box-shadow:0px 0px 30px 10px rgba(0, 0, 0, 0.1);-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{-webkit-box-shadow:none;box-shadow:none}:host(.modal-card) .modal-shadow{-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}`;
1811
1908
 
@@ -2245,7 +2342,7 @@ const Modal = class {
2245
2342
  this.statusBarStyle = await StatusBar.getStyle();
2246
2343
  setCardStatusBarDark();
2247
2344
  }
2248
- await overlays.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
2345
+ await overlays.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, ionicEnterAnimation, {
2249
2346
  presentingEl: presentingElement,
2250
2347
  currentBreakpoint: this.initialBreakpoint,
2251
2348
  backdropBreakpoint: this.backdropBreakpoint,
@@ -2932,20 +3029,20 @@ const Modal = class {
2932
3029
  const isHandleCycle = handleBehavior === 'cycle';
2933
3030
  const shape = this.getShape();
2934
3031
  const isSheetModalWithHandle = isSheetModal && showHandle;
2935
- return (index$2.h(index$2.Host, Object.assign({ key: '4b323edb66d28260c34b31fd2af8f4ae53a7ef90', "no-router": true,
3032
+ return (index$2.h(index$2.Host, Object.assign({ key: '3011c8f49c1ccb6c20c01db35b59fe4f6e22ec01', "no-router": true,
2936
3033
  // Allow the modal to be navigable when the handle is focusable
2937
3034
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
2938
3035
  zIndex: `${20000 + this.overlayIndex}`,
2939
- }, class: Object.assign({ [theme$1]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-${shape}`]: shape !== undefined, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), index$2.h("ion-backdrop", { key: '6059e348dc3d020f995577dde1b7949bdb2c0f2f', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), theme$1 === 'ios' && index$2.h("div", { key: '5a08a99dfc3de51ac7516fc76fdba3672f84db71', class: "modal-shadow" }), index$2.h("div", Object.assign({ key: 'a7a841a5b2f740fbf576b82b82782aa235b701ee',
3036
+ }, class: Object.assign({ [theme$1]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-${shape}`]: shape !== undefined, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), index$2.h("ion-backdrop", { key: 'ab99fb4ff1b335b06d5676890012dfe3cd1a1a01', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), theme$1 === 'ios' && index$2.h("div", { key: '95d4c79c4455c6a5ae6d581fa9dfaabdbee8c567', class: "modal-shadow" }), index$2.h("div", Object.assign({ key: '2d7d2406cdb986c69ef52708d33eca67d8a877f8',
2940
3037
  /*
2941
3038
  role and aria-modal must be used on the
2942
3039
  same element. They must also be set inside the
2943
3040
  shadow DOM otherwise ion-button will not be highlighted
2944
3041
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
2945
3042
  */
2946
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (index$2.h("button", { key: 'ca5567e9ab3e9e80b41314d396106faf2da09ffe', class: "modal-handle",
3043
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (index$2.h("button", { key: 'ccec8bfc314763bd6dd868b69fbfdc085f5957c9', class: "modal-handle",
2947
3044
  // Prevents the handle from receiving keyboard focus when it does not cycle
2948
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$2.h("slot", { key: 'da5471ea4292166798d3f949e79e7b3e55a0e83f', onSlotchange: this.onSlotChange }))));
3045
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$2.h("slot", { key: '38469e3447b46983783627d697e12cadcef614fa', onSlotchange: this.onSlotChange }))));
2949
3046
  }
2950
3047
  get el() { return index$2.getElement(this); }
2951
3048
  static get watchers() { return {
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-CzcLEdQ5.js');
7
- var overlays = require('./overlays-Dhoy6v_5.js');
7
+ var overlays = require('./overlays-Hci_7vw_.js');
8
8
  var frameworkDelegate = require('./framework-delegate-Dx9FrqAC.js');
9
9
  var helpers = require('./helpers-DJYxKN5U.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
@@ -1436,7 +1436,7 @@ const Popover = class {
1436
1436
  else if (!this.keepContentsMounted) {
1437
1437
  await index$1.waitForMount();
1438
1438
  }
1439
- await overlays.present(this, 'popoverEnter', iosEnterAnimation, mdEnterAnimation, {
1439
+ await overlays.present(this, 'popoverEnter', iosEnterAnimation, mdEnterAnimation, undefined, {
1440
1440
  event: event || this.event,
1441
1441
  size: this.size,
1442
1442
  trigger: this.triggerEl,
@@ -1545,9 +1545,9 @@ const Popover = class {
1545
1545
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
1546
1546
  const desktop = ionicGlobal.isPlatform('desktop');
1547
1547
  const enableArrow = arrow && !parentPopover;
1548
- return (index.h(index.Host, Object.assign({ key: 'cc70f9b037b16ea78b999916106a1062ceb74cb6', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1548
+ return (index.h(index.Host, Object.assign({ key: 'ba8801218aa8543eae0e8e2c57fbd0d4fbb2c8ff', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1549
1549
  zIndex: `${20000 + this.overlayIndex}`,
1550
- }, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [theme$1]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && index.h("ion-backdrop", { key: 'e641e7ee28cbd54911ec3f8c0bfd9d7e3f2e85cd', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), index.h("div", { key: '750494585c3524b27e42d79f02e729f3eff9e660', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && index.h("div", { key: '2e49b4ad1287e31a3cdbfebc91120405a998dc95', class: "popover-arrow", part: "arrow" }), index.h("div", { key: '306586776e74acab787b2a96433553005bca580d', class: "popover-content", part: "content" }, index.h("slot", { key: '0273c0975cd7dc37db5cfa0b91d418867a77c4d8' })))));
1550
+ }, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [theme$1]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && index.h("ion-backdrop", { key: '0301c9a9ed70cf34445e89484cd4145dc98f3d4c', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), index.h("div", { key: 'd017b8cda9eb474cf990222c90539697308a1c8f', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && index.h("div", { key: 'fdf8ec2e98a29bfa3e26788e4a432ff402800202', class: "popover-arrow", part: "arrow" }), index.h("div", { key: '9498eace0a68daf39e7c0580ca46e33a9791f62c', class: "popover-content", part: "content" }, index.h("slot", { key: '0f10c7e335d2f4f75e10d7fde5244c3dd5ae0bb4' })))));
1551
1551
  }
1552
1552
  get el() { return index.getElement(this); }
1553
1553
  static get watchers() { return {
@@ -6,7 +6,7 @@
6
6
  var index = require('./index-CzcLEdQ5.js');
7
7
  var ionicGlobal = require('./ionic-global-CSEbHD_F.js');
8
8
  var x = require('./x-BTF99yFH.js');
9
- var overlays = require('./overlays-Dhoy6v_5.js');
9
+ var overlays = require('./overlays-Hci_7vw_.js');
10
10
  var theme = require('./theme-IlOsGAz7.js');
11
11
  var index$1 = require('./index-CgAbCW6L.js');
12
12
  require('./helpers-DJYxKN5U.js');
@@ -9,7 +9,7 @@ var notchController = require('./notch-controller-CgtkBzy0.js');
9
9
  var compareWithUtils = require('./compare-with-utils-DSicavqM.js');
10
10
  var validity = require('./validity-QmuwEptc.js');
11
11
  var helpers = require('./helpers-DJYxKN5U.js');
12
- var overlays = require('./overlays-Dhoy6v_5.js');
12
+ var overlays = require('./overlays-Hci_7vw_.js');
13
13
  var dir = require('./dir-Cn0z1rJH.js');
14
14
  var theme = require('./theme-IlOsGAz7.js');
15
15
  var watchOptions = require('./watch-options-CviOsrTS.js');