@ionic/core 7.5.7 → 7.5.8-dev.11701374238.101cd738

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 (1609) hide show
  1. package/components/action-sheet.js +297 -287
  2. package/components/alert.js +475 -465
  3. package/components/animation.js +990 -990
  4. package/components/backdrop.js +56 -56
  5. package/components/button-active.js +56 -56
  6. package/components/button.js +236 -236
  7. package/components/buttons.js +29 -29
  8. package/components/capacitor.js +4 -4
  9. package/components/checkbox.js +168 -168
  10. package/components/config.js +142 -142
  11. package/components/cubic-bezier.js +49 -49
  12. package/components/data.js +1055 -1055
  13. package/components/dir.js +5 -5
  14. package/components/focus-visible.js +63 -63
  15. package/components/form-controller.js +45 -45
  16. package/components/framework-delegate.js +121 -121
  17. package/components/gesture-controller.js +182 -182
  18. package/components/haptic.js +150 -150
  19. package/components/hardware-back-button.js +48 -48
  20. package/components/helpers.js +257 -257
  21. package/components/icon.js +133 -133
  22. package/components/index.js +95 -95
  23. package/components/index2.js +163 -163
  24. package/components/index3.js +417 -417
  25. package/components/index4.js +258 -258
  26. package/components/index6.js +3 -3
  27. package/components/index8.js +58 -58
  28. package/components/index9.js +171 -171
  29. package/components/input-shims.js +483 -483
  30. package/components/input.utils.js +105 -105
  31. package/components/ion-accordion-group.d.ts +2 -2
  32. package/components/ion-accordion-group.js +220 -220
  33. package/components/ion-accordion.d.ts +2 -2
  34. package/components/ion-accordion.js +326 -326
  35. package/components/ion-action-sheet.d.ts +2 -2
  36. package/components/ion-alert.d.ts +2 -2
  37. package/components/ion-app.d.ts +2 -2
  38. package/components/ion-app.js +93 -93
  39. package/components/ion-avatar.d.ts +2 -2
  40. package/components/ion-avatar.js +23 -23
  41. package/components/ion-back-button.d.ts +2 -2
  42. package/components/ion-back-button.js +102 -102
  43. package/components/ion-backdrop.d.ts +2 -2
  44. package/components/ion-badge.d.ts +2 -2
  45. package/components/ion-badge.js +29 -29
  46. package/components/ion-breadcrumb.d.ts +2 -2
  47. package/components/ion-breadcrumb.js +111 -111
  48. package/components/ion-breadcrumbs.d.ts +2 -2
  49. package/components/ion-breadcrumbs.js +139 -139
  50. package/components/ion-button.d.ts +2 -2
  51. package/components/ion-buttons.d.ts +2 -2
  52. package/components/ion-card-content.d.ts +2 -2
  53. package/components/ion-card-content.js +27 -27
  54. package/components/ion-card-header.d.ts +2 -2
  55. package/components/ion-card-header.js +33 -33
  56. package/components/ion-card-subtitle.d.ts +2 -2
  57. package/components/ion-card-subtitle.js +30 -30
  58. package/components/ion-card-title.d.ts +2 -2
  59. package/components/ion-card-title.js +30 -30
  60. package/components/ion-card.d.ts +2 -2
  61. package/components/ion-card.js +78 -78
  62. package/components/ion-checkbox.d.ts +2 -2
  63. package/components/ion-chip.d.ts +2 -2
  64. package/components/ion-chip.js +41 -41
  65. package/components/ion-col.d.ts +2 -2
  66. package/components/ion-col.js +156 -156
  67. package/components/ion-content.d.ts +2 -2
  68. package/components/ion-content.js +394 -394
  69. package/components/ion-datetime-button.d.ts +2 -2
  70. package/components/ion-datetime-button.js +348 -348
  71. package/components/ion-datetime.d.ts +2 -2
  72. package/components/ion-datetime.js +1720 -1720
  73. package/components/ion-fab-button.d.ts +2 -2
  74. package/components/ion-fab-button.js +109 -109
  75. package/components/ion-fab-list.d.ts +2 -2
  76. package/components/ion-fab-list.js +44 -44
  77. package/components/ion-fab.d.ts +2 -2
  78. package/components/ion-fab.js +75 -75
  79. package/components/ion-footer.d.ts +2 -2
  80. package/components/ion-footer.js +124 -124
  81. package/components/ion-grid.d.ts +2 -2
  82. package/components/ion-grid.js +27 -27
  83. package/components/ion-header.d.ts +2 -2
  84. package/components/ion-header.js +298 -298
  85. package/components/ion-img.d.ts +2 -2
  86. package/components/ion-img.js +97 -97
  87. package/components/ion-infinite-scroll-content.d.ts +2 -2
  88. package/components/ion-infinite-scroll-content.js +49 -49
  89. package/components/ion-infinite-scroll.d.ts +2 -2
  90. package/components/ion-infinite-scroll.js +179 -179
  91. package/components/ion-input.d.ts +2 -2
  92. package/components/ion-input.js +452 -452
  93. package/components/ion-item-divider.d.ts +2 -2
  94. package/components/ion-item-divider.js +34 -34
  95. package/components/ion-item-group.d.ts +2 -2
  96. package/components/ion-item-group.js +28 -28
  97. package/components/ion-item-option.d.ts +2 -2
  98. package/components/ion-item-option.js +67 -67
  99. package/components/ion-item-options.d.ts +2 -2
  100. package/components/ion-item-options.js +50 -50
  101. package/components/ion-item-sliding.d.ts +2 -2
  102. package/components/ion-item-sliding.js +404 -404
  103. package/components/ion-item.d.ts +2 -2
  104. package/components/ion-label.d.ts +2 -2
  105. package/components/ion-list-header.d.ts +2 -2
  106. package/components/ion-list.d.ts +2 -2
  107. package/components/ion-loading.d.ts +2 -2
  108. package/components/ion-loading.js +257 -247
  109. package/components/ion-menu-button.d.ts +2 -2
  110. package/components/ion-menu-button.js +77 -77
  111. package/components/ion-menu-toggle.d.ts +2 -2
  112. package/components/ion-menu-toggle.js +41 -41
  113. package/components/ion-menu.d.ts +2 -2
  114. package/components/ion-menu.js +629 -629
  115. package/components/ion-modal.d.ts +2 -2
  116. package/components/ion-modal.js +1450 -1440
  117. package/components/ion-nav-link.d.ts +2 -2
  118. package/components/ion-nav-link.js +47 -47
  119. package/components/ion-nav.d.ts +2 -2
  120. package/components/ion-nav.js +910 -910
  121. package/components/ion-note.d.ts +2 -2
  122. package/components/ion-picker-column-internal.d.ts +2 -2
  123. package/components/ion-picker-column.d.ts +2 -2
  124. package/components/ion-picker-internal.d.ts +2 -2
  125. package/components/ion-picker.d.ts +2 -2
  126. package/components/ion-picker.js +263 -253
  127. package/components/ion-popover.d.ts +2 -2
  128. package/components/ion-progress-bar.d.ts +2 -2
  129. package/components/ion-progress-bar.js +57 -57
  130. package/components/ion-radio-group.d.ts +2 -2
  131. package/components/ion-radio.d.ts +2 -2
  132. package/components/ion-range.d.ts +2 -2
  133. package/components/ion-range.js +589 -589
  134. package/components/ion-refresher-content.d.ts +2 -2
  135. package/components/ion-refresher-content.js +63 -63
  136. package/components/ion-refresher.d.ts +2 -2
  137. package/components/ion-refresher.js +747 -747
  138. package/components/ion-reorder-group.d.ts +2 -2
  139. package/components/ion-reorder-group.js +259 -259
  140. package/components/ion-reorder.d.ts +2 -2
  141. package/components/ion-reorder.js +39 -39
  142. package/components/ion-ripple-effect.d.ts +2 -2
  143. package/components/ion-route-redirect.d.ts +2 -2
  144. package/components/ion-route-redirect.js +34 -34
  145. package/components/ion-route.d.ts +2 -2
  146. package/components/ion-route.js +56 -56
  147. package/components/ion-router-link.d.ts +2 -2
  148. package/components/ion-router-link.js +45 -45
  149. package/components/ion-router-outlet.d.ts +2 -2
  150. package/components/ion-router-outlet.js +192 -192
  151. package/components/ion-router.d.ts +2 -2
  152. package/components/ion-router.js +632 -632
  153. package/components/ion-row.d.ts +2 -2
  154. package/components/ion-row.js +20 -20
  155. package/components/ion-searchbar.d.ts +2 -2
  156. package/components/ion-searchbar.js +400 -400
  157. package/components/ion-segment-button.d.ts +2 -2
  158. package/components/ion-segment-button.js +117 -117
  159. package/components/ion-segment.d.ts +2 -2
  160. package/components/ion-segment.js +427 -427
  161. package/components/ion-select-option.d.ts +2 -2
  162. package/components/ion-select-option.js +27 -27
  163. package/components/ion-select-popover.d.ts +2 -2
  164. package/components/ion-select.d.ts +2 -2
  165. package/components/ion-select.js +756 -756
  166. package/components/ion-skeleton-text.d.ts +2 -2
  167. package/components/ion-skeleton-text.js +31 -31
  168. package/components/ion-spinner.d.ts +2 -2
  169. package/components/ion-split-pane.d.ts +2 -2
  170. package/components/ion-split-pane.js +145 -145
  171. package/components/ion-tab-bar.d.ts +2 -2
  172. package/components/ion-tab-bar.js +77 -77
  173. package/components/ion-tab-button.d.ts +2 -2
  174. package/components/ion-tab-button.js +104 -104
  175. package/components/ion-tab.d.ts +2 -2
  176. package/components/ion-tab.js +72 -72
  177. package/components/ion-tabs.d.ts +2 -2
  178. package/components/ion-tabs.js +160 -160
  179. package/components/ion-text.d.ts +2 -2
  180. package/components/ion-text.js +26 -26
  181. package/components/ion-textarea.d.ts +2 -2
  182. package/components/ion-textarea.js +393 -393
  183. package/components/ion-thumbnail.d.ts +2 -2
  184. package/components/ion-thumbnail.js +20 -20
  185. package/components/ion-title.d.ts +2 -2
  186. package/components/ion-title.js +56 -56
  187. package/components/ion-toast.d.ts +2 -2
  188. package/components/ion-toast.js +448 -438
  189. package/components/ion-toggle.d.ts +2 -2
  190. package/components/ion-toggle.js +239 -239
  191. package/components/ion-toolbar.d.ts +2 -2
  192. package/components/ion-toolbar.js +71 -71
  193. package/components/ionic-global.js +163 -163
  194. package/components/ios.transition.js +598 -598
  195. package/components/item.js +300 -300
  196. package/components/keyboard-controller.js +128 -128
  197. package/components/keyboard.js +62 -62
  198. package/components/keyboard2.js +59 -59
  199. package/components/label.js +83 -83
  200. package/components/list-header.js +33 -33
  201. package/components/list.js +50 -50
  202. package/components/lock-controller.js +24 -24
  203. package/components/md.transition.js +44 -44
  204. package/components/menu-toggle-util.js +2 -2
  205. package/components/notch-controller.js +120 -120
  206. package/components/note.js +29 -29
  207. package/components/overlays.js +494 -494
  208. package/components/picker-column-internal.js +348 -348
  209. package/components/picker-column.js +334 -334
  210. package/components/picker-internal.js +468 -468
  211. package/components/popover.js +1154 -1144
  212. package/components/radio-group.js +159 -159
  213. package/components/radio.js +200 -200
  214. package/components/ripple-effect.js +81 -81
  215. package/components/select-popover.js +163 -163
  216. package/components/spinner.js +182 -182
  217. package/components/status-tap.js +26 -26
  218. package/components/swipe-back.js +65 -65
  219. package/components/theme.js +23 -23
  220. package/components/watch-options.js +30 -30
  221. package/dist/cjs/animation-cc40e39c.js +1061 -0
  222. package/dist/cjs/{app-globals-1d4c1dbf.js → app-globals-28656db1.js} +1 -1
  223. package/dist/cjs/button-active-75b38d77.js +69 -0
  224. package/dist/cjs/{capacitor-2ffba62a.js → capacitor-46980811.js} +4 -4
  225. package/dist/cjs/config-4f60b98a.js +199 -0
  226. package/dist/cjs/cubic-bezier-f2dccc53.js +92 -0
  227. package/dist/cjs/data-36b9094e.js +1622 -0
  228. package/dist/cjs/{dir-f1e0ca26.js → dir-94c21456.js} +5 -5
  229. package/dist/cjs/focus-visible-7a0ce04f.js +77 -0
  230. package/dist/cjs/form-controller-7d42a722.js +66 -0
  231. package/dist/cjs/framework-delegate-1c29b14a.js +144 -0
  232. package/dist/cjs/gesture-controller-c40c045a.js +197 -0
  233. package/dist/cjs/haptic-216df36c.js +212 -0
  234. package/dist/cjs/hardware-back-button-76833cac.js +76 -0
  235. package/dist/cjs/helpers-76bb7efb.js +441 -0
  236. package/dist/cjs/index-097270a3.js +310 -0
  237. package/dist/cjs/{index-cc7dfb7c.js → index-5915f9b3.js} +3 -3
  238. package/dist/cjs/index-8c1e77d6.js +198 -0
  239. package/dist/cjs/{index-c2940dc1.js → index-b0102f48.js} +19 -6
  240. package/dist/cjs/index-cb3e0ab7.js +243 -0
  241. package/dist/cjs/index-d1b59ffa.js +459 -0
  242. package/dist/cjs/{index-da2c7a37.js → index-da15e99c.js} +60 -60
  243. package/dist/cjs/index.cjs.js +112 -112
  244. package/dist/cjs/input-shims-87102b6a.js +596 -0
  245. package/dist/cjs/input.utils-2a11c1fe.js +137 -0
  246. package/dist/cjs/ion-accordion_2.cjs.entry.js +488 -488
  247. package/dist/cjs/ion-action-sheet.cjs.entry.js +259 -249
  248. package/dist/cjs/ion-alert.cjs.entry.js +439 -429
  249. package/dist/cjs/ion-app_8.cjs.entry.js +1149 -1149
  250. package/dist/cjs/ion-avatar_3.cjs.entry.js +29 -29
  251. package/dist/cjs/ion-back-button.cjs.entry.js +73 -73
  252. package/dist/cjs/ion-backdrop.cjs.entry.js +40 -40
  253. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +194 -194
  254. package/dist/cjs/ion-button_2.cjs.entry.js +303 -303
  255. package/dist/cjs/ion-card_5.cjs.entry.js +105 -105
  256. package/dist/cjs/ion-checkbox.cjs.entry.js +145 -145
  257. package/dist/cjs/ion-chip.cjs.entry.js +20 -20
  258. package/dist/cjs/ion-col_3.cjs.entry.js +136 -136
  259. package/dist/cjs/ion-datetime-button.cjs.entry.js +325 -325
  260. package/dist/cjs/ion-datetime_3.cjs.entry.js +2182 -2172
  261. package/dist/cjs/ion-fab_3.cjs.entry.js +150 -150
  262. package/dist/cjs/ion-img.cjs.entry.js +79 -79
  263. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +190 -190
  264. package/dist/cjs/ion-input.cjs.entry.js +396 -396
  265. package/dist/cjs/ion-item-option_3.cjs.entry.js +457 -457
  266. package/dist/cjs/ion-item_8.cjs.entry.js +425 -425
  267. package/dist/cjs/ion-loading.cjs.entry.js +219 -209
  268. package/dist/cjs/ion-menu_3.cjs.entry.js +667 -667
  269. package/dist/cjs/ion-modal.cjs.entry.js +1414 -1404
  270. package/dist/cjs/ion-nav_2.cjs.entry.js +904 -904
  271. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +328 -328
  272. package/dist/cjs/ion-picker-internal.cjs.entry.js +453 -453
  273. package/dist/cjs/ion-popover.cjs.entry.js +1107 -1097
  274. package/dist/cjs/ion-progress-bar.cjs.entry.js +40 -40
  275. package/dist/cjs/ion-radio_2.cjs.entry.js +314 -314
  276. package/dist/cjs/ion-range.cjs.entry.js +554 -554
  277. package/dist/cjs/ion-refresher_2.cjs.entry.js +785 -785
  278. package/dist/cjs/ion-reorder_2.cjs.entry.js +266 -266
  279. package/dist/cjs/ion-ripple-effect.cjs.entry.js +66 -66
  280. package/dist/cjs/ion-route_4.cjs.entry.js +693 -693
  281. package/dist/cjs/ion-searchbar.cjs.entry.js +358 -358
  282. package/dist/cjs/ion-segment_2.cjs.entry.js +507 -507
  283. package/dist/cjs/ion-select_3.cjs.entry.js +761 -761
  284. package/dist/cjs/ion-spinner.cjs.entry.js +46 -46
  285. package/dist/cjs/ion-split-pane.cjs.entry.js +117 -117
  286. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +137 -137
  287. package/dist/cjs/ion-tab_2.cjs.entry.js +187 -187
  288. package/dist/cjs/ion-text.cjs.entry.js +13 -13
  289. package/dist/cjs/ion-textarea.cjs.entry.js +350 -350
  290. package/dist/cjs/ion-toast.cjs.entry.js +404 -394
  291. package/dist/cjs/ion-toggle.cjs.entry.js +222 -222
  292. package/dist/cjs/ionic-global-62510d64.js +230 -0
  293. package/dist/cjs/ionic.cjs.js +4 -4
  294. package/dist/cjs/ios.transition-d9c0e4fb.js +654 -0
  295. package/dist/cjs/{keyboard-38f2bb7b.js → keyboard-7d621ee9.js} +61 -61
  296. package/dist/cjs/keyboard-9390928c.js +81 -0
  297. package/dist/cjs/keyboard-controller-2158b478.js +167 -0
  298. package/dist/cjs/loader.cjs.js +3 -3
  299. package/dist/cjs/lock-controller-6585a42a.js +40 -0
  300. package/dist/cjs/md.transition-4fac8a87.js +59 -0
  301. package/dist/cjs/notch-controller-1dce508a.js +155 -0
  302. package/dist/cjs/overlays-b1471172.js +714 -0
  303. package/dist/cjs/spinner-configs-282fd50a.js +147 -0
  304. package/dist/cjs/status-tap-0aa8e1f2.js +42 -0
  305. package/dist/cjs/swipe-back-2a858bbd.js +81 -0
  306. package/dist/cjs/theme-d1c573d2.js +48 -0
  307. package/dist/cjs/watch-options-f5f3e158.js +49 -0
  308. package/dist/collection/collection-manifest.json +1 -1
  309. package/dist/collection/components/accordion/accordion.js +410 -410
  310. package/dist/collection/components/accordion/test/a11y/accordion.e2e.js +31 -31
  311. package/dist/collection/components/accordion/test/accordion.e2e.js +24 -24
  312. package/dist/collection/components/accordion/test/accordion.spec.js +84 -84
  313. package/dist/collection/components/accordion/test/basic/accordion.e2e.js +26 -26
  314. package/dist/collection/components/accordion/test/multiple/accordion.e2e.js +18 -18
  315. package/dist/collection/components/accordion/test/nested/accordion.e2e.js +16 -16
  316. package/dist/collection/components/accordion/test/standalone/accordion.e2e.js +6 -6
  317. package/dist/collection/components/accordion-group/accordion-group.js +421 -421
  318. package/dist/collection/components/action-sheet/action-sheet.js +739 -729
  319. package/dist/collection/components/action-sheet/animations/ios.enter.js +18 -18
  320. package/dist/collection/components/action-sheet/animations/ios.leave.js +12 -12
  321. package/dist/collection/components/action-sheet/animations/md.enter.js +18 -18
  322. package/dist/collection/components/action-sheet/animations/md.leave.js +12 -12
  323. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +59 -59
  324. package/dist/collection/components/action-sheet/test/action-sheet-id.spec.js +25 -25
  325. package/dist/collection/components/action-sheet/test/basic/action-sheet-rendering.e2e.js +33 -33
  326. package/dist/collection/components/action-sheet/test/basic/action-sheet.e2e.js +74 -74
  327. package/dist/collection/components/action-sheet/test/basic/action-sheet.spec.js +9 -9
  328. package/dist/collection/components/action-sheet/test/basic/fixture.js +23 -23
  329. package/dist/collection/components/action-sheet/test/is-open/action-sheet.e2e.js +25 -25
  330. package/dist/collection/components/action-sheet/test/translucent/action-sheet.e2e.js +10 -10
  331. package/dist/collection/components/action-sheet/test/trigger/action-sheet.e2e.js +21 -21
  332. package/dist/collection/components/alert/alert.js +977 -967
  333. package/dist/collection/components/alert/animations/ios.enter.js +19 -19
  334. package/dist/collection/components/alert/animations/ios.leave.js +13 -13
  335. package/dist/collection/components/alert/animations/md.enter.js +19 -19
  336. package/dist/collection/components/alert/animations/md.leave.js +10 -10
  337. package/dist/collection/components/alert/test/a11y/alert.e2e.js +116 -116
  338. package/dist/collection/components/alert/test/alert-id.spec.js +25 -25
  339. package/dist/collection/components/alert/test/alert.spec.js +26 -26
  340. package/dist/collection/components/alert/test/basic/alert-tablet.e2e.js +29 -29
  341. package/dist/collection/components/alert/test/basic/alert.e2e.js +96 -96
  342. package/dist/collection/components/alert/test/is-open/alert.e2e.js +25 -25
  343. package/dist/collection/components/alert/test/standalone/alert.e2e.js +9 -9
  344. package/dist/collection/components/alert/test/trigger/alert.e2e.js +21 -21
  345. package/dist/collection/components/app/app.js +116 -116
  346. package/dist/collection/components/app/test/safe-area/app.e2e.js +24 -24
  347. package/dist/collection/components/avatar/avatar.js +17 -17
  348. package/dist/collection/components/avatar/test/basic/avatar.e2e.js +12 -12
  349. package/dist/collection/components/back-button/back-button.js +214 -214
  350. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +6 -6
  351. package/dist/collection/components/back-button/test/back-button.spec.js +72 -72
  352. package/dist/collection/components/back-button/test/basic/back-button.e2e.js +6 -6
  353. package/dist/collection/components/back-button/test/toolbar/back-button.e2e.js +6 -6
  354. package/dist/collection/components/backdrop/backdrop.js +131 -131
  355. package/dist/collection/components/badge/badge.js +49 -49
  356. package/dist/collection/components/badge/test/a11y/badge.e2e.js +6 -6
  357. package/dist/collection/components/badge/test/basic/badge.e2e.js +6 -6
  358. package/dist/collection/components/breadcrumb/breadcrumb.js +395 -395
  359. package/dist/collection/components/breadcrumb/test/aria.spec.js +14 -14
  360. package/dist/collection/components/breadcrumbs/breadcrumbs.js +247 -247
  361. package/dist/collection/components/breadcrumbs/test/a11y/breadcrumbs.e2e.js +12 -12
  362. package/dist/collection/components/breadcrumbs/test/basic/breadcrumbs.e2e.js +6 -6
  363. package/dist/collection/components/breadcrumbs/test/breadcrumbs.spec.js +29 -29
  364. package/dist/collection/components/breadcrumbs/test/collapsed/breadcrumbs.e2e.js +6 -6
  365. package/dist/collection/components/breadcrumbs/test/reactive/breadcrumbs.e2e.js +43 -43
  366. package/dist/collection/components/button/button.js +541 -541
  367. package/dist/collection/components/button/test/a11y/button.e2e.js +21 -21
  368. package/dist/collection/components/button/test/basic/button.e2e.js +32 -32
  369. package/dist/collection/components/button/test/clear/button.e2e.js +6 -6
  370. package/dist/collection/components/button/test/expand/button.e2e.js +6 -6
  371. package/dist/collection/components/button/test/form-reference/button.e2e.js +84 -84
  372. package/dist/collection/components/button/test/form-reference/button.spec.js +15 -15
  373. package/dist/collection/components/button/test/icon/button.e2e.js +6 -6
  374. package/dist/collection/components/button/test/outline/button.e2e.js +6 -6
  375. package/dist/collection/components/button/test/round/button.e2e.js +6 -6
  376. package/dist/collection/components/button/test/size/button.e2e.js +22 -22
  377. package/dist/collection/components/button/test/strong/button.e2e.js +22 -22
  378. package/dist/collection/components/button/test/wrap/button.e2e.js +73 -73
  379. package/dist/collection/components/buttons/buttons.js +46 -46
  380. package/dist/collection/components/buttons/test/a11y/buttons.e2e.js +21 -21
  381. package/dist/collection/components/card/card.js +251 -251
  382. package/dist/collection/components/card/test/a11y/card.e2e.js +6 -6
  383. package/dist/collection/components/card/test/aria.spec.js +8 -8
  384. package/dist/collection/components/card/test/basic/card.e2e.js +38 -38
  385. package/dist/collection/components/card-content/card-content.js +21 -21
  386. package/dist/collection/components/card-header/card-header.js +70 -70
  387. package/dist/collection/components/card-header/test/basic/card-header.e2e.js +6 -6
  388. package/dist/collection/components/card-subtitle/card-subtitle.js +50 -50
  389. package/dist/collection/components/card-title/card-title.js +50 -50
  390. package/dist/collection/components/checkbox/checkbox.js +415 -415
  391. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +14 -14
  392. package/dist/collection/components/checkbox/test/basic/checkbox.e2e.js +50 -50
  393. package/dist/collection/components/checkbox/test/checkbox.spec.js +10 -10
  394. package/dist/collection/components/checkbox/test/color/checkbox.e2e.js +11 -11
  395. package/dist/collection/components/checkbox/test/indeterminate/checkbox.e2e.js +6 -6
  396. package/dist/collection/components/checkbox/test/item/checkbox.e2e.js +29 -29
  397. package/dist/collection/components/checkbox/test/label/checkbox.e2e.js +75 -75
  398. package/dist/collection/components/checkbox/test/legacy/basic/checkbox.e2e.js +45 -45
  399. package/dist/collection/components/checkbox/test/legacy/indeterminate/checkbox.e2e.js +6 -6
  400. package/dist/collection/components/checkbox/test/states/checkbox.e2e.js +21 -21
  401. package/dist/collection/components/chip/chip.js +90 -90
  402. package/dist/collection/components/chip/test/a11y/chip.e2e.js +19 -19
  403. package/dist/collection/components/chip/test/basic/chip.e2e.js +42 -42
  404. package/dist/collection/components/chip/test/states/chip.e2e.js +14 -14
  405. package/dist/collection/components/col/col.js +536 -536
  406. package/dist/collection/components/content/content.js +745 -745
  407. package/dist/collection/components/content/test/basic/content.e2e.js +6 -6
  408. package/dist/collection/components/content/test/fixed/content.e2e.js +6 -6
  409. package/dist/collection/components/content/test/fullscreen/content.e2e.js +6 -6
  410. package/dist/collection/components/content/test/standalone/content.e2e.js +5 -5
  411. package/dist/collection/components/datetime/datetime.js +2245 -2245
  412. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +58 -58
  413. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +33 -33
  414. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +241 -241
  415. package/dist/collection/components/datetime/test/color/datetime.e2e.js +9 -9
  416. package/dist/collection/components/datetime/test/comparison.spec.js +33 -33
  417. package/dist/collection/components/datetime/test/custom/datetime.e2e.js +37 -37
  418. package/dist/collection/components/datetime/test/data.spec.js +431 -431
  419. package/dist/collection/components/datetime/test/datetime.e2e.js +29 -29
  420. package/dist/collection/components/datetime/test/disable-dates/datetime.e2e.js +119 -119
  421. package/dist/collection/components/datetime/test/disabled/datetime.e2e.js +43 -43
  422. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +21 -21
  423. package/dist/collection/components/datetime/test/display/datetime.e2e.js +86 -86
  424. package/dist/collection/components/datetime/test/first-day-of-week/datetime.e2e.js +6 -6
  425. package/dist/collection/components/datetime/test/format.spec.js +106 -106
  426. package/dist/collection/components/datetime/test/helpers.spec.js +58 -58
  427. package/dist/collection/components/datetime/test/highlighted-dates/datetime.e2e.js +76 -76
  428. package/dist/collection/components/datetime/test/hour-cycle/datetime.e2e.js +21 -21
  429. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +98 -98
  430. package/dist/collection/components/datetime/test/manipulation.spec.js +384 -384
  431. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +178 -178
  432. package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +17 -17
  433. package/dist/collection/components/datetime/test/multiple/datetime.e2e.js +170 -170
  434. package/dist/collection/components/datetime/test/parse.spec.js +204 -204
  435. package/dist/collection/components/datetime/test/position/datetime.e2e.js +14 -14
  436. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +263 -263
  437. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +137 -137
  438. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +86 -86
  439. package/dist/collection/components/datetime/test/set-value/datetime.e2e.js +40 -40
  440. package/dist/collection/components/datetime/test/state.spec.js +101 -101
  441. package/dist/collection/components/datetime/test/time-label/datetime.e2e.js +13 -13
  442. package/dist/collection/components/datetime/test/values/datetime.e2e.js +77 -77
  443. package/dist/collection/components/datetime/utils/comparison.js +22 -22
  444. package/dist/collection/components/datetime/utils/data.js +394 -394
  445. package/dist/collection/components/datetime/utils/format.js +143 -143
  446. package/dist/collection/components/datetime/utils/helpers.js +74 -74
  447. package/dist/collection/components/datetime/utils/manipulation.js +274 -274
  448. package/dist/collection/components/datetime/utils/parse.js +139 -139
  449. package/dist/collection/components/datetime/utils/state.js +123 -123
  450. package/dist/collection/components/datetime-button/datetime-button.js +399 -399
  451. package/dist/collection/components/datetime-button/test/a11y/datetime-button.e2e.js +11 -11
  452. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +123 -123
  453. package/dist/collection/components/datetime-button/test/disabled/datetime-button.e2e.js +13 -13
  454. package/dist/collection/components/datetime-button/test/multiple/datetime-button.e2e.js +38 -38
  455. package/dist/collection/components/datetime-button/test/overlays/datetime-button.e2e.js +102 -102
  456. package/dist/collection/components/fab/fab.js +179 -179
  457. package/dist/collection/components/fab/test/basic/fab.e2e.js +50 -50
  458. package/dist/collection/components/fab/test/custom-size/fab.e2e.js +6 -6
  459. package/dist/collection/components/fab/test/safe-area/fab.e2e.js +25 -25
  460. package/dist/collection/components/fab/test/states/fab.e2e.js +6 -6
  461. package/dist/collection/components/fab/test/translucent/fab.e2e.js +17 -17
  462. package/dist/collection/components/fab-button/fab-button.js +374 -374
  463. package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +6 -6
  464. package/dist/collection/components/fab-list/fab-list.js +79 -79
  465. package/dist/collection/components/footer/footer.js +135 -135
  466. package/dist/collection/components/footer/footer.utils.js +25 -25
  467. package/dist/collection/components/footer/test/basic/footer.e2e.js +18 -18
  468. package/dist/collection/components/footer/test/fade/footer.e2e.js +10 -10
  469. package/dist/collection/components/footer/test/scroll-target/footer.e2e.js +15 -15
  470. package/dist/collection/components/footer/test/with-tabs/footer.e2e.js +6 -6
  471. package/dist/collection/components/grid/grid.js +44 -44
  472. package/dist/collection/components/grid/test/basic/grid.e2e.js +6 -6
  473. package/dist/collection/components/grid/test/offsets/grid.e2e.js +6 -6
  474. package/dist/collection/components/grid/test/padding/grid.e2e.js +6 -6
  475. package/dist/collection/components/grid/test/sizes/grid.e2e.js +6 -6
  476. package/dist/collection/components/header/header.js +181 -181
  477. package/dist/collection/components/header/header.utils.js +148 -148
  478. package/dist/collection/components/header/test/a11y/header.e2e.js +18 -18
  479. package/dist/collection/components/header/test/basic/header.e2e.js +23 -23
  480. package/dist/collection/components/header/test/condense/header.e2e.js +25 -25
  481. package/dist/collection/components/header/test/fade/header.e2e.js +10 -10
  482. package/dist/collection/components/header/test/scroll-target/header.e2e.js +15 -15
  483. package/dist/collection/components/icon/test/basic/icon.e2e.js +6 -6
  484. package/dist/collection/components/icon/test/dir/icon.e2e.js +11 -11
  485. package/dist/collection/components/img/img.js +177 -177
  486. package/dist/collection/components/img/test/basic/img.e2e.js +62 -62
  487. package/dist/collection/components/img/test/draggable/img.e2e.js +10 -10
  488. package/dist/collection/components/infinite-scroll/infinite-scroll.js +271 -271
  489. package/dist/collection/components/infinite-scroll/test/basic/infinite-scroll.e2e.js +11 -11
  490. package/dist/collection/components/infinite-scroll/test/scroll-target/infinite-scroll.e2e.js +11 -11
  491. package/dist/collection/components/infinite-scroll/test/top/infinite-scroll.e2e.js +11 -11
  492. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +86 -86
  493. package/dist/collection/components/infinite-scroll-content/test/infinite-scroll-content.spec.js +26 -26
  494. package/dist/collection/components/input/input.js +1204 -1204
  495. package/dist/collection/components/input/input.utils.js +22 -22
  496. package/dist/collection/components/input/test/a11y/input.e2e.js +12 -12
  497. package/dist/collection/components/input/test/basic/input.e2e.js +63 -63
  498. package/dist/collection/components/input/test/bottom-content/input.e2e.js +89 -89
  499. package/dist/collection/components/input/test/card/input.e2e.js +6 -6
  500. package/dist/collection/components/input/test/clear-on-edit/input.e2e.js +25 -25
  501. package/dist/collection/components/input/test/color/input.e2e.js +88 -88
  502. package/dist/collection/components/input/test/fill/input.e2e.js +63 -63
  503. package/dist/collection/components/input/test/highlight/input.e2e.js +52 -52
  504. package/dist/collection/components/input/test/input.e2e.js +6 -6
  505. package/dist/collection/components/input/test/input.spec.js +54 -54
  506. package/dist/collection/components/input/test/item/input.e2e.js +11 -11
  507. package/dist/collection/components/input/test/item/input.spec.js +12 -12
  508. package/dist/collection/components/input/test/label-placement/input.e2e.js +104 -104
  509. package/dist/collection/components/input/test/legacy/a11y/input.e2e.js +15 -15
  510. package/dist/collection/components/input/test/legacy/basic/input.e2e.js +102 -102
  511. package/dist/collection/components/input/test/legacy/clear-on-edit/input.e2e.js +44 -44
  512. package/dist/collection/components/input/test/legacy/input-events.e2e.js +56 -56
  513. package/dist/collection/components/input/test/legacy/masking/input.e2e.js +15 -15
  514. package/dist/collection/components/input/test/legacy/spec/input.e2e.js +8 -8
  515. package/dist/collection/components/input/test/states/input.e2e.js +11 -11
  516. package/dist/collection/components/item/item.js +615 -615
  517. package/dist/collection/components/item/test/a11y/item.e2e.js +47 -47
  518. package/dist/collection/components/item/test/a11y/item.spec.js +21 -21
  519. package/dist/collection/components/item/test/alignment/item.e2e.js +6 -6
  520. package/dist/collection/components/item/test/basic/item.e2e.js +15 -15
  521. package/dist/collection/components/item/test/buttons/item.e2e.js +18 -18
  522. package/dist/collection/components/item/test/colors/item.e2e.js +6 -6
  523. package/dist/collection/components/item/test/counter/item.e2e.js +34 -34
  524. package/dist/collection/components/item/test/css-variables/item.e2e.js +6 -6
  525. package/dist/collection/components/item/test/disabled/item.e2e.js +7 -7
  526. package/dist/collection/components/item/test/dividers/item.e2e.js +6 -6
  527. package/dist/collection/components/item/test/groups/item.e2e.js +8 -8
  528. package/dist/collection/components/item/test/highlight/item.e2e.js +6 -6
  529. package/dist/collection/components/item/test/icons/item.e2e.js +6 -6
  530. package/dist/collection/components/item/test/images/item.e2e.js +6 -6
  531. package/dist/collection/components/item/test/inputs/item.e2e.js +139 -139
  532. package/dist/collection/components/item/test/legacy/alignment/item.e2e.js +6 -6
  533. package/dist/collection/components/item/test/legacy/disabled/item.e2e.js +6 -6
  534. package/dist/collection/components/item/test/legacy/fill/item.e2e.js +6 -6
  535. package/dist/collection/components/item/test/legacy/form/item.e2e.js +6 -6
  536. package/dist/collection/components/item/test/lines/item.e2e.js +6 -6
  537. package/dist/collection/components/item/test/media/item.e2e.js +6 -6
  538. package/dist/collection/components/item/test/reorder/item.e2e.js +8 -8
  539. package/dist/collection/components/item/test/slotted-inputs/item.e2e.js +6 -6
  540. package/dist/collection/components/item/test/states/item.e2e.js +6 -6
  541. package/dist/collection/components/item/test/text/item.e2e.js +6 -6
  542. package/dist/collection/components/item-divider/item-divider.js +71 -71
  543. package/dist/collection/components/item-divider/test/a11y/item-divider.e2e.js +11 -11
  544. package/dist/collection/components/item-divider/test/basic/item-divider.e2e.js +25 -25
  545. package/dist/collection/components/item-divider/test/spec/item-divider.e2e.js +8 -8
  546. package/dist/collection/components/item-group/item-group.js +22 -22
  547. package/dist/collection/components/item-option/item-option.js +197 -197
  548. package/dist/collection/components/item-options/item-options.js +110 -110
  549. package/dist/collection/components/item-sliding/item-sliding.js +538 -538
  550. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +5 -5
  551. package/dist/collection/components/item-sliding/test/async/item-sliding.e2e.js +25 -25
  552. package/dist/collection/components/item-sliding/test/basic/item-sliding.e2e.js +87 -87
  553. package/dist/collection/components/item-sliding/test/icons/item-sliding.e2e.js +20 -20
  554. package/dist/collection/components/item-sliding/test/scroll-target/item-sliding.e2e.js +18 -18
  555. package/dist/collection/components/item-sliding/test/test.utils.js +20 -20
  556. package/dist/collection/components/label/label.js +174 -174
  557. package/dist/collection/components/label/test/a11y/label.e2e.js +21 -21
  558. package/dist/collection/components/label/test/basic/label.e2e.js +21 -21
  559. package/dist/collection/components/label/test/color/label.e2e.js +21 -21
  560. package/dist/collection/components/label/test/headings/label.e2e.js +5 -5
  561. package/dist/collection/components/list/list.js +101 -101
  562. package/dist/collection/components/list/test/a11y/list.e2e.js +6 -6
  563. package/dist/collection/components/list/test/basic/list.e2e.js +6 -6
  564. package/dist/collection/components/list/test/inset/list.e2e.js +16 -16
  565. package/dist/collection/components/list/test/lines/list.e2e.js +40 -40
  566. package/dist/collection/components/list-header/list-header.js +69 -69
  567. package/dist/collection/components/list-header/test/a11y/list-header.e2e.js +6 -6
  568. package/dist/collection/components/list-header/test/basic/list-header.e2e.js +14 -14
  569. package/dist/collection/components/loading/animations/ios.enter.js +19 -19
  570. package/dist/collection/components/loading/animations/ios.leave.js +13 -13
  571. package/dist/collection/components/loading/animations/md.enter.js +19 -19
  572. package/dist/collection/components/loading/animations/md.leave.js +13 -13
  573. package/dist/collection/components/loading/loading.js +730 -720
  574. package/dist/collection/components/loading/test/a11y/loading.e2e.js +26 -26
  575. package/dist/collection/components/loading/test/basic/loading.e2e.js +60 -60
  576. package/dist/collection/components/loading/test/basic/loading.spec.js +7 -7
  577. package/dist/collection/components/loading/test/is-open/loading.e2e.js +17 -17
  578. package/dist/collection/components/loading/test/loading-id.spec.js +25 -25
  579. package/dist/collection/components/loading/test/loading.spec.js +26 -26
  580. package/dist/collection/components/loading/test/standalone/loading.e2e.js +13 -13
  581. package/dist/collection/components/loading/test/trigger/loading.e2e.js +21 -21
  582. package/dist/collection/components/menu/menu.js +956 -956
  583. package/dist/collection/components/menu/test/a11y/menu.e2e.js +13 -13
  584. package/dist/collection/components/menu/test/basic/menu.e2e.js +102 -102
  585. package/dist/collection/components/menu/test/disable/menu.e2e.js +44 -44
  586. package/dist/collection/components/menu/test/focus-trap/menu.e2e.js +61 -61
  587. package/dist/collection/components/menu/test/multiple/menu.e2e.js +49 -49
  588. package/dist/collection/components/menu/test/safe-area/menu.e2e.js +54 -54
  589. package/dist/collection/components/menu-button/menu-button.js +173 -173
  590. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +12 -12
  591. package/dist/collection/components/menu-button/test/async/menu-button.e2e.js +12 -12
  592. package/dist/collection/components/menu-button/test/basic/menu-button.e2e.js +6 -6
  593. package/dist/collection/components/menu-toggle/menu-toggle-util.js +2 -2
  594. package/dist/collection/components/menu-toggle/menu-toggle.js +93 -93
  595. package/dist/collection/components/menu-toggle/test/basic/menu-toggle.e2e.js +33 -33
  596. package/dist/collection/components/modal/animations/ios.enter.js +81 -81
  597. package/dist/collection/components/modal/animations/ios.leave.js +74 -74
  598. package/dist/collection/components/modal/animations/md.enter.js +21 -21
  599. package/dist/collection/components/modal/animations/md.leave.js +15 -15
  600. package/dist/collection/components/modal/animations/sheet.js +43 -43
  601. package/dist/collection/components/modal/gestures/sheet.js +289 -289
  602. package/dist/collection/components/modal/gestures/swipe-to-close.js +247 -247
  603. package/dist/collection/components/modal/gestures/utils.js +39 -39
  604. package/dist/collection/components/modal/modal.js +1290 -1280
  605. package/dist/collection/components/modal/test/a11y/modal.e2e.js +12 -12
  606. package/dist/collection/components/modal/test/a11y/modal.spec.js +12 -12
  607. package/dist/collection/components/modal/test/basic/modal.e2e.js +110 -110
  608. package/dist/collection/components/modal/test/basic/modal.spec.js +7 -7
  609. package/dist/collection/components/modal/test/can-dismiss/modal-card.e2e.js +44 -44
  610. package/dist/collection/components/modal/test/can-dismiss/modal-sheet.e2e.js +62 -62
  611. package/dist/collection/components/modal/test/can-dismiss/modal.e2e.js +16 -16
  612. package/dist/collection/components/modal/test/can-dismiss/modal.spec.js +172 -172
  613. package/dist/collection/components/modal/test/card/modal-card.e2e.js +69 -69
  614. package/dist/collection/components/modal/test/card/modal-tablet.e2e.js +67 -67
  615. package/dist/collection/components/modal/test/card-nav/modal.e2e.js +26 -26
  616. package/dist/collection/components/modal/test/card-refresher/modal.e2e.js +14 -14
  617. package/dist/collection/components/modal/test/card-scroll-target/modal.e2e.js +34 -34
  618. package/dist/collection/components/modal/test/custom/modal.e2e.js +16 -16
  619. package/dist/collection/components/modal/test/custom-dialog/modal.e2e.js +12 -12
  620. package/dist/collection/components/modal/test/dark-mode/model.e2e.js +12 -12
  621. package/dist/collection/components/modal/test/fixtures.js +21 -21
  622. package/dist/collection/components/modal/test/inline/modal.e2e.js +34 -34
  623. package/dist/collection/components/modal/test/is-open/modal.e2e.js +17 -17
  624. package/dist/collection/components/modal/test/modal-id.spec.js +25 -25
  625. package/dist/collection/components/modal/test/sheet/modal.e2e.js +178 -178
  626. package/dist/collection/components/modal/test/standalone/modal.e2e.js +12 -12
  627. package/dist/collection/components/modal/test/trigger/modal.e2e.js +23 -23
  628. package/dist/collection/components/modal/utils.js +55 -55
  629. package/dist/collection/components/modal/utils.spec.js +7 -7
  630. package/dist/collection/components/nav/nav.js +1748 -1748
  631. package/dist/collection/components/nav/test/basic/nav.e2e.js +58 -58
  632. package/dist/collection/components/nav/test/modal-navigation/nav.e2e.js +52 -52
  633. package/dist/collection/components/nav/test/nav-controller.spec.js +735 -735
  634. package/dist/collection/components/nav/test/nested/nav.e2e.js +54 -54
  635. package/dist/collection/components/nav/test/routing/nav.e2e.js +75 -75
  636. package/dist/collection/components/nav/view-controller.js +52 -52
  637. package/dist/collection/components/nav-link/nav-link-utils.js +16 -16
  638. package/dist/collection/components/nav-link/nav-link.js +106 -106
  639. package/dist/collection/components/note/note.js +49 -49
  640. package/dist/collection/components/note/test/a11y/note.e2e.js +16 -16
  641. package/dist/collection/components/note/test/basic/note.e2e.js +33 -33
  642. package/dist/collection/components/picker/animations/ios.enter.js +18 -18
  643. package/dist/collection/components/picker/animations/ios.leave.js +14 -14
  644. package/dist/collection/components/picker/picker.js +782 -772
  645. package/dist/collection/components/picker/test/basic/picker.e2e.js +17 -17
  646. package/dist/collection/components/picker/test/is-open/picker.e2e.js +17 -17
  647. package/dist/collection/components/picker/test/picker-id.spec.js +25 -25
  648. package/dist/collection/components/picker/test/trigger/picker.e2e.js +21 -21
  649. package/dist/collection/components/picker-column/picker-column.js +377 -377
  650. package/dist/collection/components/picker-column/test/picker-column-aria.spec.js +21 -21
  651. package/dist/collection/components/picker-column/test/picker-column-dynamic.spec.js +20 -20
  652. package/dist/collection/components/picker-column/test/picker-column.spec.js +8 -8
  653. package/dist/collection/components/picker-column/test/standalone/picker-column.e2e.js +27 -27
  654. package/dist/collection/components/picker-column/test/test.utils.js +29 -29
  655. package/dist/collection/components/picker-column-internal/picker-column-internal.js +523 -523
  656. package/dist/collection/components/picker-column-internal/test/basic/picker-column-internal.e2e.js +53 -53
  657. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +54 -54
  658. package/dist/collection/components/picker-internal/picker-internal.js +517 -517
  659. package/dist/collection/components/picker-internal/test/a11y/picker-internal.e2e.js +6 -6
  660. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +76 -76
  661. package/dist/collection/components/picker-internal/test/keyboard-entry/picker-internal.e2e.js +39 -39
  662. package/dist/collection/components/popover/animations/ios.enter.js +79 -79
  663. package/dist/collection/components/popover/animations/ios.leave.js +28 -28
  664. package/dist/collection/components/popover/animations/md.enter.js +58 -58
  665. package/dist/collection/components/popover/animations/md.leave.js +19 -19
  666. package/dist/collection/components/popover/popover.js +1189 -1179
  667. package/dist/collection/components/popover/test/adjustment/popover.e2e.js +22 -22
  668. package/dist/collection/components/popover/test/arrow/popover.e2e.js +15 -15
  669. package/dist/collection/components/popover/test/async/popover.e2e.js +29 -29
  670. package/dist/collection/components/popover/test/basic/popover.e2e.js +108 -108
  671. package/dist/collection/components/popover/test/basic/popover.spec.js +7 -7
  672. package/dist/collection/components/popover/test/dismiss-on-select/popover.e2e.js +26 -26
  673. package/dist/collection/components/popover/test/fixture.js +16 -16
  674. package/dist/collection/components/popover/test/inline/popover.e2e.js +18 -18
  675. package/dist/collection/components/popover/test/is-open/popover.e2e.js +5 -5
  676. package/dist/collection/components/popover/test/nested/popover.e2e.js +81 -81
  677. package/dist/collection/components/popover/test/popover-id.spec.js +25 -25
  678. package/dist/collection/components/popover/test/position/popover.e2e.js +18 -18
  679. package/dist/collection/components/popover/test/reference/popover.e2e.js +14 -14
  680. package/dist/collection/components/popover/test/size/popover.e2e.js +29 -29
  681. package/dist/collection/components/popover/test/standalone/popover.e2e.js +7 -7
  682. package/dist/collection/components/popover/test/test.utils.js +23 -23
  683. package/dist/collection/components/popover/test/trigger/popover.e2e.js +35 -35
  684. package/dist/collection/components/popover/test/util.spec.js +39 -39
  685. package/dist/collection/components/popover/utils.js +606 -606
  686. package/dist/collection/components/progress-bar/progress-bar.js +145 -145
  687. package/dist/collection/components/progress-bar/test/basic/progress-bar.e2e.js +6 -6
  688. package/dist/collection/components/progress-bar/test/buffer/progress-bar.e2e.js +10 -10
  689. package/dist/collection/components/progress-bar/test/determinate/progress-bar.e2e.js +10 -10
  690. package/dist/collection/components/radio/radio.js +448 -448
  691. package/dist/collection/components/radio/test/a11y/radio.e2e.js +40 -40
  692. package/dist/collection/components/radio/test/color/radio.e2e.js +11 -11
  693. package/dist/collection/components/radio/test/item/radio.e2e.js +37 -37
  694. package/dist/collection/components/radio/test/label-placement/radio.e2e.js +70 -70
  695. package/dist/collection/components/radio/test/legacy/a11y/radio.e2e.js +29 -29
  696. package/dist/collection/components/radio/test/legacy/basic/radio.e2e.js +43 -43
  697. package/dist/collection/components/radio/test/radio.spec.js +26 -26
  698. package/dist/collection/components/radio/test/states/radio.e2e.js +21 -21
  699. package/dist/collection/components/radio-group/radio-group.js +255 -255
  700. package/dist/collection/components/radio-group/test/basic/radio-group.e2e.js +35 -35
  701. package/dist/collection/components/radio-group/test/fixtures.js +22 -22
  702. package/dist/collection/components/radio-group/test/form/radio-group.e2e.js +39 -39
  703. package/dist/collection/components/radio-group/test/legacy/basic/radio-group.e2e.js +59 -59
  704. package/dist/collection/components/radio-group/test/legacy/form/radio-group.e2e.js +22 -22
  705. package/dist/collection/components/radio-group/test/legacy/search/radio-group.e2e.js +27 -27
  706. package/dist/collection/components/radio-group/test/radio-group-events.e2e.js +42 -42
  707. package/dist/collection/components/radio-group/test/search/radio-group.e2e.js +23 -23
  708. package/dist/collection/components/range/range.js +998 -998
  709. package/dist/collection/components/range/test/a11y/range.e2e.js +46 -46
  710. package/dist/collection/components/range/test/active-bar-start/range.e2e.js +6 -6
  711. package/dist/collection/components/range/test/basic/range.e2e.js +23 -23
  712. package/dist/collection/components/range/test/color/range.e2e.js +6 -6
  713. package/dist/collection/components/range/test/custom/range.e2e.js +6 -6
  714. package/dist/collection/components/range/test/item/range.e2e.js +28 -28
  715. package/dist/collection/components/range/test/label/range.e2e.js +99 -99
  716. package/dist/collection/components/range/test/label/range.spec.js +11 -11
  717. package/dist/collection/components/range/test/legacy/a11y/range.e2e.js +25 -25
  718. package/dist/collection/components/range/test/legacy/active-bar-start/range.e2e.js +6 -6
  719. package/dist/collection/components/range/test/legacy/basic/range.e2e.js +61 -61
  720. package/dist/collection/components/range/test/legacy/range-events.e2e.js +80 -80
  721. package/dist/collection/components/range/test/legacy/scroll-target/range.e2e.js +23 -23
  722. package/dist/collection/components/range/test/range-events.e2e.js +135 -135
  723. package/dist/collection/components/range/test/range.spec.js +141 -141
  724. package/dist/collection/components/range/test/scroll-target/range.e2e.js +23 -23
  725. package/dist/collection/components/range/test/states/range.e2e.js +21 -21
  726. package/dist/collection/components/refresher/refresher.js +806 -806
  727. package/dist/collection/components/refresher/refresher.utils.js +148 -148
  728. package/dist/collection/components/refresher/test/basic/refresher.e2e.js +25 -25
  729. package/dist/collection/components/refresher/test/scroll-target/refresher.e2e.js +25 -25
  730. package/dist/collection/components/refresher/test/test.utils.js +5 -5
  731. package/dist/collection/components/refresher-content/refresher-content.js +131 -131
  732. package/dist/collection/components/refresher-content/test/refresher-content.spec.js +35 -35
  733. package/dist/collection/components/reorder/reorder.js +37 -37
  734. package/dist/collection/components/reorder-group/reorder-group.js +327 -327
  735. package/dist/collection/components/reorder-group/test/a11y/reorder-group.e2e.js +6 -6
  736. package/dist/collection/components/reorder-group/test/basic/reorder-group.e2e.js +11 -11
  737. package/dist/collection/components/reorder-group/test/interactive/reorder-group.e2e.js +21 -21
  738. package/dist/collection/components/reorder-group/test/nested/reorder-group.e2e.js +21 -21
  739. package/dist/collection/components/reorder-group/test/scroll-target/reorder-group.e2e.js +21 -21
  740. package/dist/collection/components/ripple-effect/ripple-effect.js +135 -135
  741. package/dist/collection/components/ripple-effect/test/basic/ripple-effect.e2e.js +48 -48
  742. package/dist/collection/components/route/route.js +151 -151
  743. package/dist/collection/components/route-redirect/route-redirect.js +76 -76
  744. package/dist/collection/components/router/router.js +472 -472
  745. package/dist/collection/components/router/test/basic/router.e2e.js +55 -55
  746. package/dist/collection/components/router/test/guards/href/router.e2e.js +51 -51
  747. package/dist/collection/components/router/test/guards/link/router.e2e.js +51 -51
  748. package/dist/collection/components/router/test/guards/push/router.e2e.js +51 -51
  749. package/dist/collection/components/router/test/guards/router.e2e.js +5 -5
  750. package/dist/collection/components/router/test/guards/test.utils.js +2 -2
  751. package/dist/collection/components/router/test/matching.spec.js +227 -227
  752. package/dist/collection/components/router/test/parser.spec.js +119 -119
  753. package/dist/collection/components/router/test/path.spec.js +199 -199
  754. package/dist/collection/components/router/test/router.spec.js +41 -41
  755. package/dist/collection/components/router/utils/debug.js +14 -14
  756. package/dist/collection/components/router/utils/dom.js +56 -56
  757. package/dist/collection/components/router/utils/matching.js +150 -150
  758. package/dist/collection/components/router/utils/parser.js +52 -52
  759. package/dist/collection/components/router/utils/path.js +66 -66
  760. package/dist/collection/components/router-link/router-link.js +157 -157
  761. package/dist/collection/components/router-outlet/router-outlet.js +458 -458
  762. package/dist/collection/components/router-outlet/test/basic/router-outlet.e2e.js +31 -31
  763. package/dist/collection/components/row/row.js +15 -15
  764. package/dist/collection/components/searchbar/searchbar.js +889 -889
  765. package/dist/collection/components/searchbar/test/a11y/searchbar.e2e.js +11 -11
  766. package/dist/collection/components/searchbar/test/basic/searchbar.e2e.js +101 -101
  767. package/dist/collection/components/searchbar/test/events/searchbar.e2e.js +55 -55
  768. package/dist/collection/components/searchbar/test/searchbar.spec.js +7 -7
  769. package/dist/collection/components/segment/segment.js +631 -631
  770. package/dist/collection/components/segment/test/a11y/segment.e2e.js +37 -37
  771. package/dist/collection/components/segment/test/basic/segment.e2e.js +22 -22
  772. package/dist/collection/components/segment/test/custom/segment.e2e.js +6 -6
  773. package/dist/collection/components/segment/test/icon/segment.e2e.js +6 -6
  774. package/dist/collection/components/segment/test/modes/segment.e2e.js +15 -15
  775. package/dist/collection/components/segment/test/scrollable/segment.e2e.js +12 -12
  776. package/dist/collection/components/segment/test/segment-events.e2e.js +97 -97
  777. package/dist/collection/components/segment/test/segment.spec.js +18 -18
  778. package/dist/collection/components/segment/test/toolbar/segment.e2e.js +21 -21
  779. package/dist/collection/components/segment/test/wrap/segment.e2e.js +21 -21
  780. package/dist/collection/components/segment-button/segment-button.js +217 -217
  781. package/dist/collection/components/select/select.js +1179 -1179
  782. package/dist/collection/components/select/test/a11y/select.e2e.js +14 -14
  783. package/dist/collection/components/select/test/async/select.e2e.js +14 -14
  784. package/dist/collection/components/select/test/basic/select.e2e.js +140 -140
  785. package/dist/collection/components/select/test/card/select.e2e.js +6 -6
  786. package/dist/collection/components/select/test/color/select.e2e.js +22 -22
  787. package/dist/collection/components/select/test/compare-with/select.e2e.js +33 -33
  788. package/dist/collection/components/select/test/custom/select.e2e.js +19 -19
  789. package/dist/collection/components/select/test/disabled/select.e2e.js +17 -17
  790. package/dist/collection/components/select/test/fill/select.e2e.js +63 -63
  791. package/dist/collection/components/select/test/highlight/select.e2e.js +74 -74
  792. package/dist/collection/components/select/test/item/select.e2e.js +11 -11
  793. package/dist/collection/components/select/test/label/select.e2e.js +140 -140
  794. package/dist/collection/components/select/test/legacy/async/select.e2e.js +8 -8
  795. package/dist/collection/components/select/test/legacy/basic/select.e2e.js +108 -108
  796. package/dist/collection/components/select/test/legacy/compare-with/select.e2e.js +33 -33
  797. package/dist/collection/components/select/test/legacy/custom/custom.e2e.js +5 -5
  798. package/dist/collection/components/select/test/legacy/single-value/select.e2e.js +8 -8
  799. package/dist/collection/components/select/test/legacy/spec/select.e2e.js +6 -6
  800. package/dist/collection/components/select/test/legacy/standalone/select.e2e.js +11 -11
  801. package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +16 -16
  802. package/dist/collection/components/select/test/popover-size/select.e2e.js +63 -63
  803. package/dist/collection/components/select/test/select.spec.js +41 -41
  804. package/dist/collection/components/select/test/states/select.e2e.js +21 -21
  805. package/dist/collection/components/select/test/toggle-icon/select.e2e.js +14 -14
  806. package/dist/collection/components/select/test/wrapping/select.e2e.js +16 -16
  807. package/dist/collection/components/select-option/select-option.js +60 -60
  808. package/dist/collection/components/select-popover/select-popover.js +197 -197
  809. package/dist/collection/components/select-popover/test/basic/select-popover.e2e.js +52 -52
  810. package/dist/collection/components/select-popover/test/fixtures.js +33 -33
  811. package/dist/collection/components/skeleton-text/skeleton-text.js +48 -48
  812. package/dist/collection/components/skeleton-text/test/basic/skeleton-text.e2e.js +6 -6
  813. package/dist/collection/components/skeleton-text/test/custom/skeleton-text.e2e.js +6 -6
  814. package/dist/collection/components/slides/IonicSlides.js +95 -95
  815. package/dist/collection/components/spinner/spinner-configs.js +121 -121
  816. package/dist/collection/components/spinner/spinner.js +137 -137
  817. package/dist/collection/components/spinner/test/basic/spinner.e2e.js +10 -10
  818. package/dist/collection/components/spinner/test/color/spinner.e2e.js +10 -10
  819. package/dist/collection/components/spinner/test/resize/spinner.e2e.js +8 -8
  820. package/dist/collection/components/split-pane/split-pane.js +225 -225
  821. package/dist/collection/components/split-pane/test/basic/split-pane.e2e.js +18 -18
  822. package/dist/collection/components/split-pane/test/multiple/split-pane.e2e.js +23 -23
  823. package/dist/collection/components/tab/tab.js +170 -170
  824. package/dist/collection/components/tab-bar/tab-bar.js +177 -177
  825. package/dist/collection/components/tab-bar/test/basic/tab-bar.e2e.js +8 -8
  826. package/dist/collection/components/tab-bar/test/custom/tab-bar.e2e.js +6 -6
  827. package/dist/collection/components/tab-bar/test/translucent/tab-bar.e2e.js +14 -14
  828. package/dist/collection/components/tab-button/tab-button.js +267 -267
  829. package/dist/collection/components/tab-button/test/a11y/tab-button.e2e.js +6 -6
  830. package/dist/collection/components/tab-button/test/basic/tab-button.e2e.js +16 -16
  831. package/dist/collection/components/tab-button/test/layout/tab-button.e2e.js +26 -26
  832. package/dist/collection/components/tab-button/test/states/tab-button.e2e.js +26 -26
  833. package/dist/collection/components/tabs/tabs.js +344 -344
  834. package/dist/collection/components/tabs/test/basic/tabs.e2e.js +24 -24
  835. package/dist/collection/components/tabs/test/placements/tabs.e2e.js +17 -17
  836. package/dist/collection/components/text/test/basic/text.e2e.js +11 -11
  837. package/dist/collection/components/text/text.js +47 -47
  838. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +12 -12
  839. package/dist/collection/components/textarea/test/autogrow/textarea.e2e.js +31 -31
  840. package/dist/collection/components/textarea/test/bottom-content/textarea.e2e.js +82 -82
  841. package/dist/collection/components/textarea/test/card/textarea.e2e.js +6 -6
  842. package/dist/collection/components/textarea/test/clear-on-edit/textarea.e2e.js +17 -17
  843. package/dist/collection/components/textarea/test/color/textarea.e2e.js +88 -88
  844. package/dist/collection/components/textarea/test/cols/textarea.e2e.js +11 -11
  845. package/dist/collection/components/textarea/test/fill/textarea.e2e.js +63 -63
  846. package/dist/collection/components/textarea/test/highlight/textarea.e2e.js +52 -52
  847. package/dist/collection/components/textarea/test/item/textarea.e2e.js +11 -11
  848. package/dist/collection/components/textarea/test/label-placement/textarea.e2e.js +150 -150
  849. package/dist/collection/components/textarea/test/legacy/a11y/textarea.e2e.js +15 -15
  850. package/dist/collection/components/textarea/test/legacy/autogrow/textarea.e2e.js +31 -31
  851. package/dist/collection/components/textarea/test/legacy/basic/textarea.e2e.js +30 -30
  852. package/dist/collection/components/textarea/test/legacy/clear-on-edit/textarea.e2e.js +17 -17
  853. package/dist/collection/components/textarea/test/states/textarea.e2e.js +11 -11
  854. package/dist/collection/components/textarea/test/textarea-events.e2e.js +57 -57
  855. package/dist/collection/components/textarea/test/textarea.spec.js +32 -32
  856. package/dist/collection/components/textarea/textarea.js +1019 -1019
  857. package/dist/collection/components/thumbnail/test/basic/thumbnail.e2e.js +28 -28
  858. package/dist/collection/components/thumbnail/thumbnail.js +15 -15
  859. package/dist/collection/components/title/test/a11y/title.e2e.js +17 -17
  860. package/dist/collection/components/title/test/basic/title.e2e.js +13 -13
  861. package/dist/collection/components/title/title.js +119 -119
  862. package/dist/collection/components/toast/animations/ios.enter.js +20 -20
  863. package/dist/collection/components/toast/animations/ios.leave.js +18 -18
  864. package/dist/collection/components/toast/animations/md.enter.js +22 -22
  865. package/dist/collection/components/toast/animations/md.leave.js +6 -6
  866. package/dist/collection/components/toast/animations/utils.js +52 -52
  867. package/dist/collection/components/toast/test/a11y/toast.e2e.js +92 -92
  868. package/dist/collection/components/toast/test/basic/toast.e2e.js +101 -101
  869. package/dist/collection/components/toast/test/is-open/toast.e2e.js +17 -17
  870. package/dist/collection/components/toast/test/layout/toast.e2e.js +9 -9
  871. package/dist/collection/components/toast/test/position-anchor/toast.e2e.js +37 -37
  872. package/dist/collection/components/toast/test/standalone/toast.e2e.js +10 -10
  873. package/dist/collection/components/toast/test/toast-id.spec.js +25 -25
  874. package/dist/collection/components/toast/test/toast.spec.js +85 -85
  875. package/dist/collection/components/toast/test/trigger/toast.e2e.js +21 -21
  876. package/dist/collection/components/toast/toast.js +961 -951
  877. package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +6 -6
  878. package/dist/collection/components/toggle/test/color/toggle.e2e.js +11 -11
  879. package/dist/collection/components/toggle/test/enable-on-off-labels/toggle.e2e.js +27 -27
  880. package/dist/collection/components/toggle/test/item/toggle.e2e.js +52 -52
  881. package/dist/collection/components/toggle/test/label/toggle.e2e.js +65 -65
  882. package/dist/collection/components/toggle/test/legacy/basic/toggle.e2e.js +69 -69
  883. package/dist/collection/components/toggle/test/legacy/enable-on-off-labels/toggle.e2e.js +23 -23
  884. package/dist/collection/components/toggle/test/legacy/sizes/toggle.e2e.js +6 -6
  885. package/dist/collection/components/toggle/test/sizes/toggle.e2e.js +6 -6
  886. package/dist/collection/components/toggle/test/states/toggle.e2e.js +16 -16
  887. package/dist/collection/components/toggle/test/toggle.spec.js +40 -40
  888. package/dist/collection/components/toggle/toggle.js +484 -484
  889. package/dist/collection/components/toolbar/test/basic/toolbar.e2e.js +7 -7
  890. package/dist/collection/components/toolbar/test/colors/toolbar.e2e.js +6 -6
  891. package/dist/collection/components/toolbar/toolbar.js +100 -100
  892. package/dist/collection/css/test/a11y/typography.e2e.js +6 -6
  893. package/dist/collection/global/config.js +51 -51
  894. package/dist/collection/global/ionic-global.js +54 -54
  895. package/dist/collection/global/test/config-controller.spec.js +68 -68
  896. package/dist/collection/utils/animation/animation-utils.js +91 -91
  897. package/dist/collection/utils/animation/animation.js +905 -905
  898. package/dist/collection/utils/animation/cubic-bezier.js +49 -49
  899. package/dist/collection/utils/animation/test/animation.spec.js +412 -412
  900. package/dist/collection/utils/animation/test/animationbuilder/animation.e2e.js +26 -26
  901. package/dist/collection/utils/animation/test/basic/animation.e2e.js +12 -12
  902. package/dist/collection/utils/animation/test/display/animation.e2e.js +18 -18
  903. package/dist/collection/utils/animation/test/hooks/animation.e2e.js +39 -39
  904. package/dist/collection/utils/animation/test/multiple/animation.e2e.js +27 -27
  905. package/dist/collection/utils/config.js +20 -20
  906. package/dist/collection/utils/content/content.utils.spec.js +121 -121
  907. package/dist/collection/utils/content/index.js +58 -58
  908. package/dist/collection/utils/floating-point/floating-point.spec.js +14 -14
  909. package/dist/collection/utils/floating-point/index.js +5 -5
  910. package/dist/collection/utils/focus-visible.js +63 -63
  911. package/dist/collection/utils/forms/form-controller.js +45 -45
  912. package/dist/collection/utils/forms/notch-controller.js +120 -120
  913. package/dist/collection/utils/framework-delegate.js +121 -121
  914. package/dist/collection/utils/gesture/button-active.js +56 -56
  915. package/dist/collection/utils/gesture/gesture-controller.js +182 -182
  916. package/dist/collection/utils/gesture/index.js +222 -222
  917. package/dist/collection/utils/gesture/listener.js +36 -36
  918. package/dist/collection/utils/gesture/pointer-events.js +113 -113
  919. package/dist/collection/utils/gesture/recognizers.js +46 -46
  920. package/dist/collection/utils/gesture/swipe-back.js +65 -65
  921. package/dist/collection/utils/hardware-back-button.js +48 -48
  922. package/dist/collection/utils/helpers.js +258 -258
  923. package/dist/collection/utils/helpers.spec.js +28 -28
  924. package/dist/collection/utils/input-shims/hacks/common.js +61 -61
  925. package/dist/collection/utils/input-shims/hacks/hide-caret.js +19 -19
  926. package/dist/collection/utils/input-shims/hacks/input-blurring.js +47 -47
  927. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +225 -225
  928. package/dist/collection/utils/input-shims/hacks/scroll-data.js +29 -29
  929. package/dist/collection/utils/input-shims/hacks/scroll-padding.js +21 -21
  930. package/dist/collection/utils/input-shims/hacks/test/scroll-assist.e2e.js +97 -97
  931. package/dist/collection/utils/input-shims/input-shims.js +82 -82
  932. package/dist/collection/utils/keyboard/keyboard-controller.js +128 -128
  933. package/dist/collection/utils/keyboard/keyboard.js +59 -59
  934. package/dist/collection/utils/keyboard/test/keyboard-controller.spec.js +15 -15
  935. package/dist/collection/utils/keyboard/test/keyboard.spec.js +193 -193
  936. package/dist/collection/utils/lock-controller.js +24 -24
  937. package/dist/collection/utils/logging/index.js +3 -3
  938. package/dist/collection/utils/media.js +13 -13
  939. package/dist/collection/utils/menu-controller/animations/base.js +8 -8
  940. package/dist/collection/utils/menu-controller/animations/overlay.js +21 -21
  941. package/dist/collection/utils/menu-controller/animations/push.js +20 -20
  942. package/dist/collection/utils/menu-controller/animations/reveal.js +6 -6
  943. package/dist/collection/utils/menu-controller/index.js +205 -205
  944. package/dist/collection/utils/native/capacitor.js +4 -4
  945. package/dist/collection/utils/native/haptic.js +151 -151
  946. package/dist/collection/utils/native/keyboard.js +47 -47
  947. package/dist/collection/utils/native/native-interface.js +15 -15
  948. package/dist/collection/utils/native/status-bar.js +36 -36
  949. package/dist/collection/utils/overlays.js +494 -494
  950. package/dist/collection/utils/platform.js +56 -56
  951. package/dist/collection/utils/rtl/dir.js +5 -5
  952. package/dist/collection/utils/rtl/dir.spec.js +17 -17
  953. package/dist/collection/utils/sanitization/index.js +122 -122
  954. package/dist/collection/utils/sanitization/test/sanitization.spec.js +35 -35
  955. package/dist/collection/utils/slot-mutation-controller.js +84 -84
  956. package/dist/collection/utils/status-tap.js +26 -26
  957. package/dist/collection/utils/tap-click/index.js +171 -171
  958. package/dist/collection/utils/tap-click/test/tap-click.e2e.js +12 -12
  959. package/dist/collection/utils/test/aria.spec.js +47 -47
  960. package/dist/collection/utils/test/attributes.spec.js +40 -40
  961. package/dist/collection/utils/test/framework-delegate/framework-delegate.e2e.js +25 -25
  962. package/dist/collection/utils/test/hardware-back-button.spec.js +41 -41
  963. package/dist/collection/utils/test/overlays/overlays.e2e.js +137 -137
  964. package/dist/collection/utils/test/overlays/overlays.spec.js +68 -68
  965. package/dist/collection/utils/test/platform.spec.js +123 -123
  966. package/dist/collection/utils/test/platform.utils.js +77 -77
  967. package/dist/collection/utils/test/playwright/drag-element.js +69 -69
  968. package/dist/collection/utils/test/playwright/generator.js +48 -25
  969. package/dist/collection/utils/test/playwright/matchers/index.js +3 -3
  970. package/dist/collection/utils/test/playwright/matchers/toHaveReceivedEvent.js +21 -21
  971. package/dist/collection/utils/test/playwright/matchers/toHaveReceivedEventDetail.js +28 -28
  972. package/dist/collection/utils/test/playwright/matchers/toHaveReceivedEventTimes.js +22 -22
  973. package/dist/collection/utils/test/playwright/page/event-spy.js +110 -110
  974. package/dist/collection/utils/test/playwright/page/utils/goto.js +52 -52
  975. package/dist/collection/utils/test/playwright/page/utils/locator.js +8 -8
  976. package/dist/collection/utils/test/playwright/page/utils/set-content.js +42 -34
  977. package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +19 -19
  978. package/dist/collection/utils/test/playwright/page/utils/spy-on-event.js +4 -4
  979. package/dist/collection/utils/test/playwright/page/utils/wait-for-changes.js +48 -48
  980. package/dist/collection/utils/test/playwright/playwright-page.js +35 -35
  981. package/dist/collection/utils/test/playwright/viewports/index.js +13 -13
  982. package/dist/collection/utils/test/press-keys.js +77 -77
  983. package/dist/collection/utils/test/ready.spec.js +31 -31
  984. package/dist/collection/utils/test/theme.spec.js +46 -46
  985. package/dist/collection/utils/theme.js +23 -23
  986. package/dist/collection/utils/transition/index.js +163 -163
  987. package/dist/collection/utils/transition/ios.transition.js +598 -598
  988. package/dist/collection/utils/transition/md.transition.js +44 -44
  989. package/dist/collection/utils/watch-options.js +30 -30
  990. package/dist/docs.json +2 -2
  991. package/dist/esm/animation-fb0e0f6f.js +1059 -0
  992. package/dist/esm/{app-globals-2398e405.js → app-globals-c23144fc.js} +1 -1
  993. package/dist/esm/button-active-7013b5a1.js +67 -0
  994. package/dist/esm/{capacitor-b4979570.js → capacitor-b0e5fe83.js} +4 -4
  995. package/dist/esm/config-49c88215.js +193 -0
  996. package/dist/esm/cubic-bezier-fe2083dc.js +90 -0
  997. package/dist/esm/data-f5c75b4e.js +1575 -0
  998. package/dist/esm/{dir-912e3e13.js → dir-babeabeb.js} +5 -5
  999. package/dist/esm/focus-visible-dd40d69f.js +75 -0
  1000. package/dist/esm/form-controller-548aa79c.js +64 -0
  1001. package/dist/esm/framework-delegate-bc1fd82a.js +140 -0
  1002. package/dist/esm/gesture-controller-1bf57181.js +195 -0
  1003. package/dist/esm/haptic-152c4172.js +206 -0
  1004. package/dist/esm/hardware-back-button-b2bc76db.js +71 -0
  1005. package/dist/esm/helpers-ae653409.js +418 -0
  1006. package/dist/esm/index-2cf77112.js +457 -0
  1007. package/dist/esm/{index-7c9b1bca.js → index-39329c6f.js} +19 -6
  1008. package/dist/esm/index-7a818ed3.js +308 -0
  1009. package/dist/esm/{index-595d62c9.js → index-9b0d46f4.js} +3 -3
  1010. package/dist/esm/{index-4392efa5.js → index-b9e742e5.js} +60 -60
  1011. package/dist/esm/index-ba9976bb.js +196 -0
  1012. package/dist/esm/index-bebaae5d.js +231 -0
  1013. package/dist/esm/index.js +112 -112
  1014. package/dist/esm/input-shims-0a2e541d.js +594 -0
  1015. package/dist/esm/input.utils-2846d430.js +134 -0
  1016. package/dist/esm/ion-accordion_2.entry.js +488 -488
  1017. package/dist/esm/ion-action-sheet.entry.js +259 -249
  1018. package/dist/esm/ion-alert.entry.js +439 -429
  1019. package/dist/esm/ion-app_8.entry.js +1149 -1149
  1020. package/dist/esm/ion-avatar_3.entry.js +29 -29
  1021. package/dist/esm/ion-back-button.entry.js +73 -73
  1022. package/dist/esm/ion-backdrop.entry.js +40 -40
  1023. package/dist/esm/ion-breadcrumb_2.entry.js +194 -194
  1024. package/dist/esm/ion-button_2.entry.js +303 -303
  1025. package/dist/esm/ion-card_5.entry.js +105 -105
  1026. package/dist/esm/ion-checkbox.entry.js +145 -145
  1027. package/dist/esm/ion-chip.entry.js +20 -20
  1028. package/dist/esm/ion-col_3.entry.js +136 -136
  1029. package/dist/esm/ion-datetime-button.entry.js +325 -325
  1030. package/dist/esm/ion-datetime_3.entry.js +2182 -2172
  1031. package/dist/esm/ion-fab_3.entry.js +150 -150
  1032. package/dist/esm/ion-img.entry.js +79 -79
  1033. package/dist/esm/ion-infinite-scroll_2.entry.js +190 -190
  1034. package/dist/esm/ion-input.entry.js +396 -396
  1035. package/dist/esm/ion-item-option_3.entry.js +457 -457
  1036. package/dist/esm/ion-item_8.entry.js +425 -425
  1037. package/dist/esm/ion-loading.entry.js +219 -209
  1038. package/dist/esm/ion-menu_3.entry.js +667 -667
  1039. package/dist/esm/ion-modal.entry.js +1414 -1404
  1040. package/dist/esm/ion-nav_2.entry.js +904 -904
  1041. package/dist/esm/ion-picker-column-internal.entry.js +328 -328
  1042. package/dist/esm/ion-picker-internal.entry.js +453 -453
  1043. package/dist/esm/ion-popover.entry.js +1107 -1097
  1044. package/dist/esm/ion-progress-bar.entry.js +40 -40
  1045. package/dist/esm/ion-radio_2.entry.js +314 -314
  1046. package/dist/esm/ion-range.entry.js +554 -554
  1047. package/dist/esm/ion-refresher_2.entry.js +785 -785
  1048. package/dist/esm/ion-reorder_2.entry.js +266 -266
  1049. package/dist/esm/ion-ripple-effect.entry.js +66 -66
  1050. package/dist/esm/ion-route_4.entry.js +693 -693
  1051. package/dist/esm/ion-searchbar.entry.js +358 -358
  1052. package/dist/esm/ion-segment_2.entry.js +507 -507
  1053. package/dist/esm/ion-select_3.entry.js +761 -761
  1054. package/dist/esm/ion-spinner.entry.js +46 -46
  1055. package/dist/esm/ion-split-pane.entry.js +117 -117
  1056. package/dist/esm/ion-tab-bar_2.entry.js +137 -137
  1057. package/dist/esm/ion-tab_2.entry.js +187 -187
  1058. package/dist/esm/ion-text.entry.js +13 -13
  1059. package/dist/esm/ion-textarea.entry.js +350 -350
  1060. package/dist/esm/ion-toast.entry.js +404 -394
  1061. package/dist/esm/ion-toggle.entry.js +222 -222
  1062. package/dist/esm/ionic-global-6c78e871.js +224 -0
  1063. package/dist/esm/ionic.js +5 -5
  1064. package/dist/esm/ios.transition-daa373e9.js +651 -0
  1065. package/dist/esm/keyboard-c402e885.js +146 -0
  1066. package/dist/esm/keyboard-controller-5d90929a.js +165 -0
  1067. package/dist/esm/keyboard-dbb05fb9.js +79 -0
  1068. package/dist/esm/loader.js +4 -4
  1069. package/dist/esm/lock-controller-316928be.js +38 -0
  1070. package/dist/esm/md.transition-91c3d3cc.js +57 -0
  1071. package/dist/esm/notch-controller-d09b6aca.js +153 -0
  1072. package/dist/esm/overlays-64e67e2c.js +692 -0
  1073. package/dist/esm/spinner-configs-964f7cf3.js +145 -0
  1074. package/dist/esm/status-tap-9dd45200.js +40 -0
  1075. package/dist/esm/swipe-back-a6f386fc.js +79 -0
  1076. package/dist/esm/theme-01f3f29c.js +43 -0
  1077. package/dist/esm/watch-options-c2911ace.js +47 -0
  1078. package/dist/esm-es5/{animation-8aa13916.js → animation-fb0e0f6f.js} +1 -1
  1079. package/dist/esm-es5/app-globals-c23144fc.js +4 -0
  1080. package/dist/esm-es5/{button-active-ce5cba4c.js → button-active-7013b5a1.js} +1 -1
  1081. package/dist/esm-es5/{data-44d9e816.js → data-f5c75b4e.js} +1 -1
  1082. package/dist/esm-es5/{form-controller-64edeaad.js → form-controller-548aa79c.js} +1 -1
  1083. package/dist/esm-es5/{framework-delegate-aa433dea.js → framework-delegate-bc1fd82a.js} +1 -1
  1084. package/dist/esm-es5/{haptic-1243b917.js → haptic-152c4172.js} +1 -1
  1085. package/dist/esm-es5/{index-ff313b19.js → index-2cf77112.js} +1 -1
  1086. package/dist/esm-es5/{index-7c9b1bca.js → index-39329c6f.js} +1 -1
  1087. package/dist/esm-es5/{index-0aa6e61f.js → index-7a818ed3.js} +1 -1
  1088. package/dist/esm-es5/{index-4392efa5.js → index-b9e742e5.js} +1 -1
  1089. package/dist/esm-es5/{index-f0cc4e14.js → index-ba9976bb.js} +1 -1
  1090. package/dist/esm-es5/{index-6a0ccabb.js → index-bebaae5d.js} +1 -1
  1091. package/dist/esm-es5/index.js +1 -1
  1092. package/dist/esm-es5/{input-shims-d0c93e5d.js → input-shims-0a2e541d.js} +1 -1
  1093. package/dist/esm-es5/{input.utils-ec063df4.js → input.utils-2846d430.js} +1 -1
  1094. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  1095. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  1096. package/dist/esm-es5/ion-alert.entry.js +1 -1
  1097. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  1098. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  1099. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  1100. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  1101. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  1102. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  1103. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  1104. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  1105. package/dist/esm-es5/ion-chip.entry.js +1 -1
  1106. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  1107. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  1108. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  1109. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  1110. package/dist/esm-es5/ion-img.entry.js +1 -1
  1111. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  1112. package/dist/esm-es5/ion-input.entry.js +1 -1
  1113. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  1114. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  1115. package/dist/esm-es5/ion-loading.entry.js +1 -1
  1116. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  1117. package/dist/esm-es5/ion-modal.entry.js +1 -1
  1118. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  1119. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  1120. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  1121. package/dist/esm-es5/ion-popover.entry.js +1 -1
  1122. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  1123. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  1124. package/dist/esm-es5/ion-range.entry.js +1 -1
  1125. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  1126. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  1127. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  1128. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  1129. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  1130. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  1131. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  1132. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  1133. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  1134. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  1135. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  1136. package/dist/esm-es5/ion-text.entry.js +1 -1
  1137. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  1138. package/dist/esm-es5/ion-toast.entry.js +1 -1
  1139. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  1140. package/dist/esm-es5/{ionic-global-40e42e7f.js → ionic-global-6c78e871.js} +1 -1
  1141. package/dist/esm-es5/ionic.js +1 -1
  1142. package/dist/esm-es5/{ios.transition-1651c430.js → ios.transition-daa373e9.js} +1 -1
  1143. package/dist/esm-es5/{keyboard-b551279d.js → keyboard-c402e885.js} +1 -1
  1144. package/dist/esm-es5/{keyboard-controller-0c2dce71.js → keyboard-controller-5d90929a.js} +1 -1
  1145. package/dist/esm-es5/{keyboard-b063f012.js → keyboard-dbb05fb9.js} +1 -1
  1146. package/dist/esm-es5/loader.js +1 -1
  1147. package/dist/esm-es5/md.transition-91c3d3cc.js +4 -0
  1148. package/dist/esm-es5/{notch-controller-8c9c0e54.js → notch-controller-d09b6aca.js} +1 -1
  1149. package/dist/esm-es5/{overlays-6c9feb7e.js → overlays-64e67e2c.js} +1 -1
  1150. package/dist/esm-es5/{status-tap-9ce68758.js → status-tap-9dd45200.js} +1 -1
  1151. package/dist/esm-es5/{swipe-back-0f3bfc8e.js → swipe-back-a6f386fc.js} +1 -1
  1152. package/dist/ionic/index.esm.js +1 -1
  1153. package/dist/ionic/ionic.esm.js +1 -1
  1154. package/dist/ionic/ionic.js +15 -15
  1155. package/dist/ionic/p-013013a3.js +4 -0
  1156. package/dist/ionic/{p-c4042875.system.js → p-0263eb49.system.js} +1 -1
  1157. package/dist/ionic/{p-800ef057.js → p-06600f70.js} +1 -1
  1158. package/dist/ionic/{p-cf425ec5.system.entry.js → p-0827d00e.system.entry.js} +1 -1
  1159. package/dist/ionic/p-12cdcb59.js +5 -0
  1160. package/dist/ionic/{p-744973f3.entry.js → p-161d0916.entry.js} +1 -1
  1161. package/dist/ionic/{p-a936d224.system.js → p-1631b52f.system.js} +1 -1
  1162. package/dist/ionic/{p-b0cee324.entry.js → p-18032a93.entry.js} +1 -1
  1163. package/dist/ionic/{p-beb64be7.system.entry.js → p-19545a49.system.entry.js} +1 -1
  1164. package/dist/ionic/{p-174f3446.entry.js → p-1c6c6098.entry.js} +1 -1
  1165. package/dist/ionic/{p-ff5144f3.system.entry.js → p-1cbc21e2.system.entry.js} +1 -1
  1166. package/dist/ionic/{p-0a794e83.entry.js → p-1ff22253.entry.js} +1 -1
  1167. package/dist/ionic/{p-6c3d5383.js → p-21f015cf.js} +1 -1
  1168. package/dist/ionic/{p-b2a74a72.entry.js → p-22c6adfa.entry.js} +1 -1
  1169. package/dist/ionic/{p-4cd588b3.system.entry.js → p-23a27e78.system.entry.js} +1 -1
  1170. package/dist/ionic/{p-a5c1e6ce.entry.js → p-2507b0c0.entry.js} +1 -1
  1171. package/dist/ionic/{p-3ce8c3e3.entry.js → p-2657f213.entry.js} +1 -1
  1172. package/dist/ionic/{p-db5043df.system.entry.js → p-27a5f2c7.system.entry.js} +1 -1
  1173. package/dist/ionic/p-27e6473f.entry.js +4 -0
  1174. package/dist/ionic/{p-3fb57e1b.system.entry.js → p-2a7e6572.system.entry.js} +1 -1
  1175. package/dist/ionic/{p-bed722c4.system.entry.js → p-2ac9d078.system.entry.js} +1 -1
  1176. package/dist/ionic/{p-17240d90.js → p-2aea8b1e.js} +1 -1
  1177. package/dist/ionic/{p-1a8ae7a7.system.entry.js → p-2cd9cb80.system.entry.js} +1 -1
  1178. package/dist/ionic/{p-97c65aa5.js → p-2d5aeccc.js} +1 -1
  1179. package/dist/ionic/{p-67eecef4.system.js → p-2d600c25.system.js} +1 -1
  1180. package/dist/ionic/{p-ab4cff27.system.js → p-304383f9.system.js} +1 -1
  1181. package/dist/ionic/{p-276afddd.js → p-308e1341.js} +1 -1
  1182. package/dist/ionic/{p-c7d30db9.entry.js → p-312221db.entry.js} +1 -1
  1183. package/dist/ionic/{p-39044fe6.system.entry.js → p-315ad733.system.entry.js} +1 -1
  1184. package/dist/ionic/{p-fa8d4788.system.js → p-31b2326e.system.js} +1 -1
  1185. package/dist/ionic/{p-41477ad9.system.js → p-32e19bee.system.js} +1 -1
  1186. package/dist/ionic/p-33f3cd49.entry.js +4 -0
  1187. package/dist/ionic/{p-41122cd6.system.js → p-34d6f520.system.js} +1 -1
  1188. package/dist/ionic/{p-8ad82eb3.entry.js → p-3535a36c.entry.js} +1 -1
  1189. package/dist/ionic/p-35ce400e.system.js +4 -0
  1190. package/dist/ionic/{p-55ed230e.system.js → p-38c337e7.system.js} +1 -1
  1191. package/dist/ionic/{p-d21bfe66.system.entry.js → p-3acad8ff.system.entry.js} +1 -1
  1192. package/dist/ionic/{p-48d9faa7.entry.js → p-3cb5466e.entry.js} +1 -1
  1193. package/dist/ionic/{p-0dc0d9b5.entry.js → p-3f5ae764.entry.js} +1 -1
  1194. package/dist/ionic/{p-77e7a9c8.entry.js → p-405f1a72.entry.js} +1 -1
  1195. package/dist/ionic/{p-b287ab05.js → p-4180a747.js} +1 -1
  1196. package/dist/ionic/{p-67e644bd.system.entry.js → p-41f7af3f.system.entry.js} +1 -1
  1197. package/dist/ionic/{p-dfa756ed.system.js → p-426bdba9.system.js} +1 -1
  1198. package/dist/ionic/{p-ddfc4ef4.system.entry.js → p-45db7949.system.entry.js} +1 -1
  1199. package/dist/ionic/p-46dbd723.entry.js +4 -0
  1200. package/dist/ionic/{p-419eb426.js → p-4e8e09e1.js} +1 -1
  1201. package/dist/ionic/{p-a6d83a03.system.entry.js → p-4f71a9cf.system.entry.js} +1 -1
  1202. package/dist/ionic/{p-ed636a74.entry.js → p-53a3283e.entry.js} +1 -1
  1203. package/dist/ionic/{p-6d812360.system.entry.js → p-57c0d5bf.system.entry.js} +1 -1
  1204. package/dist/ionic/{p-f54ddd19.entry.js → p-58dd7c15.entry.js} +1 -1
  1205. package/dist/ionic/{p-a545b4f1.system.js → p-58ff9e5b.system.js} +1 -1
  1206. package/dist/ionic/{p-67ed452a.system.entry.js → p-5a7d5905.system.entry.js} +1 -1
  1207. package/dist/ionic/{p-7ab6fc5a.system.entry.js → p-5c7f13cd.system.entry.js} +1 -1
  1208. package/dist/ionic/{p-6e23777e.system.entry.js → p-5f127075.system.entry.js} +1 -1
  1209. package/dist/ionic/{p-b1142133.entry.js → p-5f46d93e.entry.js} +1 -1
  1210. package/dist/ionic/{p-a8e68fd9.entry.js → p-5fb707e0.entry.js} +1 -1
  1211. package/dist/ionic/{p-b923f3d7.js → p-643a8fae.js} +1 -1
  1212. package/dist/ionic/{p-1e86a71b.entry.js → p-64af4468.entry.js} +1 -1
  1213. package/dist/ionic/p-66d633fb.js +4 -0
  1214. package/dist/ionic/{p-b6f8ee31.entry.js → p-6744eca5.entry.js} +1 -1
  1215. package/dist/ionic/{p-14aca3fb.entry.js → p-67598744.entry.js} +1 -1
  1216. package/dist/ionic/p-6a6477b2.js +4 -0
  1217. package/dist/ionic/{p-8cf94fc1.js → p-6c37f051.js} +1 -1
  1218. package/dist/ionic/{p-7176cea3.entry.js → p-6cf08720.entry.js} +1 -1
  1219. package/dist/ionic/{p-965677f1.entry.js → p-70ecb18b.entry.js} +1 -1
  1220. package/dist/ionic/{p-73411c1b.entry.js → p-71d986ae.entry.js} +1 -1
  1221. package/dist/ionic/{p-957601e8.system.entry.js → p-742e11cf.system.entry.js} +1 -1
  1222. package/dist/ionic/{p-14b4348c.system.js → p-7484b1d6.system.js} +1 -1
  1223. package/dist/ionic/{p-3bad5c1a.js → p-75445583.js} +1 -1
  1224. package/dist/ionic/{p-8a308596.system.js → p-7798c78a.system.js} +2 -2
  1225. package/dist/ionic/{p-664d2b07.system.entry.js → p-7ae5ca1f.system.entry.js} +1 -1
  1226. package/dist/ionic/{p-5da0eb3e.system.entry.js → p-8261be6c.system.entry.js} +1 -1
  1227. package/dist/ionic/{p-b8c3f071.system.js → p-82e3d633.system.js} +1 -1
  1228. package/dist/ionic/p-83af3685.system.js +4 -0
  1229. package/dist/ionic/{p-18e01b30.system.entry.js → p-83fada9e.system.entry.js} +1 -1
  1230. package/dist/ionic/p-856c430d.js +4 -0
  1231. package/dist/ionic/{p-e76a4bc8.entry.js → p-86c2bbc8.entry.js} +1 -1
  1232. package/dist/ionic/{p-613d4042.system.js → p-888db766.system.js} +1 -1
  1233. package/dist/ionic/{p-92800752.entry.js → p-89026d53.entry.js} +1 -1
  1234. package/dist/ionic/{p-f3c82f74.system.entry.js → p-89cfbc88.system.entry.js} +2 -2
  1235. package/dist/ionic/{p-c919498d.entry.js → p-8a10752d.entry.js} +1 -1
  1236. package/dist/ionic/{p-abacb44b.system.entry.js → p-8a75f7bf.system.entry.js} +1 -1
  1237. package/dist/ionic/{p-d3952bd5.system.entry.js → p-8c202d6e.system.entry.js} +1 -1
  1238. package/dist/ionic/{p-e8400078.system.entry.js → p-90db28f8.system.entry.js} +1 -1
  1239. package/dist/ionic/{p-9b89cbde.js → p-91f9e81b.js} +1 -1
  1240. package/dist/ionic/{p-4c80afe1.system.entry.js → p-93dac17a.system.entry.js} +1 -1
  1241. package/dist/ionic/{p-b4b4bb29.system.js → p-95c26010.system.js} +1 -1
  1242. package/dist/ionic/{p-0330f0a3.system.entry.js → p-98ac0e27.system.entry.js} +2 -2
  1243. package/dist/ionic/{p-bba2ce59.system.js → p-98d82c73.system.js} +1 -1
  1244. package/dist/ionic/p-990ffd0e.js +4 -0
  1245. package/dist/ionic/{p-a21b8d05.entry.js → p-99fe0543.entry.js} +1 -1
  1246. package/dist/ionic/{p-f5a750e4.system.entry.js → p-9f376964.system.entry.js} +1 -1
  1247. package/dist/ionic/{p-c7b8c2ef.system.entry.js → p-a0945c3a.system.entry.js} +1 -1
  1248. package/dist/ionic/{p-07d9e9cd.system.entry.js → p-a0db3de9.system.entry.js} +1 -1
  1249. package/dist/ionic/p-a1b4dba7.entry.js +4 -0
  1250. package/dist/ionic/{p-64ed03a3.entry.js → p-a3a145d3.entry.js} +1 -1
  1251. package/dist/ionic/{p-af016cd3.entry.js → p-a5c81b99.entry.js} +1 -1
  1252. package/dist/ionic/{p-8b29691f.entry.js → p-a70b5d24.entry.js} +1 -1
  1253. package/dist/ionic/{p-4a142496.system.entry.js → p-a843a90e.system.entry.js} +1 -1
  1254. package/dist/ionic/{p-0e23256e.system.entry.js → p-a99f14a7.system.entry.js} +1 -1
  1255. package/dist/ionic/{p-5cfb3feb.system.entry.js → p-aac289d2.system.entry.js} +1 -1
  1256. package/dist/ionic/{p-702d85d8.system.js → p-abab375b.system.js} +1 -1
  1257. package/dist/ionic/{p-a0b6d438.js → p-ac4a7fc0.js} +1 -1
  1258. package/dist/ionic/{p-5d711127.js → p-acdd8148.js} +1 -1
  1259. package/dist/ionic/{p-34d2de14.system.entry.js → p-ad4d66ba.system.entry.js} +1 -1
  1260. package/dist/ionic/{p-09d142b3.system.js → p-ad78c421.system.js} +1 -1
  1261. package/dist/ionic/{p-d7ea6a0d.system.entry.js → p-ad953217.system.entry.js} +1 -1
  1262. package/dist/ionic/p-af959b5d.entry.js +4 -0
  1263. package/dist/ionic/{p-45da1e68.system.entry.js → p-b0fcf130.system.entry.js} +1 -1
  1264. package/dist/ionic/{p-b91fe549.entry.js → p-b11ceee2.entry.js} +1 -1
  1265. package/dist/ionic/{p-1e5165db.system.entry.js → p-b5e33ebc.system.entry.js} +1 -1
  1266. package/dist/ionic/{p-ffb876b0.system.entry.js → p-b81a8111.system.entry.js} +1 -1
  1267. package/dist/ionic/p-b8f2134e.js +4 -0
  1268. package/dist/ionic/{p-5bd4e009.entry.js → p-bbe3feee.entry.js} +1 -1
  1269. package/dist/ionic/{p-1cb5f2f8.system.entry.js → p-bc97b5cd.system.entry.js} +1 -1
  1270. package/dist/ionic/{p-7cee75c0.entry.js → p-c04accad.entry.js} +1 -1
  1271. package/dist/ionic/{p-40903d34.system.js → p-c5ae50be.system.js} +1 -1
  1272. package/dist/ionic/{p-377c636c.system.entry.js → p-ca32685b.system.entry.js} +1 -1
  1273. package/dist/ionic/p-cde72008.js +4 -0
  1274. package/dist/ionic/{p-29fe18ef.entry.js → p-d0251fc4.entry.js} +1 -1
  1275. package/dist/ionic/p-d1530ea9.entry.js +4 -0
  1276. package/dist/ionic/{p-63f08fe3.entry.js → p-d3e123c0.entry.js} +1 -1
  1277. package/dist/ionic/{p-ff5a10f9.system.js → p-d43f1f3d.system.js} +1 -1
  1278. package/dist/ionic/{p-9ab6f3e6.system.js → p-d9695ad9.system.js} +1 -1
  1279. package/dist/ionic/p-ddccf1f4.js +4 -0
  1280. package/dist/ionic/{p-352c0232.system.entry.js → p-df361680.system.entry.js} +1 -1
  1281. package/dist/ionic/{p-b906c5ca.entry.js → p-e145b9f9.entry.js} +1 -1
  1282. package/dist/ionic/{p-c0c81820.system.js → p-e26030f8.system.js} +1 -1
  1283. package/dist/ionic/{p-67e18f02.system.entry.js → p-e3c44332.system.entry.js} +1 -1
  1284. package/dist/ionic/{p-5deff017.entry.js → p-e4045e04.entry.js} +1 -1
  1285. package/dist/ionic/{p-f37b4b79.entry.js → p-e8e530fc.entry.js} +1 -1
  1286. package/dist/ionic/p-eab6401e.js +4 -0
  1287. package/dist/ionic/{p-a9c3699b.system.entry.js → p-edc5c693.system.entry.js} +1 -1
  1288. package/dist/ionic/{p-3de79805.entry.js → p-ee4a54e3.entry.js} +1 -1
  1289. package/dist/ionic/{p-1d269117.system.entry.js → p-eef8d7e8.system.entry.js} +1 -1
  1290. package/dist/ionic/{p-b203659a.system.entry.js → p-f0384573.system.entry.js} +1 -1
  1291. package/dist/ionic/{p-97e31c0a.system.js → p-f10de9d5.system.js} +1 -1
  1292. package/dist/ionic/{p-f4cc91f6.entry.js → p-f34d6a49.entry.js} +1 -1
  1293. package/dist/ionic/{p-778af3a7.entry.js → p-f444fea5.entry.js} +1 -1
  1294. package/dist/ionic/{p-3602001b.system.js → p-f54c72b0.system.js} +1 -1
  1295. package/dist/ionic/p-f5d2dc9b.js +4 -0
  1296. package/dist/ionic/{p-d2597b3e.system.js → p-f8c5a0dd.system.js} +1 -1
  1297. package/dist/ionic/p-f967631d.js +4 -0
  1298. package/dist/ionic/{p-c56b6570.system.entry.js → p-fcf49977.system.entry.js} +1 -1
  1299. package/dist/types/components/accordion/accordion.d.ts +62 -62
  1300. package/dist/types/components/accordion-group/accordion-group-interface.d.ts +3 -3
  1301. package/dist/types/components/accordion-group/accordion-group.d.ts +76 -76
  1302. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +25 -25
  1303. package/dist/types/components/action-sheet/action-sheet.d.ts +149 -149
  1304. package/dist/types/components/action-sheet/test/basic/fixture.d.ts +7 -7
  1305. package/dist/types/components/alert/alert-interface.d.ts +45 -45
  1306. package/dist/types/components/alert/alert.d.ts +181 -181
  1307. package/dist/types/components/app/app.d.ts +15 -15
  1308. package/dist/types/components/avatar/avatar.d.ts +1 -1
  1309. package/dist/types/components/back-button/back-button.d.ts +41 -41
  1310. package/dist/types/components/backdrop/backdrop.d.ts +22 -22
  1311. package/dist/types/components/badge/badge.d.ts +7 -7
  1312. package/dist/types/components/breadcrumb/breadcrumb-interface.d.ts +4 -4
  1313. package/dist/types/components/breadcrumb/breadcrumb.d.ts +87 -87
  1314. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +39 -39
  1315. package/dist/types/components/button/button.d.ts +121 -121
  1316. package/dist/types/components/buttons/buttons.d.ts +14 -14
  1317. package/dist/types/components/card/card.d.ts +57 -57
  1318. package/dist/types/components/card-content/card-content.d.ts +1 -1
  1319. package/dist/types/components/card-header/card-header.d.ts +13 -13
  1320. package/dist/types/components/card-subtitle/card-subtitle.d.ts +7 -7
  1321. package/dist/types/components/card-title/card-title.d.ts +7 -7
  1322. package/dist/types/components/checkbox/checkbox-interface.d.ts +4 -4
  1323. package/dist/types/components/checkbox/checkbox.d.ts +111 -111
  1324. package/dist/types/components/chip/chip.d.ts +15 -15
  1325. package/dist/types/components/col/col.d.ts +128 -128
  1326. package/dist/types/components/content/content-interface.d.ts +6 -6
  1327. package/dist/types/components/content/content.d.ts +129 -129
  1328. package/dist/types/components/datetime/datetime-interface.d.ts +15 -15
  1329. package/dist/types/components/datetime/datetime.d.ts +407 -407
  1330. package/dist/types/components/datetime/utils/data.d.ts +11 -11
  1331. package/dist/types/components/datetime/utils/manipulation.d.ts +25 -25
  1332. package/dist/types/components/datetime/utils/state.d.ts +8 -8
  1333. package/dist/types/components/datetime-button/datetime-button.d.ts +59 -59
  1334. package/dist/types/components/fab/fab.d.ts +33 -33
  1335. package/dist/types/components/fab-button/fab-button.d.ts +88 -88
  1336. package/dist/types/components/fab-list/fab-list.d.ts +11 -11
  1337. package/dist/types/components/footer/footer.d.ts +27 -27
  1338. package/dist/types/components/grid/grid.d.ts +5 -5
  1339. package/dist/types/components/header/header.d.ts +31 -31
  1340. package/dist/types/components/header/header.utils.d.ts +7 -7
  1341. package/dist/types/components/img/img.d.ts +30 -30
  1342. package/dist/types/components/infinite-scroll/infinite-scroll-interface.d.ts +1 -1
  1343. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +58 -58
  1344. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +23 -23
  1345. package/dist/types/components/input/input-interface.d.ts +6 -6
  1346. package/dist/types/components/input/input.d.ts +315 -315
  1347. package/dist/types/components/item/item.d.ts +111 -111
  1348. package/dist/types/components/item-divider/item-divider.d.ts +16 -16
  1349. package/dist/types/components/item-group/item-group.d.ts +1 -1
  1350. package/dist/types/components/item-option/item-option.d.ts +44 -44
  1351. package/dist/types/components/item-options/item-options.d.ts +13 -13
  1352. package/dist/types/components/item-sliding/item-sliding-interface.d.ts +1 -1
  1353. package/dist/types/components/item-sliding/item-sliding.d.ts +75 -75
  1354. package/dist/types/components/label/label.d.ts +30 -30
  1355. package/dist/types/components/list/list.d.ts +17 -17
  1356. package/dist/types/components/list-header/list-header.d.ts +11 -11
  1357. package/dist/types/components/loading/loading-interface.d.ts +16 -16
  1358. package/dist/types/components/loading/loading.d.ts +152 -152
  1359. package/dist/types/components/menu/menu-interface.d.ts +39 -39
  1360. package/dist/types/components/menu/menu.d.ts +140 -140
  1361. package/dist/types/components/menu-button/menu-button.d.ts +30 -30
  1362. package/dist/types/components/menu-toggle/menu-toggle.d.ts +21 -21
  1363. package/dist/types/components/modal/animations/sheet.d.ts +4 -4
  1364. package/dist/types/components/modal/gestures/sheet.d.ts +30 -30
  1365. package/dist/types/components/modal/gestures/swipe-to-close.d.ts +1 -1
  1366. package/dist/types/components/modal/modal-interface.d.ts +27 -27
  1367. package/dist/types/components/modal/modal.d.ts +265 -265
  1368. package/dist/types/components/modal/test/fixtures.d.ts +7 -7
  1369. package/dist/types/components/nav/nav-interface.d.ts +40 -40
  1370. package/dist/types/components/nav/nav.d.ts +247 -247
  1371. package/dist/types/components/nav/view-controller.d.ts +13 -13
  1372. package/dist/types/components/nav-link/nav-link.d.ts +19 -19
  1373. package/dist/types/components/note/note.d.ts +7 -7
  1374. package/dist/types/components/picker/picker-interface.d.ts +43 -43
  1375. package/dist/types/components/picker/picker.d.ts +149 -149
  1376. package/dist/types/components/picker-column/picker-column.d.ts +39 -39
  1377. package/dist/types/components/picker-column-internal/picker-column-internal-interfaces.d.ts +3 -3
  1378. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +93 -93
  1379. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +4 -4
  1380. package/dist/types/components/picker-internal/picker-internal.d.ts +94 -94
  1381. package/dist/types/components/popover/popover-interface.d.ts +26 -26
  1382. package/dist/types/components/popover/popover.d.ts +279 -279
  1383. package/dist/types/components/popover/test/fixture.d.ts +5 -5
  1384. package/dist/types/components/popover/utils.d.ts +25 -25
  1385. package/dist/types/components/progress-bar/progress-bar.d.ts +27 -27
  1386. package/dist/types/components/radio/radio.d.ts +99 -99
  1387. package/dist/types/components/radio-group/radio-group-interface.d.ts +4 -4
  1388. package/dist/types/components/radio-group/radio-group.d.ts +43 -43
  1389. package/dist/types/components/radio-group/test/fixtures.d.ts +5 -5
  1390. package/dist/types/components/range/range-interface.d.ts +7 -7
  1391. package/dist/types/components/range/range.d.ts +192 -192
  1392. package/dist/types/components/refresher/refresher-interface.d.ts +3 -3
  1393. package/dist/types/components/refresher/refresher.d.ts +132 -132
  1394. package/dist/types/components/refresher-content/refresher-content.d.ts +44 -44
  1395. package/dist/types/components/reorder/reorder.d.ts +3 -3
  1396. package/dist/types/components/reorder-group/reorder-group-interface.d.ts +5 -5
  1397. package/dist/types/components/reorder-group/reorder-group.d.ts +53 -53
  1398. package/dist/types/components/ripple-effect/ripple-effect.d.ts +20 -20
  1399. package/dist/types/components/route/route-interface.d.ts +1 -1
  1400. package/dist/types/components/route/route.d.ts +43 -43
  1401. package/dist/types/components/route-redirect/route-redirect.d.ts +33 -33
  1402. package/dist/types/components/router/router.d.ts +72 -72
  1403. package/dist/types/components/router/utils/dom.d.ts +2 -2
  1404. package/dist/types/components/router/utils/interface.d.ts +31 -31
  1405. package/dist/types/components/router/utils/matching.d.ts +6 -6
  1406. package/dist/types/components/router-link/router-link.d.ts +34 -34
  1407. package/dist/types/components/router-outlet/router-outlet.d.ts +41 -41
  1408. package/dist/types/components/row/row.d.ts +1 -1
  1409. package/dist/types/components/searchbar/searchbar-interface.d.ts +6 -6
  1410. package/dist/types/components/searchbar/searchbar.d.ts +233 -233
  1411. package/dist/types/components/segment/segment-interface.d.ts +3 -3
  1412. package/dist/types/components/segment/segment.d.ts +82 -82
  1413. package/dist/types/components/segment-button/segment-button.d.ts +36 -36
  1414. package/dist/types/components/select/select-interface.d.ts +3 -3
  1415. package/dist/types/components/select/select.d.ts +233 -233
  1416. package/dist/types/components/select-option/select-option.d.ts +11 -11
  1417. package/dist/types/components/select-popover/select-popover-interface.d.ts +8 -8
  1418. package/dist/types/components/select-popover/select-popover.d.ts +39 -39
  1419. package/dist/types/components/select-popover/test/fixtures.d.ts +12 -12
  1420. package/dist/types/components/skeleton-text/skeleton-text.d.ts +6 -6
  1421. package/dist/types/components/spinner/spinner-configs.d.ts +96 -96
  1422. package/dist/types/components/spinner/spinner-interface.d.ts +14 -14
  1423. package/dist/types/components/spinner/spinner.d.ts +21 -21
  1424. package/dist/types/components/split-pane/split-pane.d.ts +33 -33
  1425. package/dist/types/components/tab/tab.d.ts +21 -21
  1426. package/dist/types/components/tab-bar/tab-bar-interface.d.ts +4 -4
  1427. package/dist/types/components/tab-bar/tab-bar.d.ts +34 -34
  1428. package/dist/types/components/tab-button/tab-button.d.ts +56 -56
  1429. package/dist/types/components/tabs/tabs-interface.d.ts +4 -4
  1430. package/dist/types/components/tabs/tabs.d.ts +52 -52
  1431. package/dist/types/components/text/text.d.ts +7 -7
  1432. package/dist/types/components/textarea/textarea-interface.d.ts +6 -6
  1433. package/dist/types/components/textarea/textarea.d.ts +269 -269
  1434. package/dist/types/components/thumbnail/thumbnail.d.ts +1 -1
  1435. package/dist/types/components/title/title.d.ts +21 -21
  1436. package/dist/types/components/toast/toast-interface.d.ts +35 -35
  1437. package/dist/types/components/toast/toast.d.ts +213 -213
  1438. package/dist/types/components/toggle/toggle-interface.d.ts +4 -4
  1439. package/dist/types/components/toggle/toggle.d.ts +116 -116
  1440. package/dist/types/components/toolbar/toolbar.d.ts +11 -11
  1441. package/dist/types/global/config.d.ts +6 -6
  1442. package/dist/types/stencil-public-runtime.d.ts +8 -0
  1443. package/dist/types/utils/animation/animation-interface.d.ts +205 -205
  1444. package/dist/types/utils/browser/index.d.ts +6 -6
  1445. package/dist/types/utils/config.d.ts +175 -175
  1446. package/dist/types/utils/element-interface.d.ts +6 -6
  1447. package/dist/types/utils/focus-visible.d.ts +2 -2
  1448. package/dist/types/utils/forms/form-controller.d.ts +3 -3
  1449. package/dist/types/utils/forms/notch-controller.d.ts +2 -2
  1450. package/dist/types/utils/framework-delegate.d.ts +3 -3
  1451. package/dist/types/utils/gesture/gesture-controller.d.ts +49 -49
  1452. package/dist/types/utils/gesture/index.d.ts +31 -31
  1453. package/dist/types/utils/gesture/listener.d.ts +2 -2
  1454. package/dist/types/utils/gesture/pointer-events.d.ts +12 -12
  1455. package/dist/types/utils/gesture/recognizers.d.ts +4 -4
  1456. package/dist/types/utils/helpers.d.ts +8 -8
  1457. package/dist/types/utils/input-shims/hacks/scroll-data.d.ts +4 -4
  1458. package/dist/types/utils/keyboard/keyboard-controller.d.ts +3 -3
  1459. package/dist/types/utils/lock-controller.d.ts +1 -1
  1460. package/dist/types/utils/native/haptic.d.ts +38 -38
  1461. package/dist/types/utils/native/keyboard.d.ts +29 -29
  1462. package/dist/types/utils/native/native-interface.d.ts +15 -15
  1463. package/dist/types/utils/native/status-bar.d.ts +8 -8
  1464. package/dist/types/utils/overlays-interface.d.ts +27 -27
  1465. package/dist/types/utils/overlays.d.ts +28 -28
  1466. package/dist/types/utils/platform.d.ts +16 -16
  1467. package/dist/types/utils/sanitization/index.d.ts +2 -2
  1468. package/dist/types/utils/slot-mutation-controller.d.ts +1 -1
  1469. package/dist/types/utils/test/platform.utils.d.ts +66 -66
  1470. package/dist/types/utils/test/playwright/generator.d.ts +16 -7
  1471. package/dist/types/utils/test/playwright/matchers/index.d.ts +3 -3
  1472. package/dist/types/utils/test/playwright/matchers/toHaveReceivedEvent.d.ts +2 -2
  1473. package/dist/types/utils/test/playwright/matchers/toHaveReceivedEventDetail.d.ts +2 -2
  1474. package/dist/types/utils/test/playwright/matchers/toHaveReceivedEventTimes.d.ts +2 -2
  1475. package/dist/types/utils/test/playwright/page/event-spy.d.ts +15 -15
  1476. package/dist/types/utils/test/playwright/page/utils/goto.d.ts +3 -3
  1477. package/dist/types/utils/test/playwright/page/utils/locator.d.ts +15 -15
  1478. package/dist/types/utils/test/playwright/playwright-declarations.d.ts +92 -92
  1479. package/dist/types/utils/test/playwright/playwright-page.d.ts +3 -3
  1480. package/dist/types/utils/test/playwright/viewports/index.d.ts +12 -12
  1481. package/dist/types/utils/test/press-keys.d.ts +14 -14
  1482. package/dist/types/utils/transition/index.d.ts +6 -6
  1483. package/dist/types/utils/watch-options.d.ts +1 -1
  1484. package/hydrate/index.js +29938 -29849
  1485. package/package.json +2 -2
  1486. package/dist/cjs/animation-1083855c.js +0 -1061
  1487. package/dist/cjs/button-active-af897e0e.js +0 -69
  1488. package/dist/cjs/config-d5882735.js +0 -199
  1489. package/dist/cjs/cubic-bezier-6b9222ad.js +0 -92
  1490. package/dist/cjs/data-c8d21093.js +0 -1622
  1491. package/dist/cjs/focus-visible-a7545600.js +0 -77
  1492. package/dist/cjs/form-controller-9343050c.js +0 -66
  1493. package/dist/cjs/framework-delegate-c0873a6f.js +0 -144
  1494. package/dist/cjs/gesture-controller-b46721be.js +0 -197
  1495. package/dist/cjs/haptic-678abc9f.js +0 -212
  1496. package/dist/cjs/hardware-back-button-b67c8e75.js +0 -76
  1497. package/dist/cjs/helpers-ea4ccbcb.js +0 -441
  1498. package/dist/cjs/index-0ee995e4.js +0 -459
  1499. package/dist/cjs/index-573877f3.js +0 -243
  1500. package/dist/cjs/index-9f379eaa.js +0 -198
  1501. package/dist/cjs/index-d7561763.js +0 -310
  1502. package/dist/cjs/input-shims-b0a75a01.js +0 -596
  1503. package/dist/cjs/input.utils-0fe3097c.js +0 -137
  1504. package/dist/cjs/ionic-global-ea2901a3.js +0 -230
  1505. package/dist/cjs/ios.transition-ac909bc8.js +0 -654
  1506. package/dist/cjs/keyboard-controller-50beb83a.js +0 -167
  1507. package/dist/cjs/keyboard-fd7db491.js +0 -81
  1508. package/dist/cjs/lock-controller-4ae2eb59.js +0 -40
  1509. package/dist/cjs/md.transition-907af519.js +0 -59
  1510. package/dist/cjs/notch-controller-f4f6af5d.js +0 -155
  1511. package/dist/cjs/overlays-2ffc5f27.js +0 -714
  1512. package/dist/cjs/spinner-configs-f7b5105b.js +0 -147
  1513. package/dist/cjs/status-tap-3fb2391a.js +0 -42
  1514. package/dist/cjs/swipe-back-d0412fb6.js +0 -81
  1515. package/dist/cjs/theme-fbc56b3b.js +0 -48
  1516. package/dist/cjs/watch-options-53bbb124.js +0 -49
  1517. package/dist/esm/animation-8aa13916.js +0 -1059
  1518. package/dist/esm/button-active-ce5cba4c.js +0 -67
  1519. package/dist/esm/config-96c9ace3.js +0 -193
  1520. package/dist/esm/cubic-bezier-66542bc5.js +0 -90
  1521. package/dist/esm/data-44d9e816.js +0 -1575
  1522. package/dist/esm/focus-visible-85493433.js +0 -75
  1523. package/dist/esm/form-controller-64edeaad.js +0 -64
  1524. package/dist/esm/framework-delegate-aa433dea.js +0 -140
  1525. package/dist/esm/gesture-controller-0fa396c4.js +0 -195
  1526. package/dist/esm/haptic-1243b917.js +0 -206
  1527. package/dist/esm/hardware-back-button-39299f84.js +0 -71
  1528. package/dist/esm/helpers-3379ba19.js +0 -418
  1529. package/dist/esm/index-0aa6e61f.js +0 -308
  1530. package/dist/esm/index-6a0ccabb.js +0 -231
  1531. package/dist/esm/index-f0cc4e14.js +0 -196
  1532. package/dist/esm/index-ff313b19.js +0 -457
  1533. package/dist/esm/input-shims-d0c93e5d.js +0 -594
  1534. package/dist/esm/input.utils-ec063df4.js +0 -134
  1535. package/dist/esm/ionic-global-40e42e7f.js +0 -224
  1536. package/dist/esm/ios.transition-1651c430.js +0 -651
  1537. package/dist/esm/keyboard-b063f012.js +0 -79
  1538. package/dist/esm/keyboard-b551279d.js +0 -146
  1539. package/dist/esm/keyboard-controller-0c2dce71.js +0 -165
  1540. package/dist/esm/lock-controller-e8c6c051.js +0 -38
  1541. package/dist/esm/md.transition-66f18369.js +0 -57
  1542. package/dist/esm/notch-controller-8c9c0e54.js +0 -153
  1543. package/dist/esm/overlays-6c9feb7e.js +0 -692
  1544. package/dist/esm/spinner-configs-d09fbbbb.js +0 -145
  1545. package/dist/esm/status-tap-9ce68758.js +0 -40
  1546. package/dist/esm/swipe-back-0f3bfc8e.js +0 -79
  1547. package/dist/esm/theme-17531cdf.js +0 -43
  1548. package/dist/esm/watch-options-02d8498b.js +0 -47
  1549. package/dist/esm-es5/app-globals-2398e405.js +0 -4
  1550. package/dist/esm-es5/md.transition-66f18369.js +0 -4
  1551. package/dist/ionic/p-0d8e9393.entry.js +0 -4
  1552. package/dist/ionic/p-114a36ed.js +0 -4
  1553. package/dist/ionic/p-1dc91702.entry.js +0 -4
  1554. package/dist/ionic/p-20cf4994.js +0 -4
  1555. package/dist/ionic/p-2e8e0045.js +0 -4
  1556. package/dist/ionic/p-3632220b.system.js +0 -4
  1557. package/dist/ionic/p-4fa201a7.entry.js +0 -4
  1558. package/dist/ionic/p-5370e786.js +0 -4
  1559. package/dist/ionic/p-64296b15.entry.js +0 -4
  1560. package/dist/ionic/p-67aab78f.js +0 -4
  1561. package/dist/ionic/p-73420380.js +0 -4
  1562. package/dist/ionic/p-81c818e7.js +0 -4
  1563. package/dist/ionic/p-8b1be026.js +0 -4
  1564. package/dist/ionic/p-8dbdb163.system.js +0 -4
  1565. package/dist/ionic/p-8e1bded3.entry.js +0 -4
  1566. package/dist/ionic/p-c224b9a9.js +0 -5
  1567. package/dist/ionic/p-d1de1188.js +0 -4
  1568. package/dist/ionic/p-deab76dc.entry.js +0 -4
  1569. package/dist/ionic/p-e627ed84.js +0 -4
  1570. package/dist/ionic/p-e6b240a0.js +0 -4
  1571. /package/dist/esm-es5/{capacitor-b4979570.js → capacitor-b0e5fe83.js} +0 -0
  1572. /package/dist/esm-es5/{config-96c9ace3.js → config-49c88215.js} +0 -0
  1573. /package/dist/esm-es5/{cubic-bezier-66542bc5.js → cubic-bezier-fe2083dc.js} +0 -0
  1574. /package/dist/esm-es5/{dir-912e3e13.js → dir-babeabeb.js} +0 -0
  1575. /package/dist/esm-es5/{focus-visible-85493433.js → focus-visible-dd40d69f.js} +0 -0
  1576. /package/dist/esm-es5/{gesture-controller-0fa396c4.js → gesture-controller-1bf57181.js} +0 -0
  1577. /package/dist/esm-es5/{hardware-back-button-39299f84.js → hardware-back-button-b2bc76db.js} +0 -0
  1578. /package/dist/esm-es5/{helpers-3379ba19.js → helpers-ae653409.js} +0 -0
  1579. /package/dist/esm-es5/{index-595d62c9.js → index-9b0d46f4.js} +0 -0
  1580. /package/dist/esm-es5/{lock-controller-e8c6c051.js → lock-controller-316928be.js} +0 -0
  1581. /package/dist/esm-es5/{spinner-configs-d09fbbbb.js → spinner-configs-964f7cf3.js} +0 -0
  1582. /package/dist/esm-es5/{theme-17531cdf.js → theme-01f3f29c.js} +0 -0
  1583. /package/dist/esm-es5/{watch-options-02d8498b.js → watch-options-c2911ace.js} +0 -0
  1584. /package/dist/ionic/{p-5aac9314.system.js → p-012c3ceb.system.js} +0 -0
  1585. /package/dist/ionic/{p-1b8e1d03.js → p-06fee233.js} +0 -0
  1586. /package/dist/ionic/{p-819ff3b9.system.js → p-08e01816.system.js} +0 -0
  1587. /package/dist/ionic/{p-ccdcb022.system.js → p-0e4f2e17.system.js} +0 -0
  1588. /package/dist/ionic/{p-63eb0acd.js → p-23a9d086.js} +0 -0
  1589. /package/dist/ionic/{p-7c2bac85.js → p-2408c236.js} +0 -0
  1590. /package/dist/ionic/{p-815c2fba.system.js → p-32ad210f.system.js} +0 -0
  1591. /package/dist/ionic/{p-cc196b34.js → p-3c58a71b.js} +0 -0
  1592. /package/dist/ionic/{p-7b021525.js → p-41d5544e.js} +0 -0
  1593. /package/dist/ionic/{p-f10de93b.js → p-459d13d5.js} +0 -0
  1594. /package/dist/ionic/{p-44bc8b45.system.js → p-4609d030.system.js} +0 -0
  1595. /package/dist/ionic/{p-1d072d3d.js → p-47794def.js} +0 -0
  1596. /package/dist/ionic/{p-185e427e.js → p-4b3623da.js} +0 -0
  1597. /package/dist/ionic/{p-772f6c84.system.js → p-4f255d5a.system.js} +0 -0
  1598. /package/dist/ionic/{p-8c15eda7.system.js → p-790220fd.system.js} +0 -0
  1599. /package/dist/ionic/{p-e0b06b65.js → p-bb3615f7.js} +0 -0
  1600. /package/dist/ionic/{p-87411e39.system.js → p-c468af8a.system.js} +0 -0
  1601. /package/dist/ionic/{p-9e852ff1.system.js → p-c7c8429a.system.js} +0 -0
  1602. /package/dist/ionic/{p-53b2a46f.js → p-ccd02320.js} +0 -0
  1603. /package/dist/ionic/{p-76fce40e.js → p-d47265c8.js} +0 -0
  1604. /package/dist/ionic/{p-56dc022e.system.js → p-d8d84afa.system.js} +0 -0
  1605. /package/dist/ionic/{p-c4f2dce7.system.js → p-e673a0a2.system.js} +0 -0
  1606. /package/dist/ionic/{p-c18d6eac.js → p-f0c2a614.js} +0 -0
  1607. /package/dist/ionic/{p-2b89ea1b.system.js → p-f233f1e0.system.js} +0 -0
  1608. /package/dist/ionic/{p-6dbfe5d4.js → p-fb813dab.js} +0 -0
  1609. /package/dist/ionic/{p-479cdbf8.system.js → p-ff4b7e40.system.js} +0 -0
@@ -21,44 +21,44 @@ import { d as defineCustomElement$2 } from './backdrop.js';
21
21
 
22
22
  var Style;
23
23
  (function (Style) {
24
- Style["Dark"] = "DARK";
25
- Style["Light"] = "LIGHT";
26
- Style["Default"] = "DEFAULT";
24
+ Style["Dark"] = "DARK";
25
+ Style["Light"] = "LIGHT";
26
+ Style["Default"] = "DEFAULT";
27
27
  })(Style || (Style = {}));
28
28
  const StatusBar = {
29
- getEngine() {
30
- const capacitor = getCapacitor();
31
- if (capacitor === null || capacitor === void 0 ? void 0 : capacitor.isPluginAvailable('StatusBar')) {
32
- return capacitor.Plugins.StatusBar;
33
- }
34
- return undefined;
35
- },
36
- // TODO FW-4696 Remove supportDefaultStatusBarStyle in Ionic v8
37
- supportsDefaultStatusBarStyle() {
38
- const capacitor = getCapacitor();
39
- /**
40
- * The 'DEFAULT' status bar style was added
41
- * to the @capacitor/status-bar plugin in Capacitor 3.
42
- * PluginHeaders is only supported in Capacitor 3+,
43
- * so we can use this to detect Capacitor 3.
44
- */
45
- return !!(capacitor === null || capacitor === void 0 ? void 0 : capacitor.PluginHeaders);
46
- },
47
- setStyle(options) {
48
- const engine = this.getEngine();
49
- if (!engine) {
50
- return;
51
- }
52
- engine.setStyle(options);
53
- },
54
- getStyle: async function () {
55
- const engine = this.getEngine();
56
- if (!engine) {
57
- return Style.Default;
58
- }
59
- const { style } = await engine.getInfo();
60
- return style;
61
- },
29
+ getEngine() {
30
+ const capacitor = getCapacitor();
31
+ if (capacitor === null || capacitor === void 0 ? void 0 : capacitor.isPluginAvailable('StatusBar')) {
32
+ return capacitor.Plugins.StatusBar;
33
+ }
34
+ return undefined;
35
+ },
36
+ // TODO FW-4696 Remove supportDefaultStatusBarStyle in Ionic v8
37
+ supportsDefaultStatusBarStyle() {
38
+ const capacitor = getCapacitor();
39
+ /**
40
+ * The 'DEFAULT' status bar style was added
41
+ * to the @capacitor/status-bar plugin in Capacitor 3.
42
+ * PluginHeaders is only supported in Capacitor 3+,
43
+ * so we can use this to detect Capacitor 3.
44
+ */
45
+ return !!(capacitor === null || capacitor === void 0 ? void 0 : capacitor.PluginHeaders);
46
+ },
47
+ setStyle(options) {
48
+ const engine = this.getEngine();
49
+ if (!engine) {
50
+ return;
51
+ }
52
+ engine.setStyle(options);
53
+ },
54
+ getStyle: async function () {
55
+ const engine = this.getEngine();
56
+ if (!engine) {
57
+ return Style.Default;
58
+ }
59
+ const { style } = await engine.getInfo();
60
+ return style;
61
+ },
62
62
  };
63
63
 
64
64
  /**
@@ -70,51 +70,51 @@ const StatusBar = {
70
70
  * the 0 breakpoint.
71
71
  */
72
72
  const getBackdropValueForSheet = (x, backdropBreakpoint) => {
73
- /**
74
- * We will use these points:
75
- * (backdropBreakpoint, 0)
76
- * (maxBreakpoint, 1)
77
- * We know that at the beginning breakpoint,
78
- * the backdrop will be hidden. We also
79
- * know that at the maxBreakpoint, the backdrop
80
- * must be fully visible. maxBreakpoint should
81
- * always be 1 even if the maximum value
82
- * of the breakpoints array is not 1 since
83
- * the animation runs from a progress of 0
84
- * to a progress of 1.
85
- * m = (y2 - y1) / (x2 - x1)
86
- *
87
- * This is simplified from:
88
- * m = (1 - 0) / (maxBreakpoint - backdropBreakpoint)
89
- *
90
- * If the backdropBreakpoint is 1, we return 0 as the
91
- * backdrop is completely hidden.
92
- *
93
- */
94
- if (backdropBreakpoint === 1) {
95
- return 0;
96
- }
97
- const slope = 1 / (1 - backdropBreakpoint);
98
- /**
99
- * From here, compute b which is
100
- * the backdrop opacity if the offset
101
- * is 0. If the backdrop does not
102
- * begin to fade in until after the
103
- * 0 breakpoint, this b value will be
104
- * negative. This is fine as we never pass
105
- * b directly into the animation keyframes.
106
- * b = y - mx
107
- * Use a known point: (backdropBreakpoint, 0)
108
- * This is simplified from:
109
- * b = 0 - (backdropBreakpoint * slope)
110
- */
111
- const b = -(backdropBreakpoint * slope);
112
- /**
113
- * Finally, we can now determine the
114
- * backdrop offset given an arbitrary
115
- * gesture offset.
116
- */
117
- return x * slope + b;
73
+ /**
74
+ * We will use these points:
75
+ * (backdropBreakpoint, 0)
76
+ * (maxBreakpoint, 1)
77
+ * We know that at the beginning breakpoint,
78
+ * the backdrop will be hidden. We also
79
+ * know that at the maxBreakpoint, the backdrop
80
+ * must be fully visible. maxBreakpoint should
81
+ * always be 1 even if the maximum value
82
+ * of the breakpoints array is not 1 since
83
+ * the animation runs from a progress of 0
84
+ * to a progress of 1.
85
+ * m = (y2 - y1) / (x2 - x1)
86
+ *
87
+ * This is simplified from:
88
+ * m = (1 - 0) / (maxBreakpoint - backdropBreakpoint)
89
+ *
90
+ * If the backdropBreakpoint is 1, we return 0 as the
91
+ * backdrop is completely hidden.
92
+ *
93
+ */
94
+ if (backdropBreakpoint === 1) {
95
+ return 0;
96
+ }
97
+ const slope = 1 / (1 - backdropBreakpoint);
98
+ /**
99
+ * From here, compute b which is
100
+ * the backdrop opacity if the offset
101
+ * is 0. If the backdrop does not
102
+ * begin to fade in until after the
103
+ * 0 breakpoint, this b value will be
104
+ * negative. This is fine as we never pass
105
+ * b directly into the animation keyframes.
106
+ * b = y - mx
107
+ * Use a known point: (backdropBreakpoint, 0)
108
+ * This is simplified from:
109
+ * b = 0 - (backdropBreakpoint * slope)
110
+ */
111
+ const b = -(backdropBreakpoint * slope);
112
+ /**
113
+ * Finally, we can now determine the
114
+ * backdrop offset given an arbitrary
115
+ * gesture offset.
116
+ */
117
+ return x * slope + b;
118
118
  };
119
119
  /**
120
120
  * The tablet/desktop card modal activates
@@ -129,59 +129,59 @@ const getBackdropValueForSheet = (x, backdropBreakpoint) => {
129
129
  * support for Style.Default.
130
130
  */
131
131
  const setCardStatusBarDark = () => {
132
- // TODO FW-4696 Remove supportDefaultStatusBarStyle in Ionic v8
133
- if (!win || win.innerWidth >= 768 || !StatusBar.supportsDefaultStatusBarStyle()) {
134
- return;
135
- }
136
- StatusBar.setStyle({ style: Style.Dark });
132
+ // TODO FW-4696 Remove supportDefaultStatusBarStyle in Ionic v8
133
+ if (!win || win.innerWidth >= 768 || !StatusBar.supportsDefaultStatusBarStyle()) {
134
+ return;
135
+ }
136
+ StatusBar.setStyle({ style: Style.Dark });
137
137
  };
138
138
  const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
139
- // TODO FW-4696 Remove supportDefaultStatusBarStyle in Ionic v8
140
- if (!win || win.innerWidth >= 768 || !StatusBar.supportsDefaultStatusBarStyle()) {
141
- return;
142
- }
143
- StatusBar.setStyle({ style: defaultStyle });
139
+ // TODO FW-4696 Remove supportDefaultStatusBarStyle in Ionic v8
140
+ if (!win || win.innerWidth >= 768 || !StatusBar.supportsDefaultStatusBarStyle()) {
141
+ return;
142
+ }
143
+ StatusBar.setStyle({ style: defaultStyle });
144
144
  };
145
145
 
146
146
  const handleCanDismiss = async (el, animation) => {
147
- /**
148
- * If canDismiss is not a function
149
- * then we can return early. If canDismiss is `true`,
150
- * then canDismissBlocksGesture is `false` as canDismiss
151
- * will never interrupt the gesture. As a result,
152
- * this code block is never reached. If canDismiss is `false`,
153
- * then we never dismiss.
154
- */
155
- if (typeof el.canDismiss !== 'function') {
156
- return;
157
- }
158
- /**
159
- * Run the canDismiss callback.
160
- * If the function returns `true`,
161
- * then we can proceed with dismiss.
162
- */
163
- const shouldDismiss = await el.canDismiss(undefined, GESTURE);
164
- if (!shouldDismiss) {
165
- return;
166
- }
167
- /**
168
- * If canDismiss resolved after the snap
169
- * back animation finished, we can
170
- * dismiss immediately.
171
- *
172
- * If canDismiss resolved before the snap
173
- * back animation finished, we need to
174
- * wait until the snap back animation is
175
- * done before dismissing.
176
- */
177
- if (animation.isRunning()) {
178
- animation.onFinish(() => {
179
- el.dismiss(undefined, 'handler');
180
- }, { oneTimeCallback: true });
181
- }
182
- else {
183
- el.dismiss(undefined, 'handler');
184
- }
147
+ /**
148
+ * If canDismiss is not a function
149
+ * then we can return early. If canDismiss is `true`,
150
+ * then canDismissBlocksGesture is `false` as canDismiss
151
+ * will never interrupt the gesture. As a result,
152
+ * this code block is never reached. If canDismiss is `false`,
153
+ * then we never dismiss.
154
+ */
155
+ if (typeof el.canDismiss !== 'function') {
156
+ return;
157
+ }
158
+ /**
159
+ * Run the canDismiss callback.
160
+ * If the function returns `true`,
161
+ * then we can proceed with dismiss.
162
+ */
163
+ const shouldDismiss = await el.canDismiss(undefined, GESTURE);
164
+ if (!shouldDismiss) {
165
+ return;
166
+ }
167
+ /**
168
+ * If canDismiss resolved after the snap
169
+ * back animation finished, we can
170
+ * dismiss immediately.
171
+ *
172
+ * If canDismiss resolved before the snap
173
+ * back animation finished, we need to
174
+ * wait until the snap back animation is
175
+ * done before dismissing.
176
+ */
177
+ if (animation.isRunning()) {
178
+ animation.onFinish(() => {
179
+ el.dismiss(undefined, 'handler');
180
+ }, { oneTimeCallback: true });
181
+ }
182
+ else {
183
+ el.dismiss(undefined, 'handler');
184
+ }
185
185
  };
186
186
  /**
187
187
  * This function lets us simulate a realistic spring-like animation
@@ -256,1430 +256,1440 @@ const handleCanDismiss = async (el, animation) => {
256
256
  * give you a complex differential equation too.
257
257
  */
258
258
  const calculateSpringStep = (t) => {
259
- return 0.00255275 * 2.71828 ** (-14.9619 * t) - 1.00255 * 2.71828 ** (-0.0380968 * t) + 1;
259
+ return 0.00255275 * 2.71828 ** (-14.9619 * t) - 1.00255 * 2.71828 ** (-0.0380968 * t) + 1;
260
260
  };
261
261
 
262
262
  // Defaults for the card swipe animation
263
263
  const SwipeToCloseDefaults = {
264
- MIN_PRESENTING_SCALE: 0.93,
264
+ MIN_PRESENTING_SCALE: 0.93,
265
265
  };
266
266
  const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss) => {
267
- /**
268
- * The step value at which a card modal
269
- * is eligible for dismissing via gesture.
270
- */
271
- const DISMISS_THRESHOLD = 0.5;
272
- const height = el.offsetHeight;
273
- let isOpen = false;
274
- let canDismissBlocksGesture = false;
275
- let contentEl = null;
276
- let scrollEl = null;
277
- const canDismissMaxStep = 0.2;
278
- let initialScrollY = true;
279
- let lastStep = 0;
280
- const getScrollY = () => {
281
- if (contentEl && isIonContent(contentEl)) {
282
- return contentEl.scrollY;
283
- /**
284
- * Custom scroll containers are intended to be
285
- * used with virtual scrolling, so we assume
286
- * there is scrolling in this case.
287
- */
288
- }
289
- else {
290
- return true;
291
- }
292
- };
293
- const canStart = (detail) => {
294
- const target = detail.event.target;
295
- if (target === null || !target.closest) {
296
- return true;
297
- }
298
267
  /**
299
- * If we are swiping on the content,
300
- * swiping should only be possible if
301
- * the content is scrolled all the way
302
- * to the top so that we do not interfere
303
- * with scrolling.
304
- *
305
- * We cannot assume that the `ion-content`
306
- * target will remain consistent between
307
- * swipes. For example, when using
308
- * ion-nav within a card modal it is
309
- * possible to swipe, push a view, and then
310
- * swipe again. The target content will not
311
- * be the same between swipes.
268
+ * The step value at which a card modal
269
+ * is eligible for dismissing via gesture.
312
270
  */
313
- contentEl = findClosestIonContent(target);
314
- if (contentEl) {
315
- /**
316
- * The card should never swipe to close
317
- * on the content with a refresher.
318
- * Note: We cannot solve this by making the
319
- * swipeToClose gesture have a higher priority
320
- * than the refresher gesture as the iOS native
321
- * refresh gesture uses a scroll listener in
322
- * addition to a gesture.
323
- *
324
- * Note: Do not use getScrollElement here
325
- * because we need this to be a synchronous
326
- * operation, and getScrollElement is
327
- * asynchronous.
328
- */
329
- if (isIonContent(contentEl)) {
330
- const root = getElementRoot(contentEl);
331
- scrollEl = root.querySelector('.inner-scroll');
332
- }
333
- else {
334
- scrollEl = contentEl;
335
- }
336
- const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
337
- return !hasRefresherInContent && scrollEl.scrollTop === 0;
338
- }
339
- /**
340
- * Card should be swipeable on all
341
- * parts of the modal except for the footer.
342
- */
343
- const footer = target.closest('ion-footer');
344
- if (footer === null) {
345
- return true;
346
- }
347
- return false;
348
- };
349
- const onStart = (detail) => {
350
- const { deltaY } = detail;
351
- /**
352
- * Get the initial scrollY value so
353
- * that we can correctly reset the scrollY
354
- * prop when the gesture ends.
355
- */
356
- initialScrollY = getScrollY();
357
- /**
358
- * If canDismiss is anything other than `true`
359
- * then users should be able to swipe down
360
- * until a threshold is hit. At that point,
361
- * the card modal should not proceed any further.
362
- * TODO (FW-937)
363
- * Remove undefined check
364
- */
365
- canDismissBlocksGesture = el.canDismiss !== undefined && el.canDismiss !== true;
366
- /**
367
- * If we are pulling down, then
368
- * it is possible we are pulling on the
369
- * content. We do not want scrolling to
370
- * happen at the same time as the gesture.
371
- */
372
- if (deltaY > 0 && contentEl) {
373
- disableContentScrollY(contentEl);
374
- }
375
- animation.progressStart(true, isOpen ? 1 : 0);
376
- };
377
- const onMove = (detail) => {
378
- const { deltaY } = detail;
379
- /**
380
- * If we are pulling down, then
381
- * it is possible we are pulling on the
382
- * content. We do not want scrolling to
383
- * happen at the same time as the gesture.
384
- */
385
- if (deltaY > 0 && contentEl) {
386
- disableContentScrollY(contentEl);
387
- }
388
- /**
389
- * If we are swiping on the content
390
- * then the swipe gesture should only
391
- * happen if we are pulling down.
392
- *
393
- * However, if we pull up and
394
- * then down such that the scroll position
395
- * returns to 0, we should be able to swipe
396
- * the card.
397
- */
398
- const step = detail.deltaY / height;
399
- /**
400
- * Check if user is swiping down and
401
- * if we have a canDismiss value that
402
- * should block the gesture from
403
- * proceeding,
404
- */
405
- const isAttemptingDismissWithCanDismiss = step >= 0 && canDismissBlocksGesture;
406
- /**
407
- * If we are blocking the gesture from dismissing,
408
- * set the max step value so that the sheet cannot be
409
- * completely hidden.
410
- */
411
- const maxStep = isAttemptingDismissWithCanDismiss ? canDismissMaxStep : 0.9999;
412
- /**
413
- * If we are blocking the gesture from
414
- * dismissing, calculate the spring modifier value
415
- * this will be added to the starting breakpoint
416
- * value to give the gesture a spring-like feeling.
417
- * Note that the starting breakpoint is always 0,
418
- * so we omit adding 0 to the result.
419
- */
420
- const processedStep = isAttemptingDismissWithCanDismiss ? calculateSpringStep(step / maxStep) : step;
421
- const clampedStep = clamp(0.0001, processedStep, maxStep);
422
- animation.progressStep(clampedStep);
423
- /**
424
- * When swiping down half way, the status bar style
425
- * should be reset to its default value.
426
- *
427
- * We track lastStep so that we do not fire these
428
- * functions on every onMove, only when the user has
429
- * crossed a certain threshold.
430
- */
431
- if (clampedStep >= DISMISS_THRESHOLD && lastStep < DISMISS_THRESHOLD) {
432
- setCardStatusBarDefault(statusBarStyle);
433
- /**
434
- * However, if we swipe back up, then the
435
- * status bar style should be set to have light
436
- * text on a dark background.
437
- */
438
- }
439
- else if (clampedStep < DISMISS_THRESHOLD && lastStep >= DISMISS_THRESHOLD) {
440
- setCardStatusBarDark();
441
- }
442
- lastStep = clampedStep;
443
- };
444
- const onEnd = (detail) => {
445
- const velocity = detail.velocityY;
446
- const step = detail.deltaY / height;
447
- const isAttemptingDismissWithCanDismiss = step >= 0 && canDismissBlocksGesture;
448
- const maxStep = isAttemptingDismissWithCanDismiss ? canDismissMaxStep : 0.9999;
449
- const processedStep = isAttemptingDismissWithCanDismiss ? calculateSpringStep(step / maxStep) : step;
450
- const clampedStep = clamp(0.0001, processedStep, maxStep);
451
- const threshold = (detail.deltaY + velocity * 1000) / height;
452
- /**
453
- * If canDismiss blocks
454
- * the swipe gesture, then the
455
- * animation can never complete until
456
- * canDismiss is checked.
457
- */
458
- const shouldComplete = !isAttemptingDismissWithCanDismiss && threshold >= DISMISS_THRESHOLD;
459
- let newStepValue = shouldComplete ? -0.001 : 0.001;
460
- if (!shouldComplete) {
461
- animation.easing('cubic-bezier(1, 0, 0.68, 0.28)');
462
- newStepValue += getTimeGivenProgression([0, 0], [1, 0], [0.68, 0.28], [1, 1], clampedStep)[0];
463
- }
464
- else {
465
- animation.easing('cubic-bezier(0.32, 0.72, 0, 1)');
466
- newStepValue += getTimeGivenProgression([0, 0], [0.32, 0.72], [0, 1], [1, 1], clampedStep)[0];
467
- }
468
- const duration = shouldComplete
469
- ? computeDuration(step * height, velocity)
470
- : computeDuration((1 - clampedStep) * height, velocity);
471
- isOpen = shouldComplete;
472
- gesture.enable(false);
473
- if (contentEl) {
474
- resetContentScrollY(contentEl, initialScrollY);
475
- }
476
- animation
477
- .onFinish(() => {
478
- if (!shouldComplete) {
479
- gesture.enable(true);
480
- }
481
- })
482
- .progressEnd(shouldComplete ? 1 : 0, newStepValue, duration);
483
- /**
484
- * If the canDismiss value blocked the gesture
485
- * from proceeding, then we should ignore whatever
486
- * shouldComplete is. Whether or not the modal
487
- * animation should complete is now determined by
488
- * canDismiss.
489
- *
490
- * If the user swiped >25% of the way
491
- * to the max step, then we should
492
- * check canDismiss. 25% was chosen
493
- * to avoid accidental swipes.
494
- */
495
- if (isAttemptingDismissWithCanDismiss && clampedStep > maxStep / 4) {
496
- handleCanDismiss(el, animation);
497
- }
498
- else if (shouldComplete) {
499
- onDismiss();
500
- }
501
- };
502
- const gesture = createGesture({
503
- el,
504
- gestureName: 'modalSwipeToClose',
505
- gesturePriority: 39,
506
- direction: 'y',
507
- threshold: 10,
508
- canStart,
509
- onStart,
510
- onMove,
511
- onEnd,
512
- });
513
- return gesture;
271
+ const DISMISS_THRESHOLD = 0.5;
272
+ const height = el.offsetHeight;
273
+ let isOpen = false;
274
+ let canDismissBlocksGesture = false;
275
+ let contentEl = null;
276
+ let scrollEl = null;
277
+ const canDismissMaxStep = 0.2;
278
+ let initialScrollY = true;
279
+ let lastStep = 0;
280
+ const getScrollY = () => {
281
+ if (contentEl && isIonContent(contentEl)) {
282
+ return contentEl.scrollY;
283
+ /**
284
+ * Custom scroll containers are intended to be
285
+ * used with virtual scrolling, so we assume
286
+ * there is scrolling in this case.
287
+ */
288
+ }
289
+ else {
290
+ return true;
291
+ }
292
+ };
293
+ const canStart = (detail) => {
294
+ const target = detail.event.target;
295
+ if (target === null || !target.closest) {
296
+ return true;
297
+ }
298
+ /**
299
+ * If we are swiping on the content,
300
+ * swiping should only be possible if
301
+ * the content is scrolled all the way
302
+ * to the top so that we do not interfere
303
+ * with scrolling.
304
+ *
305
+ * We cannot assume that the `ion-content`
306
+ * target will remain consistent between
307
+ * swipes. For example, when using
308
+ * ion-nav within a card modal it is
309
+ * possible to swipe, push a view, and then
310
+ * swipe again. The target content will not
311
+ * be the same between swipes.
312
+ */
313
+ contentEl = findClosestIonContent(target);
314
+ if (contentEl) {
315
+ /**
316
+ * The card should never swipe to close
317
+ * on the content with a refresher.
318
+ * Note: We cannot solve this by making the
319
+ * swipeToClose gesture have a higher priority
320
+ * than the refresher gesture as the iOS native
321
+ * refresh gesture uses a scroll listener in
322
+ * addition to a gesture.
323
+ *
324
+ * Note: Do not use getScrollElement here
325
+ * because we need this to be a synchronous
326
+ * operation, and getScrollElement is
327
+ * asynchronous.
328
+ */
329
+ if (isIonContent(contentEl)) {
330
+ const root = getElementRoot(contentEl);
331
+ scrollEl = root.querySelector('.inner-scroll');
332
+ }
333
+ else {
334
+ scrollEl = contentEl;
335
+ }
336
+ const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
337
+ return !hasRefresherInContent && scrollEl.scrollTop === 0;
338
+ }
339
+ /**
340
+ * Card should be swipeable on all
341
+ * parts of the modal except for the footer.
342
+ */
343
+ const footer = target.closest('ion-footer');
344
+ if (footer === null) {
345
+ return true;
346
+ }
347
+ return false;
348
+ };
349
+ const onStart = (detail) => {
350
+ const { deltaY } = detail;
351
+ /**
352
+ * Get the initial scrollY value so
353
+ * that we can correctly reset the scrollY
354
+ * prop when the gesture ends.
355
+ */
356
+ initialScrollY = getScrollY();
357
+ /**
358
+ * If canDismiss is anything other than `true`
359
+ * then users should be able to swipe down
360
+ * until a threshold is hit. At that point,
361
+ * the card modal should not proceed any further.
362
+ * TODO (FW-937)
363
+ * Remove undefined check
364
+ */
365
+ canDismissBlocksGesture = el.canDismiss !== undefined && el.canDismiss !== true;
366
+ /**
367
+ * If we are pulling down, then
368
+ * it is possible we are pulling on the
369
+ * content. We do not want scrolling to
370
+ * happen at the same time as the gesture.
371
+ */
372
+ if (deltaY > 0 && contentEl) {
373
+ disableContentScrollY(contentEl);
374
+ }
375
+ animation.progressStart(true, isOpen ? 1 : 0);
376
+ };
377
+ const onMove = (detail) => {
378
+ const { deltaY } = detail;
379
+ /**
380
+ * If we are pulling down, then
381
+ * it is possible we are pulling on the
382
+ * content. We do not want scrolling to
383
+ * happen at the same time as the gesture.
384
+ */
385
+ if (deltaY > 0 && contentEl) {
386
+ disableContentScrollY(contentEl);
387
+ }
388
+ /**
389
+ * If we are swiping on the content
390
+ * then the swipe gesture should only
391
+ * happen if we are pulling down.
392
+ *
393
+ * However, if we pull up and
394
+ * then down such that the scroll position
395
+ * returns to 0, we should be able to swipe
396
+ * the card.
397
+ */
398
+ const step = detail.deltaY / height;
399
+ /**
400
+ * Check if user is swiping down and
401
+ * if we have a canDismiss value that
402
+ * should block the gesture from
403
+ * proceeding,
404
+ */
405
+ const isAttemptingDismissWithCanDismiss = step >= 0 && canDismissBlocksGesture;
406
+ /**
407
+ * If we are blocking the gesture from dismissing,
408
+ * set the max step value so that the sheet cannot be
409
+ * completely hidden.
410
+ */
411
+ const maxStep = isAttemptingDismissWithCanDismiss ? canDismissMaxStep : 0.9999;
412
+ /**
413
+ * If we are blocking the gesture from
414
+ * dismissing, calculate the spring modifier value
415
+ * this will be added to the starting breakpoint
416
+ * value to give the gesture a spring-like feeling.
417
+ * Note that the starting breakpoint is always 0,
418
+ * so we omit adding 0 to the result.
419
+ */
420
+ const processedStep = isAttemptingDismissWithCanDismiss ? calculateSpringStep(step / maxStep) : step;
421
+ const clampedStep = clamp(0.0001, processedStep, maxStep);
422
+ animation.progressStep(clampedStep);
423
+ /**
424
+ * When swiping down half way, the status bar style
425
+ * should be reset to its default value.
426
+ *
427
+ * We track lastStep so that we do not fire these
428
+ * functions on every onMove, only when the user has
429
+ * crossed a certain threshold.
430
+ */
431
+ if (clampedStep >= DISMISS_THRESHOLD && lastStep < DISMISS_THRESHOLD) {
432
+ setCardStatusBarDefault(statusBarStyle);
433
+ /**
434
+ * However, if we swipe back up, then the
435
+ * status bar style should be set to have light
436
+ * text on a dark background.
437
+ */
438
+ }
439
+ else if (clampedStep < DISMISS_THRESHOLD && lastStep >= DISMISS_THRESHOLD) {
440
+ setCardStatusBarDark();
441
+ }
442
+ lastStep = clampedStep;
443
+ };
444
+ const onEnd = (detail) => {
445
+ const velocity = detail.velocityY;
446
+ const step = detail.deltaY / height;
447
+ const isAttemptingDismissWithCanDismiss = step >= 0 && canDismissBlocksGesture;
448
+ const maxStep = isAttemptingDismissWithCanDismiss ? canDismissMaxStep : 0.9999;
449
+ const processedStep = isAttemptingDismissWithCanDismiss ? calculateSpringStep(step / maxStep) : step;
450
+ const clampedStep = clamp(0.0001, processedStep, maxStep);
451
+ const threshold = (detail.deltaY + velocity * 1000) / height;
452
+ /**
453
+ * If canDismiss blocks
454
+ * the swipe gesture, then the
455
+ * animation can never complete until
456
+ * canDismiss is checked.
457
+ */
458
+ const shouldComplete = !isAttemptingDismissWithCanDismiss && threshold >= DISMISS_THRESHOLD;
459
+ let newStepValue = shouldComplete ? -0.001 : 0.001;
460
+ if (!shouldComplete) {
461
+ animation.easing('cubic-bezier(1, 0, 0.68, 0.28)');
462
+ newStepValue += getTimeGivenProgression([0, 0], [1, 0], [0.68, 0.28], [1, 1], clampedStep)[0];
463
+ }
464
+ else {
465
+ animation.easing('cubic-bezier(0.32, 0.72, 0, 1)');
466
+ newStepValue += getTimeGivenProgression([0, 0], [0.32, 0.72], [0, 1], [1, 1], clampedStep)[0];
467
+ }
468
+ const duration = shouldComplete
469
+ ? computeDuration(step * height, velocity)
470
+ : computeDuration((1 - clampedStep) * height, velocity);
471
+ isOpen = shouldComplete;
472
+ gesture.enable(false);
473
+ if (contentEl) {
474
+ resetContentScrollY(contentEl, initialScrollY);
475
+ }
476
+ animation
477
+ .onFinish(() => {
478
+ if (!shouldComplete) {
479
+ gesture.enable(true);
480
+ }
481
+ })
482
+ .progressEnd(shouldComplete ? 1 : 0, newStepValue, duration);
483
+ /**
484
+ * If the canDismiss value blocked the gesture
485
+ * from proceeding, then we should ignore whatever
486
+ * shouldComplete is. Whether or not the modal
487
+ * animation should complete is now determined by
488
+ * canDismiss.
489
+ *
490
+ * If the user swiped >25% of the way
491
+ * to the max step, then we should
492
+ * check canDismiss. 25% was chosen
493
+ * to avoid accidental swipes.
494
+ */
495
+ if (isAttemptingDismissWithCanDismiss && clampedStep > maxStep / 4) {
496
+ handleCanDismiss(el, animation);
497
+ }
498
+ else if (shouldComplete) {
499
+ onDismiss();
500
+ }
501
+ };
502
+ const gesture = createGesture({
503
+ el,
504
+ gestureName: 'modalSwipeToClose',
505
+ gesturePriority: 39,
506
+ direction: 'y',
507
+ threshold: 10,
508
+ canStart,
509
+ onStart,
510
+ onMove,
511
+ onEnd,
512
+ });
513
+ return gesture;
514
514
  };
515
515
  const computeDuration = (remaining, velocity) => {
516
- return clamp(400, remaining / Math.abs(velocity * 1.1), 500);
516
+ return clamp(400, remaining / Math.abs(velocity * 1.1), 500);
517
517
  };
518
518
 
519
519
  const createSheetEnterAnimation = (opts) => {
520
- const { currentBreakpoint, backdropBreakpoint } = opts;
521
- /**
522
- * If the backdropBreakpoint is undefined, then the backdrop
523
- * should always fade in. If the backdropBreakpoint came before the
524
- * current breakpoint, then the backdrop should be fading in.
525
- */
526
- const shouldShowBackdrop = backdropBreakpoint === undefined || backdropBreakpoint < currentBreakpoint;
527
- const initialBackdrop = shouldShowBackdrop ? `calc(var(--backdrop-opacity) * ${currentBreakpoint})` : '0';
528
- const backdropAnimation = createAnimation('backdropAnimation').fromTo('opacity', 0, initialBackdrop);
529
- if (shouldShowBackdrop) {
530
- backdropAnimation
531
- .beforeStyles({
532
- 'pointer-events': 'none',
533
- })
534
- .afterClearStyles(['pointer-events']);
535
- }
536
- const wrapperAnimation = createAnimation('wrapperAnimation').keyframes([
537
- { offset: 0, opacity: 1, transform: 'translateY(100%)' },
538
- { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
539
- ]);
540
- return { wrapperAnimation, backdropAnimation };
520
+ const { currentBreakpoint, backdropBreakpoint } = opts;
521
+ /**
522
+ * If the backdropBreakpoint is undefined, then the backdrop
523
+ * should always fade in. If the backdropBreakpoint came before the
524
+ * current breakpoint, then the backdrop should be fading in.
525
+ */
526
+ const shouldShowBackdrop = backdropBreakpoint === undefined || backdropBreakpoint < currentBreakpoint;
527
+ const initialBackdrop = shouldShowBackdrop ? `calc(var(--backdrop-opacity) * ${currentBreakpoint})` : '0';
528
+ const backdropAnimation = createAnimation('backdropAnimation').fromTo('opacity', 0, initialBackdrop);
529
+ if (shouldShowBackdrop) {
530
+ backdropAnimation
531
+ .beforeStyles({
532
+ 'pointer-events': 'none',
533
+ })
534
+ .afterClearStyles(['pointer-events']);
535
+ }
536
+ const wrapperAnimation = createAnimation('wrapperAnimation').keyframes([
537
+ { offset: 0, opacity: 1, transform: 'translateY(100%)' },
538
+ { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
539
+ ]);
540
+ return { wrapperAnimation, backdropAnimation };
541
541
  };
542
542
  const createSheetLeaveAnimation = (opts) => {
543
- const { currentBreakpoint, backdropBreakpoint } = opts;
544
- /**
545
- * Backdrop does not always fade in from 0 to 1 if backdropBreakpoint
546
- * is defined, so we need to account for that offset by figuring out
547
- * what the current backdrop value should be.
548
- */
549
- const backdropValue = `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(currentBreakpoint, backdropBreakpoint)})`;
550
- const defaultBackdrop = [
551
- { offset: 0, opacity: backdropValue },
552
- { offset: 1, opacity: 0 },
553
- ];
554
- const customBackdrop = [
555
- { offset: 0, opacity: backdropValue },
556
- { offset: backdropBreakpoint, opacity: 0 },
557
- { offset: 1, opacity: 0 },
558
- ];
559
- const backdropAnimation = createAnimation('backdropAnimation').keyframes(backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop);
560
- const wrapperAnimation = createAnimation('wrapperAnimation').keyframes([
561
- { offset: 0, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
562
- { offset: 1, opacity: 1, transform: `translateY(100%)` },
563
- ]);
564
- return { wrapperAnimation, backdropAnimation };
543
+ const { currentBreakpoint, backdropBreakpoint } = opts;
544
+ /**
545
+ * Backdrop does not always fade in from 0 to 1 if backdropBreakpoint
546
+ * is defined, so we need to account for that offset by figuring out
547
+ * what the current backdrop value should be.
548
+ */
549
+ const backdropValue = `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(currentBreakpoint, backdropBreakpoint)})`;
550
+ const defaultBackdrop = [
551
+ { offset: 0, opacity: backdropValue },
552
+ { offset: 1, opacity: 0 },
553
+ ];
554
+ const customBackdrop = [
555
+ { offset: 0, opacity: backdropValue },
556
+ { offset: backdropBreakpoint, opacity: 0 },
557
+ { offset: 1, opacity: 0 },
558
+ ];
559
+ const backdropAnimation = createAnimation('backdropAnimation').keyframes(backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop);
560
+ const wrapperAnimation = createAnimation('wrapperAnimation').keyframes([
561
+ { offset: 0, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
562
+ { offset: 1, opacity: 1, transform: `translateY(100%)` },
563
+ ]);
564
+ return { wrapperAnimation, backdropAnimation };
565
565
  };
566
566
 
567
567
  const createEnterAnimation$1 = () => {
568
- const backdropAnimation = createAnimation()
569
- .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
570
- .beforeStyles({
571
- 'pointer-events': 'none',
572
- })
573
- .afterClearStyles(['pointer-events']);
574
- const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
575
- return { backdropAnimation, wrapperAnimation };
568
+ const backdropAnimation = createAnimation()
569
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
570
+ .beforeStyles({
571
+ 'pointer-events': 'none',
572
+ })
573
+ .afterClearStyles(['pointer-events']);
574
+ const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
575
+ return { backdropAnimation, wrapperAnimation };
576
576
  };
577
577
  /**
578
578
  * iOS Modal Enter Animation for the Card presentation style
579
579
  */
580
580
  const iosEnterAnimation = (baseEl, opts) => {
581
- const { presentingEl, currentBreakpoint } = opts;
582
- const root = getElementRoot(baseEl);
583
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
584
- backdropAnimation.addElement(root.querySelector('ion-backdrop'));
585
- wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
586
- const baseAnimation = createAnimation('entering-base')
587
- .addElement(baseEl)
588
- .easing('cubic-bezier(0.32,0.72,0,1)')
589
- .duration(500)
590
- .addAnimation(wrapperAnimation);
591
- if (presentingEl) {
592
- const isMobile = window.innerWidth < 768;
593
- const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
594
- const presentingElRoot = getElementRoot(presentingEl);
595
- const presentingAnimation = createAnimation().beforeStyles({
596
- transform: 'translateY(0)',
597
- 'transform-origin': 'top center',
598
- overflow: 'hidden',
599
- });
600
- const bodyEl = document.body;
601
- if (isMobile) {
602
- /**
603
- * Fallback for browsers that does not support `max()` (ex: Firefox)
604
- * No need to worry about statusbar padding since engines like Gecko
605
- * are not used as the engine for standalone Cordova/Capacitor apps
606
- */
607
- const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
608
- const modalTransform = hasCardModal ? '-10px' : transformOffset;
609
- const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
610
- const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;
611
- presentingAnimation
612
- .afterStyles({
613
- transform: finalTransform,
614
- })
615
- .beforeAddWrite(() => bodyEl.style.setProperty('background-color', 'black'))
616
- .addElement(presentingEl)
617
- .keyframes([
618
- { offset: 0, filter: 'contrast(1)', transform: 'translateY(0px) scale(1)', borderRadius: '0px' },
619
- { offset: 1, filter: 'contrast(0.85)', transform: finalTransform, borderRadius: '10px 10px 0 0' },
620
- ]);
621
- baseAnimation.addAnimation(presentingAnimation);
581
+ const { presentingEl, currentBreakpoint } = opts;
582
+ const root = getElementRoot(baseEl);
583
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
584
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
585
+ wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
586
+ const baseAnimation = createAnimation('entering-base')
587
+ .addElement(baseEl)
588
+ .easing('cubic-bezier(0.32,0.72,0,1)')
589
+ .duration(500)
590
+ .addAnimation(wrapperAnimation);
591
+ if (presentingEl) {
592
+ const isMobile = window.innerWidth < 768;
593
+ const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
594
+ const presentingElRoot = getElementRoot(presentingEl);
595
+ const presentingAnimation = createAnimation().beforeStyles({
596
+ transform: 'translateY(0)',
597
+ 'transform-origin': 'top center',
598
+ overflow: 'hidden',
599
+ });
600
+ const bodyEl = document.body;
601
+ if (isMobile) {
602
+ /**
603
+ * Fallback for browsers that does not support `max()` (ex: Firefox)
604
+ * No need to worry about statusbar padding since engines like Gecko
605
+ * are not used as the engine for standalone Cordova/Capacitor apps
606
+ */
607
+ const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
608
+ const modalTransform = hasCardModal ? '-10px' : transformOffset;
609
+ const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
610
+ const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;
611
+ presentingAnimation
612
+ .afterStyles({
613
+ transform: finalTransform,
614
+ })
615
+ .beforeAddWrite(() => bodyEl.style.setProperty('background-color', 'black'))
616
+ .addElement(presentingEl)
617
+ .keyframes([
618
+ { offset: 0, filter: 'contrast(1)', transform: 'translateY(0px) scale(1)', borderRadius: '0px' },
619
+ { offset: 1, filter: 'contrast(0.85)', transform: finalTransform, borderRadius: '10px 10px 0 0' },
620
+ ]);
621
+ baseAnimation.addAnimation(presentingAnimation);
622
+ }
623
+ else {
624
+ baseAnimation.addAnimation(backdropAnimation);
625
+ if (!hasCardModal) {
626
+ wrapperAnimation.fromTo('opacity', '0', '1');
627
+ }
628
+ else {
629
+ const toPresentingScale = hasCardModal ? SwipeToCloseDefaults.MIN_PRESENTING_SCALE : 1;
630
+ const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;
631
+ presentingAnimation
632
+ .afterStyles({
633
+ transform: finalTransform,
634
+ })
635
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
636
+ .keyframes([
637
+ { offset: 0, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
638
+ { offset: 1, filter: 'contrast(0.85)', transform: finalTransform },
639
+ ]);
640
+ const shadowAnimation = createAnimation()
641
+ .afterStyles({
642
+ transform: finalTransform,
643
+ })
644
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
645
+ .keyframes([
646
+ { offset: 0, opacity: '1', transform: 'translateY(0) scale(1)' },
647
+ { offset: 1, opacity: '0', transform: finalTransform },
648
+ ]);
649
+ baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
650
+ }
651
+ }
622
652
  }
623
653
  else {
624
- baseAnimation.addAnimation(backdropAnimation);
625
- if (!hasCardModal) {
626
- wrapperAnimation.fromTo('opacity', '0', '1');
627
- }
628
- else {
629
- const toPresentingScale = hasCardModal ? SwipeToCloseDefaults.MIN_PRESENTING_SCALE : 1;
630
- const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;
631
- presentingAnimation
632
- .afterStyles({
633
- transform: finalTransform,
634
- })
635
- .addElement(presentingElRoot.querySelector('.modal-wrapper'))
636
- .keyframes([
637
- { offset: 0, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
638
- { offset: 1, filter: 'contrast(0.85)', transform: finalTransform },
639
- ]);
640
- const shadowAnimation = createAnimation()
641
- .afterStyles({
642
- transform: finalTransform,
643
- })
644
- .addElement(presentingElRoot.querySelector('.modal-shadow'))
645
- .keyframes([
646
- { offset: 0, opacity: '1', transform: 'translateY(0) scale(1)' },
647
- { offset: 1, opacity: '0', transform: finalTransform },
648
- ]);
649
- baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
650
- }
654
+ baseAnimation.addAnimation(backdropAnimation);
651
655
  }
652
- }
653
- else {
654
- baseAnimation.addAnimation(backdropAnimation);
655
- }
656
- return baseAnimation;
656
+ return baseAnimation;
657
657
  };
658
658
 
659
659
  const createLeaveAnimation$1 = () => {
660
- const backdropAnimation = createAnimation().fromTo('opacity', 'var(--backdrop-opacity)', 0);
661
- const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(0vh)', 'translateY(100vh)');
662
- return { backdropAnimation, wrapperAnimation };
660
+ const backdropAnimation = createAnimation().fromTo('opacity', 'var(--backdrop-opacity)', 0);
661
+ const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(0vh)', 'translateY(100vh)');
662
+ return { backdropAnimation, wrapperAnimation };
663
663
  };
664
664
  /**
665
665
  * iOS Modal Leave Animation
666
666
  */
667
667
  const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
668
- const { presentingEl, currentBreakpoint } = opts;
669
- const root = getElementRoot(baseEl);
670
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
671
- backdropAnimation.addElement(root.querySelector('ion-backdrop'));
672
- wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
673
- const baseAnimation = createAnimation('leaving-base')
674
- .addElement(baseEl)
675
- .easing('cubic-bezier(0.32,0.72,0,1)')
676
- .duration(duration)
677
- .addAnimation(wrapperAnimation);
678
- if (presentingEl) {
679
- const isMobile = window.innerWidth < 768;
680
- const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
681
- const presentingElRoot = getElementRoot(presentingEl);
682
- const presentingAnimation = createAnimation()
683
- .beforeClearStyles(['transform'])
684
- .afterClearStyles(['transform'])
685
- .onFinish((currentStep) => {
686
- // only reset background color if this is the last card-style modal
687
- if (currentStep !== 1) {
688
- return;
689
- }
690
- presentingEl.style.setProperty('overflow', '');
691
- const numModals = Array.from(bodyEl.querySelectorAll('ion-modal:not(.overlay-hidden)')).filter((m) => m.presentingElement !== undefined).length;
692
- if (numModals <= 1) {
693
- bodyEl.style.setProperty('background-color', '');
694
- }
695
- });
696
- const bodyEl = document.body;
697
- if (isMobile) {
698
- const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
699
- const modalTransform = hasCardModal ? '-10px' : transformOffset;
700
- const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
701
- const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;
702
- presentingAnimation.addElement(presentingEl).keyframes([
703
- { offset: 0, filter: 'contrast(0.85)', transform: finalTransform, borderRadius: '10px 10px 0 0' },
704
- { offset: 1, filter: 'contrast(1)', transform: 'translateY(0px) scale(1)', borderRadius: '0px' },
705
- ]);
706
- baseAnimation.addAnimation(presentingAnimation);
668
+ const { presentingEl, currentBreakpoint } = opts;
669
+ const root = getElementRoot(baseEl);
670
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
671
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
672
+ wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
673
+ const baseAnimation = createAnimation('leaving-base')
674
+ .addElement(baseEl)
675
+ .easing('cubic-bezier(0.32,0.72,0,1)')
676
+ .duration(duration)
677
+ .addAnimation(wrapperAnimation);
678
+ if (presentingEl) {
679
+ const isMobile = window.innerWidth < 768;
680
+ const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
681
+ const presentingElRoot = getElementRoot(presentingEl);
682
+ const presentingAnimation = createAnimation()
683
+ .beforeClearStyles(['transform'])
684
+ .afterClearStyles(['transform'])
685
+ .onFinish((currentStep) => {
686
+ // only reset background color if this is the last card-style modal
687
+ if (currentStep !== 1) {
688
+ return;
689
+ }
690
+ presentingEl.style.setProperty('overflow', '');
691
+ const numModals = Array.from(bodyEl.querySelectorAll('ion-modal:not(.overlay-hidden)')).filter((m) => m.presentingElement !== undefined).length;
692
+ if (numModals <= 1) {
693
+ bodyEl.style.setProperty('background-color', '');
694
+ }
695
+ });
696
+ const bodyEl = document.body;
697
+ if (isMobile) {
698
+ const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
699
+ const modalTransform = hasCardModal ? '-10px' : transformOffset;
700
+ const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
701
+ const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;
702
+ presentingAnimation.addElement(presentingEl).keyframes([
703
+ { offset: 0, filter: 'contrast(0.85)', transform: finalTransform, borderRadius: '10px 10px 0 0' },
704
+ { offset: 1, filter: 'contrast(1)', transform: 'translateY(0px) scale(1)', borderRadius: '0px' },
705
+ ]);
706
+ baseAnimation.addAnimation(presentingAnimation);
707
+ }
708
+ else {
709
+ baseAnimation.addAnimation(backdropAnimation);
710
+ if (!hasCardModal) {
711
+ wrapperAnimation.fromTo('opacity', '1', '0');
712
+ }
713
+ else {
714
+ const toPresentingScale = hasCardModal ? SwipeToCloseDefaults.MIN_PRESENTING_SCALE : 1;
715
+ const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;
716
+ presentingAnimation
717
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
718
+ .afterStyles({
719
+ transform: 'translate3d(0, 0, 0)',
720
+ })
721
+ .keyframes([
722
+ { offset: 0, filter: 'contrast(0.85)', transform: finalTransform },
723
+ { offset: 1, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
724
+ ]);
725
+ const shadowAnimation = createAnimation()
726
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
727
+ .afterStyles({
728
+ transform: 'translateY(0) scale(1)',
729
+ })
730
+ .keyframes([
731
+ { offset: 0, opacity: '0', transform: finalTransform },
732
+ { offset: 1, opacity: '1', transform: 'translateY(0) scale(1)' },
733
+ ]);
734
+ baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
735
+ }
736
+ }
707
737
  }
708
738
  else {
709
- baseAnimation.addAnimation(backdropAnimation);
710
- if (!hasCardModal) {
711
- wrapperAnimation.fromTo('opacity', '1', '0');
712
- }
713
- else {
714
- const toPresentingScale = hasCardModal ? SwipeToCloseDefaults.MIN_PRESENTING_SCALE : 1;
715
- const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;
716
- presentingAnimation
717
- .addElement(presentingElRoot.querySelector('.modal-wrapper'))
718
- .afterStyles({
719
- transform: 'translate3d(0, 0, 0)',
720
- })
721
- .keyframes([
722
- { offset: 0, filter: 'contrast(0.85)', transform: finalTransform },
723
- { offset: 1, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
724
- ]);
725
- const shadowAnimation = createAnimation()
726
- .addElement(presentingElRoot.querySelector('.modal-shadow'))
727
- .afterStyles({
728
- transform: 'translateY(0) scale(1)',
729
- })
730
- .keyframes([
731
- { offset: 0, opacity: '0', transform: finalTransform },
732
- { offset: 1, opacity: '1', transform: 'translateY(0) scale(1)' },
733
- ]);
734
- baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
735
- }
739
+ baseAnimation.addAnimation(backdropAnimation);
736
740
  }
737
- }
738
- else {
739
- baseAnimation.addAnimation(backdropAnimation);
740
- }
741
- return baseAnimation;
741
+ return baseAnimation;
742
742
  };
743
743
 
744
744
  const createEnterAnimation = () => {
745
- const backdropAnimation = createAnimation()
746
- .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
747
- .beforeStyles({
748
- 'pointer-events': 'none',
749
- })
750
- .afterClearStyles(['pointer-events']);
751
- const wrapperAnimation = createAnimation().keyframes([
752
- { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
753
- { offset: 1, opacity: 1, transform: `translateY(0px)` },
754
- ]);
755
- return { backdropAnimation, wrapperAnimation };
745
+ const backdropAnimation = createAnimation()
746
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
747
+ .beforeStyles({
748
+ 'pointer-events': 'none',
749
+ })
750
+ .afterClearStyles(['pointer-events']);
751
+ const wrapperAnimation = createAnimation().keyframes([
752
+ { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
753
+ { offset: 1, opacity: 1, transform: `translateY(0px)` },
754
+ ]);
755
+ return { backdropAnimation, wrapperAnimation };
756
756
  };
757
757
  /**
758
758
  * Md Modal Enter Animation
759
759
  */
760
760
  const mdEnterAnimation = (baseEl, opts) => {
761
- const { currentBreakpoint } = opts;
762
- const root = getElementRoot(baseEl);
763
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
764
- backdropAnimation.addElement(root.querySelector('ion-backdrop'));
765
- wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
766
- return createAnimation()
767
- .addElement(baseEl)
768
- .easing('cubic-bezier(0.36,0.66,0.04,1)')
769
- .duration(280)
770
- .addAnimation([backdropAnimation, wrapperAnimation]);
761
+ const { currentBreakpoint } = opts;
762
+ const root = getElementRoot(baseEl);
763
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
764
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
765
+ wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
766
+ return createAnimation()
767
+ .addElement(baseEl)
768
+ .easing('cubic-bezier(0.36,0.66,0.04,1)')
769
+ .duration(280)
770
+ .addAnimation([backdropAnimation, wrapperAnimation]);
771
771
  };
772
772
 
773
773
  const createLeaveAnimation = () => {
774
- const backdropAnimation = createAnimation().fromTo('opacity', 'var(--backdrop-opacity)', 0);
775
- const wrapperAnimation = createAnimation().keyframes([
776
- { offset: 0, opacity: 0.99, transform: `translateY(0px)` },
777
- { offset: 1, opacity: 0, transform: 'translateY(40px)' },
778
- ]);
779
- return { backdropAnimation, wrapperAnimation };
774
+ const backdropAnimation = createAnimation().fromTo('opacity', 'var(--backdrop-opacity)', 0);
775
+ const wrapperAnimation = createAnimation().keyframes([
776
+ { offset: 0, opacity: 0.99, transform: `translateY(0px)` },
777
+ { offset: 1, opacity: 0, transform: 'translateY(40px)' },
778
+ ]);
779
+ return { backdropAnimation, wrapperAnimation };
780
780
  };
781
781
  /**
782
782
  * Md Modal Leave Animation
783
783
  */
784
784
  const mdLeaveAnimation = (baseEl, opts) => {
785
- const { currentBreakpoint } = opts;
786
- const root = getElementRoot(baseEl);
787
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
788
- backdropAnimation.addElement(root.querySelector('ion-backdrop'));
789
- wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
790
- return createAnimation()
791
- .easing('cubic-bezier(0.47,0,0.745,0.715)')
792
- .duration(200)
793
- .addAnimation([backdropAnimation, wrapperAnimation]);
785
+ const { currentBreakpoint } = opts;
786
+ const root = getElementRoot(baseEl);
787
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
788
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
789
+ wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
790
+ return createAnimation()
791
+ .easing('cubic-bezier(0.47,0,0.745,0.715)')
792
+ .duration(200)
793
+ .addAnimation([backdropAnimation, wrapperAnimation]);
794
794
  };
795
795
 
796
796
  const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
797
- // Defaults for the sheet swipe animation
798
- const defaultBackdrop = [
799
- { offset: 0, opacity: 'var(--backdrop-opacity)' },
800
- { offset: 1, opacity: 0.01 },
801
- ];
802
- const customBackdrop = [
803
- { offset: 0, opacity: 'var(--backdrop-opacity)' },
804
- { offset: 1 - backdropBreakpoint, opacity: 0 },
805
- { offset: 1, opacity: 0 },
806
- ];
807
- const SheetDefaults = {
808
- WRAPPER_KEYFRAMES: [
809
- { offset: 0, transform: 'translateY(0%)' },
810
- { offset: 1, transform: 'translateY(100%)' },
811
- ],
812
- BACKDROP_KEYFRAMES: backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop,
813
- };
814
- const contentEl = baseEl.querySelector('ion-content');
815
- const height = wrapperEl.clientHeight;
816
- let currentBreakpoint = initialBreakpoint;
817
- let offset = 0;
818
- let canDismissBlocksGesture = false;
819
- const canDismissMaxStep = 0.95;
820
- const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
821
- const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
822
- const maxBreakpoint = breakpoints[breakpoints.length - 1];
823
- const minBreakpoint = breakpoints[0];
824
- const enableBackdrop = () => {
825
- baseEl.style.setProperty('pointer-events', 'auto');
826
- backdropEl.style.setProperty('pointer-events', 'auto');
827
- /**
828
- * When the backdrop is enabled, elements such
829
- * as inputs should not be focusable outside
830
- * the sheet.
831
- */
832
- baseEl.classList.remove('ion-disable-focus-trap');
833
- };
834
- const disableBackdrop = () => {
835
- baseEl.style.setProperty('pointer-events', 'none');
836
- backdropEl.style.setProperty('pointer-events', 'none');
837
- /**
838
- * When the backdrop is enabled, elements such
839
- * as inputs should not be focusable outside
840
- * the sheet.
841
- * Adding this class disables focus trapping
842
- * for the sheet temporarily.
843
- */
844
- baseEl.classList.add('ion-disable-focus-trap');
845
- };
846
- /**
847
- * After the entering animation completes,
848
- * we need to set the animation to go from
849
- * offset 0 to offset 1 so that users can
850
- * swipe in any direction. We then set the
851
- * animation offset to the current breakpoint
852
- * so there is no flickering.
853
- */
854
- if (wrapperAnimation && backdropAnimation) {
855
- wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
856
- backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
857
- animation.progressStart(true, 1 - currentBreakpoint);
858
- /**
859
- * If backdrop is not enabled, then content
860
- * behind modal should be clickable. To do this, we need
861
- * to remove pointer-events from ion-modal as a whole.
862
- * ion-backdrop and .modal-wrapper always have pointer-events: auto
863
- * applied, so the modal content can still be interacted with.
864
- */
865
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
866
- if (shouldEnableBackdrop) {
867
- enableBackdrop();
868
- }
869
- else {
870
- disableBackdrop();
871
- }
872
- }
873
- if (contentEl && currentBreakpoint !== maxBreakpoint) {
874
- contentEl.scrollY = false;
875
- }
876
- const canStart = (detail) => {
877
- /**
878
- * If the sheet is fully expanded and
879
- * the user is swiping on the content,
880
- * the gesture should not start to
881
- * allow for scrolling on the content.
882
- */
883
- const content = detail.event.target.closest('ion-content');
884
- currentBreakpoint = getCurrentBreakpoint();
885
- if (currentBreakpoint === 1 && content) {
886
- return false;
887
- }
888
- return true;
889
- };
890
- const onStart = () => {
891
- /**
892
- * If canDismiss is anything other than `true`
893
- * then users should be able to swipe down
894
- * until a threshold is hit. At that point,
895
- * the card modal should not proceed any further.
896
- *
897
- * canDismiss is never fired via gesture if there is
898
- * no 0 breakpoint. However, it can be fired if the user
899
- * presses Esc or the hardware back button.
900
- * TODO (FW-937)
901
- * Remove undefined check
902
- */
903
- canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
904
- /**
905
- * If swiping on the content
906
- * we should disable scrolling otherwise
907
- * the sheet will expand and the content will scroll.
908
- */
909
- if (contentEl) {
910
- contentEl.scrollY = false;
911
- }
912
- raf(() => {
913
- /**
914
- * Dismisses the open keyboard when the sheet drag gesture is started.
915
- * Sets the focus onto the modal element.
916
- */
917
- baseEl.focus();
918
- });
919
- animation.progressStart(true, 1 - currentBreakpoint);
920
- };
921
- const onMove = (detail) => {
922
- /**
923
- * Given the change in gesture position on the Y axis,
924
- * compute where the offset of the animation should be
925
- * relative to where the user dragged.
926
- */
927
- const initialStep = 1 - currentBreakpoint;
928
- const secondToLastBreakpoint = breakpoints.length > 1 ? 1 - breakpoints[1] : undefined;
929
- const step = initialStep + detail.deltaY / height;
930
- const isAttemptingDismissWithCanDismiss = secondToLastBreakpoint !== undefined && step >= secondToLastBreakpoint && canDismissBlocksGesture;
931
- /**
932
- * If we are blocking the gesture from dismissing,
933
- * set the max step value so that the sheet cannot be
934
- * completely hidden.
935
- */
936
- const maxStep = isAttemptingDismissWithCanDismiss ? canDismissMaxStep : 0.9999;
937
- /**
938
- * If we are blocking the gesture from
939
- * dismissing, calculate the spring modifier value
940
- * this will be added to the starting breakpoint
941
- * value to give the gesture a spring-like feeling.
942
- * Note that when isAttemptingDismissWithCanDismiss is true,
943
- * the modifier is always added to the breakpoint that
944
- * appears right after the 0 breakpoint.
945
- *
946
- * Note that this modifier is essentially the progression
947
- * between secondToLastBreakpoint and maxStep which is
948
- * why we subtract secondToLastBreakpoint. This lets us get
949
- * the result as a value from 0 to 1.
950
- */
951
- const processedStep = isAttemptingDismissWithCanDismiss && secondToLastBreakpoint !== undefined
952
- ? secondToLastBreakpoint +
953
- calculateSpringStep((step - secondToLastBreakpoint) / (maxStep - secondToLastBreakpoint))
954
- : step;
955
- offset = clamp(0.0001, processedStep, maxStep);
956
- animation.progressStep(offset);
957
- };
958
- const onEnd = (detail) => {
959
- /**
960
- * When the gesture releases, we need to determine
961
- * the closest breakpoint to snap to.
962
- */
963
- const velocity = detail.velocityY;
964
- const threshold = (detail.deltaY + velocity * 350) / height;
965
- const diff = currentBreakpoint - threshold;
966
- const closest = breakpoints.reduce((a, b) => {
967
- return Math.abs(b - diff) < Math.abs(a - diff) ? b : a;
968
- });
969
- moveSheetToBreakpoint({
970
- breakpoint: closest,
971
- breakpointOffset: offset,
972
- canDismiss: canDismissBlocksGesture,
973
- /**
974
- * The swipe is user-driven, so we should
975
- * always animate when the gesture ends.
976
- */
977
- animated: true,
978
- });
979
- };
980
- const moveSheetToBreakpoint = (options) => {
981
- const { breakpoint, canDismiss, breakpointOffset, animated } = options;
982
- /**
983
- * canDismiss should only prevent snapping
984
- * when users are trying to dismiss. If canDismiss
985
- * is present but the user is trying to swipe upwards,
986
- * we should allow that to happen,
987
- */
988
- const shouldPreventDismiss = canDismiss && breakpoint === 0;
989
- const snapToBreakpoint = shouldPreventDismiss ? currentBreakpoint : breakpoint;
990
- const shouldRemainOpen = snapToBreakpoint !== 0;
991
- currentBreakpoint = 0;
797
+ // Defaults for the sheet swipe animation
798
+ const defaultBackdrop = [
799
+ { offset: 0, opacity: 'var(--backdrop-opacity)' },
800
+ { offset: 1, opacity: 0.01 },
801
+ ];
802
+ const customBackdrop = [
803
+ { offset: 0, opacity: 'var(--backdrop-opacity)' },
804
+ { offset: 1 - backdropBreakpoint, opacity: 0 },
805
+ { offset: 1, opacity: 0 },
806
+ ];
807
+ const SheetDefaults = {
808
+ WRAPPER_KEYFRAMES: [
809
+ { offset: 0, transform: 'translateY(0%)' },
810
+ { offset: 1, transform: 'translateY(100%)' },
811
+ ],
812
+ BACKDROP_KEYFRAMES: backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop,
813
+ };
814
+ const contentEl = baseEl.querySelector('ion-content');
815
+ const height = wrapperEl.clientHeight;
816
+ let currentBreakpoint = initialBreakpoint;
817
+ let offset = 0;
818
+ let canDismissBlocksGesture = false;
819
+ const canDismissMaxStep = 0.95;
820
+ const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
821
+ const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
822
+ const maxBreakpoint = breakpoints[breakpoints.length - 1];
823
+ const minBreakpoint = breakpoints[0];
824
+ const enableBackdrop = () => {
825
+ baseEl.style.setProperty('pointer-events', 'auto');
826
+ backdropEl.style.setProperty('pointer-events', 'auto');
827
+ /**
828
+ * When the backdrop is enabled, elements such
829
+ * as inputs should not be focusable outside
830
+ * the sheet.
831
+ */
832
+ baseEl.classList.remove('ion-disable-focus-trap');
833
+ };
834
+ const disableBackdrop = () => {
835
+ baseEl.style.setProperty('pointer-events', 'none');
836
+ backdropEl.style.setProperty('pointer-events', 'none');
837
+ /**
838
+ * When the backdrop is enabled, elements such
839
+ * as inputs should not be focusable outside
840
+ * the sheet.
841
+ * Adding this class disables focus trapping
842
+ * for the sheet temporarily.
843
+ */
844
+ baseEl.classList.add('ion-disable-focus-trap');
845
+ };
992
846
  /**
993
- * Update the animation so that it plays from
994
- * the last offset to the closest snap point.
847
+ * After the entering animation completes,
848
+ * we need to set the animation to go from
849
+ * offset 0 to offset 1 so that users can
850
+ * swipe in any direction. We then set the
851
+ * animation offset to the current breakpoint
852
+ * so there is no flickering.
995
853
  */
996
854
  if (wrapperAnimation && backdropAnimation) {
997
- wrapperAnimation.keyframes([
998
- { offset: 0, transform: `translateY(${breakpointOffset * 100}%)` },
999
- { offset: 1, transform: `translateY(${(1 - snapToBreakpoint) * 100}%)` },
1000
- ]);
1001
- backdropAnimation.keyframes([
1002
- {
1003
- offset: 0,
1004
- opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(1 - breakpointOffset, backdropBreakpoint)})`,
1005
- },
1006
- {
1007
- offset: 1,
1008
- opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
1009
- },
1010
- ]);
1011
- animation.progressStep(0);
1012
- }
1013
- /**
1014
- * Gesture should remain disabled until the
1015
- * snapping animation completes.
1016
- */
1017
- gesture.enable(false);
1018
- if (shouldPreventDismiss) {
1019
- handleCanDismiss(baseEl, animation);
855
+ wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
856
+ backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
857
+ animation.progressStart(true, 1 - currentBreakpoint);
858
+ /**
859
+ * If backdrop is not enabled, then content
860
+ * behind modal should be clickable. To do this, we need
861
+ * to remove pointer-events from ion-modal as a whole.
862
+ * ion-backdrop and .modal-wrapper always have pointer-events: auto
863
+ * applied, so the modal content can still be interacted with.
864
+ */
865
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
866
+ if (shouldEnableBackdrop) {
867
+ enableBackdrop();
868
+ }
869
+ else {
870
+ disableBackdrop();
871
+ }
1020
872
  }
1021
- else if (!shouldRemainOpen) {
1022
- onDismiss();
873
+ if (contentEl && currentBreakpoint !== maxBreakpoint) {
874
+ contentEl.scrollY = false;
1023
875
  }
1024
- return new Promise((resolve) => {
1025
- animation
1026
- .onFinish(() => {
1027
- if (shouldRemainOpen) {
1028
- /**
1029
- * Once the snapping animation completes,
1030
- * we need to reset the animation to go
1031
- * from 0 to 1 so users can swipe in any direction.
1032
- * We then set the animation offset to the current
1033
- * breakpoint so that it starts at the snapped position.
1034
- */
1035
- if (wrapperAnimation && backdropAnimation) {
1036
- raf(() => {
1037
- wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
1038
- backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
1039
- animation.progressStart(true, 1 - snapToBreakpoint);
1040
- currentBreakpoint = snapToBreakpoint;
1041
- onBreakpointChange(currentBreakpoint);
1042
- /**
1043
- * If the sheet is fully expanded, we can safely
1044
- * enable scrolling again.
1045
- */
1046
- if (contentEl && currentBreakpoint === breakpoints[breakpoints.length - 1]) {
1047
- contentEl.scrollY = true;
1048
- }
1049
- /**
1050
- * Backdrop should become enabled
1051
- * after the backdropBreakpoint value
1052
- */
1053
- const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
1054
- if (shouldEnableBackdrop) {
1055
- enableBackdrop();
1056
- }
1057
- else {
1058
- disableBackdrop();
1059
- }
1060
- gesture.enable(true);
1061
- resolve();
1062
- });
1063
- }
1064
- else {
1065
- gesture.enable(true);
1066
- resolve();
1067
- }
876
+ const canStart = (detail) => {
877
+ /**
878
+ * If the sheet is fully expanded and
879
+ * the user is swiping on the content,
880
+ * the gesture should not start to
881
+ * allow for scrolling on the content.
882
+ */
883
+ const content = detail.event.target.closest('ion-content');
884
+ currentBreakpoint = getCurrentBreakpoint();
885
+ if (currentBreakpoint === 1 && content) {
886
+ return false;
1068
887
  }
1069
- else {
1070
- resolve();
888
+ return true;
889
+ };
890
+ const onStart = () => {
891
+ /**
892
+ * If canDismiss is anything other than `true`
893
+ * then users should be able to swipe down
894
+ * until a threshold is hit. At that point,
895
+ * the card modal should not proceed any further.
896
+ *
897
+ * canDismiss is never fired via gesture if there is
898
+ * no 0 breakpoint. However, it can be fired if the user
899
+ * presses Esc or the hardware back button.
900
+ * TODO (FW-937)
901
+ * Remove undefined check
902
+ */
903
+ canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
904
+ /**
905
+ * If swiping on the content
906
+ * we should disable scrolling otherwise
907
+ * the sheet will expand and the content will scroll.
908
+ */
909
+ if (contentEl) {
910
+ contentEl.scrollY = false;
1071
911
  }
912
+ raf(() => {
913
+ /**
914
+ * Dismisses the open keyboard when the sheet drag gesture is started.
915
+ * Sets the focus onto the modal element.
916
+ */
917
+ baseEl.focus();
918
+ });
919
+ animation.progressStart(true, 1 - currentBreakpoint);
920
+ };
921
+ const onMove = (detail) => {
1072
922
  /**
1073
- * This must be a one time callback
1074
- * otherwise a new callback will
1075
- * be added every time onEnd runs.
923
+ * Given the change in gesture position on the Y axis,
924
+ * compute where the offset of the animation should be
925
+ * relative to where the user dragged.
1076
926
  */
1077
- }, { oneTimeCallback: true })
1078
- .progressEnd(1, 0, animated ? 500 : 0);
1079
- });
1080
- };
1081
- const gesture = createGesture({
1082
- el: wrapperEl,
1083
- gestureName: 'modalSheet',
1084
- gesturePriority: 40,
1085
- direction: 'y',
1086
- threshold: 10,
1087
- canStart,
1088
- onStart,
1089
- onMove,
1090
- onEnd,
1091
- });
1092
- return {
1093
- gesture,
1094
- moveSheetToBreakpoint,
1095
- };
1096
- };
1097
-
1098
- const modalIosCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right: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;color:var(--ion-text-color, #000);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}@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{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, #c0c0be);cursor:pointer;z-index:11}.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;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}: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-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}:host-context([dir=rtl]):host(.modal-card) .modal-wrapper,:host-context([dir=rtl]).modal-card .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}@supports selector(:dir(rtl)){:host(.modal-card:dir(rtl)) .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-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-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}:host-context([dir=rtl]):host(.modal-sheet) .modal-wrapper,:host-context([dir=rtl]).modal-sheet .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}@supports selector(:dir(rtl)){:host(.modal-sheet:dir(rtl)) .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}}";
1099
-
1100
- const modalMdCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right: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;color:var(--ion-text-color, #000);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}@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{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, #c0c0be);cursor:pointer;z-index:11}.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;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:2px;--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}";
1101
-
1102
- const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
1103
- constructor() {
1104
- super();
1105
- this.__registerHost();
1106
- this.__attachShadow();
1107
- this.didPresent = createEvent(this, "ionModalDidPresent", 7);
1108
- this.willPresent = createEvent(this, "ionModalWillPresent", 7);
1109
- this.willDismiss = createEvent(this, "ionModalWillDismiss", 7);
1110
- this.didDismiss = createEvent(this, "ionModalDidDismiss", 7);
1111
- this.ionBreakpointDidChange = createEvent(this, "ionBreakpointDidChange", 7);
1112
- this.didPresentShorthand = createEvent(this, "didPresent", 7);
1113
- this.willPresentShorthand = createEvent(this, "willPresent", 7);
1114
- this.willDismissShorthand = createEvent(this, "willDismiss", 7);
1115
- this.didDismissShorthand = createEvent(this, "didDismiss", 7);
1116
- this.ionMount = createEvent(this, "ionMount", 7);
1117
- this.lockController = createLockController();
1118
- this.triggerController = createTriggerController();
1119
- this.coreDelegate = CoreDelegate();
1120
- this.isSheetModal = false;
1121
- this.inheritedAttributes = {};
1122
- this.inline = false;
1123
- // Whether or not modal is being dismissed via gesture
1124
- this.gestureAnimationDismissing = false;
1125
- this.onHandleClick = () => {
1126
- const { sheetTransition, handleBehavior } = this;
1127
- if (handleBehavior !== 'cycle' || sheetTransition !== undefined) {
927
+ const initialStep = 1 - currentBreakpoint;
928
+ const secondToLastBreakpoint = breakpoints.length > 1 ? 1 - breakpoints[1] : undefined;
929
+ const step = initialStep + detail.deltaY / height;
930
+ const isAttemptingDismissWithCanDismiss = secondToLastBreakpoint !== undefined && step >= secondToLastBreakpoint && canDismissBlocksGesture;
1128
931
  /**
1129
- * The sheet modal should not advance to the next breakpoint
1130
- * if the handle behavior is not `cycle` or if the handle
1131
- * is clicked while the sheet is moving to a breakpoint.
932
+ * If we are blocking the gesture from dismissing,
933
+ * set the max step value so that the sheet cannot be
934
+ * completely hidden.
1132
935
  */
1133
- return;
1134
- }
1135
- this.moveToNextBreakpoint();
936
+ const maxStep = isAttemptingDismissWithCanDismiss ? canDismissMaxStep : 0.9999;
937
+ /**
938
+ * If we are blocking the gesture from
939
+ * dismissing, calculate the spring modifier value
940
+ * this will be added to the starting breakpoint
941
+ * value to give the gesture a spring-like feeling.
942
+ * Note that when isAttemptingDismissWithCanDismiss is true,
943
+ * the modifier is always added to the breakpoint that
944
+ * appears right after the 0 breakpoint.
945
+ *
946
+ * Note that this modifier is essentially the progression
947
+ * between secondToLastBreakpoint and maxStep which is
948
+ * why we subtract secondToLastBreakpoint. This lets us get
949
+ * the result as a value from 0 to 1.
950
+ */
951
+ const processedStep = isAttemptingDismissWithCanDismiss && secondToLastBreakpoint !== undefined
952
+ ? secondToLastBreakpoint +
953
+ calculateSpringStep((step - secondToLastBreakpoint) / (maxStep - secondToLastBreakpoint))
954
+ : step;
955
+ offset = clamp(0.0001, processedStep, maxStep);
956
+ animation.progressStep(offset);
1136
957
  };
1137
- this.onBackdropTap = () => {
1138
- const { sheetTransition } = this;
1139
- if (sheetTransition !== undefined) {
958
+ const onEnd = (detail) => {
1140
959
  /**
1141
- * When the handle is double clicked at the largest breakpoint,
1142
- * it will start to move to the first breakpoint. While transitioning,
1143
- * the backdrop will often receive the second click. We prevent the
1144
- * backdrop from dismissing the modal while moving between breakpoints.
960
+ * When the gesture releases, we need to determine
961
+ * the closest breakpoint to snap to.
1145
962
  */
1146
- return;
1147
- }
1148
- this.dismiss(undefined, BACKDROP);
963
+ const velocity = detail.velocityY;
964
+ const threshold = (detail.deltaY + velocity * 350) / height;
965
+ const diff = currentBreakpoint - threshold;
966
+ const closest = breakpoints.reduce((a, b) => {
967
+ return Math.abs(b - diff) < Math.abs(a - diff) ? b : a;
968
+ });
969
+ moveSheetToBreakpoint({
970
+ breakpoint: closest,
971
+ breakpointOffset: offset,
972
+ canDismiss: canDismissBlocksGesture,
973
+ /**
974
+ * The swipe is user-driven, so we should
975
+ * always animate when the gesture ends.
976
+ */
977
+ animated: true,
978
+ });
1149
979
  };
1150
- this.onLifecycle = (modalEvent) => {
1151
- const el = this.usersElement;
1152
- const name = LIFECYCLE_MAP[modalEvent.type];
1153
- if (el && name) {
1154
- const ev = new CustomEvent(name, {
1155
- bubbles: false,
1156
- cancelable: false,
1157
- detail: modalEvent.detail,
980
+ const moveSheetToBreakpoint = (options) => {
981
+ const { breakpoint, canDismiss, breakpointOffset, animated } = options;
982
+ /**
983
+ * canDismiss should only prevent snapping
984
+ * when users are trying to dismiss. If canDismiss
985
+ * is present but the user is trying to swipe upwards,
986
+ * we should allow that to happen,
987
+ */
988
+ const shouldPreventDismiss = canDismiss && breakpoint === 0;
989
+ const snapToBreakpoint = shouldPreventDismiss ? currentBreakpoint : breakpoint;
990
+ const shouldRemainOpen = snapToBreakpoint !== 0;
991
+ currentBreakpoint = 0;
992
+ /**
993
+ * Update the animation so that it plays from
994
+ * the last offset to the closest snap point.
995
+ */
996
+ if (wrapperAnimation && backdropAnimation) {
997
+ wrapperAnimation.keyframes([
998
+ { offset: 0, transform: `translateY(${breakpointOffset * 100}%)` },
999
+ { offset: 1, transform: `translateY(${(1 - snapToBreakpoint) * 100}%)` },
1000
+ ]);
1001
+ backdropAnimation.keyframes([
1002
+ {
1003
+ offset: 0,
1004
+ opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(1 - breakpointOffset, backdropBreakpoint)})`,
1005
+ },
1006
+ {
1007
+ offset: 1,
1008
+ opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
1009
+ },
1010
+ ]);
1011
+ animation.progressStep(0);
1012
+ }
1013
+ /**
1014
+ * Gesture should remain disabled until the
1015
+ * snapping animation completes.
1016
+ */
1017
+ gesture.enable(false);
1018
+ if (shouldPreventDismiss) {
1019
+ handleCanDismiss(baseEl, animation);
1020
+ }
1021
+ else if (!shouldRemainOpen) {
1022
+ onDismiss();
1023
+ }
1024
+ return new Promise((resolve) => {
1025
+ animation
1026
+ .onFinish(() => {
1027
+ if (shouldRemainOpen) {
1028
+ /**
1029
+ * Once the snapping animation completes,
1030
+ * we need to reset the animation to go
1031
+ * from 0 to 1 so users can swipe in any direction.
1032
+ * We then set the animation offset to the current
1033
+ * breakpoint so that it starts at the snapped position.
1034
+ */
1035
+ if (wrapperAnimation && backdropAnimation) {
1036
+ raf(() => {
1037
+ wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
1038
+ backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
1039
+ animation.progressStart(true, 1 - snapToBreakpoint);
1040
+ currentBreakpoint = snapToBreakpoint;
1041
+ onBreakpointChange(currentBreakpoint);
1042
+ /**
1043
+ * If the sheet is fully expanded, we can safely
1044
+ * enable scrolling again.
1045
+ */
1046
+ if (contentEl && currentBreakpoint === breakpoints[breakpoints.length - 1]) {
1047
+ contentEl.scrollY = true;
1048
+ }
1049
+ /**
1050
+ * Backdrop should become enabled
1051
+ * after the backdropBreakpoint value
1052
+ */
1053
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
1054
+ if (shouldEnableBackdrop) {
1055
+ enableBackdrop();
1056
+ }
1057
+ else {
1058
+ disableBackdrop();
1059
+ }
1060
+ gesture.enable(true);
1061
+ resolve();
1062
+ });
1063
+ }
1064
+ else {
1065
+ gesture.enable(true);
1066
+ resolve();
1067
+ }
1068
+ }
1069
+ else {
1070
+ resolve();
1071
+ }
1072
+ /**
1073
+ * This must be a one time callback
1074
+ * otherwise a new callback will
1075
+ * be added every time onEnd runs.
1076
+ */
1077
+ }, { oneTimeCallback: true })
1078
+ .progressEnd(1, 0, animated ? 500 : 0);
1158
1079
  });
1159
- el.dispatchEvent(ev);
1160
- }
1161
1080
  };
1162
- this.presented = false;
1163
- this.hasController = false;
1164
- this.overlayIndex = undefined;
1165
- this.delegate = undefined;
1166
- this.keyboardClose = true;
1167
- this.enterAnimation = undefined;
1168
- this.leaveAnimation = undefined;
1169
- this.breakpoints = undefined;
1170
- this.initialBreakpoint = undefined;
1171
- this.backdropBreakpoint = 0;
1172
- this.handle = undefined;
1173
- this.handleBehavior = 'none';
1174
- this.component = undefined;
1175
- this.componentProps = undefined;
1176
- this.cssClass = undefined;
1177
- this.backdropDismiss = true;
1178
- this.showBackdrop = true;
1179
- this.animated = true;
1180
- this.presentingElement = undefined;
1181
- this.htmlAttributes = undefined;
1182
- this.isOpen = false;
1183
- this.trigger = undefined;
1184
- this.keepContentsMounted = false;
1185
- this.canDismiss = true;
1186
- }
1187
- onIsOpenChange(newValue, oldValue) {
1188
- if (newValue === true && oldValue === false) {
1189
- this.present();
1081
+ const gesture = createGesture({
1082
+ el: wrapperEl,
1083
+ gestureName: 'modalSheet',
1084
+ gesturePriority: 40,
1085
+ direction: 'y',
1086
+ threshold: 10,
1087
+ canStart,
1088
+ onStart,
1089
+ onMove,
1090
+ onEnd,
1091
+ });
1092
+ return {
1093
+ gesture,
1094
+ moveSheetToBreakpoint,
1095
+ };
1096
+ };
1097
+
1098
+ const modalIosCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right: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;color:var(--ion-text-color, #000);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}@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{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, #c0c0be);cursor:pointer;z-index:11}.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;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}: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-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}:host-context([dir=rtl]):host(.modal-card) .modal-wrapper,:host-context([dir=rtl]).modal-card .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}@supports selector(:dir(rtl)){:host(.modal-card:dir(rtl)) .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-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-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}:host-context([dir=rtl]):host(.modal-sheet) .modal-wrapper,:host-context([dir=rtl]).modal-sheet .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}@supports selector(:dir(rtl)){:host(.modal-sheet:dir(rtl)) .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}}";
1099
+
1100
+ const modalMdCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right: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;color:var(--ion-text-color, #000);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}@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{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, #c0c0be);cursor:pointer;z-index:11}.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;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:2px;--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}";
1101
+
1102
+ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
1103
+ constructor() {
1104
+ super();
1105
+ this.__registerHost();
1106
+ this.__attachShadow();
1107
+ this.didPresent = createEvent(this, "ionModalDidPresent", 7);
1108
+ this.willPresent = createEvent(this, "ionModalWillPresent", 7);
1109
+ this.willDismiss = createEvent(this, "ionModalWillDismiss", 7);
1110
+ this.didDismiss = createEvent(this, "ionModalDidDismiss", 7);
1111
+ this.ionBreakpointDidChange = createEvent(this, "ionBreakpointDidChange", 7);
1112
+ this.didPresentShorthand = createEvent(this, "didPresent", 7);
1113
+ this.willPresentShorthand = createEvent(this, "willPresent", 7);
1114
+ this.willDismissShorthand = createEvent(this, "willDismiss", 7);
1115
+ this.didDismissShorthand = createEvent(this, "didDismiss", 7);
1116
+ this.ionMount = createEvent(this, "ionMount", 7);
1117
+ this.lockController = createLockController();
1118
+ this.triggerController = createTriggerController();
1119
+ this.coreDelegate = CoreDelegate();
1120
+ this.isSheetModal = false;
1121
+ this.inheritedAttributes = {};
1122
+ this.inline = false;
1123
+ // Whether or not modal is being dismissed via gesture
1124
+ this.gestureAnimationDismissing = false;
1125
+ this.onHandleClick = () => {
1126
+ const { sheetTransition, handleBehavior } = this;
1127
+ if (handleBehavior !== 'cycle' || sheetTransition !== undefined) {
1128
+ /**
1129
+ * The sheet modal should not advance to the next breakpoint
1130
+ * if the handle behavior is not `cycle` or if the handle
1131
+ * is clicked while the sheet is moving to a breakpoint.
1132
+ */
1133
+ return;
1134
+ }
1135
+ this.moveToNextBreakpoint();
1136
+ };
1137
+ this.onBackdropTap = () => {
1138
+ const { sheetTransition } = this;
1139
+ if (sheetTransition !== undefined) {
1140
+ /**
1141
+ * When the handle is double clicked at the largest breakpoint,
1142
+ * it will start to move to the first breakpoint. While transitioning,
1143
+ * the backdrop will often receive the second click. We prevent the
1144
+ * backdrop from dismissing the modal while moving between breakpoints.
1145
+ */
1146
+ return;
1147
+ }
1148
+ this.dismiss(undefined, BACKDROP);
1149
+ };
1150
+ this.onLifecycle = (modalEvent) => {
1151
+ const el = this.usersElement;
1152
+ const name = LIFECYCLE_MAP[modalEvent.type];
1153
+ if (el && name) {
1154
+ const ev = new CustomEvent(name, {
1155
+ bubbles: false,
1156
+ cancelable: false,
1157
+ detail: modalEvent.detail,
1158
+ });
1159
+ el.dispatchEvent(ev);
1160
+ }
1161
+ };
1162
+ this.presented = false;
1163
+ this.hasController = false;
1164
+ this.overlayIndex = undefined;
1165
+ this.delegate = undefined;
1166
+ this.keyboardClose = true;
1167
+ this.enterAnimation = undefined;
1168
+ this.leaveAnimation = undefined;
1169
+ this.breakpoints = undefined;
1170
+ this.initialBreakpoint = undefined;
1171
+ this.backdropBreakpoint = 0;
1172
+ this.handle = undefined;
1173
+ this.handleBehavior = 'none';
1174
+ this.component = undefined;
1175
+ this.componentProps = undefined;
1176
+ this.cssClass = undefined;
1177
+ this.backdropDismiss = true;
1178
+ this.showBackdrop = true;
1179
+ this.animated = true;
1180
+ this.presentingElement = undefined;
1181
+ this.htmlAttributes = undefined;
1182
+ this.isOpen = false;
1183
+ this.trigger = undefined;
1184
+ this.keepContentsMounted = false;
1185
+ this.canDismiss = true;
1190
1186
  }
1191
- else if (newValue === false && oldValue === true) {
1192
- this.dismiss();
1187
+ onIsOpenChange(newValue, oldValue) {
1188
+ if (newValue === true && oldValue === false) {
1189
+ this.present();
1190
+ }
1191
+ else if (newValue === false && oldValue === true) {
1192
+ this.dismiss();
1193
+ }
1193
1194
  }
1194
- }
1195
- triggerChanged() {
1196
- const { trigger, el, triggerController } = this;
1197
- if (trigger) {
1198
- triggerController.addClickListener(el, trigger);
1195
+ triggerChanged() {
1196
+ const { trigger, el, triggerController } = this;
1197
+ if (trigger) {
1198
+ triggerController.addClickListener(el, trigger);
1199
+ }
1199
1200
  }
1200
- }
1201
- breakpointsChanged(breakpoints) {
1202
- if (breakpoints !== undefined) {
1203
- this.sortedBreakpoints = breakpoints.sort((a, b) => a - b);
1201
+ breakpointsChanged(breakpoints) {
1202
+ if (breakpoints !== undefined) {
1203
+ this.sortedBreakpoints = breakpoints.sort((a, b) => a - b);
1204
+ }
1204
1205
  }
1205
- }
1206
- connectedCallback() {
1207
- const { el } = this;
1208
- prepareOverlay(el);
1209
- this.triggerChanged();
1210
- }
1211
- disconnectedCallback() {
1212
- this.triggerController.removeClickListener();
1213
- }
1214
- componentWillLoad() {
1215
- const { breakpoints, initialBreakpoint, el } = this;
1216
- const isSheetModal = (this.isSheetModal = breakpoints !== undefined && initialBreakpoint !== undefined);
1217
- this.inheritedAttributes = inheritAttributes(el, ['aria-label', 'role']);
1218
- if (isSheetModal) {
1219
- this.currentBreakpoint = this.initialBreakpoint;
1206
+ connectedCallback() {
1207
+ const { el } = this;
1208
+ prepareOverlay(el);
1209
+ this.triggerChanged();
1220
1210
  }
1221
- if (breakpoints !== undefined && initialBreakpoint !== undefined && !breakpoints.includes(initialBreakpoint)) {
1222
- printIonWarning('Your breakpoints array must include the initialBreakpoint value.');
1211
+ disconnectedCallback() {
1212
+ this.triggerController.removeClickListener();
1223
1213
  }
1224
- setOverlayId(el);
1225
- }
1226
- componentDidLoad() {
1227
- /**
1228
- * If modal was rendered with isOpen="true"
1229
- * then we should open modal immediately.
1230
- */
1231
- if (this.isOpen === true) {
1232
- raf(() => this.present());
1214
+ componentWillLoad() {
1215
+ const { breakpoints, initialBreakpoint, el } = this;
1216
+ const isSheetModal = (this.isSheetModal = breakpoints !== undefined && initialBreakpoint !== undefined);
1217
+ this.inheritedAttributes = inheritAttributes(el, ['aria-label', 'role']);
1218
+ if (isSheetModal) {
1219
+ this.currentBreakpoint = this.initialBreakpoint;
1220
+ }
1221
+ if (breakpoints !== undefined && initialBreakpoint !== undefined && !breakpoints.includes(initialBreakpoint)) {
1222
+ printIonWarning('Your breakpoints array must include the initialBreakpoint value.');
1223
+ }
1224
+ setOverlayId(el);
1233
1225
  }
1234
- this.breakpointsChanged(this.breakpoints);
1235
- }
1236
- /**
1237
- * Determines whether or not an overlay
1238
- * is being used inline or via a controller/JS
1239
- * and returns the correct delegate.
1240
- * By default, subsequent calls to getDelegate
1241
- * will use a cached version of the delegate.
1242
- * This is useful for calling dismiss after
1243
- * present so that the correct delegate is given.
1244
- */
1245
- getDelegate(force = false) {
1246
- if (this.workingDelegate && !force) {
1247
- return {
1248
- delegate: this.workingDelegate,
1249
- inline: this.inline,
1250
- };
1226
+ componentDidLoad() {
1227
+ /**
1228
+ * If modal was rendered with isOpen="true"
1229
+ * then we should open modal immediately.
1230
+ */
1231
+ if (this.isOpen === true) {
1232
+ raf(() => this.present());
1233
+ }
1234
+ this.breakpointsChanged(this.breakpoints);
1235
+ /**
1236
+ * When binding values in frameworks such as Angular
1237
+ * it is possible for the value to be set after the Web Component
1238
+ * initializes but before the value watcher is set up in Stencil.
1239
+ * As a result, the watcher callback may not be fired.
1240
+ * We work around this by manually calling the watcher
1241
+ * callback when the component has loaded and the watcher
1242
+ * is configured.
1243
+ */
1244
+ this.triggerChanged();
1251
1245
  }
1252
1246
  /**
1253
- * If using overlay inline
1254
- * we potentially need to use the coreDelegate
1255
- * so that this works in vanilla JS apps.
1256
- * If a developer has presented this component
1257
- * via a controller, then we can assume
1258
- * the component is already in the
1259
- * correct place.
1247
+ * Determines whether or not an overlay
1248
+ * is being used inline or via a controller/JS
1249
+ * and returns the correct delegate.
1250
+ * By default, subsequent calls to getDelegate
1251
+ * will use a cached version of the delegate.
1252
+ * This is useful for calling dismiss after
1253
+ * present so that the correct delegate is given.
1260
1254
  */
1261
- const parentEl = this.el.parentNode;
1262
- const inline = (this.inline = parentEl !== null && !this.hasController);
1263
- const delegate = (this.workingDelegate = inline ? this.delegate || this.coreDelegate : this.delegate);
1264
- return { inline, delegate };
1265
- }
1266
- /**
1267
- * Determines whether or not the
1268
- * modal is allowed to dismiss based
1269
- * on the state of the canDismiss prop.
1270
- */
1271
- async checkCanDismiss(data, role) {
1272
- const { canDismiss } = this;
1273
- if (typeof canDismiss === 'function') {
1274
- return canDismiss(data, role);
1275
- }
1276
- return canDismiss;
1277
- }
1278
- /**
1279
- * Present the modal overlay after it has been created.
1280
- */
1281
- async present() {
1282
- const unlock = await this.lockController.lock();
1283
- if (this.presented) {
1284
- unlock();
1285
- return;
1255
+ getDelegate(force = false) {
1256
+ if (this.workingDelegate && !force) {
1257
+ return {
1258
+ delegate: this.workingDelegate,
1259
+ inline: this.inline,
1260
+ };
1261
+ }
1262
+ /**
1263
+ * If using overlay inline
1264
+ * we potentially need to use the coreDelegate
1265
+ * so that this works in vanilla JS apps.
1266
+ * If a developer has presented this component
1267
+ * via a controller, then we can assume
1268
+ * the component is already in the
1269
+ * correct place.
1270
+ */
1271
+ const parentEl = this.el.parentNode;
1272
+ const inline = (this.inline = parentEl !== null && !this.hasController);
1273
+ const delegate = (this.workingDelegate = inline ? this.delegate || this.coreDelegate : this.delegate);
1274
+ return { inline, delegate };
1286
1275
  }
1287
- const { presentingElement, el } = this;
1288
1276
  /**
1289
- * If the modal is presented multiple times (inline modals), we
1290
- * need to reset the current breakpoint to the initial breakpoint.
1277
+ * Determines whether or not the
1278
+ * modal is allowed to dismiss based
1279
+ * on the state of the canDismiss prop.
1291
1280
  */
1292
- this.currentBreakpoint = this.initialBreakpoint;
1293
- const { inline, delegate } = this.getDelegate(true);
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
- */
1299
- this.ionMount.emit();
1300
- this.usersElement = await attachComponent(delegate, el, this.component, ['ion-page'], this.componentProps, inline);
1281
+ async checkCanDismiss(data, role) {
1282
+ const { canDismiss } = this;
1283
+ if (typeof canDismiss === 'function') {
1284
+ return canDismiss(data, role);
1285
+ }
1286
+ return canDismiss;
1287
+ }
1301
1288
  /**
1302
- * When using the lazy loaded build of Stencil, we need to wait
1303
- * for every Stencil component instance to be ready before presenting
1304
- * otherwise there can be a flash of unstyled content. With the
1305
- * custom elements bundle we need to wait for the JS framework
1306
- * mount the inner contents of the overlay otherwise WebKit may
1307
- * get the transition incorrect.
1289
+ * Present the modal overlay after it has been created.
1308
1290
  */
1309
- if (hasLazyBuild(el)) {
1310
- await deepReady(this.usersElement);
1311
- /**
1312
- * If keepContentsMounted="true" then the
1313
- * JS Framework has already mounted the inner
1314
- * contents so there is no need to wait.
1315
- * Otherwise, we need to wait for the JS
1316
- * Framework to mount the inner contents
1317
- * of this component.
1318
- */
1291
+ async present() {
1292
+ const unlock = await this.lockController.lock();
1293
+ if (this.presented) {
1294
+ unlock();
1295
+ return;
1296
+ }
1297
+ const { presentingElement, el } = this;
1298
+ /**
1299
+ * If the modal is presented multiple times (inline modals), we
1300
+ * need to reset the current breakpoint to the initial breakpoint.
1301
+ */
1302
+ this.currentBreakpoint = this.initialBreakpoint;
1303
+ const { inline, delegate } = this.getDelegate(true);
1304
+ /**
1305
+ * Emit ionMount so JS Frameworks have an opportunity
1306
+ * to add the child component to the DOM. The child
1307
+ * component will be assigned to this.usersElement below.
1308
+ */
1309
+ this.ionMount.emit();
1310
+ this.usersElement = await attachComponent(delegate, el, this.component, ['ion-page'], this.componentProps, inline);
1311
+ /**
1312
+ * When using the lazy loaded build of Stencil, we need to wait
1313
+ * for every Stencil component instance to be ready before presenting
1314
+ * otherwise there can be a flash of unstyled content. With the
1315
+ * custom elements bundle we need to wait for the JS framework
1316
+ * mount the inner contents of the overlay otherwise WebKit may
1317
+ * get the transition incorrect.
1318
+ */
1319
+ if (hasLazyBuild(el)) {
1320
+ await deepReady(this.usersElement);
1321
+ /**
1322
+ * If keepContentsMounted="true" then the
1323
+ * JS Framework has already mounted the inner
1324
+ * contents so there is no need to wait.
1325
+ * Otherwise, we need to wait for the JS
1326
+ * Framework to mount the inner contents
1327
+ * of this component.
1328
+ */
1329
+ }
1330
+ else if (!this.keepContentsMounted) {
1331
+ await waitForMount();
1332
+ }
1333
+ writeTask(() => this.el.classList.add('show-modal'));
1334
+ const hasCardModal = presentingElement !== undefined;
1335
+ /**
1336
+ * We need to change the status bar at the
1337
+ * start of the animation so that it completes
1338
+ * by the time the card animation is done.
1339
+ */
1340
+ if (hasCardModal && getIonMode(this) === 'ios') {
1341
+ // Cache the original status bar color before the modal is presented
1342
+ this.statusBarStyle = await StatusBar.getStyle();
1343
+ setCardStatusBarDark();
1344
+ }
1345
+ await present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
1346
+ presentingEl: presentingElement,
1347
+ currentBreakpoint: this.initialBreakpoint,
1348
+ backdropBreakpoint: this.backdropBreakpoint,
1349
+ });
1350
+ /* tslint:disable-next-line */
1351
+ if (typeof window !== 'undefined') {
1352
+ /**
1353
+ * This needs to be setup before any
1354
+ * non-transition async work so it can be dereferenced
1355
+ * in the dismiss method. The dismiss method
1356
+ * only waits for the entering transition
1357
+ * to finish. It does not wait for all of the `present`
1358
+ * method to resolve.
1359
+ */
1360
+ this.keyboardOpenCallback = () => {
1361
+ if (this.gesture) {
1362
+ /**
1363
+ * When the native keyboard is opened and the webview
1364
+ * is resized, the gesture implementation will become unresponsive
1365
+ * and enter a free-scroll mode.
1366
+ *
1367
+ * When the keyboard is opened, we disable the gesture for
1368
+ * a single frame and re-enable once the contents have repositioned
1369
+ * from the keyboard placement.
1370
+ */
1371
+ this.gesture.enable(false);
1372
+ raf(() => {
1373
+ if (this.gesture) {
1374
+ this.gesture.enable(true);
1375
+ }
1376
+ });
1377
+ }
1378
+ };
1379
+ window.addEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
1380
+ }
1381
+ if (this.isSheetModal) {
1382
+ this.initSheetGesture();
1383
+ }
1384
+ else if (hasCardModal) {
1385
+ this.initSwipeToClose();
1386
+ }
1387
+ unlock();
1388
+ }
1389
+ initSwipeToClose() {
1390
+ var _a;
1391
+ if (getIonMode(this) !== 'ios') {
1392
+ return;
1393
+ }
1394
+ const { el } = this;
1395
+ // All of the elements needed for the swipe gesture
1396
+ // should be in the DOM and referenced by now, except
1397
+ // for the presenting el
1398
+ const animationBuilder = this.leaveAnimation || config.get('modalLeave', iosLeaveAnimation);
1399
+ const ani = (this.animation = animationBuilder(el, { presentingEl: this.presentingElement }));
1400
+ const contentEl = findIonContent(el);
1401
+ if (!contentEl) {
1402
+ printIonContentErrorMsg(el);
1403
+ return;
1404
+ }
1405
+ const statusBarStyle = (_a = this.statusBarStyle) !== null && _a !== void 0 ? _a : Style.Default;
1406
+ this.gesture = createSwipeToCloseGesture(el, ani, statusBarStyle, () => {
1407
+ /**
1408
+ * While the gesture animation is finishing
1409
+ * it is possible for a user to tap the backdrop.
1410
+ * This would result in the dismiss animation
1411
+ * being played again. Typically this is avoided
1412
+ * by setting `presented = false` on the overlay
1413
+ * component; however, we cannot do that here as
1414
+ * that would prevent the element from being
1415
+ * removed from the DOM.
1416
+ */
1417
+ this.gestureAnimationDismissing = true;
1418
+ /**
1419
+ * Reset the status bar style as the dismiss animation
1420
+ * starts otherwise the status bar will be the wrong
1421
+ * color for the duration of the dismiss animation.
1422
+ * The dismiss method does this as well, but
1423
+ * in this case it's only called once the animation
1424
+ * has finished.
1425
+ */
1426
+ setCardStatusBarDefault(this.statusBarStyle);
1427
+ this.animation.onFinish(async () => {
1428
+ await this.dismiss(undefined, GESTURE);
1429
+ this.gestureAnimationDismissing = false;
1430
+ });
1431
+ });
1432
+ this.gesture.enable(true);
1319
1433
  }
1320
- else if (!this.keepContentsMounted) {
1321
- await waitForMount();
1434
+ initSheetGesture() {
1435
+ const { wrapperEl, initialBreakpoint, backdropBreakpoint } = this;
1436
+ if (!wrapperEl || initialBreakpoint === undefined) {
1437
+ return;
1438
+ }
1439
+ const animationBuilder = this.enterAnimation || config.get('modalEnter', iosEnterAnimation);
1440
+ const ani = (this.animation = animationBuilder(this.el, {
1441
+ presentingEl: this.presentingElement,
1442
+ currentBreakpoint: initialBreakpoint,
1443
+ backdropBreakpoint,
1444
+ }));
1445
+ ani.progressStart(true, 1);
1446
+ const { gesture, moveSheetToBreakpoint } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, () => { var _a; return (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : 0; }, () => this.sheetOnDismiss(), (breakpoint) => {
1447
+ if (this.currentBreakpoint !== breakpoint) {
1448
+ this.currentBreakpoint = breakpoint;
1449
+ this.ionBreakpointDidChange.emit({ breakpoint });
1450
+ }
1451
+ });
1452
+ this.gesture = gesture;
1453
+ this.moveSheetToBreakpoint = moveSheetToBreakpoint;
1454
+ this.gesture.enable(true);
1455
+ }
1456
+ sheetOnDismiss() {
1457
+ /**
1458
+ * While the gesture animation is finishing
1459
+ * it is possible for a user to tap the backdrop.
1460
+ * This would result in the dismiss animation
1461
+ * being played again. Typically this is avoided
1462
+ * by setting `presented = false` on the overlay
1463
+ * component; however, we cannot do that here as
1464
+ * that would prevent the element from being
1465
+ * removed from the DOM.
1466
+ */
1467
+ this.gestureAnimationDismissing = true;
1468
+ this.animation.onFinish(async () => {
1469
+ this.currentBreakpoint = 0;
1470
+ this.ionBreakpointDidChange.emit({ breakpoint: this.currentBreakpoint });
1471
+ await this.dismiss(undefined, GESTURE);
1472
+ this.gestureAnimationDismissing = false;
1473
+ });
1322
1474
  }
1323
- writeTask(() => this.el.classList.add('show-modal'));
1324
- const hasCardModal = presentingElement !== undefined;
1325
1475
  /**
1326
- * We need to change the status bar at the
1327
- * start of the animation so that it completes
1328
- * by the time the card animation is done.
1476
+ * Dismiss the modal overlay after it has been presented.
1477
+ *
1478
+ * @param data Any data to emit in the dismiss events.
1479
+ * @param role The role of the element that is dismissing the modal. For example, 'cancel' or 'backdrop'.
1329
1480
  */
1330
- if (hasCardModal && getIonMode(this) === 'ios') {
1331
- // Cache the original status bar color before the modal is presented
1332
- this.statusBarStyle = await StatusBar.getStyle();
1333
- setCardStatusBarDark();
1334
- }
1335
- await present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
1336
- presentingEl: presentingElement,
1337
- currentBreakpoint: this.initialBreakpoint,
1338
- backdropBreakpoint: this.backdropBreakpoint,
1339
- });
1340
- /* tslint:disable-next-line */
1341
- if (typeof window !== 'undefined') {
1342
- /**
1343
- * This needs to be setup before any
1344
- * non-transition async work so it can be dereferenced
1345
- * in the dismiss method. The dismiss method
1346
- * only waits for the entering transition
1347
- * to finish. It does not wait for all of the `present`
1348
- * method to resolve.
1349
- */
1350
- this.keyboardOpenCallback = () => {
1351
- if (this.gesture) {
1352
- /**
1353
- * When the native keyboard is opened and the webview
1354
- * is resized, the gesture implementation will become unresponsive
1355
- * and enter a free-scroll mode.
1356
- *
1357
- * When the keyboard is opened, we disable the gesture for
1358
- * a single frame and re-enable once the contents have repositioned
1359
- * from the keyboard placement.
1360
- */
1361
- this.gesture.enable(false);
1362
- raf(() => {
1481
+ async dismiss(data, role) {
1482
+ var _a;
1483
+ if (this.gestureAnimationDismissing && role !== GESTURE) {
1484
+ return false;
1485
+ }
1486
+ /**
1487
+ * Because the canDismiss check below is async,
1488
+ * we need to claim a lock before the check happens,
1489
+ * in case the dismiss transition does run.
1490
+ */
1491
+ const unlock = await this.lockController.lock();
1492
+ /**
1493
+ * If a canDismiss handler is responsible
1494
+ * for calling the dismiss method, we should
1495
+ * not run the canDismiss check again.
1496
+ */
1497
+ if (role !== 'handler' && !(await this.checkCanDismiss(data, role))) {
1498
+ unlock();
1499
+ return false;
1500
+ }
1501
+ const { presentingElement } = this;
1502
+ /**
1503
+ * We need to start the status bar change
1504
+ * before the animation so that the change
1505
+ * finishes when the dismiss animation does.
1506
+ */
1507
+ const hasCardModal = presentingElement !== undefined;
1508
+ if (hasCardModal && getIonMode(this) === 'ios') {
1509
+ setCardStatusBarDefault(this.statusBarStyle);
1510
+ }
1511
+ /* tslint:disable-next-line */
1512
+ if (typeof window !== 'undefined' && this.keyboardOpenCallback) {
1513
+ window.removeEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
1514
+ this.keyboardOpenCallback = undefined;
1515
+ }
1516
+ const enteringAnimation = activeAnimations.get(this) || [];
1517
+ const dismissed = await dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
1518
+ presentingEl: presentingElement,
1519
+ currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
1520
+ backdropBreakpoint: this.backdropBreakpoint,
1521
+ });
1522
+ if (dismissed) {
1523
+ const { delegate } = this.getDelegate();
1524
+ await detachComponent(delegate, this.usersElement);
1525
+ writeTask(() => this.el.classList.remove('show-modal'));
1526
+ if (this.animation) {
1527
+ this.animation.destroy();
1528
+ }
1363
1529
  if (this.gesture) {
1364
- this.gesture.enable(true);
1530
+ this.gesture.destroy();
1365
1531
  }
1366
- });
1532
+ enteringAnimation.forEach((ani) => ani.destroy());
1367
1533
  }
1368
- };
1369
- window.addEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
1370
- }
1371
- if (this.isSheetModal) {
1372
- this.initSheetGesture();
1373
- }
1374
- else if (hasCardModal) {
1375
- this.initSwipeToClose();
1376
- }
1377
- unlock();
1378
- }
1379
- initSwipeToClose() {
1380
- var _a;
1381
- if (getIonMode(this) !== 'ios') {
1382
- return;
1534
+ this.currentBreakpoint = undefined;
1535
+ this.animation = undefined;
1536
+ unlock();
1537
+ return dismissed;
1383
1538
  }
1384
- const { el } = this;
1385
- // All of the elements needed for the swipe gesture
1386
- // should be in the DOM and referenced by now, except
1387
- // for the presenting el
1388
- const animationBuilder = this.leaveAnimation || config.get('modalLeave', iosLeaveAnimation);
1389
- const ani = (this.animation = animationBuilder(el, { presentingEl: this.presentingElement }));
1390
- const contentEl = findIonContent(el);
1391
- if (!contentEl) {
1392
- printIonContentErrorMsg(el);
1393
- return;
1394
- }
1395
- const statusBarStyle = (_a = this.statusBarStyle) !== null && _a !== void 0 ? _a : Style.Default;
1396
- this.gesture = createSwipeToCloseGesture(el, ani, statusBarStyle, () => {
1397
- /**
1398
- * While the gesture animation is finishing
1399
- * it is possible for a user to tap the backdrop.
1400
- * This would result in the dismiss animation
1401
- * being played again. Typically this is avoided
1402
- * by setting `presented = false` on the overlay
1403
- * component; however, we cannot do that here as
1404
- * that would prevent the element from being
1405
- * removed from the DOM.
1406
- */
1407
- this.gestureAnimationDismissing = true;
1408
- /**
1409
- * Reset the status bar style as the dismiss animation
1410
- * starts otherwise the status bar will be the wrong
1411
- * color for the duration of the dismiss animation.
1412
- * The dismiss method does this as well, but
1413
- * in this case it's only called once the animation
1414
- * has finished.
1415
- */
1416
- setCardStatusBarDefault(this.statusBarStyle);
1417
- this.animation.onFinish(async () => {
1418
- await this.dismiss(undefined, GESTURE);
1419
- this.gestureAnimationDismissing = false;
1420
- });
1421
- });
1422
- this.gesture.enable(true);
1423
- }
1424
- initSheetGesture() {
1425
- const { wrapperEl, initialBreakpoint, backdropBreakpoint } = this;
1426
- if (!wrapperEl || initialBreakpoint === undefined) {
1427
- return;
1428
- }
1429
- const animationBuilder = this.enterAnimation || config.get('modalEnter', iosEnterAnimation);
1430
- const ani = (this.animation = animationBuilder(this.el, {
1431
- presentingEl: this.presentingElement,
1432
- currentBreakpoint: initialBreakpoint,
1433
- backdropBreakpoint,
1434
- }));
1435
- ani.progressStart(true, 1);
1436
- const { gesture, moveSheetToBreakpoint } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, () => { var _a; return (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : 0; }, () => this.sheetOnDismiss(), (breakpoint) => {
1437
- if (this.currentBreakpoint !== breakpoint) {
1438
- this.currentBreakpoint = breakpoint;
1439
- this.ionBreakpointDidChange.emit({ breakpoint });
1440
- }
1441
- });
1442
- this.gesture = gesture;
1443
- this.moveSheetToBreakpoint = moveSheetToBreakpoint;
1444
- this.gesture.enable(true);
1445
- }
1446
- sheetOnDismiss() {
1447
1539
  /**
1448
- * While the gesture animation is finishing
1449
- * it is possible for a user to tap the backdrop.
1450
- * This would result in the dismiss animation
1451
- * being played again. Typically this is avoided
1452
- * by setting `presented = false` on the overlay
1453
- * component; however, we cannot do that here as
1454
- * that would prevent the element from being
1455
- * removed from the DOM.
1540
+ * Returns a promise that resolves when the modal did dismiss.
1456
1541
  */
1457
- this.gestureAnimationDismissing = true;
1458
- this.animation.onFinish(async () => {
1459
- this.currentBreakpoint = 0;
1460
- this.ionBreakpointDidChange.emit({ breakpoint: this.currentBreakpoint });
1461
- await this.dismiss(undefined, GESTURE);
1462
- this.gestureAnimationDismissing = false;
1463
- });
1464
- }
1465
- /**
1466
- * Dismiss the modal overlay after it has been presented.
1467
- *
1468
- * @param data Any data to emit in the dismiss events.
1469
- * @param role The role of the element that is dismissing the modal. For example, 'cancel' or 'backdrop'.
1470
- */
1471
- async dismiss(data, role) {
1472
- var _a;
1473
- if (this.gestureAnimationDismissing && role !== GESTURE) {
1474
- return false;
1542
+ onDidDismiss() {
1543
+ return eventMethod(this.el, 'ionModalDidDismiss');
1475
1544
  }
1476
1545
  /**
1477
- * Because the canDismiss check below is async,
1478
- * we need to claim a lock before the check happens,
1479
- * in case the dismiss transition does run.
1546
+ * Returns a promise that resolves when the modal will dismiss.
1480
1547
  */
1481
- const unlock = await this.lockController.lock();
1548
+ onWillDismiss() {
1549
+ return eventMethod(this.el, 'ionModalWillDismiss');
1550
+ }
1482
1551
  /**
1483
- * If a canDismiss handler is responsible
1484
- * for calling the dismiss method, we should
1485
- * not run the canDismiss check again.
1552
+ * Move a sheet style modal to a specific breakpoint. The breakpoint value must
1553
+ * be a value defined in your `breakpoints` array.
1486
1554
  */
1487
- if (role !== 'handler' && !(await this.checkCanDismiss(data, role))) {
1488
- unlock();
1489
- return false;
1555
+ async setCurrentBreakpoint(breakpoint) {
1556
+ if (!this.isSheetModal) {
1557
+ printIonWarning('setCurrentBreakpoint is only supported on sheet modals.');
1558
+ return;
1559
+ }
1560
+ if (!this.breakpoints.includes(breakpoint)) {
1561
+ printIonWarning(`Attempted to set invalid breakpoint value ${breakpoint}. Please double check that the breakpoint value is part of your defined breakpoints.`);
1562
+ return;
1563
+ }
1564
+ const { currentBreakpoint, moveSheetToBreakpoint, canDismiss, breakpoints, animated } = this;
1565
+ if (currentBreakpoint === breakpoint) {
1566
+ return;
1567
+ }
1568
+ if (moveSheetToBreakpoint) {
1569
+ this.sheetTransition = moveSheetToBreakpoint({
1570
+ breakpoint,
1571
+ breakpointOffset: 1 - currentBreakpoint,
1572
+ canDismiss: canDismiss !== undefined && canDismiss !== true && breakpoints[0] === 0,
1573
+ animated,
1574
+ });
1575
+ await this.sheetTransition;
1576
+ this.sheetTransition = undefined;
1577
+ }
1490
1578
  }
1491
- const { presentingElement } = this;
1492
1579
  /**
1493
- * We need to start the status bar change
1494
- * before the animation so that the change
1495
- * finishes when the dismiss animation does.
1580
+ * Returns the current breakpoint of a sheet style modal
1496
1581
  */
1497
- const hasCardModal = presentingElement !== undefined;
1498
- if (hasCardModal && getIonMode(this) === 'ios') {
1499
- setCardStatusBarDefault(this.statusBarStyle);
1500
- }
1501
- /* tslint:disable-next-line */
1502
- if (typeof window !== 'undefined' && this.keyboardOpenCallback) {
1503
- window.removeEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
1504
- this.keyboardOpenCallback = undefined;
1505
- }
1506
- const enteringAnimation = activeAnimations.get(this) || [];
1507
- const dismissed = await dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
1508
- presentingEl: presentingElement,
1509
- currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
1510
- backdropBreakpoint: this.backdropBreakpoint,
1511
- });
1512
- if (dismissed) {
1513
- const { delegate } = this.getDelegate();
1514
- await detachComponent(delegate, this.usersElement);
1515
- writeTask(() => this.el.classList.remove('show-modal'));
1516
- if (this.animation) {
1517
- this.animation.destroy();
1518
- }
1519
- if (this.gesture) {
1520
- this.gesture.destroy();
1521
- }
1522
- enteringAnimation.forEach((ani) => ani.destroy());
1523
- }
1524
- this.currentBreakpoint = undefined;
1525
- this.animation = undefined;
1526
- unlock();
1527
- return dismissed;
1528
- }
1529
- /**
1530
- * Returns a promise that resolves when the modal did dismiss.
1531
- */
1532
- onDidDismiss() {
1533
- return eventMethod(this.el, 'ionModalDidDismiss');
1534
- }
1535
- /**
1536
- * Returns a promise that resolves when the modal will dismiss.
1537
- */
1538
- onWillDismiss() {
1539
- return eventMethod(this.el, 'ionModalWillDismiss');
1540
- }
1541
- /**
1542
- * Move a sheet style modal to a specific breakpoint. The breakpoint value must
1543
- * be a value defined in your `breakpoints` array.
1544
- */
1545
- async setCurrentBreakpoint(breakpoint) {
1546
- if (!this.isSheetModal) {
1547
- printIonWarning('setCurrentBreakpoint is only supported on sheet modals.');
1548
- return;
1582
+ async getCurrentBreakpoint() {
1583
+ return this.currentBreakpoint;
1549
1584
  }
1550
- if (!this.breakpoints.includes(breakpoint)) {
1551
- printIonWarning(`Attempted to set invalid breakpoint value ${breakpoint}. Please double check that the breakpoint value is part of your defined breakpoints.`);
1552
- return;
1553
- }
1554
- const { currentBreakpoint, moveSheetToBreakpoint, canDismiss, breakpoints, animated } = this;
1555
- if (currentBreakpoint === breakpoint) {
1556
- return;
1557
- }
1558
- if (moveSheetToBreakpoint) {
1559
- this.sheetTransition = moveSheetToBreakpoint({
1560
- breakpoint,
1561
- breakpointOffset: 1 - currentBreakpoint,
1562
- canDismiss: canDismiss !== undefined && canDismiss !== true && breakpoints[0] === 0,
1563
- animated,
1564
- });
1565
- await this.sheetTransition;
1566
- this.sheetTransition = undefined;
1585
+ async moveToNextBreakpoint() {
1586
+ const { breakpoints, currentBreakpoint } = this;
1587
+ if (!breakpoints || currentBreakpoint == null) {
1588
+ /**
1589
+ * If the modal does not have breakpoints and/or the current
1590
+ * breakpoint is not set, we can't move to the next breakpoint.
1591
+ */
1592
+ return false;
1593
+ }
1594
+ const allowedBreakpoints = breakpoints.filter((b) => b !== 0);
1595
+ const currentBreakpointIndex = allowedBreakpoints.indexOf(currentBreakpoint);
1596
+ const nextBreakpointIndex = (currentBreakpointIndex + 1) % allowedBreakpoints.length;
1597
+ const nextBreakpoint = allowedBreakpoints[nextBreakpointIndex];
1598
+ /**
1599
+ * Sets the current breakpoint to the next available breakpoint.
1600
+ * If the current breakpoint is the last breakpoint, we set the current
1601
+ * breakpoint to the first non-zero breakpoint to avoid dismissing the sheet.
1602
+ */
1603
+ await this.setCurrentBreakpoint(nextBreakpoint);
1604
+ return true;
1567
1605
  }
1568
- }
1569
- /**
1570
- * Returns the current breakpoint of a sheet style modal
1571
- */
1572
- async getCurrentBreakpoint() {
1573
- return this.currentBreakpoint;
1574
- }
1575
- async moveToNextBreakpoint() {
1576
- const { breakpoints, currentBreakpoint } = this;
1577
- if (!breakpoints || currentBreakpoint == null) {
1578
- /**
1579
- * If the modal does not have breakpoints and/or the current
1580
- * breakpoint is not set, we can't move to the next breakpoint.
1581
- */
1582
- return false;
1606
+ render() {
1607
+ const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes } = this;
1608
+ const showHandle = handle !== false && isSheetModal;
1609
+ const mode = getIonMode(this);
1610
+ const isCardModal = presentingElement !== undefined && mode === 'ios';
1611
+ const isHandleCycle = handleBehavior === 'cycle';
1612
+ return (h(Host, Object.assign({ "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1613
+ zIndex: `${20000 + this.overlayIndex}`,
1614
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { class: "modal-shadow" }), h("div", Object.assign({
1615
+ /*
1616
+ role and aria-modal must be used on the
1617
+ same element. They must also be set inside the
1618
+ shadow DOM otherwise ion-button will not be highlighted
1619
+ when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
1620
+ */
1621
+ role: "dialog"
1622
+ }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { class: "modal-handle",
1623
+ // Prevents the handle from receiving keyboard focus when it does not cycle
1624
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", null))));
1583
1625
  }
1584
- const allowedBreakpoints = breakpoints.filter((b) => b !== 0);
1585
- const currentBreakpointIndex = allowedBreakpoints.indexOf(currentBreakpoint);
1586
- const nextBreakpointIndex = (currentBreakpointIndex + 1) % allowedBreakpoints.length;
1587
- const nextBreakpoint = allowedBreakpoints[nextBreakpointIndex];
1588
- /**
1589
- * Sets the current breakpoint to the next available breakpoint.
1590
- * If the current breakpoint is the last breakpoint, we set the current
1591
- * breakpoint to the first non-zero breakpoint to avoid dismissing the sheet.
1592
- */
1593
- await this.setCurrentBreakpoint(nextBreakpoint);
1594
- return true;
1595
- }
1596
- render() {
1597
- const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes } = this;
1598
- const showHandle = handle !== false && isSheetModal;
1599
- const mode = getIonMode(this);
1600
- const isCardModal = presentingElement !== undefined && mode === 'ios';
1601
- const isHandleCycle = handleBehavior === 'cycle';
1602
- return (h(Host, Object.assign({ "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1603
- zIndex: `${20000 + this.overlayIndex}`,
1604
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { class: "modal-shadow" }), h("div", Object.assign({
1605
- /*
1606
- role and aria-modal must be used on the
1607
- same element. They must also be set inside the
1608
- shadow DOM otherwise ion-button will not be highlighted
1609
- when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
1610
- */
1611
- role: "dialog"
1612
- }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { class: "modal-handle",
1613
- // Prevents the handle from receiving keyboard focus when it does not cycle
1614
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", null))));
1615
- }
1616
- get el() { return this; }
1617
- static get watchers() { return {
1618
- "isOpen": ["onIsOpenChange"],
1619
- "trigger": ["triggerChanged"]
1620
- }; }
1621
- static get style() { return {
1622
- ios: modalIosCss,
1623
- md: modalMdCss
1624
- }; }
1626
+ get el() { return this; }
1627
+ static get watchers() { return {
1628
+ "isOpen": ["onIsOpenChange"],
1629
+ "trigger": ["triggerChanged"]
1630
+ }; }
1631
+ static get style() { return {
1632
+ ios: modalIosCss,
1633
+ md: modalMdCss
1634
+ }; }
1625
1635
  }, [33, "ion-modal", {
1626
- "hasController": [4, "has-controller"],
1627
- "overlayIndex": [2, "overlay-index"],
1628
- "delegate": [16],
1629
- "keyboardClose": [4, "keyboard-close"],
1630
- "enterAnimation": [16],
1631
- "leaveAnimation": [16],
1632
- "breakpoints": [16],
1633
- "initialBreakpoint": [2, "initial-breakpoint"],
1634
- "backdropBreakpoint": [2, "backdrop-breakpoint"],
1635
- "handle": [4],
1636
- "handleBehavior": [1, "handle-behavior"],
1637
- "component": [1],
1638
- "componentProps": [16],
1639
- "cssClass": [1, "css-class"],
1640
- "backdropDismiss": [4, "backdrop-dismiss"],
1641
- "showBackdrop": [4, "show-backdrop"],
1642
- "animated": [4],
1643
- "presentingElement": [16],
1644
- "htmlAttributes": [16],
1645
- "isOpen": [4, "is-open"],
1646
- "trigger": [1],
1647
- "keepContentsMounted": [4, "keep-contents-mounted"],
1648
- "canDismiss": [4, "can-dismiss"],
1649
- "presented": [32],
1650
- "present": [64],
1651
- "dismiss": [64],
1652
- "onDidDismiss": [64],
1653
- "onWillDismiss": [64],
1654
- "setCurrentBreakpoint": [64],
1655
- "getCurrentBreakpoint": [64]
1656
- }, undefined, {
1657
- "isOpen": ["onIsOpenChange"],
1658
- "trigger": ["triggerChanged"]
1659
- }]);
1636
+ "hasController": [4, "has-controller"],
1637
+ "overlayIndex": [2, "overlay-index"],
1638
+ "delegate": [16],
1639
+ "keyboardClose": [4, "keyboard-close"],
1640
+ "enterAnimation": [16],
1641
+ "leaveAnimation": [16],
1642
+ "breakpoints": [16],
1643
+ "initialBreakpoint": [2, "initial-breakpoint"],
1644
+ "backdropBreakpoint": [2, "backdrop-breakpoint"],
1645
+ "handle": [4],
1646
+ "handleBehavior": [1, "handle-behavior"],
1647
+ "component": [1],
1648
+ "componentProps": [16],
1649
+ "cssClass": [1, "css-class"],
1650
+ "backdropDismiss": [4, "backdrop-dismiss"],
1651
+ "showBackdrop": [4, "show-backdrop"],
1652
+ "animated": [4],
1653
+ "presentingElement": [16],
1654
+ "htmlAttributes": [16],
1655
+ "isOpen": [4, "is-open"],
1656
+ "trigger": [1],
1657
+ "keepContentsMounted": [4, "keep-contents-mounted"],
1658
+ "canDismiss": [4, "can-dismiss"],
1659
+ "presented": [32],
1660
+ "present": [64],
1661
+ "dismiss": [64],
1662
+ "onDidDismiss": [64],
1663
+ "onWillDismiss": [64],
1664
+ "setCurrentBreakpoint": [64],
1665
+ "getCurrentBreakpoint": [64]
1666
+ }, undefined, {
1667
+ "isOpen": ["onIsOpenChange"],
1668
+ "trigger": ["triggerChanged"]
1669
+ }]);
1660
1670
  const LIFECYCLE_MAP = {
1661
- ionModalDidPresent: 'ionViewDidEnter',
1662
- ionModalWillPresent: 'ionViewWillEnter',
1663
- ionModalWillDismiss: 'ionViewWillLeave',
1664
- ionModalDidDismiss: 'ionViewDidLeave',
1671
+ ionModalDidPresent: 'ionViewDidEnter',
1672
+ ionModalWillPresent: 'ionViewWillEnter',
1673
+ ionModalWillDismiss: 'ionViewWillLeave',
1674
+ ionModalDidDismiss: 'ionViewDidLeave',
1665
1675
  };
1666
1676
  function defineCustomElement$1() {
1667
- if (typeof customElements === "undefined") {
1668
- return;
1669
- }
1670
- const components = ["ion-modal", "ion-backdrop"];
1671
- components.forEach(tagName => { switch (tagName) {
1672
- case "ion-modal":
1673
- if (!customElements.get(tagName)) {
1674
- customElements.define(tagName, Modal);
1675
- }
1676
- break;
1677
- case "ion-backdrop":
1678
- if (!customElements.get(tagName)) {
1679
- defineCustomElement$2();
1680
- }
1681
- break;
1682
- } });
1677
+ if (typeof customElements === "undefined") {
1678
+ return;
1679
+ }
1680
+ const components = ["ion-modal", "ion-backdrop"];
1681
+ components.forEach(tagName => { switch (tagName) {
1682
+ case "ion-modal":
1683
+ if (!customElements.get(tagName)) {
1684
+ customElements.define(tagName, Modal);
1685
+ }
1686
+ break;
1687
+ case "ion-backdrop":
1688
+ if (!customElements.get(tagName)) {
1689
+ defineCustomElement$2();
1690
+ }
1691
+ break;
1692
+ } });
1683
1693
  }
1684
1694
 
1685
1695
  const IonModal = Modal;