@ionic/core 7.8.4 → 7.8.5-dev.11713279234.1d02271c

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 (323) hide show
  1. package/components/ion-modal.js +43 -19
  2. package/components/ios.transition.js +90 -67
  3. package/dist/cjs/{app-globals-91158c0d.js → app-globals-c5eb104c.js} +1 -1
  4. package/dist/cjs/{button-active-aff0cd49.js → button-active-181d142e.js} +1 -1
  5. package/dist/cjs/{hardware-back-button-d76ddd64.js → hardware-back-button-adba3ac7.js} +2 -2
  6. package/dist/cjs/{index-9d02ee85.js → index-034460de.js} +3 -3
  7. package/dist/cjs/{index-ea0555d6.js → index-22617dd6.js} +25 -2
  8. package/dist/cjs/{index-e39d723a.js → index-5c38afe7.js} +2 -2
  9. package/dist/cjs/index.cjs.js +8 -8
  10. package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
  11. package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
  12. package/dist/cjs/ion-alert.cjs.entry.js +5 -5
  13. package/dist/cjs/ion-app_8.cjs.entry.js +6 -6
  14. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  15. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  16. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  17. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  18. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  19. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  20. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  21. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  22. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  23. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  24. package/dist/cjs/ion-datetime_3.cjs.entry.js +4 -4
  25. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  26. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  27. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  28. package/dist/cjs/ion-input.cjs.entry.js +2 -2
  29. package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
  30. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  31. package/dist/cjs/ion-loading.cjs.entry.js +4 -4
  32. package/dist/cjs/ion-menu_3.cjs.entry.js +5 -5
  33. package/dist/cjs/ion-modal.cjs.entry.js +48 -24
  34. package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
  35. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +2 -2
  36. package/dist/cjs/ion-picker-internal.cjs.entry.js +1 -1
  37. package/dist/cjs/ion-popover.cjs.entry.js +5 -5
  38. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  39. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  40. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  41. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  43. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  44. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  45. package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
  46. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-select_3.cjs.entry.js +4 -4
  48. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  49. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  50. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  51. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  52. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  53. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  54. package/dist/cjs/ion-toast.cjs.entry.js +4 -4
  55. package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
  56. package/dist/cjs/{ionic-global-a54cbba1.js → ionic-global-c5503e93.js} +1 -1
  57. package/dist/cjs/ionic.cjs.js +4 -4
  58. package/dist/cjs/{ios.transition-259214c9.js → ios.transition-26c5adb2.js} +92 -69
  59. package/dist/cjs/loader.cjs.js +3 -3
  60. package/dist/cjs/{md.transition-6eb6de75.js → md.transition-75533d44.js} +2 -2
  61. package/dist/cjs/{overlays-d2e50d5e.js → overlays-129dfc13.js} +2 -2
  62. package/dist/cjs/{status-tap-1d7f8e6d.js → status-tap-03d82840.js} +1 -1
  63. package/dist/collection/collection-manifest.json +1 -1
  64. package/dist/collection/components/modal/gestures/sheet.js +45 -20
  65. package/dist/collection/utils/transition/ios.transition.js +90 -67
  66. package/dist/docs.json +2 -2
  67. package/dist/esm/{app-globals-ffe436be.js → app-globals-318eef52.js} +1 -1
  68. package/dist/esm/{button-active-365a5048.js → button-active-414be235.js} +1 -1
  69. package/dist/esm/{hardware-back-button-65a9e284.js → hardware-back-button-6107a37c.js} +2 -2
  70. package/dist/esm/{index-4feaf001.js → index-68278972.js} +3 -3
  71. package/dist/esm/{index-7ab328b6.js → index-6e05b96e.js} +2 -2
  72. package/dist/esm/{index-73fa3fe8.js → index-a1a47f01.js} +25 -2
  73. package/dist/esm/index.js +8 -8
  74. package/dist/esm/ion-accordion_2.entry.js +2 -2
  75. package/dist/esm/ion-action-sheet.entry.js +5 -5
  76. package/dist/esm/ion-alert.entry.js +5 -5
  77. package/dist/esm/ion-app_8.entry.js +6 -6
  78. package/dist/esm/ion-avatar_3.entry.js +2 -2
  79. package/dist/esm/ion-back-button.entry.js +2 -2
  80. package/dist/esm/ion-backdrop.entry.js +2 -2
  81. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  82. package/dist/esm/ion-button_2.entry.js +2 -2
  83. package/dist/esm/ion-card_5.entry.js +2 -2
  84. package/dist/esm/ion-checkbox.entry.js +2 -2
  85. package/dist/esm/ion-chip.entry.js +2 -2
  86. package/dist/esm/ion-col_3.entry.js +2 -2
  87. package/dist/esm/ion-datetime-button.entry.js +2 -2
  88. package/dist/esm/ion-datetime_3.entry.js +4 -4
  89. package/dist/esm/ion-fab_3.entry.js +2 -2
  90. package/dist/esm/ion-img.entry.js +2 -2
  91. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  92. package/dist/esm/ion-input.entry.js +2 -2
  93. package/dist/esm/ion-item-option_3.entry.js +2 -2
  94. package/dist/esm/ion-item_8.entry.js +2 -2
  95. package/dist/esm/ion-loading.entry.js +4 -4
  96. package/dist/esm/ion-menu_3.entry.js +5 -5
  97. package/dist/esm/ion-modal.entry.js +48 -24
  98. package/dist/esm/ion-nav_2.entry.js +3 -3
  99. package/dist/esm/ion-picker-column-internal.entry.js +2 -2
  100. package/dist/esm/ion-picker-internal.entry.js +1 -1
  101. package/dist/esm/ion-popover.entry.js +5 -5
  102. package/dist/esm/ion-progress-bar.entry.js +2 -2
  103. package/dist/esm/ion-radio_2.entry.js +2 -2
  104. package/dist/esm/ion-range.entry.js +2 -2
  105. package/dist/esm/ion-refresher_2.entry.js +2 -2
  106. package/dist/esm/ion-reorder_2.entry.js +2 -2
  107. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  108. package/dist/esm/ion-route_4.entry.js +2 -2
  109. package/dist/esm/ion-searchbar.entry.js +2 -2
  110. package/dist/esm/ion-segment_2.entry.js +2 -2
  111. package/dist/esm/ion-select_3.entry.js +4 -4
  112. package/dist/esm/ion-spinner.entry.js +2 -2
  113. package/dist/esm/ion-split-pane.entry.js +2 -2
  114. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  115. package/dist/esm/ion-tab_2.entry.js +1 -1
  116. package/dist/esm/ion-text.entry.js +2 -2
  117. package/dist/esm/ion-textarea.entry.js +2 -2
  118. package/dist/esm/ion-toast.entry.js +4 -4
  119. package/dist/esm/ion-toggle.entry.js +2 -2
  120. package/dist/esm/{ionic-global-d89a6ff6.js → ionic-global-94f25d1b.js} +1 -1
  121. package/dist/esm/ionic.js +5 -5
  122. package/dist/esm/{ios.transition-1e29344b.js → ios.transition-471e5da1.js} +92 -69
  123. package/dist/esm/loader.js +4 -4
  124. package/dist/esm/{md.transition-b2a9590f.js → md.transition-12c07448.js} +2 -2
  125. package/dist/esm/{overlays-ad4b0449.js → overlays-b874c3c3.js} +2 -2
  126. package/dist/esm/{status-tap-0575d437.js → status-tap-dfea3607.js} +1 -1
  127. package/dist/esm-es5/app-globals-318eef52.js +4 -0
  128. package/dist/esm-es5/{button-active-365a5048.js → button-active-414be235.js} +1 -1
  129. package/dist/esm-es5/{hardware-back-button-65a9e284.js → hardware-back-button-6107a37c.js} +1 -1
  130. package/dist/esm-es5/{index-4feaf001.js → index-68278972.js} +1 -1
  131. package/dist/esm-es5/{index-7ab328b6.js → index-6e05b96e.js} +1 -1
  132. package/dist/esm-es5/index-a1a47f01.js +5 -0
  133. package/dist/esm-es5/index.js +1 -1
  134. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  135. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  136. package/dist/esm-es5/ion-alert.entry.js +1 -1
  137. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  138. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  139. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  140. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  141. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  142. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  143. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  144. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  145. package/dist/esm-es5/ion-chip.entry.js +1 -1
  146. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  147. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  148. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  149. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  150. package/dist/esm-es5/ion-img.entry.js +1 -1
  151. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  152. package/dist/esm-es5/ion-input.entry.js +1 -1
  153. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  154. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  155. package/dist/esm-es5/ion-loading.entry.js +1 -1
  156. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  157. package/dist/esm-es5/ion-modal.entry.js +1 -1
  158. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  159. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  160. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  161. package/dist/esm-es5/ion-popover.entry.js +1 -1
  162. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  163. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  164. package/dist/esm-es5/ion-range.entry.js +1 -1
  165. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  166. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  167. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  168. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  169. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  170. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  171. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  172. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  173. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  174. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  175. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  176. package/dist/esm-es5/ion-text.entry.js +1 -1
  177. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  178. package/dist/esm-es5/ion-toast.entry.js +1 -1
  179. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  180. package/dist/esm-es5/{ionic-global-d89a6ff6.js → ionic-global-94f25d1b.js} +1 -1
  181. package/dist/esm-es5/ionic.js +1 -1
  182. package/dist/esm-es5/ios.transition-471e5da1.js +4 -0
  183. package/dist/esm-es5/loader.js +1 -1
  184. package/dist/esm-es5/{md.transition-b2a9590f.js → md.transition-12c07448.js} +1 -1
  185. package/dist/esm-es5/{overlays-ad4b0449.js → overlays-b874c3c3.js} +1 -1
  186. package/dist/esm-es5/{status-tap-0575d437.js → status-tap-dfea3607.js} +1 -1
  187. package/dist/ionic/index.esm.js +1 -1
  188. package/dist/ionic/ionic.esm.js +1 -1
  189. package/dist/ionic/ionic.js +1 -1
  190. package/dist/ionic/{p-6f71c22a.system.js → p-0020292d.system.js} +1 -1
  191. package/dist/ionic/{p-38a6676c.system.entry.js → p-03934b94.system.entry.js} +1 -1
  192. package/dist/ionic/{p-fc181726.entry.js → p-05fed772.entry.js} +1 -1
  193. package/dist/ionic/p-0aac3a1c.js +4 -0
  194. package/dist/ionic/{p-2937c804.js → p-0b743628.js} +1 -1
  195. package/dist/ionic/{p-af95011e.entry.js → p-125d2908.entry.js} +1 -1
  196. package/dist/ionic/p-1a244094.js +4 -0
  197. package/dist/ionic/{p-62fd7981.js → p-1e151efb.js} +1 -1
  198. package/dist/ionic/{p-d2a8f5fa.system.entry.js → p-21040a67.system.entry.js} +1 -1
  199. package/dist/ionic/{p-0eefae7b.entry.js → p-23632fd0.entry.js} +1 -1
  200. package/dist/ionic/p-2433bf5e.system.js +4 -0
  201. package/dist/ionic/{p-f903eb7d.system.entry.js → p-247e63fd.system.entry.js} +1 -1
  202. package/dist/ionic/{p-04f8ce80.system.entry.js → p-26a2dee6.system.entry.js} +1 -1
  203. package/dist/ionic/{p-57120260.system.js → p-280f1fe7.system.js} +1 -1
  204. package/dist/ionic/{p-abbbeaba.system.entry.js → p-297e4ce7.system.entry.js} +1 -1
  205. package/dist/ionic/{p-f3633fec.system.entry.js → p-2a072db2.system.entry.js} +1 -1
  206. package/dist/ionic/{p-32ea2e50.system.entry.js → p-2b3b0b54.system.entry.js} +1 -1
  207. package/dist/ionic/{p-570dc347.entry.js → p-2b899443.entry.js} +1 -1
  208. package/dist/ionic/{p-fc72a291.system.entry.js → p-2bb08088.system.entry.js} +1 -1
  209. package/dist/ionic/{p-46e80228.entry.js → p-2bb106c7.entry.js} +1 -1
  210. package/dist/ionic/p-2c1408df.system.js +5 -0
  211. package/dist/ionic/{p-eb1a11f5.system.entry.js → p-2e125dd9.system.entry.js} +1 -1
  212. package/dist/ionic/p-3420329d.js +4 -0
  213. package/dist/ionic/{p-3809bcb3.entry.js → p-374838e4.entry.js} +1 -1
  214. package/dist/ionic/{p-a729bebd.system.entry.js → p-37634767.system.entry.js} +2 -2
  215. package/dist/ionic/p-37aab7f7.js +4 -0
  216. package/dist/ionic/{p-1074dc9c.entry.js → p-3c79d175.entry.js} +1 -1
  217. package/dist/ionic/{p-cd02f6a0.system.entry.js → p-411bb8ab.system.entry.js} +1 -1
  218. package/dist/ionic/{p-e1d3938b.system.entry.js → p-414c5031.system.entry.js} +1 -1
  219. package/dist/ionic/{p-8cef747b.system.entry.js → p-43e8c02c.system.entry.js} +1 -1
  220. package/dist/ionic/{p-fa2c6408.entry.js → p-43f5c725.entry.js} +1 -1
  221. package/dist/ionic/{p-c433a6e5.system.entry.js → p-4882ea93.system.entry.js} +1 -1
  222. package/dist/ionic/{p-2ee0f9ea.entry.js → p-4c17462c.entry.js} +1 -1
  223. package/dist/ionic/{p-bea20d99.entry.js → p-4c180665.entry.js} +1 -1
  224. package/dist/ionic/{p-1a5e8ef6.entry.js → p-4da978ac.entry.js} +1 -1
  225. package/dist/ionic/{p-cc7671a8.js → p-4e9552a3.js} +1 -1
  226. package/dist/ionic/{p-7ba16351.entry.js → p-4f529650.entry.js} +1 -1
  227. package/dist/ionic/{p-653571b9.entry.js → p-4f9c9520.entry.js} +1 -1
  228. package/dist/ionic/{p-860b3f85.system.entry.js → p-501fdfc9.system.entry.js} +1 -1
  229. package/dist/ionic/p-5241515e.entry.js +4 -0
  230. package/dist/ionic/{p-bc88ef1d.entry.js → p-53f0e4b3.entry.js} +1 -1
  231. package/dist/ionic/{p-ffd75444.entry.js → p-566a486f.entry.js} +1 -1
  232. package/dist/ionic/{p-02acfd9b.entry.js → p-56f612c8.entry.js} +1 -1
  233. package/dist/ionic/{p-ea911adc.entry.js → p-5c5f0e52.entry.js} +1 -1
  234. package/dist/ionic/{p-e1033126.entry.js → p-5de97589.entry.js} +1 -1
  235. package/dist/ionic/{p-d984a2c0.system.entry.js → p-606fe277.system.entry.js} +1 -1
  236. package/dist/ionic/{p-c902b920.entry.js → p-62c92975.entry.js} +1 -1
  237. package/dist/ionic/{p-ca86ce8b.system.js → p-638865d1.system.js} +1 -1
  238. package/dist/ionic/{p-b3865ce7.system.entry.js → p-64504c7e.system.entry.js} +1 -1
  239. package/dist/ionic/{p-088feb27.entry.js → p-69da5865.entry.js} +1 -1
  240. package/dist/ionic/{p-e0cb34f8.system.entry.js → p-6ac774c4.system.entry.js} +1 -1
  241. package/dist/ionic/{p-73c93bea.entry.js → p-6ad1136b.entry.js} +1 -1
  242. package/dist/ionic/{p-c018f9fe.system.entry.js → p-700367a8.system.entry.js} +1 -1
  243. package/dist/ionic/{p-778a6434.system.entry.js → p-74c2643d.system.entry.js} +1 -1
  244. package/dist/ionic/{p-69aef109.system.entry.js → p-776f7b9e.system.entry.js} +1 -1
  245. package/dist/ionic/{p-7227be31.system.entry.js → p-7b54e97a.system.entry.js} +1 -1
  246. package/dist/ionic/{p-7827a8be.entry.js → p-815c676c.entry.js} +1 -1
  247. package/dist/ionic/{p-646666ae.system.entry.js → p-81c8fa81.system.entry.js} +1 -1
  248. package/dist/ionic/{p-ec6ebf53.entry.js → p-8444e4c0.entry.js} +1 -1
  249. package/dist/ionic/{p-d7a4999f.system.js → p-85ea810f.system.js} +1 -1
  250. package/dist/ionic/{p-22e338ed.system.js → p-8668ffee.system.js} +1 -1
  251. package/dist/ionic/{p-d72271fc.system.entry.js → p-8a335b91.system.entry.js} +1 -1
  252. package/dist/ionic/{p-372821dd.entry.js → p-8e501f6d.entry.js} +1 -1
  253. package/dist/ionic/{p-e31d0fc8.entry.js → p-91a2236e.entry.js} +1 -1
  254. package/dist/ionic/{p-efab9748.system.entry.js → p-93f86b06.system.entry.js} +1 -1
  255. package/dist/ionic/{p-1ebd49bd.entry.js → p-99d8b626.entry.js} +1 -1
  256. package/dist/ionic/{p-8f0f6730.system.entry.js → p-9bb9bf60.system.entry.js} +1 -1
  257. package/dist/ionic/{p-94d5c60d.system.entry.js → p-9c59ee42.system.entry.js} +1 -1
  258. package/dist/ionic/{p-f5f7036b.system.entry.js → p-9d3363aa.system.entry.js} +1 -1
  259. package/dist/ionic/{p-e8f0395c.entry.js → p-9dcea5cf.entry.js} +1 -1
  260. package/dist/ionic/{p-f1daa176.entry.js → p-9e66b84e.entry.js} +1 -1
  261. package/dist/ionic/{p-4bba20da.entry.js → p-9eb085d3.entry.js} +1 -1
  262. package/dist/ionic/{p-978deeb5.entry.js → p-9fbfbaef.entry.js} +1 -1
  263. package/dist/ionic/{p-1f8e1929.system.entry.js → p-9fdb1942.system.entry.js} +1 -1
  264. package/dist/ionic/{p-6bd4492c.system.js → p-a04ecf1a.system.js} +1 -1
  265. package/dist/ionic/{p-cad68eca.system.entry.js → p-a258956b.system.entry.js} +1 -1
  266. package/dist/ionic/{p-fa6e566d.entry.js → p-a79c1471.entry.js} +1 -1
  267. package/dist/ionic/p-a875459d.system.js +4 -0
  268. package/dist/ionic/{p-859d74d5.entry.js → p-a8c3c9d7.entry.js} +1 -1
  269. package/dist/ionic/{p-5772a3f2.entry.js → p-a995f103.entry.js} +1 -1
  270. package/dist/ionic/{p-0a5d04a9.system.entry.js → p-aa0d4e1d.system.entry.js} +1 -1
  271. package/dist/ionic/{p-5f1f7b4b.entry.js → p-ad60590b.entry.js} +1 -1
  272. package/dist/ionic/{p-ed009d87.entry.js → p-b3623a7a.entry.js} +1 -1
  273. package/dist/ionic/{p-901f55f0.entry.js → p-b8f79d94.entry.js} +1 -1
  274. package/dist/ionic/p-bb5bbcdf.js +4 -0
  275. package/dist/ionic/{p-a91da641.system.entry.js → p-bb732fc5.system.entry.js} +1 -1
  276. package/dist/ionic/{p-bbdabfe2.entry.js → p-bba6295f.entry.js} +1 -1
  277. package/dist/ionic/{p-e070ac08.entry.js → p-be403dff.entry.js} +1 -1
  278. package/dist/ionic/{p-9e47fa2b.entry.js → p-bf1d7fb7.entry.js} +1 -1
  279. package/dist/ionic/{p-475d3ec9.system.entry.js → p-c12ba45a.system.entry.js} +1 -1
  280. package/dist/ionic/{p-f414cdd1.system.entry.js → p-c37c6e02.system.entry.js} +1 -1
  281. package/dist/ionic/{p-a423cc03.entry.js → p-c52eaf99.entry.js} +1 -1
  282. package/dist/ionic/{p-9c7d36c2.system.entry.js → p-c89f8a0f.system.entry.js} +1 -1
  283. package/dist/ionic/{p-09e6390b.system.entry.js → p-ce14e639.system.entry.js} +1 -1
  284. package/dist/ionic/{p-213ed770.entry.js → p-d42e9dd3.entry.js} +1 -1
  285. package/dist/ionic/{p-27547811.entry.js → p-d4918a1c.entry.js} +1 -1
  286. package/dist/ionic/{p-0d6f7a8d.js → p-d68ecea4.js} +1 -1
  287. package/dist/ionic/{p-a8a7559f.system.entry.js → p-d979d307.system.entry.js} +2 -2
  288. package/dist/ionic/p-da4e89b0.system.entry.js +4 -0
  289. package/dist/ionic/{p-347df354.system.entry.js → p-db82f522.system.entry.js} +1 -1
  290. package/dist/ionic/{p-fb1c7d14.entry.js → p-dbabce3e.entry.js} +1 -1
  291. package/dist/ionic/{p-5dc045c4.system.entry.js → p-dc93d7a5.system.entry.js} +2 -2
  292. package/dist/ionic/p-de6623db.system.js +4 -0
  293. package/dist/ionic/{p-a6f245a3.entry.js → p-dec423a3.entry.js} +1 -1
  294. package/dist/ionic/{p-3c7a1de4.system.entry.js → p-e06d65b3.system.entry.js} +1 -1
  295. package/dist/ionic/{p-9377ed64.system.js → p-e34eefb5.system.js} +1 -1
  296. package/dist/ionic/{p-f0a3c05c.system.js → p-e933e886.system.js} +1 -1
  297. package/dist/ionic/p-ead0d463.js +5 -0
  298. package/dist/ionic/{p-4e12129a.system.entry.js → p-ede01836.system.entry.js} +2 -2
  299. package/dist/ionic/{p-2389b3f9.js → p-efef9f3a.js} +1 -1
  300. package/dist/ionic/p-f3d07c09.system.entry.js +4 -0
  301. package/dist/ionic/{p-99d12446.system.entry.js → p-f52f47f6.system.entry.js} +1 -1
  302. package/dist/ionic/{p-34474b14.system.js → p-f549716b.system.js} +1 -1
  303. package/dist/ionic/{p-2682335f.entry.js → p-f9d9b0ab.entry.js} +1 -1
  304. package/dist/ionic/{p-dba4d4d3.system.entry.js → p-fa1bd328.system.entry.js} +1 -1
  305. package/dist/ionic/{p-e723ba57.system.entry.js → p-febc627c.system.entry.js} +1 -1
  306. package/hydrate/index.js +152 -98
  307. package/package.json +1 -1
  308. package/dist/esm-es5/app-globals-ffe436be.js +0 -4
  309. package/dist/esm-es5/index-73fa3fe8.js +0 -5
  310. package/dist/esm-es5/ios.transition-1e29344b.js +0 -4
  311. package/dist/ionic/p-0c6c8ee3.entry.js +0 -4
  312. package/dist/ionic/p-332c71da.system.js +0 -5
  313. package/dist/ionic/p-47bf8d13.js +0 -4
  314. package/dist/ionic/p-49f4eca2.js +0 -4
  315. package/dist/ionic/p-5f06ce0e.system.entry.js +0 -4
  316. package/dist/ionic/p-7a7015a5.system.js +0 -4
  317. package/dist/ionic/p-7f524a94.system.entry.js +0 -4
  318. package/dist/ionic/p-ba5911d9.js +0 -4
  319. package/dist/ionic/p-c96c06b2.js +0 -4
  320. package/dist/ionic/p-c9efc963.system.js +0 -4
  321. package/dist/ionic/p-d5539f7e.js +0 -4
  322. package/dist/ionic/p-f0d5d883.system.js +0 -4
  323. package/dist/ionic/p-f419feca.js +0 -5
@@ -4,10 +4,10 @@
4
4
  'use strict';
5
5
 
6
6
  const animation = require('./animation-c2840aea.js');
7
- const index = require('./index-9d02ee85.js');
7
+ const index = require('./index-034460de.js');
8
8
  require('./index-c8d52405.js');
9
9
  require('./helpers-da4c0ed1.js');
10
- require('./index-ea0555d6.js');
10
+ require('./index-22617dd6.js');
11
11
 
12
12
  const DURATION = 540;
13
13
  // TODO(FW-2832): types
@@ -61,20 +61,22 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
61
61
  const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
62
62
  const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
63
63
  const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
64
- const enteringBackButtonTextBox = enteringBackButtonTextEl.getBoundingClientRect();
64
+ // Text element not rendered if developers pass text="" to the back button
65
+ const enteringBackButtonTextBox = enteringBackButtonTextEl === null || enteringBackButtonTextEl === void 0 ? void 0 : enteringBackButtonTextEl.getBoundingClientRect();
65
66
  const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
66
67
  const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
67
- animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
68
+ animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
68
69
  animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
69
70
  }
70
71
  else if (shouldAnimationBackward) {
71
72
  const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
72
73
  const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
73
74
  const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
74
- const leavingBackButtonTextBox = leavingBackButtonTextEl.getBoundingClientRect();
75
+ // Text element not rendered if developers pass text="" to the back button
76
+ const leavingBackButtonTextBox = leavingBackButtonTextEl === null || leavingBackButtonTextEl === void 0 ? void 0 : leavingBackButtonTextEl.getBoundingClientRect();
75
77
  const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
76
78
  const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
77
- animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
79
+ animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
78
80
  animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
79
81
  }
80
82
  return {
@@ -88,26 +90,29 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
88
90
  const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
89
91
  const ICON_ORIGIN_X = rtl ? 'left' : 'right';
90
92
  const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
91
- /**
92
- * When the title and back button texts match
93
- * then they should overlap during the page transition.
94
- * If the texts do not match up then the back button text scale adjusts
95
- * to not perfectly match the large title text otherwise the
96
- * proportions will be incorrect.
97
- * When the texts match we scale both the width and height to account for
98
- * font weight differences between the title and back button.
99
- */
100
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
101
- const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
102
- /**
103
- * We subtract an offset to account for slight sizing/padding
104
- * differences between the title and the back button.
105
- */
106
- const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
107
- const TEXT_START_SCALE = doTitleAndButtonTextsMatch
108
- ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
109
- : `scale(${HEIGHT_SCALE})`;
93
+ let WIDTH_SCALE = 1;
94
+ let HEIGHT_SCALE = 1;
95
+ let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
110
96
  const TEXT_END_SCALE = 'scale(1)';
97
+ if (backButtonTextEl && backButtonTextBox) {
98
+ /**
99
+ * When the title and back button texts match then they should overlap during the
100
+ * page transition. If the texts do not match up then the back button text scale
101
+ * adjusts to not perfectly match the large title text otherwise the proportions
102
+ * will be incorrect. When the texts match we scale both the width and height to
103
+ * account for font weight differences between the title and back button.
104
+ */
105
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
106
+ WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
107
+ /**
108
+ * Subtract an offset to account for slight sizing/padding differences between the
109
+ * title and the back button.
110
+ */
111
+ HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
112
+ if (doTitleAndButtonTextsMatch) {
113
+ TEXT_START_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
114
+ }
115
+ }
111
116
  const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
112
117
  const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
113
118
  /**
@@ -204,11 +209,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
204
209
  top: '0px',
205
210
  [CONTAINER_ORIGIN_X]: '0px',
206
211
  })
207
- .keyframes(CONTAINER_KEYFRAMES);
208
- enteringBackButtonTextAnimation
209
- .beforeStyles({
210
- 'transform-origin': `${TEXT_ORIGIN_X} top`,
211
- })
212
+ /**
213
+ * The write hooks must be set on this animation as it is guaranteed to run. Other
214
+ * animations such as the back button text animation will not run if the back button
215
+ * has no visible text.
216
+ */
212
217
  .beforeAddWrite(() => {
213
218
  backButtonEl.style.setProperty('display', 'none');
214
219
  clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
@@ -217,6 +222,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
217
222
  backButtonEl.style.setProperty('display', '');
218
223
  clonedBackButtonEl.style.setProperty('display', 'none');
219
224
  clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
225
+ })
226
+ .keyframes(CONTAINER_KEYFRAMES);
227
+ enteringBackButtonTextAnimation
228
+ .beforeStyles({
229
+ 'transform-origin': `${TEXT_ORIGIN_X} top`,
220
230
  })
221
231
  .keyframes(TEXT_KEYFRAMES);
222
232
  enteringBackButtonIconAnimation
@@ -230,7 +240,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
230
240
  enteringBackButtonAnimation,
231
241
  ]);
232
242
  };
233
- const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
243
+ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
234
244
  var _a, _b;
235
245
  /**
236
246
  * The horizontal transform origin for the large title
@@ -250,52 +260,65 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
250
260
  * title and the back button due to padding and font weight.
251
261
  */
252
262
  const LARGE_TITLE_TRANSLATION_OFFSET = 8;
263
+ let END_TRANSLATE_X = rtl
264
+ ? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
265
+ : `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
253
266
  /**
254
- * The scaled title should (roughly) overlap the back button.
255
- * This ensures that the back button and title overlap during
256
- * the animation. Note that since both elements either fade in
257
- * or fade out over the course of the animation, neither element
258
- * will be fully visible on top of the other. As a result, the overlap
259
- * does not need to be perfect, so approximate values are acceptable here.
267
+ * How much to scale the large title up/down by.
260
268
  */
261
- const END_TRANSLATE_X = rtl
262
- ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
263
- : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
269
+ let HEIGHT_SCALE = 0.5;
264
270
  /**
265
- * The top of the scaled large title
266
- * should match with the top of the
267
- * back button text element.
268
- * We subtract 2px to account for the top padding
269
- * on the large title element.
271
+ * The large title always starts full size.
270
272
  */
271
- const LARGE_TITLE_TOP_PADDING = 2;
272
- const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
273
+ const START_SCALE = 'scale(1)';
273
274
  /**
274
- * In the forward direction, the large title should start at its
275
- * normal size and then scale down to be (roughly) the size of the
276
- * back button on the other view. In the backward direction, the
277
- * large title should start at (roughly) the size of the back button
278
- * and then scale up to its original size.
279
- *
280
- * Note that since both elements either fade in
281
- * or fade out over the course of the animation, neither element
282
- * will be fully visible on top of the other. As a result, the overlap
283
- * does not need to be perfect, so approximate values are acceptable here.
275
+ * By default, we don't worry about having the large title scaled to perfectly
276
+ * match the back button because we don't know if the back button's text matches
277
+ * the large title's text.
284
278
  */
279
+ let END_SCALE = `scale(${HEIGHT_SCALE})`;
280
+ // Text element not rendered if developers pass text="" to the back button
281
+ if (backButtonTextEl && backButtonTextBox) {
282
+ /**
283
+ * The scaled title should (roughly) overlap the back button. This ensures that
284
+ * the back button and title overlap during the animation. Note that since both
285
+ * elements either fade in or fade out over the course of the animation, neither
286
+ * element will be fully visible on top of the other. As a result, the overlap
287
+ * does not need to be perfect, so approximate values are acceptable here.
288
+ */
289
+ END_TRANSLATE_X = rtl
290
+ ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
291
+ : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
292
+ /**
293
+ * In the forward direction, the large title should start at its normal size and
294
+ * then scale down to be (roughly) the size of the back button on the other view.
295
+ * In the backward direction, the large title should start at (roughly) the size
296
+ * of the back button and then scale up to its original size.
297
+ * Note that since both elements either fade in or fade out over the course of the
298
+ * animation, neither element will be fully visible on top of the other. As a result,
299
+ * the overlap does not need to be perfect, so approximate values are acceptable here.
300
+ */
301
+ /**
302
+ * When the title and back button texts match then they should overlap during the
303
+ * page transition. If the texts do not match up then the large title text scale
304
+ * adjusts to not perfectly match the back button text otherwise the proportions
305
+ * will be incorrect. When the texts match we scale both the width and height to
306
+ * account for font weight differences between the title and back button.
307
+ */
308
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
309
+ const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
310
+ HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
311
+ if (doTitleAndButtonTextsMatch) {
312
+ END_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
313
+ }
314
+ }
285
315
  /**
286
- * When the title and back button texts match
287
- * then they should overlap during the page transition.
288
- * If the texts do not match up then the large title text scale adjusts
289
- * to not perfectly match the back button text otherwise the
290
- * proportions will be incorrect.
291
- * When the texts match we scale both the width and height to account for
292
- * font weight differences between the title and back button.
316
+ * The midpoints of the back button and the title should align such that the back
317
+ * button and title appear to be centered with each other.
293
318
  */
294
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
295
- const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
296
- const HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
297
- const START_SCALE = 'scale(1)';
298
- const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
319
+ const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
320
+ const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
321
+ const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
299
322
  const BACKWARDS_KEYFRAMES = [
300
323
  { offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
301
324
  { offset: 0.1, opacity: 0 },
@@ -5,9 +5,9 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-ea0555d6.js');
9
- const appGlobals = require('./app-globals-91158c0d.js');
10
- require('./ionic-global-a54cbba1.js');
8
+ const index = require('./index-22617dd6.js');
9
+ const appGlobals = require('./app-globals-c5eb104c.js');
10
+ require('./ionic-global-c5503e93.js');
11
11
 
12
12
  const defineCustomElements = async (win, options) => {
13
13
  if (typeof window === 'undefined') return undefined;
@@ -4,10 +4,10 @@
4
4
  'use strict';
5
5
 
6
6
  const animation = require('./animation-c2840aea.js');
7
- const index = require('./index-9d02ee85.js');
7
+ const index = require('./index-034460de.js');
8
8
  require('./index-c8d52405.js');
9
9
  require('./helpers-da4c0ed1.js');
10
- require('./index-ea0555d6.js');
10
+ require('./index-22617dd6.js');
11
11
 
12
12
  const mdTransitionAnimation = (_, opts) => {
13
13
  var _a, _b, _c;
@@ -4,8 +4,8 @@
4
4
  'use strict';
5
5
 
6
6
  const index = require('./index-c8d52405.js');
7
- const hardwareBackButton = require('./hardware-back-button-d76ddd64.js');
8
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
7
+ const hardwareBackButton = require('./hardware-back-button-adba3ac7.js');
8
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
9
9
  const frameworkDelegate = require('./framework-delegate-e0e13baa.js');
10
10
  const helpers = require('./helpers-da4c0ed1.js');
11
11
  const index$1 = require('./index-5915f9b3.js');
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const index = require('./index-ea0555d6.js');
6
+ const index = require('./index-22617dd6.js');
7
7
  const index$1 = require('./index-bef98850.js');
8
8
  const helpers = require('./helpers-da4c0ed1.js');
9
9
  require('./index-5915f9b3.js');
@@ -94,7 +94,7 @@
94
94
  ],
95
95
  "compiler": {
96
96
  "name": "@stencil/core",
97
- "version": "4.14.0",
97
+ "version": "4.14.1",
98
98
  "typescriptVersion": "5.4.3"
99
99
  },
100
100
  "collections": [
@@ -1,8 +1,9 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { isIonContent, findClosestIonContent } from "../../../utils/content/index";
4
5
  import { createGesture } from "../../../utils/gesture/index";
5
- import { clamp, raf } from "../../../utils/helpers";
6
+ import { clamp, raf, getElementRoot } from "../../../utils/helpers";
6
7
  import { getBackdropValueForSheet } from "../utils";
7
8
  import { calculateSpringStep, handleCanDismiss } from "./utils";
8
9
  export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
@@ -87,19 +88,32 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
87
88
  }
88
89
  const canStart = (detail) => {
89
90
  /**
90
- * If the sheet is fully expanded and
91
- * the user is swiping on the content,
92
- * the gesture should not start to
93
- * allow for scrolling on the content.
91
+ * If we are swiping on the content, swiping should only be possible if the content
92
+ * is scrolled all the way to the top so that we do not interfere with scrolling.
93
+ *
94
+ * We cannot assume that the `ion-content` target will remain consistent between swipes.
95
+ * For example, when using ion-nav within a modal it is possible to swipe, push a view,
96
+ * and then swipe again. The target content will not be the same between swipes.
94
97
  */
95
- const content = detail.event.target.closest('ion-content');
98
+ const contentEl = findClosestIonContent(detail.event.target);
96
99
  currentBreakpoint = getCurrentBreakpoint();
97
- if (currentBreakpoint === 1 && content) {
98
- return false;
100
+ if (currentBreakpoint === 1 && contentEl) {
101
+ /**
102
+ * The modal should never swipe to close on the content with a refresher.
103
+ * Note 1: We cannot solve this by making this gesture have a higher priority than
104
+ * the refresher gesture as the iOS native refresh gesture uses a scroll listener in
105
+ * addition to a gesture.
106
+ *
107
+ * Note 2: Do not use getScrollElement here because we need this to be a synchronous
108
+ * operation, and getScrollElement is asynchronous.
109
+ */
110
+ const scrollEl = isIonContent(contentEl) ? getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
111
+ const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
112
+ return !hasRefresherInContent && scrollEl.scrollTop === 0;
99
113
  }
100
114
  return true;
101
115
  };
102
- const onStart = () => {
116
+ const onStart = (detail) => {
103
117
  /**
104
118
  * If canDismiss is anything other than `true`
105
119
  * then users should be able to swipe down
@@ -114,11 +128,10 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
114
128
  */
115
129
  canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
116
130
  /**
117
- * If swiping on the content
118
- * we should disable scrolling otherwise
119
- * the sheet will expand and the content will scroll.
131
+ * If we are pulling down, then it is possible we are pulling on the content.
132
+ * We do not want scrolling to happen at the same time as the gesture.
120
133
  */
121
- if (contentEl) {
134
+ if (detail.deltaY > 0 && contentEl) {
122
135
  contentEl.scrollY = false;
123
136
  }
124
137
  raf(() => {
@@ -131,6 +144,15 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
131
144
  animation.progressStart(true, 1 - currentBreakpoint);
132
145
  };
133
146
  const onMove = (detail) => {
147
+ /**
148
+ * If we are pulling down, then it is possible we are pulling on the content.
149
+ * We do not want scrolling to happen at the same time as the gesture.
150
+ * This accounts for when the user scrolls down, scrolls all the way up, and then
151
+ * pulls down again such that the modal should start to move.
152
+ */
153
+ if (detail.deltaY > 0 && contentEl) {
154
+ contentEl.scrollY = false;
155
+ }
134
156
  /**
135
157
  * Given the change in gesture position on the Y axis,
136
158
  * compute where the offset of the animation should be
@@ -233,6 +255,16 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
233
255
  else if (!shouldRemainOpen) {
234
256
  onDismiss();
235
257
  }
258
+ /**
259
+ * If the sheet is going to be fully expanded then we should enable
260
+ * scrolling immediately. The sheet modal animation takes ~500ms to finish
261
+ * so if we wait until then there is a visible delay for when scrolling is
262
+ * re-enabled. Native iOS allows for scrolling on the sheet modal as soon
263
+ * as the gesture is released, so we align with that.
264
+ */
265
+ if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
266
+ contentEl.scrollY = true;
267
+ }
236
268
  return new Promise((resolve) => {
237
269
  animation
238
270
  .onFinish(() => {
@@ -251,13 +283,6 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
251
283
  animation.progressStart(true, 1 - snapToBreakpoint);
252
284
  currentBreakpoint = snapToBreakpoint;
253
285
  onBreakpointChange(currentBreakpoint);
254
- /**
255
- * If the sheet is fully expanded, we can safely
256
- * enable scrolling again.
257
- */
258
- if (contentEl && currentBreakpoint === breakpoints[breakpoints.length - 1]) {
259
- contentEl.scrollY = true;
260
- }
261
286
  /**
262
287
  * Backdrop should become enabled
263
288
  * after the backdropBreakpoint value
@@ -55,20 +55,22 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
55
55
  const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
56
56
  const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
57
57
  const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
58
- const enteringBackButtonTextBox = enteringBackButtonTextEl.getBoundingClientRect();
58
+ // Text element not rendered if developers pass text="" to the back button
59
+ const enteringBackButtonTextBox = enteringBackButtonTextEl === null || enteringBackButtonTextEl === void 0 ? void 0 : enteringBackButtonTextEl.getBoundingClientRect();
59
60
  const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
60
61
  const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
61
- animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
62
+ animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
62
63
  animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
63
64
  }
64
65
  else if (shouldAnimationBackward) {
65
66
  const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
66
67
  const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
67
68
  const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
68
- const leavingBackButtonTextBox = leavingBackButtonTextEl.getBoundingClientRect();
69
+ // Text element not rendered if developers pass text="" to the back button
70
+ const leavingBackButtonTextBox = leavingBackButtonTextEl === null || leavingBackButtonTextEl === void 0 ? void 0 : leavingBackButtonTextEl.getBoundingClientRect();
69
71
  const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
70
72
  const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
71
- animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
73
+ animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
72
74
  animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
73
75
  }
74
76
  return {
@@ -82,26 +84,29 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
82
84
  const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
83
85
  const ICON_ORIGIN_X = rtl ? 'left' : 'right';
84
86
  const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
85
- /**
86
- * When the title and back button texts match
87
- * then they should overlap during the page transition.
88
- * If the texts do not match up then the back button text scale adjusts
89
- * to not perfectly match the large title text otherwise the
90
- * proportions will be incorrect.
91
- * When the texts match we scale both the width and height to account for
92
- * font weight differences between the title and back button.
93
- */
94
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
95
- const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
96
- /**
97
- * We subtract an offset to account for slight sizing/padding
98
- * differences between the title and the back button.
99
- */
100
- const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
101
- const TEXT_START_SCALE = doTitleAndButtonTextsMatch
102
- ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
103
- : `scale(${HEIGHT_SCALE})`;
87
+ let WIDTH_SCALE = 1;
88
+ let HEIGHT_SCALE = 1;
89
+ let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
104
90
  const TEXT_END_SCALE = 'scale(1)';
91
+ if (backButtonTextEl && backButtonTextBox) {
92
+ /**
93
+ * When the title and back button texts match then they should overlap during the
94
+ * page transition. If the texts do not match up then the back button text scale
95
+ * adjusts to not perfectly match the large title text otherwise the proportions
96
+ * will be incorrect. When the texts match we scale both the width and height to
97
+ * account for font weight differences between the title and back button.
98
+ */
99
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
100
+ WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
101
+ /**
102
+ * Subtract an offset to account for slight sizing/padding differences between the
103
+ * title and the back button.
104
+ */
105
+ HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
106
+ if (doTitleAndButtonTextsMatch) {
107
+ TEXT_START_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
108
+ }
109
+ }
105
110
  const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
106
111
  const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
107
112
  /**
@@ -198,11 +203,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
198
203
  top: '0px',
199
204
  [CONTAINER_ORIGIN_X]: '0px',
200
205
  })
201
- .keyframes(CONTAINER_KEYFRAMES);
202
- enteringBackButtonTextAnimation
203
- .beforeStyles({
204
- 'transform-origin': `${TEXT_ORIGIN_X} top`,
205
- })
206
+ /**
207
+ * The write hooks must be set on this animation as it is guaranteed to run. Other
208
+ * animations such as the back button text animation will not run if the back button
209
+ * has no visible text.
210
+ */
206
211
  .beforeAddWrite(() => {
207
212
  backButtonEl.style.setProperty('display', 'none');
208
213
  clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
@@ -211,6 +216,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
211
216
  backButtonEl.style.setProperty('display', '');
212
217
  clonedBackButtonEl.style.setProperty('display', 'none');
213
218
  clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
219
+ })
220
+ .keyframes(CONTAINER_KEYFRAMES);
221
+ enteringBackButtonTextAnimation
222
+ .beforeStyles({
223
+ 'transform-origin': `${TEXT_ORIGIN_X} top`,
214
224
  })
215
225
  .keyframes(TEXT_KEYFRAMES);
216
226
  enteringBackButtonIconAnimation
@@ -224,7 +234,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
224
234
  enteringBackButtonAnimation,
225
235
  ]);
226
236
  };
227
- const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
237
+ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
228
238
  var _a, _b;
229
239
  /**
230
240
  * The horizontal transform origin for the large title
@@ -244,52 +254,65 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
244
254
  * title and the back button due to padding and font weight.
245
255
  */
246
256
  const LARGE_TITLE_TRANSLATION_OFFSET = 8;
257
+ let END_TRANSLATE_X = rtl
258
+ ? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
259
+ : `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
247
260
  /**
248
- * The scaled title should (roughly) overlap the back button.
249
- * This ensures that the back button and title overlap during
250
- * the animation. Note that since both elements either fade in
251
- * or fade out over the course of the animation, neither element
252
- * will be fully visible on top of the other. As a result, the overlap
253
- * does not need to be perfect, so approximate values are acceptable here.
261
+ * How much to scale the large title up/down by.
254
262
  */
255
- const END_TRANSLATE_X = rtl
256
- ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
257
- : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
263
+ let HEIGHT_SCALE = 0.5;
258
264
  /**
259
- * The top of the scaled large title
260
- * should match with the top of the
261
- * back button text element.
262
- * We subtract 2px to account for the top padding
263
- * on the large title element.
265
+ * The large title always starts full size.
264
266
  */
265
- const LARGE_TITLE_TOP_PADDING = 2;
266
- const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
267
+ const START_SCALE = 'scale(1)';
267
268
  /**
268
- * In the forward direction, the large title should start at its
269
- * normal size and then scale down to be (roughly) the size of the
270
- * back button on the other view. In the backward direction, the
271
- * large title should start at (roughly) the size of the back button
272
- * and then scale up to its original size.
273
- *
274
- * Note that since both elements either fade in
275
- * or fade out over the course of the animation, neither element
276
- * will be fully visible on top of the other. As a result, the overlap
277
- * does not need to be perfect, so approximate values are acceptable here.
269
+ * By default, we don't worry about having the large title scaled to perfectly
270
+ * match the back button because we don't know if the back button's text matches
271
+ * the large title's text.
278
272
  */
273
+ let END_SCALE = `scale(${HEIGHT_SCALE})`;
274
+ // Text element not rendered if developers pass text="" to the back button
275
+ if (backButtonTextEl && backButtonTextBox) {
276
+ /**
277
+ * The scaled title should (roughly) overlap the back button. This ensures that
278
+ * the back button and title overlap during the animation. Note that since both
279
+ * elements either fade in or fade out over the course of the animation, neither
280
+ * element will be fully visible on top of the other. As a result, the overlap
281
+ * does not need to be perfect, so approximate values are acceptable here.
282
+ */
283
+ END_TRANSLATE_X = rtl
284
+ ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
285
+ : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
286
+ /**
287
+ * In the forward direction, the large title should start at its normal size and
288
+ * then scale down to be (roughly) the size of the back button on the other view.
289
+ * In the backward direction, the large title should start at (roughly) the size
290
+ * of the back button and then scale up to its original size.
291
+ * Note that since both elements either fade in or fade out over the course of the
292
+ * animation, neither element will be fully visible on top of the other. As a result,
293
+ * the overlap does not need to be perfect, so approximate values are acceptable here.
294
+ */
295
+ /**
296
+ * When the title and back button texts match then they should overlap during the
297
+ * page transition. If the texts do not match up then the large title text scale
298
+ * adjusts to not perfectly match the back button text otherwise the proportions
299
+ * will be incorrect. When the texts match we scale both the width and height to
300
+ * account for font weight differences between the title and back button.
301
+ */
302
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
303
+ const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
304
+ HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
305
+ if (doTitleAndButtonTextsMatch) {
306
+ END_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
307
+ }
308
+ }
279
309
  /**
280
- * When the title and back button texts match
281
- * then they should overlap during the page transition.
282
- * If the texts do not match up then the large title text scale adjusts
283
- * to not perfectly match the back button text otherwise the
284
- * proportions will be incorrect.
285
- * When the texts match we scale both the width and height to account for
286
- * font weight differences between the title and back button.
310
+ * The midpoints of the back button and the title should align such that the back
311
+ * button and title appear to be centered with each other.
287
312
  */
288
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
289
- const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
290
- const HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
291
- const START_SCALE = 'scale(1)';
292
- const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
313
+ const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
314
+ const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
315
+ const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
293
316
  const BACKWARDS_KEYFRAMES = [
294
317
  { offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
295
318
  { offset: 0.1, opacity: 0 },
package/dist/docs.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
- "timestamp": "2024-04-10T13:29:43",
2
+ "timestamp": "2024-04-16T14:55:44",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
- "version": "4.14.0",
5
+ "version": "4.14.1",
6
6
  "typescriptVersion": "5.4.3"
7
7
  },
8
8
  "components": [