@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
@@ -875,19 +875,32 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
875
875
  }
876
876
  const canStart = (detail) => {
877
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.
878
+ * If we are swiping on the content, swiping should only be possible if the content
879
+ * is scrolled all the way to the top so that we do not interfere with scrolling.
880
+ *
881
+ * We cannot assume that the `ion-content` target will remain consistent between swipes.
882
+ * For example, when using ion-nav within a modal it is possible to swipe, push a view,
883
+ * and then swipe again. The target content will not be the same between swipes.
882
884
  */
883
- const content = detail.event.target.closest('ion-content');
885
+ const contentEl = findClosestIonContent(detail.event.target);
884
886
  currentBreakpoint = getCurrentBreakpoint();
885
- if (currentBreakpoint === 1 && content) {
886
- return false;
887
+ if (currentBreakpoint === 1 && contentEl) {
888
+ /**
889
+ * The modal should never swipe to close on the content with a refresher.
890
+ * Note 1: We cannot solve this by making this gesture have a higher priority than
891
+ * the refresher gesture as the iOS native refresh gesture uses a scroll listener in
892
+ * addition to a gesture.
893
+ *
894
+ * Note 2: Do not use getScrollElement here because we need this to be a synchronous
895
+ * operation, and getScrollElement is asynchronous.
896
+ */
897
+ const scrollEl = isIonContent(contentEl) ? getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
898
+ const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
899
+ return !hasRefresherInContent && scrollEl.scrollTop === 0;
887
900
  }
888
901
  return true;
889
902
  };
890
- const onStart = () => {
903
+ const onStart = (detail) => {
891
904
  /**
892
905
  * If canDismiss is anything other than `true`
893
906
  * then users should be able to swipe down
@@ -902,11 +915,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
902
915
  */
903
916
  canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
904
917
  /**
905
- * If swiping on the content
906
- * we should disable scrolling otherwise
907
- * the sheet will expand and the content will scroll.
918
+ * If we are pulling down, then it is possible we are pulling on the content.
919
+ * We do not want scrolling to happen at the same time as the gesture.
908
920
  */
909
- if (contentEl) {
921
+ if (detail.deltaY > 0 && contentEl) {
910
922
  contentEl.scrollY = false;
911
923
  }
912
924
  raf(() => {
@@ -919,6 +931,15 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
919
931
  animation.progressStart(true, 1 - currentBreakpoint);
920
932
  };
921
933
  const onMove = (detail) => {
934
+ /**
935
+ * If we are pulling down, then it is possible we are pulling on the content.
936
+ * We do not want scrolling to happen at the same time as the gesture.
937
+ * This accounts for when the user scrolls down, scrolls all the way up, and then
938
+ * pulls down again such that the modal should start to move.
939
+ */
940
+ if (detail.deltaY > 0 && contentEl) {
941
+ contentEl.scrollY = false;
942
+ }
922
943
  /**
923
944
  * Given the change in gesture position on the Y axis,
924
945
  * compute where the offset of the animation should be
@@ -1021,6 +1042,16 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1021
1042
  else if (!shouldRemainOpen) {
1022
1043
  onDismiss();
1023
1044
  }
1045
+ /**
1046
+ * If the sheet is going to be fully expanded then we should enable
1047
+ * scrolling immediately. The sheet modal animation takes ~500ms to finish
1048
+ * so if we wait until then there is a visible delay for when scrolling is
1049
+ * re-enabled. Native iOS allows for scrolling on the sheet modal as soon
1050
+ * as the gesture is released, so we align with that.
1051
+ */
1052
+ if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
1053
+ contentEl.scrollY = true;
1054
+ }
1024
1055
  return new Promise((resolve) => {
1025
1056
  animation
1026
1057
  .onFinish(() => {
@@ -1039,13 +1070,6 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1039
1070
  animation.progressStart(true, 1 - snapToBreakpoint);
1040
1071
  currentBreakpoint = snapToBreakpoint;
1041
1072
  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
1073
  /**
1050
1074
  * Backdrop should become enabled
1051
1075
  * after the backdropBreakpoint value
@@ -56,20 +56,22 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
56
56
  const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
57
57
  const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
58
58
  const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
59
- const enteringBackButtonTextBox = enteringBackButtonTextEl.getBoundingClientRect();
59
+ // Text element not rendered if developers pass text="" to the back button
60
+ const enteringBackButtonTextBox = enteringBackButtonTextEl === null || enteringBackButtonTextEl === void 0 ? void 0 : enteringBackButtonTextEl.getBoundingClientRect();
60
61
  const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
61
62
  const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
62
- animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
63
+ animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
63
64
  animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
64
65
  }
65
66
  else if (shouldAnimationBackward) {
66
67
  const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
67
68
  const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
68
69
  const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
69
- const leavingBackButtonTextBox = leavingBackButtonTextEl.getBoundingClientRect();
70
+ // Text element not rendered if developers pass text="" to the back button
71
+ const leavingBackButtonTextBox = leavingBackButtonTextEl === null || leavingBackButtonTextEl === void 0 ? void 0 : leavingBackButtonTextEl.getBoundingClientRect();
70
72
  const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
71
73
  const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
72
- animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
74
+ animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
73
75
  animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
74
76
  }
75
77
  return {
@@ -83,26 +85,29 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
83
85
  const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
84
86
  const ICON_ORIGIN_X = rtl ? 'left' : 'right';
85
87
  const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
86
- /**
87
- * When the title and back button texts match
88
- * then they should overlap during the page transition.
89
- * If the texts do not match up then the back button text scale adjusts
90
- * to not perfectly match the large title text otherwise the
91
- * proportions will be incorrect.
92
- * When the texts match we scale both the width and height to account for
93
- * font weight differences between the title and back button.
94
- */
95
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
96
- const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
97
- /**
98
- * We subtract an offset to account for slight sizing/padding
99
- * differences between the title and the back button.
100
- */
101
- const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
102
- const TEXT_START_SCALE = doTitleAndButtonTextsMatch
103
- ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
104
- : `scale(${HEIGHT_SCALE})`;
88
+ let WIDTH_SCALE = 1;
89
+ let HEIGHT_SCALE = 1;
90
+ let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
105
91
  const TEXT_END_SCALE = 'scale(1)';
92
+ if (backButtonTextEl && backButtonTextBox) {
93
+ /**
94
+ * When the title and back button texts match then they should overlap during the
95
+ * page transition. If the texts do not match up then the back button text scale
96
+ * adjusts to not perfectly match the large title text otherwise the proportions
97
+ * will be incorrect. When the texts match we scale both the width and height to
98
+ * account for 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
+ WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
102
+ /**
103
+ * Subtract an offset to account for slight sizing/padding differences between the
104
+ * title and the back button.
105
+ */
106
+ HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
107
+ if (doTitleAndButtonTextsMatch) {
108
+ TEXT_START_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
109
+ }
110
+ }
106
111
  const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
107
112
  const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
108
113
  /**
@@ -199,11 +204,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
199
204
  top: '0px',
200
205
  [CONTAINER_ORIGIN_X]: '0px',
201
206
  })
202
- .keyframes(CONTAINER_KEYFRAMES);
203
- enteringBackButtonTextAnimation
204
- .beforeStyles({
205
- 'transform-origin': `${TEXT_ORIGIN_X} top`,
206
- })
207
+ /**
208
+ * The write hooks must be set on this animation as it is guaranteed to run. Other
209
+ * animations such as the back button text animation will not run if the back button
210
+ * has no visible text.
211
+ */
207
212
  .beforeAddWrite(() => {
208
213
  backButtonEl.style.setProperty('display', 'none');
209
214
  clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
@@ -212,6 +217,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
212
217
  backButtonEl.style.setProperty('display', '');
213
218
  clonedBackButtonEl.style.setProperty('display', 'none');
214
219
  clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
220
+ })
221
+ .keyframes(CONTAINER_KEYFRAMES);
222
+ enteringBackButtonTextAnimation
223
+ .beforeStyles({
224
+ 'transform-origin': `${TEXT_ORIGIN_X} top`,
215
225
  })
216
226
  .keyframes(TEXT_KEYFRAMES);
217
227
  enteringBackButtonIconAnimation
@@ -225,7 +235,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
225
235
  enteringBackButtonAnimation,
226
236
  ]);
227
237
  };
228
- const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
238
+ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
229
239
  var _a, _b;
230
240
  /**
231
241
  * The horizontal transform origin for the large title
@@ -245,52 +255,65 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
245
255
  * title and the back button due to padding and font weight.
246
256
  */
247
257
  const LARGE_TITLE_TRANSLATION_OFFSET = 8;
258
+ let END_TRANSLATE_X = rtl
259
+ ? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
260
+ : `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
248
261
  /**
249
- * The scaled title should (roughly) overlap the back button.
250
- * This ensures that the back button and title overlap during
251
- * the animation. Note that since both elements either fade in
252
- * or fade out over the course of the animation, neither element
253
- * will be fully visible on top of the other. As a result, the overlap
254
- * does not need to be perfect, so approximate values are acceptable here.
262
+ * How much to scale the large title up/down by.
255
263
  */
256
- const END_TRANSLATE_X = rtl
257
- ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
258
- : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
264
+ let HEIGHT_SCALE = 0.5;
259
265
  /**
260
- * The top of the scaled large title
261
- * should match with the top of the
262
- * back button text element.
263
- * We subtract 2px to account for the top padding
264
- * on the large title element.
266
+ * The large title always starts full size.
265
267
  */
266
- const LARGE_TITLE_TOP_PADDING = 2;
267
- const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
268
+ const START_SCALE = 'scale(1)';
268
269
  /**
269
- * In the forward direction, the large title should start at its
270
- * normal size and then scale down to be (roughly) the size of the
271
- * back button on the other view. In the backward direction, the
272
- * large title should start at (roughly) the size of the back button
273
- * and then scale up to its original size.
274
- *
275
- * Note that since both elements either fade in
276
- * or fade out over the course of the animation, neither element
277
- * will be fully visible on top of the other. As a result, the overlap
278
- * does not need to be perfect, so approximate values are acceptable here.
270
+ * By default, we don't worry about having the large title scaled to perfectly
271
+ * match the back button because we don't know if the back button's text matches
272
+ * the large title's text.
279
273
  */
274
+ let END_SCALE = `scale(${HEIGHT_SCALE})`;
275
+ // Text element not rendered if developers pass text="" to the back button
276
+ if (backButtonTextEl && backButtonTextBox) {
277
+ /**
278
+ * The scaled title should (roughly) overlap the back button. This ensures that
279
+ * the back button and title overlap during the animation. Note that since both
280
+ * elements either fade in or fade out over the course of the animation, neither
281
+ * element will be fully visible on top of the other. As a result, the overlap
282
+ * does not need to be perfect, so approximate values are acceptable here.
283
+ */
284
+ END_TRANSLATE_X = rtl
285
+ ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
286
+ : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
287
+ /**
288
+ * In the forward direction, the large title should start at its normal size and
289
+ * then scale down to be (roughly) the size of the back button on the other view.
290
+ * In the backward direction, the large title should start at (roughly) the size
291
+ * of the back button and then scale up to its original size.
292
+ * Note that since both elements either fade in or fade out over the course of the
293
+ * animation, neither element will be fully visible on top of the other. As a result,
294
+ * the overlap does not need to be perfect, so approximate values are acceptable here.
295
+ */
296
+ /**
297
+ * When the title and back button texts match then they should overlap during the
298
+ * page transition. If the texts do not match up then the large title text scale
299
+ * adjusts to not perfectly match the back button text otherwise the proportions
300
+ * will be incorrect. When the texts match we scale both the width and height to
301
+ * account for font weight differences between the title and back button.
302
+ */
303
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
304
+ const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
305
+ HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
306
+ if (doTitleAndButtonTextsMatch) {
307
+ END_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
308
+ }
309
+ }
280
310
  /**
281
- * When the title and back button texts match
282
- * then they should overlap during the page transition.
283
- * If the texts do not match up then the large title text scale adjusts
284
- * to not perfectly match the back button text otherwise the
285
- * proportions will be incorrect.
286
- * When the texts match we scale both the width and height to account for
287
- * font weight differences between the title and back button.
311
+ * The midpoints of the back button and the title should align such that the back
312
+ * button and title appear to be centered with each other.
288
313
  */
289
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
290
- const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
291
- const HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
292
- const START_SCALE = 'scale(1)';
293
- const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
314
+ const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
315
+ const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
316
+ const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
294
317
  const BACKWARDS_KEYFRAMES = [
295
318
  { offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
296
319
  { offset: 0.1, opacity: 0 },
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
6
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
7
7
 
8
8
  const globalScripts = ionicGlobal.initialize;
9
9
 
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const index$1 = require('./index-ea0555d6.js');
6
+ const index$1 = require('./index-22617dd6.js');
7
7
  const haptic = require('./haptic-b882e0bb.js');
8
8
  const index = require('./index-d1b59ffa.js');
9
9
 
@@ -4,8 +4,8 @@
4
4
  'use strict';
5
5
 
6
6
  const index = require('./index-c8d52405.js');
7
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
8
- require('./index-ea0555d6.js');
7
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
8
+ require('./index-22617dd6.js');
9
9
 
10
10
  /**
11
11
  * CloseWatcher is a newer API that lets
@@ -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 helpers = require('./helpers-da4c0ed1.js');
8
8
 
9
9
  const LIFECYCLE_WILL_ENTER = 'ionViewWillEnter';
@@ -12,8 +12,8 @@ const LIFECYCLE_WILL_LEAVE = 'ionViewWillLeave';
12
12
  const LIFECYCLE_DID_LEAVE = 'ionViewDidLeave';
13
13
  const LIFECYCLE_WILL_UNLOAD = 'ionViewWillUnload';
14
14
 
15
- const iosTransitionAnimation = () => Promise.resolve().then(function () { return require('./ios.transition-259214c9.js'); });
16
- const mdTransitionAnimation = () => Promise.resolve().then(function () { return require('./md.transition-6eb6de75.js'); });
15
+ const iosTransitionAnimation = () => Promise.resolve().then(function () { return require('./ios.transition-26c5adb2.js'); });
16
+ const mdTransitionAnimation = () => Promise.resolve().then(function () { return require('./md.transition-75533d44.js'); });
17
17
  // TODO(FW-2832): types
18
18
  const transition = (opts) => {
19
19
  return new Promise((resolve, reject) => {
@@ -886,17 +886,35 @@ const updateElement = (oldVnode, newVnode, isSvgMode, memberName) => {
886
886
  const newVnodeAttrs = newVnode.$attrs$ || EMPTY_OBJ;
887
887
  {
888
888
  // remove attributes no longer present on the vnode by setting them to undefined
889
- for (memberName in oldVnodeAttrs) {
889
+ for (memberName of sortedAttrNames(Object.keys(oldVnodeAttrs))) {
890
890
  if (!(memberName in newVnodeAttrs)) {
891
891
  setAccessor(elm, memberName, oldVnodeAttrs[memberName], undefined, isSvgMode, newVnode.$flags$);
892
892
  }
893
893
  }
894
894
  }
895
895
  // add new & update changed attributes
896
- for (memberName in newVnodeAttrs) {
896
+ for (memberName of sortedAttrNames(Object.keys(newVnodeAttrs))) {
897
897
  setAccessor(elm, memberName, oldVnodeAttrs[memberName], newVnodeAttrs[memberName], isSvgMode, newVnode.$flags$);
898
898
  }
899
899
  };
900
+ /**
901
+ * Sort a list of attribute names to ensure that all the attribute names which
902
+ * are _not_ `"ref"` come before `"ref"`. Preserve the order of the non-ref
903
+ * attributes.
904
+ *
905
+ * **Note**: if the supplied attributes do not include `'ref'` then the same
906
+ * (by reference) array will be returned without modification.
907
+ *
908
+ * @param attrNames attribute names to sort
909
+ * @returns a list of attribute names, sorted if they include `"ref"`
910
+ */
911
+ function sortedAttrNames(attrNames) {
912
+ return attrNames.includes('ref')
913
+ ? // we need to sort these to ensure that `'ref'` is the last attr
914
+ [...attrNames.filter((attr) => attr !== 'ref'), 'ref']
915
+ : // no need to sort, return the original array
916
+ attrNames;
917
+ }
900
918
  /**
901
919
  * Create a DOM Node corresponding to one of the children of a given VNode.
902
920
  *
@@ -1757,6 +1775,11 @@ const renderVdom = (hostRef, renderFnResults, isInitialLoad = false) => {
1757
1775
  let refNode = (_b = orgLocationNode['s-nr']) !== null && _b !== void 0 ? _b : null;
1758
1776
  if (refNode && refNode['s-sn'] === nodeToRelocate['s-sn'] && parentNodeRef === refNode.parentNode) {
1759
1777
  refNode = refNode.nextSibling;
1778
+ // If the refNode is the same node to be relocated or another element's slot reference, keep searching to find the
1779
+ // correct relocation target
1780
+ while (refNode === nodeToRelocate || (refNode === null || refNode === void 0 ? void 0 : refNode['s-sr'])) {
1781
+ refNode = refNode === null || refNode === void 0 ? void 0 : refNode.nextSibling;
1782
+ }
1760
1783
  if (!refNode || !refNode['s-nr']) {
1761
1784
  insertBeforeNode = refNode;
1762
1785
  break;
@@ -4,10 +4,10 @@
4
4
  'use strict';
5
5
 
6
6
  const index$1 = require('./index-c8d52405.js');
7
- const hardwareBackButton = require('./hardware-back-button-d76ddd64.js');
7
+ const hardwareBackButton = require('./hardware-back-button-adba3ac7.js');
8
8
  const index = require('./index-5915f9b3.js');
9
9
  const helpers = require('./helpers-da4c0ed1.js');
10
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
10
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
11
11
  const animation = require('./animation-c2840aea.js');
12
12
 
13
13
  /**
@@ -6,21 +6,21 @@
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const animation = require('./animation-c2840aea.js');
9
- const index = require('./index-9d02ee85.js');
10
- const ios_transition = require('./ios.transition-259214c9.js');
11
- const md_transition = require('./md.transition-6eb6de75.js');
9
+ const index = require('./index-034460de.js');
10
+ const ios_transition = require('./ios.transition-26c5adb2.js');
11
+ const md_transition = require('./md.transition-75533d44.js');
12
12
  const cubicBezier = require('./cubic-bezier-f2dccc53.js');
13
13
  const index$1 = require('./index-d1b59ffa.js');
14
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
14
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
15
15
  const helpers = require('./helpers-da4c0ed1.js');
16
16
  const config = require('./config-4f60b98a.js');
17
17
  const theme = require('./theme-d1c573d2.js');
18
- const index$2 = require('./index-e39d723a.js');
19
- const overlays = require('./overlays-d2e50d5e.js');
18
+ const index$2 = require('./index-5c38afe7.js');
19
+ const overlays = require('./overlays-129dfc13.js');
20
20
  require('./index-c8d52405.js');
21
- require('./index-ea0555d6.js');
21
+ require('./index-22617dd6.js');
22
22
  require('./gesture-controller-c40c045a.js');
23
- require('./hardware-back-button-d76ddd64.js');
23
+ require('./hardware-back-button-adba3ac7.js');
24
24
  require('./index-5915f9b3.js');
25
25
  require('./framework-delegate-e0e13baa.js');
26
26
 
@@ -5,10 +5,10 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-ea0555d6.js');
8
+ const index = require('./index-22617dd6.js');
9
9
  const helpers = require('./helpers-da4c0ed1.js');
10
10
  const index$1 = require('./index-f52c6d38.js');
11
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
11
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
12
12
  const index$2 = require('./index-5915f9b3.js');
13
13
 
14
14
  const accordionIosCss = ":host{display:block;position:relative;width:100%;background-color:var(--ion-background-color, #ffffff);overflow:hidden;z-index:0}:host(.accordion-expanding) ::slotted(ion-item[slot=header]),:host(.accordion-expanded) ::slotted(ion-item[slot=header]){--border-width:0px}:host(.accordion-animated){-webkit-transition:all 300ms cubic-bezier(0.25, 0.8, 0.5, 1);transition:all 300ms cubic-bezier(0.25, 0.8, 0.5, 1)}:host(.accordion-animated) #content{-webkit-transition:max-height 300ms cubic-bezier(0.25, 0.8, 0.5, 1);transition:max-height 300ms cubic-bezier(0.25, 0.8, 0.5, 1)}#content{overflow:hidden;will-change:max-height}:host(.accordion-collapsing) #content{max-height:0 !important}:host(.accordion-collapsed) #content{display:none}:host(.accordion-expanding) #content{max-height:0}:host(.accordion-expanding) #content-wrapper{overflow:auto}:host(.accordion-disabled) #header,:host(.accordion-readonly) #header,:host(.accordion-disabled) #content,:host(.accordion-readonly) #content{pointer-events:none}:host(.accordion-disabled) #header,:host(.accordion-disabled) #content{opacity:0.4}@media (prefers-reduced-motion: reduce){:host,#content{-webkit-transition:none !important;transition:none !important}}:host(.accordion-next) ::slotted(ion-item[slot=header]){--border-width:0.55px 0px 0.55px 0px}";
@@ -5,20 +5,20 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-ea0555d6.js');
9
- const buttonActive = require('./button-active-aff0cd49.js');
8
+ const index = require('./index-22617dd6.js');
9
+ const buttonActive = require('./button-active-181d142e.js');
10
10
  const helpers = require('./helpers-da4c0ed1.js');
11
11
  const lockController = require('./lock-controller-6585a42a.js');
12
- const overlays = require('./overlays-d2e50d5e.js');
12
+ const overlays = require('./overlays-129dfc13.js');
13
13
  const theme = require('./theme-d1c573d2.js');
14
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
14
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
15
15
  const animation = require('./animation-c2840aea.js');
16
16
  require('./haptic-b882e0bb.js');
17
17
  require('./capacitor-c04564bf.js');
18
18
  require('./index-c8d52405.js');
19
19
  require('./index-d1b59ffa.js');
20
20
  require('./gesture-controller-c40c045a.js');
21
- require('./hardware-back-button-d76ddd64.js');
21
+ require('./hardware-back-button-adba3ac7.js');
22
22
  require('./framework-delegate-e0e13baa.js');
23
23
  require('./index-5915f9b3.js');
24
24
 
@@ -5,21 +5,21 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-ea0555d6.js');
8
+ const index = require('./index-22617dd6.js');
9
9
  const config = require('./config-4f60b98a.js');
10
- const buttonActive = require('./button-active-aff0cd49.js');
10
+ const buttonActive = require('./button-active-181d142e.js');
11
11
  const helpers = require('./helpers-da4c0ed1.js');
12
12
  const lockController = require('./lock-controller-6585a42a.js');
13
- const overlays = require('./overlays-d2e50d5e.js');
13
+ const overlays = require('./overlays-129dfc13.js');
14
14
  const theme = require('./theme-d1c573d2.js');
15
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
15
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
16
16
  const animation = require('./animation-c2840aea.js');
17
17
  require('./haptic-b882e0bb.js');
18
18
  require('./capacitor-c04564bf.js');
19
19
  require('./index-c8d52405.js');
20
20
  require('./index-d1b59ffa.js');
21
21
  require('./gesture-controller-c40c045a.js');
22
- require('./hardware-back-button-d76ddd64.js');
22
+ require('./hardware-back-button-adba3ac7.js');
23
23
  require('./framework-delegate-e0e13baa.js');
24
24
  require('./index-5915f9b3.js');
25
25
 
@@ -5,10 +5,10 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-ea0555d6.js');
9
- const hardwareBackButton = require('./hardware-back-button-d76ddd64.js');
8
+ const index = require('./index-22617dd6.js');
9
+ const hardwareBackButton = require('./hardware-back-button-adba3ac7.js');
10
10
  const index$1 = require('./index-5915f9b3.js');
11
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
11
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
12
12
  const helpers = require('./helpers-da4c0ed1.js');
13
13
  const dir = require('./dir-94c21456.js');
14
14
  const theme = require('./theme-d1c573d2.js');
@@ -17,7 +17,7 @@ const keyboardController = require('./keyboard-controller-c05e747a.js');
17
17
  const cubicBezier = require('./cubic-bezier-f2dccc53.js');
18
18
  const frameworkDelegate = require('./framework-delegate-e0e13baa.js');
19
19
  const lockController = require('./lock-controller-6585a42a.js');
20
- const index$3 = require('./index-9d02ee85.js');
20
+ const index$3 = require('./index-034460de.js');
21
21
  require('./index-c8d52405.js');
22
22
  require('./keyboard-0272231f.js');
23
23
  require('./capacitor-c04564bf.js');
@@ -37,7 +37,7 @@ const App = class {
37
37
  Promise.resolve().then(function () { return require('./index-62290fec.js'); }).then((module) => module.startTapClick(ionicGlobal.config));
38
38
  }
39
39
  if (ionicGlobal.config.getBoolean('statusTap', isHybrid)) {
40
- Promise.resolve().then(function () { return require('./status-tap-1d7f8e6d.js'); }).then((module) => module.startStatusTap());
40
+ Promise.resolve().then(function () { return require('./status-tap-03d82840.js'); }).then((module) => module.startStatusTap());
41
41
  }
42
42
  if (ionicGlobal.config.getBoolean('inputShims', needInputShims())) {
43
43
  /**
@@ -47,7 +47,7 @@ const App = class {
47
47
  const platform = ionicGlobal.isPlatform(window, 'ios') ? 'ios' : 'android';
48
48
  Promise.resolve().then(function () { return require('./input-shims-a9a85bb9.js'); }).then((module) => module.startInputShims(ionicGlobal.config, platform));
49
49
  }
50
- const hardwareBackButtonModule = await Promise.resolve().then(function () { return require('./hardware-back-button-d76ddd64.js'); });
50
+ const hardwareBackButtonModule = await Promise.resolve().then(function () { return require('./hardware-back-button-adba3ac7.js'); });
51
51
  const supportsHardwareBackButtonEvents = isHybrid || hardwareBackButton.shouldUseCloseWatcher();
52
52
  if (ionicGlobal.config.getBoolean('hardwareBackButton', supportsHardwareBackButtonEvents)) {
53
53
  hardwareBackButtonModule.startHardwareBackButton();
@@ -5,8 +5,8 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-ea0555d6.js');
9
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
8
+ const index = require('./index-22617dd6.js');
9
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
10
10
  const theme = require('./theme-d1c573d2.js');
11
11
 
12
12
  const avatarIosCss = ":host{border-radius:var(--border-radius);display:block}::slotted(ion-img),::slotted(img){border-radius:var(--border-radius);width:100%;height:100%;-o-object-fit:cover;object-fit:cover;overflow:hidden}:host{--border-radius:50%;width:48px;height:48px}";
@@ -5,11 +5,11 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-ea0555d6.js');
8
+ const index = require('./index-22617dd6.js');
9
9
  const helpers = require('./helpers-da4c0ed1.js');
10
10
  const theme = require('./theme-d1c573d2.js');
11
11
  const index$1 = require('./index-f52c6d38.js');
12
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
12
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
13
13
 
14
14
  const backButtonIosCss = ":host{--background:transparent;--color-focused:currentColor;--color-hover:currentColor;--icon-margin-top:0;--icon-margin-bottom:0;--icon-padding-top:0;--icon-padding-end:0;--icon-padding-bottom:0;--icon-padding-start:0;--margin-top:0;--margin-end:0;--margin-bottom:0;--margin-start:0;--min-width:auto;--min-height:auto;--padding-top:0;--padding-end:0;--padding-bottom:0;--padding-start:0;--opacity:1;--ripple-color:currentColor;--transition:background-color, opacity 100ms linear;display:none;min-width:var(--min-width);min-height:var(--min-height);color:var(--color);font-family:var(--ion-font-family, inherit);text-align:center;text-decoration:none;text-overflow:ellipsis;text-transform:none;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-font-kerning:none;font-kerning:none}ion-ripple-effect{color:var(--ripple-color)}:host(.ion-color) .button-native{color:var(--ion-color-base)}:host(.show-back-button){display:block}:host(.back-button-disabled){cursor:default;opacity:0.5;pointer-events:none}.button-native{border-radius:var(--border-radius);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-margin-start:var(--margin-start);margin-inline-start:var(--margin-start);-webkit-margin-end:var(--margin-end);margin-inline-end:var(--margin-end);margin-top:var(--margin-top);margin-bottom:var(--margin-bottom);-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;display:block;position:relative;width:100%;height:100%;min-height:inherit;-webkit-transition:var(--transition);transition:var(--transition);border:0;outline:none;background:var(--background);line-height:1;cursor:pointer;opacity:var(--opacity);overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.button-inner{display:-ms-flexbox;display:flex;position:relative;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-negative:0;flex-shrink:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;z-index:1}ion-icon{-webkit-padding-start:var(--icon-padding-start);padding-inline-start:var(--icon-padding-start);-webkit-padding-end:var(--icon-padding-end);padding-inline-end:var(--icon-padding-end);padding-top:var(--icon-padding-top);padding-bottom:var(--icon-padding-bottom);-webkit-margin-start:var(--icon-margin-start);margin-inline-start:var(--icon-margin-start);-webkit-margin-end:var(--icon-margin-end);margin-inline-end:var(--icon-margin-end);margin-top:var(--icon-margin-top);margin-bottom:var(--icon-margin-bottom);display:inherit;font-size:var(--icon-font-size);font-weight:var(--icon-font-weight);pointer-events:none}:host(.ion-focused) .button-native{color:var(--color-focused)}:host(.ion-focused) .button-native::after{background:var(--background-focused);opacity:var(--background-focused-opacity)}.button-native::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0}@media (any-hover: hover){:host(:hover) .button-native{color:var(--color-hover)}:host(:hover) .button-native::after{background:var(--background-hover);opacity:var(--background-hover-opacity)}}:host(.ion-color.ion-focused) .button-native{color:var(--ion-color-base)}@media (any-hover: hover){:host(.ion-color:hover) .button-native{color:var(--ion-color-base)}}:host(.in-toolbar:not(.in-toolbar-color)){color:var(--ion-toolbar-color, var(--color))}:host{--background-hover:transparent;--background-hover-opacity:1;--background-focused:currentColor;--background-focused-opacity:.1;--border-radius:4px;--color:var(--ion-color-primary, #3880ff);--icon-margin-end:1px;--icon-margin-start:-4px;--icon-font-size:1.6em;--min-height:32px;font-size:clamp(17px, 1.0625rem, 21.998px)}.button-native{-webkit-transform:translateZ(0);transform:translateZ(0);overflow:visible;z-index:99}:host(.ion-activated) .button-native{opacity:0.4}@media (any-hover: hover){:host(:hover){opacity:0.6}}";
15
15
  const IonBackButtonIosStyle0 = backButtonIosCss;
@@ -5,9 +5,9 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-ea0555d6.js');
8
+ const index = require('./index-22617dd6.js');
9
9
  const gestureController = require('./gesture-controller-c40c045a.js');
10
- const ionicGlobal = require('./ionic-global-a54cbba1.js');
10
+ const ionicGlobal = require('./ionic-global-c5503e93.js');
11
11
 
12
12
  const backdropIosCss = ":host{left:0;right:0;top:0;bottom:0;display:block;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);contain:strict;cursor:pointer;opacity:0.01;-ms-touch-action:none;touch-action:none;z-index:2}:host(.backdrop-hide){background:transparent}:host(.backdrop-no-tappable){cursor:auto}:host{background-color:var(--ion-backdrop-color, #000)}";
13
13
  const IonBackdropIosStyle0 = backdropIosCss;