@ionic/core 8.7.17-dev.11772118942.181221d4 → 8.7.17-dev.11772568074.1d7a4aea

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 (520) hide show
  1. package/components/action-sheet.js +1 -561
  2. package/components/alert.js +1 -610
  3. package/components/animation.js +1 -817
  4. package/components/backdrop.js +1 -72
  5. package/components/button-active.js +1 -64
  6. package/components/button.js +1 -303
  7. package/components/buttons.js +1 -56
  8. package/components/capacitor.js +1 -10
  9. package/components/checkbox.js +1 -261
  10. package/components/config.js +1 -192
  11. package/components/content.js +1 -475
  12. package/components/cubic-bezier.js +1 -87
  13. package/components/data.js +1 -1635
  14. package/components/dir.js +1 -15
  15. package/components/focus-visible.js +1 -72
  16. package/components/framework-delegate.js +1 -137
  17. package/components/gesture-controller.js +1 -192
  18. package/components/haptic.js +1 -155
  19. package/components/hardware-back-button.js +1 -112
  20. package/components/header.js +1 -417
  21. package/components/helpers.js +1 -336
  22. package/components/icon.js +1 -456
  23. package/components/index.d.ts +2 -0
  24. package/components/index.js +1 -115
  25. package/components/index2.js +1 -416
  26. package/components/index3.js +1 -452
  27. package/components/index4.js +1 -118
  28. package/components/index5.js +1 -303
  29. package/components/index6.js +1 -29
  30. package/components/index7.js +1 -164
  31. package/components/index8.js +1 -125
  32. package/components/index9.js +1 -4
  33. package/components/input-shims.js +1 -624
  34. package/components/input.utils.js +1 -144
  35. package/components/ion-accordion-group.js +1 -269
  36. package/components/ion-accordion.js +1 -457
  37. package/components/ion-action-sheet.js +1 -6
  38. package/components/ion-alert.js +1 -6
  39. package/components/ion-app.js +1 -128
  40. package/components/ion-avatar.js +1 -41
  41. package/components/ion-back-button.js +1 -131
  42. package/components/ion-backdrop.js +1 -6
  43. package/components/ion-badge.js +1 -47
  44. package/components/ion-breadcrumb.js +1 -137
  45. package/components/ion-breadcrumbs.js +1 -164
  46. package/components/ion-button.js +1 -6
  47. package/components/ion-buttons.js +1 -6
  48. package/components/ion-card-content.js +1 -45
  49. package/components/ion-card-header.js +1 -56
  50. package/components/ion-card-subtitle.js +1 -48
  51. package/components/ion-card-title.js +1 -48
  52. package/components/ion-card.js +1 -107
  53. package/components/ion-checkbox.js +1 -6
  54. package/components/ion-chip.js +1 -66
  55. package/components/ion-col.js +1 -163
  56. package/components/ion-content.js +1 -6
  57. package/components/ion-datetime-button.js +1 -384
  58. package/components/ion-datetime.js +1 -2046
  59. package/components/ion-fab-button.js +1 -151
  60. package/components/ion-fab-list.js +1 -66
  61. package/components/ion-fab.js +1 -101
  62. package/components/ion-footer.js +1 -159
  63. package/components/ion-grid.js +1 -46
  64. package/components/ion-header.js +1 -6
  65. package/components/ion-icon.js +1 -6
  66. package/components/ion-img.js +1 -124
  67. package/components/ion-infinite-scroll-content.js +1 -70
  68. package/components/ion-infinite-scroll.js +1 -236
  69. package/components/ion-input-otp.js +1 -683
  70. package/components/ion-input-password-toggle.js +1 -129
  71. package/components/ion-input.js +1 -617
  72. package/components/ion-item-divider.js +1 -59
  73. package/components/ion-item-group.js +1 -46
  74. package/components/ion-item-option.js +1 -91
  75. package/components/ion-item-options.js +1 -73
  76. package/components/ion-item-sliding.js +1 -458
  77. package/components/ion-item.js +1 -6
  78. package/components/ion-label.js +1 -6
  79. package/components/ion-list-header.js +1 -6
  80. package/components/ion-list.js +1 -6
  81. package/components/ion-loading.js +1 -344
  82. package/components/ion-menu-button.js +1 -110
  83. package/components/ion-menu-toggle.js +1 -64
  84. package/components/ion-menu.js +1 -745
  85. package/components/ion-modal.js +1 -6
  86. package/components/ion-nav-link.js +1 -64
  87. package/components/ion-nav.js +1 -956
  88. package/components/ion-note.js +1 -47
  89. package/components/ion-picker-column-option.js +1 -6
  90. package/components/ion-picker-column.js +1 -6
  91. package/components/ion-picker-legacy-column.js +1 -6
  92. package/components/ion-picker-legacy.js +1 -343
  93. package/components/ion-picker.js +1 -6
  94. package/components/ion-popover.js +1 -6
  95. package/components/ion-progress-bar.js +1 -101
  96. package/components/ion-radio-group.js +1 -6
  97. package/components/ion-radio.js +1 -6
  98. package/components/ion-range.js +1 -853
  99. package/components/ion-refresher-content.js +1 -89
  100. package/components/ion-refresher.js +1 -751
  101. package/components/ion-reorder-group.js +1 -322
  102. package/components/ion-reorder.js +1 -60
  103. package/components/ion-ripple-effect.js +1 -6
  104. package/components/ion-route-redirect.js +1 -45
  105. package/components/ion-route.js +1 -74
  106. package/components/ion-router-link.js +1 -61
  107. package/components/ion-router-outlet.js +1 -227
  108. package/components/ion-router.js +1 -841
  109. package/components/ion-row.js +1 -36
  110. package/components/ion-searchbar.js +1 -530
  111. package/components/ion-segment-button.js +1 -174
  112. package/components/ion-segment-content.js +1 -35
  113. package/components/ion-segment-view.js +1 -148
  114. package/components/ion-segment.js +1 -602
  115. package/components/ion-select-modal.js +1 -6
  116. package/components/ion-select-option.js +1 -46
  117. package/components/ion-select-popover.js +1 -6
  118. package/components/ion-select.js +1 -1037
  119. package/components/ion-skeleton-text.js +1 -65
  120. package/components/ion-spinner.js +1 -6
  121. package/components/ion-split-pane.js +1 -197
  122. package/components/ion-tab-bar.js +1 -115
  123. package/components/ion-tab-button.js +1 -128
  124. package/components/ion-tab.js +1 -91
  125. package/components/ion-tabs.js +1 -205
  126. package/components/ion-text.js +1 -42
  127. package/components/ion-textarea.js +1 -554
  128. package/components/ion-thumbnail.js +1 -36
  129. package/components/ion-title.js +1 -6
  130. package/components/ion-toast.js +1 -941
  131. package/components/ion-toggle.js +1 -361
  132. package/components/ion-toolbar.js +1 -6
  133. package/components/ionic-global.js +1 -144
  134. package/components/ios.transition.js +1 -672
  135. package/components/item.js +1 -302
  136. package/components/keyboard-controller.js +1 -162
  137. package/components/keyboard.js +1 -141
  138. package/components/keyboard2.js +1 -76
  139. package/components/label.js +1 -100
  140. package/components/list-header.js +1 -47
  141. package/components/list.js +1 -68
  142. package/components/lock-controller.js +1 -35
  143. package/components/md.transition.js +1 -51
  144. package/components/menu-toggle-util.js +1 -9
  145. package/components/modal.js +1 -2674
  146. package/components/notch-controller.js +1 -150
  147. package/components/overlays.js +1 -912
  148. package/components/picker-column-option.js +1 -136
  149. package/components/picker-column.js +1 -595
  150. package/components/picker-column2.js +1 -377
  151. package/components/picker.js +1 -498
  152. package/components/popover.js +1 -1502
  153. package/components/radio-group.js +1 -287
  154. package/components/radio.js +1 -229
  155. package/components/refresher.utils.js +1 -193
  156. package/components/ripple-effect.js +1 -109
  157. package/components/select-modal.js +1 -196
  158. package/components/select-popover.js +1 -189
  159. package/components/spinner.js +1 -224
  160. package/components/status-tap.js +1 -36
  161. package/components/swipe-back.js +1 -75
  162. package/components/theme.js +1 -40
  163. package/components/title.js +1 -70
  164. package/components/toolbar.js +1 -89
  165. package/components/validity.js +1 -14
  166. package/components/watch-options.js +1 -44
  167. package/dist/cjs/{animation-Bt3H9L1C.js → animation-Dg4yiuR2.js} +1 -1
  168. package/dist/cjs/app-globals-CLI8xCmk.js +11 -0
  169. package/dist/cjs/{button-active-CMc8cD90.js → button-active-FscMI17-.js} +1 -1
  170. package/dist/cjs/{config-C5fsO43a.js → config-BukYi_pW.js} +1 -1
  171. package/dist/cjs/{data-JwZKaIQB.js → data-BYlBjkMU.js} +1 -1
  172. package/dist/cjs/{framework-delegate-DMJRBuDi.js → framework-delegate-CRgp8o_p.js} +1 -1
  173. package/dist/cjs/{hardware-back-button-VCK4V3mG.js → hardware-back-button-C4rMJ5uI.js} +1 -1
  174. package/dist/cjs/{helpers-DrTqNghc.js → helpers-CxTYJdbT.js} +1 -1
  175. package/dist/cjs/{index-094mMFB-.js → index-C845Ti6K.js} +4 -4
  176. package/dist/cjs/{index-DrMUZJj6.js → index-CFUwM5x_.js} +5 -5
  177. package/dist/cjs/{index-D6Wc6v08.js → index-CqT-2gKy.js} +503 -382
  178. package/dist/cjs/{index-CO6eryBo.js → index-MbaBbWXk.js} +2 -2
  179. package/dist/cjs/{index-C534ULug.js → index-YcSftOMz.js} +2 -2
  180. package/dist/cjs/index.cjs.js +12 -12
  181. package/dist/cjs/{input-shims-CW0KUFTQ.js → input-shims-DlFhYYTs.js} +3 -3
  182. package/dist/cjs/{input.utils-B_QROI2g.js → input.utils-DmeJ8dmo.js} +2 -2
  183. package/dist/cjs/ion-accordion_2.cjs.entry.js +23 -15
  184. package/dist/cjs/ion-action-sheet.cjs.entry.js +21 -15
  185. package/dist/cjs/ion-alert.cjs.entry.js +25 -17
  186. package/dist/cjs/ion-app_8.cjs.entry.js +44 -40
  187. package/dist/cjs/ion-avatar_3.cjs.entry.js +12 -12
  188. package/dist/cjs/ion-back-button.cjs.entry.js +7 -7
  189. package/dist/cjs/ion-backdrop.cjs.entry.js +6 -6
  190. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +20 -14
  191. package/dist/cjs/ion-button_2.cjs.entry.js +36 -18
  192. package/dist/cjs/ion-card_5.cjs.entry.js +23 -23
  193. package/dist/cjs/ion-checkbox.cjs.entry.js +7 -7
  194. package/dist/cjs/ion-chip.cjs.entry.js +6 -6
  195. package/dist/cjs/ion-col_3.cjs.entry.js +8 -8
  196. package/dist/cjs/ion-datetime-button.cjs.entry.js +8 -8
  197. package/dist/cjs/ion-datetime_3.cjs.entry.js +67 -39
  198. package/dist/cjs/ion-fab_3.cjs.entry.js +17 -13
  199. package/dist/cjs/ion-img.cjs.entry.js +8 -6
  200. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +17 -13
  201. package/dist/cjs/ion-input-otp.cjs.entry.js +16 -10
  202. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +9 -7
  203. package/dist/cjs/ion-input.cjs.entry.js +21 -13
  204. package/dist/cjs/ion-item-option_3.cjs.entry.js +17 -15
  205. package/dist/cjs/ion-item_8.cjs.entry.js +42 -36
  206. package/dist/cjs/ion-loading.cjs.entry.js +18 -14
  207. package/dist/cjs/ion-menu_3.cjs.entry.js +30 -22
  208. package/dist/cjs/ion-modal.cjs.entry.js +55 -40
  209. package/dist/cjs/ion-nav_2.cjs.entry.js +14 -10
  210. package/dist/cjs/ion-picker-column-option.cjs.entry.js +10 -8
  211. package/dist/cjs/ion-picker-column.cjs.entry.js +11 -7
  212. package/dist/cjs/ion-picker.cjs.entry.js +6 -6
  213. package/dist/cjs/ion-popover.cjs.entry.js +21 -15
  214. package/dist/cjs/ion-progress-bar.cjs.entry.js +7 -7
  215. package/dist/cjs/ion-radio_2.cjs.entry.js +17 -13
  216. package/dist/cjs/ion-range.cjs.entry.js +29 -15
  217. package/dist/cjs/ion-refresher_2.cjs.entry.js +45 -14
  218. package/dist/cjs/ion-reorder_2.cjs.entry.js +13 -11
  219. package/dist/cjs/ion-ripple-effect.cjs.entry.js +4 -4
  220. package/dist/cjs/ion-route_4.cjs.entry.js +20 -10
  221. package/dist/cjs/ion-searchbar.cjs.entry.js +22 -12
  222. package/dist/cjs/ion-segment-content.cjs.entry.js +3 -3
  223. package/dist/cjs/ion-segment-view.cjs.entry.js +5 -5
  224. package/dist/cjs/ion-segment_2.cjs.entry.js +26 -16
  225. package/dist/cjs/ion-select-modal.cjs.entry.js +12 -12
  226. package/dist/cjs/ion-select_3.cjs.entry.js +29 -21
  227. package/dist/cjs/ion-spinner.cjs.entry.js +4 -4
  228. package/dist/cjs/ion-split-pane.cjs.entry.js +15 -9
  229. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +14 -12
  230. package/dist/cjs/ion-tab_2.cjs.entry.js +10 -8
  231. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  232. package/dist/cjs/ion-textarea.cjs.entry.js +18 -12
  233. package/dist/cjs/ion-toast.cjs.entry.js +21 -15
  234. package/dist/cjs/ion-toggle.cjs.entry.js +10 -8
  235. package/dist/cjs/{ionic-global-HMVqOFGO.js → ionic-global-Bc3kJi1Z.js} +1 -1
  236. package/dist/cjs/ionic.cjs.js +5 -5
  237. package/dist/cjs/{ios.transition-BOt_uW73.js → ios.transition-trBiC95R.js} +4 -4
  238. package/dist/cjs/loader.cjs.js +4 -4
  239. package/dist/cjs/{md.transition-Dt968VXB.js → md.transition-CUQECuvD.js} +4 -4
  240. package/dist/cjs/{notch-controller-Bzqhjm4f.js → notch-controller-sD-lTpdc.js} +1 -1
  241. package/dist/cjs/{overlays-B2b-TTbl.js → overlays-C2jiBSNQ.js} +5 -5
  242. package/dist/cjs/{status-tap-g0sWWkXk.js → status-tap-CCJk5VgT.js} +3 -3
  243. package/dist/cjs/{swipe-back-BIayeNOD.js → swipe-back-BGhTQ1CU.js} +2 -2
  244. package/dist/collection/collection-manifest.json +2 -2
  245. package/dist/collection/components/accordion-group/accordion-group.js +4 -2
  246. package/dist/collection/components/action-sheet/action-sheet.js +20 -10
  247. package/dist/collection/components/alert/alert.js +24 -12
  248. package/dist/collection/components/back-button/back-button.js +4 -2
  249. package/dist/collection/components/badge/badge.js +2 -1
  250. package/dist/collection/components/breadcrumb/breadcrumb.js +8 -4
  251. package/dist/collection/components/breadcrumbs/breadcrumbs.js +4 -2
  252. package/dist/collection/components/button/button.js +6 -3
  253. package/dist/collection/components/card/card.js +6 -3
  254. package/dist/collection/components/card-header/card-header.js +2 -1
  255. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -1
  256. package/dist/collection/components/card-title/card-title.js +2 -1
  257. package/dist/collection/components/checkbox/checkbox.js +4 -2
  258. package/dist/collection/components/chip/chip.js +2 -1
  259. package/dist/collection/components/content/content.js +8 -4
  260. package/dist/collection/components/datetime/datetime.js +34 -15
  261. package/dist/collection/components/datetime-button/datetime-button.js +2 -1
  262. package/dist/collection/components/fab-button/fab-button.js +6 -3
  263. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +4 -2
  264. package/dist/collection/components/input/input.js +11 -6
  265. package/dist/collection/components/input-otp/input-otp.js +8 -4
  266. package/dist/collection/components/input-password-toggle/input-password-toggle.js +4 -2
  267. package/dist/collection/components/item/item.js +6 -3
  268. package/dist/collection/components/item-divider/item-divider.js +2 -1
  269. package/dist/collection/components/item-option/item-option.js +2 -1
  270. package/dist/collection/components/item-options/item-options.js +2 -1
  271. package/dist/collection/components/item-sliding/item-sliding.js +2 -1
  272. package/dist/collection/components/label/label.js +6 -3
  273. package/dist/collection/components/list-header/list-header.js +2 -1
  274. package/dist/collection/components/loading/loading.js +22 -11
  275. package/dist/collection/components/menu/menu.js +10 -5
  276. package/dist/collection/components/menu-button/menu-button.js +2 -1
  277. package/dist/collection/components/modal/gestures/sheet.js +32 -21
  278. package/dist/collection/components/modal/modal.js +35 -20
  279. package/dist/collection/components/nav/nav.js +89 -45
  280. package/dist/collection/components/nav-link/nav-link.js +9 -5
  281. package/dist/collection/components/note/note.js +2 -1
  282. package/dist/collection/components/picker/picker.js +2 -1
  283. package/dist/collection/components/picker-column/picker-column.js +6 -3
  284. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -1
  285. package/dist/collection/components/picker-legacy/picker.js +24 -12
  286. package/dist/collection/components/picker-legacy-column/picker-column.js +4 -2
  287. package/dist/collection/components/popover/popover.js +33 -17
  288. package/dist/collection/components/progress-bar/progress-bar.js +2 -1
  289. package/dist/collection/components/radio/radio.js +2 -1
  290. package/dist/collection/components/radio-group/radio-group.js +6 -3
  291. package/dist/collection/components/range/range.js +14 -7
  292. package/dist/collection/components/refresher/refresher.js +73 -5
  293. package/dist/collection/components/refresher-content/refresher-content.js +8 -4
  294. package/dist/collection/components/reorder-group/reorder-group.js +6 -3
  295. package/dist/collection/components/route/route.js +4 -2
  296. package/dist/collection/components/router/router.js +10 -5
  297. package/dist/collection/components/router-link/router-link.js +6 -3
  298. package/dist/collection/components/router-outlet/router-outlet.js +18 -9
  299. package/dist/collection/components/searchbar/searchbar.js +11 -6
  300. package/dist/collection/components/segment/segment.js +10 -5
  301. package/dist/collection/components/segment-button/segment-button.js +4 -2
  302. package/dist/collection/components/segment-view/segment-view.js +2 -1
  303. package/dist/collection/components/select/select.js +10 -5
  304. package/dist/collection/components/select-modal/select-modal.js +2 -1
  305. package/dist/collection/components/select-popover/select-popover.js +2 -1
  306. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -1
  307. package/dist/collection/components/spinner/spinner.js +4 -2
  308. package/dist/collection/components/tab/tab.js +4 -2
  309. package/dist/collection/components/tab-bar/tab-bar.js +4 -2
  310. package/dist/collection/components/tab-button/tab-button.js +4 -2
  311. package/dist/collection/components/tabs/tabs.js +4 -2
  312. package/dist/collection/components/text/text.js +2 -1
  313. package/dist/collection/components/textarea/textarea.js +6 -3
  314. package/dist/collection/components/title/title.js +4 -2
  315. package/dist/collection/components/toast/toast.js +34 -17
  316. package/dist/collection/components/toggle/toggle.js +4 -2
  317. package/dist/collection/components/toolbar/toolbar.js +2 -1
  318. package/dist/docs.d.ts +37 -0
  319. package/dist/docs.json +835 -381
  320. package/dist/esm/{animation-Dt8bGnA-.js → animation-CnGMT4ji.js} +1 -1
  321. package/dist/esm/app-globals-DhZjtldk.js +9 -0
  322. package/dist/esm/{button-active-L570Swow.js → button-active-BBx21brx.js} +1 -1
  323. package/dist/esm/{config-mCdtaoPe.js → config-TO1rZH52.js} +1 -1
  324. package/dist/esm/{data-DCORV9FH.js → data-B9iGR5YO.js} +1 -1
  325. package/dist/esm/{framework-delegate-BYawdMXj.js → framework-delegate-CyxE1S_P.js} +1 -1
  326. package/dist/esm/{hardware-back-button-CPLxO-Ev.js → hardware-back-button-CTe4XmL7.js} +1 -1
  327. package/dist/esm/{helpers-DEn3pfjm.js → helpers-Tl8jw6S2.js} +1 -1
  328. package/dist/esm/{index-r2D9DEro.js → index-B-hkiOUh.js} +4 -4
  329. package/dist/esm/{index-CvDIirVx.js → index-B2KwgBLx.js} +5 -5
  330. package/dist/esm/{index-ceb5RaMT.js → index-BtUdxPjv.js} +2 -2
  331. package/dist/esm/{index-C8IsBmNU.js → index-IGIE5vDm.js} +503 -382
  332. package/dist/esm/{index-Bs3kT4bc.js → index-hW6eNZ3o.js} +2 -2
  333. package/dist/esm/index.js +12 -12
  334. package/dist/esm/{input-shims-DyOpfTg6.js → input-shims-C1hAaHcP.js} +3 -3
  335. package/dist/esm/{input.utils-DrvTa8gz.js → input.utils-Bxa_DQ7-.js} +2 -2
  336. package/dist/esm/ion-accordion_2.entry.js +23 -15
  337. package/dist/esm/ion-action-sheet.entry.js +21 -15
  338. package/dist/esm/ion-alert.entry.js +25 -17
  339. package/dist/esm/ion-app_8.entry.js +44 -40
  340. package/dist/esm/ion-avatar_3.entry.js +12 -12
  341. package/dist/esm/ion-back-button.entry.js +7 -7
  342. package/dist/esm/ion-backdrop.entry.js +6 -6
  343. package/dist/esm/ion-breadcrumb_2.entry.js +20 -14
  344. package/dist/esm/ion-button_2.entry.js +36 -18
  345. package/dist/esm/ion-card_5.entry.js +23 -23
  346. package/dist/esm/ion-checkbox.entry.js +7 -7
  347. package/dist/esm/ion-chip.entry.js +6 -6
  348. package/dist/esm/ion-col_3.entry.js +8 -8
  349. package/dist/esm/ion-datetime-button.entry.js +8 -8
  350. package/dist/esm/ion-datetime_3.entry.js +67 -39
  351. package/dist/esm/ion-fab_3.entry.js +17 -13
  352. package/dist/esm/ion-img.entry.js +8 -6
  353. package/dist/esm/ion-infinite-scroll_2.entry.js +17 -13
  354. package/dist/esm/ion-input-otp.entry.js +16 -10
  355. package/dist/esm/ion-input-password-toggle.entry.js +9 -7
  356. package/dist/esm/ion-input.entry.js +21 -13
  357. package/dist/esm/ion-item-option_3.entry.js +17 -15
  358. package/dist/esm/ion-item_8.entry.js +42 -36
  359. package/dist/esm/ion-loading.entry.js +18 -14
  360. package/dist/esm/ion-menu_3.entry.js +30 -22
  361. package/dist/esm/ion-modal.entry.js +55 -40
  362. package/dist/esm/ion-nav_2.entry.js +14 -10
  363. package/dist/esm/ion-picker-column-option.entry.js +10 -8
  364. package/dist/esm/ion-picker-column.entry.js +11 -7
  365. package/dist/esm/ion-picker.entry.js +6 -6
  366. package/dist/esm/ion-popover.entry.js +21 -15
  367. package/dist/esm/ion-progress-bar.entry.js +7 -7
  368. package/dist/esm/ion-radio_2.entry.js +17 -13
  369. package/dist/esm/ion-range.entry.js +29 -15
  370. package/dist/esm/ion-refresher_2.entry.js +45 -14
  371. package/dist/esm/ion-reorder_2.entry.js +13 -11
  372. package/dist/esm/ion-ripple-effect.entry.js +4 -4
  373. package/dist/esm/ion-route_4.entry.js +20 -10
  374. package/dist/esm/ion-searchbar.entry.js +22 -12
  375. package/dist/esm/ion-segment-content.entry.js +3 -3
  376. package/dist/esm/ion-segment-view.entry.js +5 -5
  377. package/dist/esm/ion-segment_2.entry.js +26 -16
  378. package/dist/esm/ion-select-modal.entry.js +12 -12
  379. package/dist/esm/ion-select_3.entry.js +29 -21
  380. package/dist/esm/ion-spinner.entry.js +4 -4
  381. package/dist/esm/ion-split-pane.entry.js +15 -9
  382. package/dist/esm/ion-tab-bar_2.entry.js +14 -12
  383. package/dist/esm/ion-tab_2.entry.js +10 -8
  384. package/dist/esm/ion-text.entry.js +4 -4
  385. package/dist/esm/ion-textarea.entry.js +18 -12
  386. package/dist/esm/ion-toast.entry.js +21 -15
  387. package/dist/esm/ion-toggle.entry.js +10 -8
  388. package/dist/esm/{ionic-global-CDrldh-5.js → ionic-global-DfbeLwcV.js} +1 -1
  389. package/dist/esm/ionic.js +6 -6
  390. package/dist/esm/{ios.transition-BDzw0_Hm.js → ios.transition--aMF-pDH.js} +4 -4
  391. package/dist/esm/loader.js +5 -5
  392. package/dist/esm/{md.transition-BzDYi3qq.js → md.transition-BEVbfm8j.js} +4 -4
  393. package/dist/esm/{notch-controller-BwelN_JM.js → notch-controller-DAcvKU57.js} +1 -1
  394. package/dist/esm/{overlays-D5YkFThA.js → overlays-F8GHPo-e.js} +5 -5
  395. package/dist/esm/{status-tap-5DQ7Fc4V.js → status-tap-BfJqFSLF.js} +3 -3
  396. package/dist/esm/{swipe-back-BKw2CAHc.js → swipe-back-BZBFwTQV.js} +2 -2
  397. package/dist/html.html-data.json +109 -109
  398. package/dist/ionic/index.esm.js +1 -1
  399. package/dist/ionic/ionic.esm.js +1 -1
  400. package/dist/ionic/{p-316c0420.entry.js → p-025d2d32.entry.js} +1 -1
  401. package/dist/ionic/p-02acdef4.entry.js +4 -0
  402. package/dist/ionic/p-04e2c388.entry.js +4 -0
  403. package/dist/ionic/{p-370e4237.entry.js → p-074344b8.entry.js} +1 -1
  404. package/dist/ionic/p-0761b4d3.entry.js +4 -0
  405. package/dist/ionic/p-13ade5c8.entry.js +4 -0
  406. package/dist/ionic/p-1b02923f.entry.js +4 -0
  407. package/dist/ionic/p-1bd477a9.entry.js +4 -0
  408. package/dist/ionic/{p-d2489bf2.entry.js → p-1fa1406c.entry.js} +1 -1
  409. package/dist/ionic/{p-46d74291.entry.js → p-1fd588a7.entry.js} +1 -1
  410. package/dist/ionic/p-239a27a4.entry.js +4 -0
  411. package/dist/ionic/{p-94de5cfa.entry.js → p-277abec1.entry.js} +1 -1
  412. package/dist/ionic/{p-dd1aef77.entry.js → p-28d7852f.entry.js} +1 -1
  413. package/dist/ionic/{p-49d06882.entry.js → p-301c43f8.entry.js} +1 -1
  414. package/dist/ionic/{p-79bd78f9.entry.js → p-370a60ee.entry.js} +1 -1
  415. package/dist/ionic/p-3e143d1d.entry.js +4 -0
  416. package/dist/ionic/p-4431ef7e.entry.js +4 -0
  417. package/dist/ionic/p-463767ce.entry.js +4 -0
  418. package/dist/ionic/p-4f888343.entry.js +4 -0
  419. package/dist/ionic/p-51c11c47.entry.js +4 -0
  420. package/dist/ionic/p-56050077.entry.js +4 -0
  421. package/dist/ionic/p-6a3a5aae.entry.js +4 -0
  422. package/dist/ionic/p-6b97f2a3.entry.js +4 -0
  423. package/dist/ionic/{p-51a60e0f.entry.js → p-7c72d482.entry.js} +1 -1
  424. package/dist/ionic/p-7d20f4f8.entry.js +4 -0
  425. package/dist/ionic/{p-11aa58d6.entry.js → p-80cac7a2.entry.js} +1 -1
  426. package/dist/ionic/p-91fc7352.entry.js +4 -0
  427. package/dist/ionic/p-93845421.entry.js +4 -0
  428. package/dist/ionic/{p-3a6caca9.entry.js → p-964090ef.entry.js} +1 -1
  429. package/dist/ionic/p-96a2e768.entry.js +4 -0
  430. package/dist/ionic/{p-d126e8d3.entry.js → p-9745651b.entry.js} +1 -1
  431. package/dist/ionic/{p-f9061316.entry.js → p-9802c88e.entry.js} +1 -1
  432. package/dist/ionic/{p-582824c5.entry.js → p-9833cf63.entry.js} +1 -1
  433. package/dist/ionic/{p-675b1a31.entry.js → p-9fae83d8.entry.js} +1 -1
  434. package/dist/ionic/{p-CwgG81ZD.js → p-B8xlpH8p.js} +1 -1
  435. package/dist/ionic/{p-C7hRNDhM.js → p-BAt5H1ac.js} +1 -1
  436. package/dist/ionic/p-BW_TRJm8.js +4 -0
  437. package/dist/ionic/{p-DDb5r57F.js → p-Bum7H1fw.js} +1 -1
  438. package/dist/ionic/{p-D0dMcSkw.js → p-BvFYtOdE.js} +1 -1
  439. package/dist/ionic/{p-Dc45iWE4.js → p-BxIcPWoV.js} +1 -1
  440. package/dist/ionic/{p-BYEqWnSg.js → p-C0JvVFMv.js} +1 -1
  441. package/dist/ionic/{p-CTfR9YZG.js → p-CGmVTdWh.js} +1 -1
  442. package/dist/ionic/{p-BOVrCkpJ.js → p-CYbRmDdy.js} +1 -1
  443. package/dist/ionic/{p-D-eFFUkA.js → p-CmFz1Mjc.js} +1 -1
  444. package/dist/ionic/p-CtA-yJYy.js +4 -0
  445. package/dist/ionic/p-D8HJQ1qq.js +4 -0
  446. package/dist/ionic/{p-B0q1YL7N.js → p-DB_iPQC-.js} +1 -1
  447. package/dist/ionic/{p-DNcfiJwE.js → p-DLbbmF9h.js} +1 -1
  448. package/dist/ionic/{p-DdR6rpbR.js → p-DTPR1Wpn.js} +1 -1
  449. package/dist/ionic/{p-DCv9sLH2.js → p-DjriolRs.js} +1 -1
  450. package/dist/ionic/p-DtVZDHlS.js +4 -0
  451. package/dist/ionic/{p-QHYY4sjU.js → p-GWUGgWx6.js} +1 -1
  452. package/dist/ionic/p-IGIE5vDm.js +5 -0
  453. package/dist/ionic/{p-BFvmZNyx.js → p-NFFyoJ4Q.js} +1 -1
  454. package/dist/ionic/{p-86f53961.entry.js → p-a287e18e.entry.js} +1 -1
  455. package/dist/ionic/p-a805674e.entry.js +4 -0
  456. package/dist/ionic/p-a81ae2cd.entry.js +4 -0
  457. package/dist/ionic/{p-da7d04cc.entry.js → p-a84f2d21.entry.js} +1 -1
  458. package/dist/ionic/{p-dbbe606a.entry.js → p-b2d5238b.entry.js} +1 -1
  459. package/dist/ionic/{p-d1f54e28.entry.js → p-b440381f.entry.js} +1 -1
  460. package/dist/ionic/{p-72c38b88.entry.js → p-b4d52b58.entry.js} +1 -1
  461. package/dist/ionic/{p-2a939845.entry.js → p-b67a2114.entry.js} +1 -1
  462. package/dist/ionic/{p-c73627c8.entry.js → p-bced1f3e.entry.js} +1 -1
  463. package/dist/ionic/{p-9a2d390d.entry.js → p-c1c9b2bb.entry.js} +1 -1
  464. package/dist/ionic/{p-f8f22cc0.entry.js → p-c3e65e45.entry.js} +1 -1
  465. package/dist/ionic/p-c76cc21d.entry.js +4 -0
  466. package/dist/ionic/{p-b0a7585c.entry.js → p-ca31010f.entry.js} +1 -1
  467. package/dist/ionic/p-cbf245b5.entry.js +4 -0
  468. package/dist/ionic/p-d68b665a.entry.js +4 -0
  469. package/dist/ionic/{p-9575b654.entry.js → p-e663bc5a.entry.js} +1 -1
  470. package/dist/ionic/p-efe86ed9.entry.js +4 -0
  471. package/dist/ionic/{p-ac4eb91d.entry.js → p-f5dfb9a3.entry.js} +1 -1
  472. package/dist/ionic/{p-DbQ5QkTP.js → p-gbVXD275.js} +1 -1
  473. package/dist/ionic/p-hNN3VvaC.js +4 -0
  474. package/dist/types/components/datetime/datetime.d.ts +9 -0
  475. package/dist/types/components/header/header.utils.d.ts +2 -1
  476. package/dist/types/components/modal/modal-interface.d.ts +5 -1
  477. package/dist/types/components/modal/modal.d.ts +5 -0
  478. package/dist/types/components/refresher/refresher-interface.d.ts +7 -0
  479. package/dist/types/components/refresher/refresher.d.ts +16 -3
  480. package/dist/types/components.d.ts +927 -189
  481. package/dist/types/interface.d.ts +1 -1
  482. package/dist/types/stencil-public-runtime.d.ts +126 -14
  483. package/dist/types/utils/gesture/listener.d.ts +2 -1
  484. package/hydrate/index.d.ts +12 -0
  485. package/hydrate/index.js +5202 -1327
  486. package/hydrate/index.mjs +5201 -1328
  487. package/package.json +2 -2
  488. package/dist/cjs/app-globals-Ciccnk9_.js +0 -10
  489. package/dist/esm/app-globals-BDSf8fOA.js +0 -8
  490. package/dist/ionic/p-012212e4.entry.js +0 -4
  491. package/dist/ionic/p-074839fc.entry.js +0 -4
  492. package/dist/ionic/p-0dfa5a37.entry.js +0 -4
  493. package/dist/ionic/p-0f418a37.entry.js +0 -4
  494. package/dist/ionic/p-11518b31.entry.js +0 -4
  495. package/dist/ionic/p-1838bed5.entry.js +0 -4
  496. package/dist/ionic/p-29721c43.entry.js +0 -4
  497. package/dist/ionic/p-31f7095f.entry.js +0 -4
  498. package/dist/ionic/p-34642fa1.entry.js +0 -4
  499. package/dist/ionic/p-35696017.entry.js +0 -4
  500. package/dist/ionic/p-40c261a3.entry.js +0 -4
  501. package/dist/ionic/p-4e41ea20.entry.js +0 -4
  502. package/dist/ionic/p-6241ce47.entry.js +0 -4
  503. package/dist/ionic/p-639dd543.entry.js +0 -4
  504. package/dist/ionic/p-6444c606.entry.js +0 -4
  505. package/dist/ionic/p-6d070558.entry.js +0 -4
  506. package/dist/ionic/p-7268efa5.entry.js +0 -4
  507. package/dist/ionic/p-7babec72.entry.js +0 -4
  508. package/dist/ionic/p-BKc55Xev.js +0 -4
  509. package/dist/ionic/p-Bmgaetn_.js +0 -4
  510. package/dist/ionic/p-C8IsBmNU.js +0 -5
  511. package/dist/ionic/p-CJxh_yLS.js +0 -4
  512. package/dist/ionic/p-DUt5fQmA.js +0 -4
  513. package/dist/ionic/p-DZRJwG4S.js +0 -4
  514. package/dist/ionic/p-a127bee2.entry.js +0 -4
  515. package/dist/ionic/p-b3d44509.entry.js +0 -4
  516. package/dist/ionic/p-cc45bcbc.entry.js +0 -4
  517. package/dist/ionic/p-d0a2a1ab.entry.js +0 -4
  518. package/dist/ionic/p-d3014190.entry.js +0 -4
  519. package/dist/ionic/p-db82892c.entry.js +0 -4
  520. package/dist/ionic/p-e1d1f3cc.entry.js +0 -4
@@ -1,675 +1,4 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { c as createAnimation } from './animation.js';
5
- import { g as getIonPageElement } from './index2.js';
6
-
7
- const DURATION = 540;
8
- // TODO(FW-2832): types
9
- const getClonedElement = (tagName) => {
10
- return document.querySelector(`${tagName}.ion-cloned-element`);
11
- };
12
- const shadow = (el) => {
13
- return el.shadowRoot || el;
14
- };
15
- const getLargeTitle = (refEl) => {
16
- const tabs = refEl.tagName === 'ION-TABS' ? refEl : refEl.querySelector('ion-tabs');
17
- const query = 'ion-content ion-header:not(.header-collapse-condense-inactive) ion-title.title-large';
18
- if (tabs != null) {
19
- const activeTab = tabs.querySelector('ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)');
20
- return activeTab != null ? activeTab.querySelector(query) : null;
21
- }
22
- return refEl.querySelector(query);
23
- };
24
- const getBackButton = (refEl, backDirection) => {
25
- const tabs = refEl.tagName === 'ION-TABS' ? refEl : refEl.querySelector('ion-tabs');
26
- let buttonsList = [];
27
- if (tabs != null) {
28
- const activeTab = tabs.querySelector('ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)');
29
- if (activeTab != null) {
30
- buttonsList = activeTab.querySelectorAll('ion-buttons');
31
- }
32
- }
33
- else {
34
- buttonsList = refEl.querySelectorAll('ion-buttons');
35
- }
36
- for (const buttons of buttonsList) {
37
- const parentHeader = buttons.closest('ion-header');
38
- const activeHeader = parentHeader && !parentHeader.classList.contains('header-collapse-condense-inactive');
39
- const backButton = buttons.querySelector('ion-back-button');
40
- const buttonsCollapse = buttons.classList.contains('buttons-collapse');
41
- const startSlot = buttons.slot === 'start' || buttons.slot === '';
42
- if (backButton !== null && startSlot && ((buttonsCollapse && activeHeader && backDirection) || !buttonsCollapse)) {
43
- return backButton;
44
- }
45
- }
46
- return null;
47
- };
48
- const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringEl, leavingEl) => {
49
- const enteringBackButton = getBackButton(enteringEl, backDirection);
50
- const leavingLargeTitle = getLargeTitle(leavingEl);
51
- const enteringLargeTitle = getLargeTitle(enteringEl);
52
- const leavingBackButton = getBackButton(leavingEl, backDirection);
53
- const shouldAnimationForward = enteringBackButton !== null && leavingLargeTitle !== null && !backDirection;
54
- const shouldAnimationBackward = enteringLargeTitle !== null && leavingBackButton !== null && backDirection;
55
- if (shouldAnimationForward) {
56
- const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
57
- const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
58
- const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
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();
61
- const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
62
- const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
63
- animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
64
- animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
65
- }
66
- else if (shouldAnimationBackward) {
67
- const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
68
- const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
69
- const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
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();
72
- const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
73
- const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
74
- animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
75
- animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
76
- }
77
- return {
78
- forward: shouldAnimationForward,
79
- backward: shouldAnimationBackward,
80
- };
81
- };
82
- const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, backButtonBox, backButtonTextEl, backButtonTextBox, largeTitleEl, largeTitleTextBox) => {
83
- var _a, _b;
84
- const BACK_BUTTON_START_OFFSET = rtl ? `calc(100% - ${backButtonBox.right + 4}px)` : `${backButtonBox.left - 4}px`;
85
- const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
86
- const ICON_ORIGIN_X = rtl ? 'left' : 'right';
87
- const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
88
- let WIDTH_SCALE = 1;
89
- let HEIGHT_SCALE = 1;
90
- let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
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
- /**
108
- * Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
109
- * to re-compute this here since the HEIGHT_SCALE may have changed.
110
- */
111
- TEXT_START_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
112
- }
113
- const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
114
- const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
115
- /**
116
- * We need to offset the container by the icon dimensions
117
- * so that the back button text aligns with the large title
118
- * text. Otherwise, the back button icon will align with the
119
- * large title text but the back button text will not.
120
- */
121
- const CONTAINER_START_TRANSLATE_X = rtl
122
- ? `${backButtonIconBox.width / 2 - (backButtonIconBox.right - backButtonBox.right)}px`
123
- : `${backButtonBox.left - backButtonIconBox.width / 2}px`;
124
- const CONTAINER_END_TRANSLATE_X = rtl ? `-${window.innerWidth - backButtonBox.right}px` : `${backButtonBox.left}px`;
125
- /**
126
- * Back button container should be
127
- * aligned to the top of the title container
128
- * so the texts overlap as the back button
129
- * text begins to fade in.
130
- */
131
- const CONTAINER_START_TRANSLATE_Y = `${largeTitleTextBox.top}px`;
132
- /**
133
- * The cloned back button should align exactly with the
134
- * real back button on the entering page otherwise there will
135
- * be a layout shift.
136
- */
137
- const CONTAINER_END_TRANSLATE_Y = `${backButtonBox.top}px`;
138
- /**
139
- * In the forward direction, the cloned back button
140
- * container should translate from over the large title
141
- * to over the back button. In the backward direction,
142
- * it should translate from over the back button to over
143
- * the large title.
144
- */
145
- const FORWARD_CONTAINER_KEYFRAMES = [
146
- { offset: 0, transform: `translate3d(${CONTAINER_START_TRANSLATE_X}, ${CONTAINER_START_TRANSLATE_Y}, 0)` },
147
- { offset: 1, transform: `translate3d(${CONTAINER_END_TRANSLATE_X}, ${CONTAINER_END_TRANSLATE_Y}, 0)` },
148
- ];
149
- const BACKWARD_CONTAINER_KEYFRAMES = [
150
- { offset: 0, transform: `translate3d(${CONTAINER_END_TRANSLATE_X}, ${CONTAINER_END_TRANSLATE_Y}, 0)` },
151
- { offset: 1, transform: `translate3d(${CONTAINER_START_TRANSLATE_X}, ${CONTAINER_START_TRANSLATE_Y}, 0)` },
152
- ];
153
- const CONTAINER_KEYFRAMES = backDirection ? BACKWARD_CONTAINER_KEYFRAMES : FORWARD_CONTAINER_KEYFRAMES;
154
- /**
155
- * In the forward direction, the text in the cloned back button
156
- * should start to be (roughly) the size of the large title
157
- * and then scale down to be the size of the actual back button.
158
- * The text should also translate, but that translate is handled
159
- * by the container keyframes.
160
- */
161
- const FORWARD_TEXT_KEYFRAMES = [
162
- { offset: 0, opacity: 0, transform: TEXT_START_SCALE },
163
- { offset: 1, opacity: 1, transform: TEXT_END_SCALE },
164
- ];
165
- const BACKWARD_TEXT_KEYFRAMES = [
166
- { offset: 0, opacity: 1, transform: TEXT_END_SCALE },
167
- { offset: 1, opacity: 0, transform: TEXT_START_SCALE },
168
- ];
169
- const TEXT_KEYFRAMES = backDirection ? BACKWARD_TEXT_KEYFRAMES : FORWARD_TEXT_KEYFRAMES;
170
- /**
171
- * The icon should scale in/out in the second
172
- * half of the animation. The icon should also
173
- * translate, but that translate is handled by the
174
- * container keyframes.
175
- */
176
- const FORWARD_ICON_KEYFRAMES = [
177
- { offset: 0, opacity: 0, transform: 'scale(0.6)' },
178
- { offset: 0.6, opacity: 0, transform: 'scale(0.6)' },
179
- { offset: 1, opacity: 1, transform: 'scale(1)' },
180
- ];
181
- const BACKWARD_ICON_KEYFRAMES = [
182
- { offset: 0, opacity: 1, transform: 'scale(1)' },
183
- { offset: 0.2, opacity: 0, transform: 'scale(0.6)' },
184
- { offset: 1, opacity: 0, transform: 'scale(0.6)' },
185
- ];
186
- const ICON_KEYFRAMES = backDirection ? BACKWARD_ICON_KEYFRAMES : FORWARD_ICON_KEYFRAMES;
187
- const enteringBackButtonTextAnimation = createAnimation();
188
- const enteringBackButtonIconAnimation = createAnimation();
189
- const enteringBackButtonAnimation = createAnimation();
190
- const clonedBackButtonEl = getClonedElement('ion-back-button');
191
- const clonedBackButtonTextEl = shadow(clonedBackButtonEl).querySelector('.button-text');
192
- const clonedBackButtonIconEl = shadow(clonedBackButtonEl).querySelector('ion-icon');
193
- clonedBackButtonEl.text = backButtonEl.text;
194
- clonedBackButtonEl.mode = backButtonEl.mode;
195
- clonedBackButtonEl.icon = backButtonEl.icon;
196
- clonedBackButtonEl.color = backButtonEl.color;
197
- clonedBackButtonEl.disabled = backButtonEl.disabled;
198
- clonedBackButtonEl.style.setProperty('display', 'block');
199
- clonedBackButtonEl.style.setProperty('position', 'fixed');
200
- enteringBackButtonIconAnimation.addElement(clonedBackButtonIconEl);
201
- enteringBackButtonTextAnimation.addElement(clonedBackButtonTextEl);
202
- enteringBackButtonAnimation.addElement(clonedBackButtonEl);
203
- enteringBackButtonAnimation
204
- .beforeStyles({
205
- position: 'absolute',
206
- top: '0px',
207
- [CONTAINER_ORIGIN_X]: '0px',
208
- })
209
- /**
210
- * The write hooks must be set on this animation as it is guaranteed to run. Other
211
- * animations such as the back button text animation will not run if the back button
212
- * has no visible text.
213
- */
214
- .beforeAddWrite(() => {
215
- backButtonEl.style.setProperty('display', 'none');
216
- clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
217
- })
218
- .afterAddWrite(() => {
219
- backButtonEl.style.setProperty('display', '');
220
- clonedBackButtonEl.style.setProperty('display', 'none');
221
- clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
222
- })
223
- .keyframes(CONTAINER_KEYFRAMES);
224
- enteringBackButtonTextAnimation
225
- .beforeStyles({
226
- 'transform-origin': `${TEXT_ORIGIN_X} top`,
227
- })
228
- .keyframes(TEXT_KEYFRAMES);
229
- enteringBackButtonIconAnimation
230
- .beforeStyles({
231
- 'transform-origin': `${ICON_ORIGIN_X} center`,
232
- })
233
- .keyframes(ICON_KEYFRAMES);
234
- rootAnimation.addAnimation([
235
- enteringBackButtonTextAnimation,
236
- enteringBackButtonIconAnimation,
237
- enteringBackButtonAnimation,
238
- ]);
239
- };
240
- const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
241
- var _a, _b;
242
- /**
243
- * The horizontal transform origin for the large title
244
- */
245
- const ORIGIN_X = rtl ? 'right' : 'left';
246
- const TITLE_START_OFFSET = rtl ? `calc(100% - ${largeTitleBox.right}px)` : `${largeTitleBox.left}px`;
247
- /**
248
- * The cloned large should align exactly with the
249
- * real large title on the leaving page otherwise there will
250
- * be a layout shift.
251
- */
252
- const START_TRANSLATE_X = '0px';
253
- const START_TRANSLATE_Y = `${largeTitleBox.top}px`;
254
- /**
255
- * How much to offset the large title translation by.
256
- * This accounts for differences in sizing between the large
257
- * title and the back button due to padding and font weight.
258
- */
259
- const LARGE_TITLE_TRANSLATION_OFFSET = 8;
260
- let END_TRANSLATE_X = rtl
261
- ? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
262
- : `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
263
- /**
264
- * How much to scale the large title up/down by.
265
- */
266
- let HEIGHT_SCALE = 0.5;
267
- /**
268
- * The large title always starts full size.
269
- */
270
- const START_SCALE = 'scale(1)';
271
- /**
272
- * By default, we don't worry about having the large title scaled to perfectly
273
- * match the back button because we don't know if the back button's text matches
274
- * the large title's text.
275
- */
276
- let END_SCALE = `scale(${HEIGHT_SCALE})`;
277
- // Text element not rendered if developers pass text="" to the back button
278
- if (backButtonTextEl && backButtonTextBox) {
279
- /**
280
- * The scaled title should (roughly) overlap the back button. This ensures that
281
- * the back button and title overlap during the animation. Note that since both
282
- * elements either fade in or fade out over the course of the animation, neither
283
- * element will be fully visible on top of the other. As a result, the overlap
284
- * does not need to be perfect, so approximate values are acceptable here.
285
- */
286
- END_TRANSLATE_X = rtl
287
- ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
288
- : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
289
- /**
290
- * In the forward direction, the large title should start at its normal size and
291
- * then scale down to be (roughly) the size of the back button on the other view.
292
- * In the backward direction, the large title should start at (roughly) the size
293
- * of the back button and then scale up to its original size.
294
- * Note that since both elements either fade in or fade out over the course of the
295
- * animation, neither element will be fully visible on top of the other. As a result,
296
- * the overlap does not need to be perfect, so approximate values are acceptable here.
297
- */
298
- /**
299
- * When the title and back button texts match then they should overlap during the
300
- * page transition. If the texts do not match up then the large title text scale
301
- * adjusts to not perfectly match the back button text otherwise the proportions
302
- * will be incorrect. When the texts match we scale both the width and height to
303
- * account for font weight differences between the title and back button.
304
- */
305
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
306
- const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
307
- HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
308
- /**
309
- * Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
310
- * to re-compute this here since the HEIGHT_SCALE may have changed.
311
- */
312
- END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
313
- }
314
- /**
315
- * The midpoints of the back button and the title should align such that the back
316
- * button and title appear to be centered with each other.
317
- */
318
- const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
319
- const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
320
- const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
321
- const BACKWARDS_KEYFRAMES = [
322
- { offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
323
- { offset: 0.1, opacity: 0 },
324
- { offset: 1, opacity: 1, transform: `translate3d(${START_TRANSLATE_X}, ${START_TRANSLATE_Y}, 0) ${START_SCALE}` },
325
- ];
326
- const FORWARDS_KEYFRAMES = [
327
- {
328
- offset: 0,
329
- opacity: 0.99,
330
- transform: `translate3d(${START_TRANSLATE_X}, ${START_TRANSLATE_Y}, 0) ${START_SCALE}`,
331
- },
332
- { offset: 0.6, opacity: 0 },
333
- { offset: 1, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
334
- ];
335
- const KEYFRAMES = backDirection ? BACKWARDS_KEYFRAMES : FORWARDS_KEYFRAMES;
336
- const clonedTitleEl = getClonedElement('ion-title');
337
- const clonedLargeTitleAnimation = createAnimation();
338
- clonedTitleEl.innerText = largeTitleEl.innerText;
339
- clonedTitleEl.size = largeTitleEl.size;
340
- clonedTitleEl.color = largeTitleEl.color;
341
- clonedLargeTitleAnimation.addElement(clonedTitleEl);
342
- clonedLargeTitleAnimation
343
- .beforeStyles({
344
- 'transform-origin': `${ORIGIN_X} top`,
345
- /**
346
- * Since font size changes will cause
347
- * the dimension of the large title to change
348
- * we need to set the cloned title height
349
- * equal to that of the original large title height.
350
- */
351
- height: `${largeTitleBox.height}px`,
352
- display: '',
353
- position: 'relative',
354
- [ORIGIN_X]: TITLE_START_OFFSET,
355
- })
356
- .beforeAddWrite(() => {
357
- largeTitleEl.style.setProperty('opacity', '0');
358
- })
359
- .afterAddWrite(() => {
360
- largeTitleEl.style.setProperty('opacity', '');
361
- clonedTitleEl.style.setProperty('display', 'none');
362
- })
363
- .keyframes(KEYFRAMES);
364
- rootAnimation.addAnimation(clonedLargeTitleAnimation);
365
- };
366
- const iosTransitionAnimation = (navEl, opts) => {
367
- var _a;
368
- try {
369
- const EASING = 'cubic-bezier(0.32,0.72,0,1)';
370
- const OPACITY = 'opacity';
371
- const TRANSFORM = 'transform';
372
- const CENTER = '0%';
373
- const OFF_OPACITY = 0.8;
374
- const isRTL = navEl.ownerDocument.dir === 'rtl';
375
- const OFF_RIGHT = isRTL ? '-99.5%' : '99.5%';
376
- const OFF_LEFT = isRTL ? '33%' : '-33%';
377
- const enteringEl = opts.enteringEl;
378
- const leavingEl = opts.leavingEl;
379
- const backDirection = opts.direction === 'back';
380
- const contentEl = enteringEl.querySelector(':scope > ion-content');
381
- const headerEls = enteringEl.querySelectorAll(':scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *');
382
- const enteringToolBarEls = enteringEl.querySelectorAll(':scope > ion-header > ion-toolbar');
383
- const rootAnimation = createAnimation();
384
- const enteringContentAnimation = createAnimation();
385
- rootAnimation
386
- .addElement(enteringEl)
387
- .duration(((_a = opts.duration) !== null && _a !== void 0 ? _a : 0) || DURATION)
388
- .easing(opts.easing || EASING)
389
- .fill('both')
390
- .beforeRemoveClass('ion-page-invisible');
391
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
392
- if (leavingEl && navEl !== null && navEl !== undefined) {
393
- const navDecorAnimation = createAnimation();
394
- navDecorAnimation.addElement(navEl);
395
- rootAnimation.addAnimation(navDecorAnimation);
396
- }
397
- if (!contentEl && enteringToolBarEls.length === 0 && headerEls.length === 0) {
398
- enteringContentAnimation.addElement(enteringEl.querySelector(':scope > .ion-page, :scope > ion-nav, :scope > ion-tabs')); // REVIEW
399
- }
400
- else {
401
- enteringContentAnimation.addElement(contentEl); // REVIEW
402
- enteringContentAnimation.addElement(headerEls);
403
- }
404
- rootAnimation.addAnimation(enteringContentAnimation);
405
- if (backDirection) {
406
- enteringContentAnimation
407
- .beforeClearStyles([OPACITY])
408
- .fromTo('transform', `translateX(${OFF_LEFT})`, `translateX(${CENTER})`)
409
- .fromTo(OPACITY, OFF_OPACITY, 1);
410
- }
411
- else {
412
- // entering content, forward direction
413
- enteringContentAnimation
414
- .beforeClearStyles([OPACITY])
415
- .fromTo('transform', `translateX(${OFF_RIGHT})`, `translateX(${CENTER})`);
416
- }
417
- if (contentEl) {
418
- const enteringTransitionEffectEl = shadow(contentEl).querySelector('.transition-effect');
419
- if (enteringTransitionEffectEl) {
420
- const enteringTransitionCoverEl = enteringTransitionEffectEl.querySelector('.transition-cover');
421
- const enteringTransitionShadowEl = enteringTransitionEffectEl.querySelector('.transition-shadow');
422
- const enteringTransitionEffect = createAnimation();
423
- const enteringTransitionCover = createAnimation();
424
- const enteringTransitionShadow = createAnimation();
425
- enteringTransitionEffect
426
- .addElement(enteringTransitionEffectEl)
427
- .beforeStyles({ opacity: '1', display: 'block' })
428
- .afterStyles({ opacity: '', display: '' });
429
- enteringTransitionCover
430
- .addElement(enteringTransitionCoverEl) // REVIEW
431
- .beforeClearStyles([OPACITY])
432
- .fromTo(OPACITY, 0, 0.1);
433
- enteringTransitionShadow
434
- .addElement(enteringTransitionShadowEl) // REVIEW
435
- .beforeClearStyles([OPACITY])
436
- .fromTo(OPACITY, 0.03, 0.7);
437
- enteringTransitionEffect.addAnimation([enteringTransitionCover, enteringTransitionShadow]);
438
- enteringContentAnimation.addAnimation([enteringTransitionEffect]);
439
- }
440
- }
441
- const enteringContentHasLargeTitle = enteringEl.querySelector('ion-header.header-collapse-condense');
442
- const { forward, backward } = createLargeTitleTransition(rootAnimation, isRTL, backDirection, enteringEl, leavingEl);
443
- enteringToolBarEls.forEach((enteringToolBarEl) => {
444
- const enteringToolBar = createAnimation();
445
- enteringToolBar.addElement(enteringToolBarEl);
446
- rootAnimation.addAnimation(enteringToolBar);
447
- const enteringTitle = createAnimation();
448
- enteringTitle.addElement(enteringToolBarEl.querySelector('ion-title')); // REVIEW
449
- const enteringToolBarButtons = createAnimation();
450
- const buttons = Array.from(enteringToolBarEl.querySelectorAll('ion-buttons,[menuToggle]'));
451
- const parentHeader = enteringToolBarEl.closest('ion-header');
452
- const inactiveHeader = parentHeader === null || parentHeader === void 0 ? void 0 : parentHeader.classList.contains('header-collapse-condense-inactive');
453
- let buttonsToAnimate;
454
- if (backDirection) {
455
- buttonsToAnimate = buttons.filter((button) => {
456
- const isCollapseButton = button.classList.contains('buttons-collapse');
457
- return (isCollapseButton && !inactiveHeader) || !isCollapseButton;
458
- });
459
- }
460
- else {
461
- buttonsToAnimate = buttons.filter((button) => !button.classList.contains('buttons-collapse'));
462
- }
463
- enteringToolBarButtons.addElement(buttonsToAnimate);
464
- const enteringToolBarItems = createAnimation();
465
- enteringToolBarItems.addElement(enteringToolBarEl.querySelectorAll(':scope > *:not(ion-title):not(ion-buttons):not([menuToggle])'));
466
- const enteringToolBarBg = createAnimation();
467
- enteringToolBarBg.addElement(shadow(enteringToolBarEl).querySelector('.toolbar-background')); // REVIEW
468
- const enteringBackButton = createAnimation();
469
- const backButtonEl = enteringToolBarEl.querySelector('ion-back-button');
470
- if (backButtonEl) {
471
- enteringBackButton.addElement(backButtonEl);
472
- }
473
- enteringToolBar.addAnimation([
474
- enteringTitle,
475
- enteringToolBarButtons,
476
- enteringToolBarItems,
477
- enteringToolBarBg,
478
- enteringBackButton,
479
- ]);
480
- enteringToolBarButtons.fromTo(OPACITY, 0.01, 1);
481
- enteringToolBarItems.fromTo(OPACITY, 0.01, 1);
482
- if (backDirection) {
483
- if (!inactiveHeader) {
484
- enteringTitle
485
- .fromTo('transform', `translateX(${OFF_LEFT})`, `translateX(${CENTER})`)
486
- .fromTo(OPACITY, 0.01, 1);
487
- }
488
- enteringToolBarItems.fromTo('transform', `translateX(${OFF_LEFT})`, `translateX(${CENTER})`);
489
- // back direction, entering page has a back button
490
- enteringBackButton.fromTo(OPACITY, 0.01, 1);
491
- }
492
- else {
493
- // entering toolbar, forward direction
494
- if (!enteringContentHasLargeTitle) {
495
- enteringTitle
496
- .fromTo('transform', `translateX(${OFF_RIGHT})`, `translateX(${CENTER})`)
497
- .fromTo(OPACITY, 0.01, 1);
498
- }
499
- enteringToolBarItems.fromTo('transform', `translateX(${OFF_RIGHT})`, `translateX(${CENTER})`);
500
- enteringToolBarBg.beforeClearStyles([OPACITY, 'transform']);
501
- const translucentHeader = parentHeader === null || parentHeader === void 0 ? void 0 : parentHeader.translucent;
502
- if (!translucentHeader) {
503
- enteringToolBarBg.fromTo(OPACITY, 0.01, 'var(--opacity)');
504
- }
505
- else {
506
- enteringToolBarBg.fromTo('transform', isRTL ? 'translateX(-100%)' : 'translateX(100%)', 'translateX(0px)');
507
- }
508
- // forward direction, entering page has a back button
509
- if (!forward) {
510
- enteringBackButton.fromTo(OPACITY, 0.01, 1);
511
- }
512
- if (backButtonEl && !forward) {
513
- const enteringBackBtnText = createAnimation();
514
- enteringBackBtnText
515
- .addElement(shadow(backButtonEl).querySelector('.button-text')) // REVIEW
516
- .fromTo(`transform`, isRTL ? 'translateX(-100px)' : 'translateX(100px)', 'translateX(0px)');
517
- enteringToolBar.addAnimation(enteringBackBtnText);
518
- }
519
- }
520
- });
521
- // setup leaving view
522
- if (leavingEl) {
523
- const leavingContent = createAnimation();
524
- const leavingContentEl = leavingEl.querySelector(':scope > ion-content');
525
- const leavingToolBarEls = leavingEl.querySelectorAll(':scope > ion-header > ion-toolbar');
526
- const leavingHeaderEls = leavingEl.querySelectorAll(':scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *');
527
- if (!leavingContentEl && leavingToolBarEls.length === 0 && leavingHeaderEls.length === 0) {
528
- leavingContent.addElement(leavingEl.querySelector(':scope > .ion-page, :scope > ion-nav, :scope > ion-tabs')); // REVIEW
529
- }
530
- else {
531
- leavingContent.addElement(leavingContentEl); // REVIEW
532
- leavingContent.addElement(leavingHeaderEls);
533
- }
534
- rootAnimation.addAnimation(leavingContent);
535
- if (backDirection) {
536
- // leaving content, back direction
537
- leavingContent
538
- .beforeClearStyles([OPACITY])
539
- .fromTo('transform', `translateX(${CENTER})`, isRTL ? 'translateX(-100%)' : 'translateX(100%)');
540
- const leavingPage = getIonPageElement(leavingEl);
541
- rootAnimation.afterAddWrite(() => {
542
- if (rootAnimation.getDirection() === 'normal') {
543
- leavingPage.style.setProperty('display', 'none');
544
- }
545
- });
546
- }
547
- else {
548
- // leaving content, forward direction
549
- leavingContent
550
- .fromTo('transform', `translateX(${CENTER})`, `translateX(${OFF_LEFT})`)
551
- .fromTo(OPACITY, 1, OFF_OPACITY);
552
- }
553
- if (leavingContentEl) {
554
- const leavingTransitionEffectEl = shadow(leavingContentEl).querySelector('.transition-effect');
555
- if (leavingTransitionEffectEl) {
556
- const leavingTransitionCoverEl = leavingTransitionEffectEl.querySelector('.transition-cover');
557
- const leavingTransitionShadowEl = leavingTransitionEffectEl.querySelector('.transition-shadow');
558
- const leavingTransitionEffect = createAnimation();
559
- const leavingTransitionCover = createAnimation();
560
- const leavingTransitionShadow = createAnimation();
561
- leavingTransitionEffect
562
- .addElement(leavingTransitionEffectEl)
563
- .beforeStyles({ opacity: '1', display: 'block' })
564
- .afterStyles({ opacity: '', display: '' });
565
- leavingTransitionCover
566
- .addElement(leavingTransitionCoverEl) // REVIEW
567
- .beforeClearStyles([OPACITY])
568
- .fromTo(OPACITY, 0.1, 0);
569
- leavingTransitionShadow
570
- .addElement(leavingTransitionShadowEl) // REVIEW
571
- .beforeClearStyles([OPACITY])
572
- .fromTo(OPACITY, 0.7, 0.03);
573
- leavingTransitionEffect.addAnimation([leavingTransitionCover, leavingTransitionShadow]);
574
- leavingContent.addAnimation([leavingTransitionEffect]);
575
- }
576
- }
577
- leavingToolBarEls.forEach((leavingToolBarEl) => {
578
- const leavingToolBar = createAnimation();
579
- leavingToolBar.addElement(leavingToolBarEl);
580
- const leavingTitle = createAnimation();
581
- leavingTitle.addElement(leavingToolBarEl.querySelector('ion-title')); // REVIEW
582
- const leavingToolBarButtons = createAnimation();
583
- const buttons = leavingToolBarEl.querySelectorAll('ion-buttons,[menuToggle]');
584
- const parentHeader = leavingToolBarEl.closest('ion-header');
585
- const inactiveHeader = parentHeader === null || parentHeader === void 0 ? void 0 : parentHeader.classList.contains('header-collapse-condense-inactive');
586
- const buttonsToAnimate = Array.from(buttons).filter((button) => {
587
- const isCollapseButton = button.classList.contains('buttons-collapse');
588
- return (isCollapseButton && !inactiveHeader) || !isCollapseButton;
589
- });
590
- leavingToolBarButtons.addElement(buttonsToAnimate);
591
- const leavingToolBarItems = createAnimation();
592
- const leavingToolBarItemEls = leavingToolBarEl.querySelectorAll(':scope > *:not(ion-title):not(ion-buttons):not([menuToggle])');
593
- if (leavingToolBarItemEls.length > 0) {
594
- leavingToolBarItems.addElement(leavingToolBarItemEls);
595
- }
596
- const leavingToolBarBg = createAnimation();
597
- leavingToolBarBg.addElement(shadow(leavingToolBarEl).querySelector('.toolbar-background')); // REVIEW
598
- const leavingBackButton = createAnimation();
599
- const backButtonEl = leavingToolBarEl.querySelector('ion-back-button');
600
- if (backButtonEl) {
601
- leavingBackButton.addElement(backButtonEl);
602
- }
603
- leavingToolBar.addAnimation([
604
- leavingTitle,
605
- leavingToolBarButtons,
606
- leavingToolBarItems,
607
- leavingBackButton,
608
- leavingToolBarBg,
609
- ]);
610
- rootAnimation.addAnimation(leavingToolBar);
611
- // fade out leaving toolbar items
612
- leavingBackButton.fromTo(OPACITY, 0.99, 0);
613
- leavingToolBarButtons.fromTo(OPACITY, 0.99, 0);
614
- leavingToolBarItems.fromTo(OPACITY, 0.99, 0);
615
- if (backDirection) {
616
- if (!inactiveHeader) {
617
- // leaving toolbar, back direction
618
- leavingTitle
619
- .fromTo('transform', `translateX(${CENTER})`, isRTL ? 'translateX(-100%)' : 'translateX(100%)')
620
- .fromTo(OPACITY, 0.99, 0);
621
- }
622
- leavingToolBarItems.fromTo('transform', `translateX(${CENTER})`, isRTL ? 'translateX(-100%)' : 'translateX(100%)');
623
- leavingToolBarBg.beforeClearStyles([OPACITY, 'transform']);
624
- // leaving toolbar, back direction, and there's no entering toolbar
625
- // should just slide out, no fading out
626
- const translucentHeader = parentHeader === null || parentHeader === void 0 ? void 0 : parentHeader.translucent;
627
- if (!translucentHeader) {
628
- leavingToolBarBg.fromTo(OPACITY, 'var(--opacity)', 0);
629
- }
630
- else {
631
- leavingToolBarBg.fromTo('transform', 'translateX(0px)', isRTL ? 'translateX(-100%)' : 'translateX(100%)');
632
- }
633
- if (backButtonEl && !backward) {
634
- const leavingBackBtnText = createAnimation();
635
- leavingBackBtnText
636
- .addElement(shadow(backButtonEl).querySelector('.button-text')) // REVIEW
637
- .fromTo('transform', `translateX(${CENTER})`, `translateX(${(isRTL ? -124 : 124) + 'px'})`);
638
- leavingToolBar.addAnimation(leavingBackBtnText);
639
- }
640
- }
641
- else {
642
- // leaving toolbar, forward direction
643
- if (!inactiveHeader) {
644
- leavingTitle
645
- .fromTo('transform', `translateX(${CENTER})`, `translateX(${OFF_LEFT})`)
646
- .fromTo(OPACITY, 0.99, 0)
647
- .afterClearStyles([TRANSFORM, OPACITY]);
648
- }
649
- leavingToolBarItems
650
- .fromTo('transform', `translateX(${CENTER})`, `translateX(${OFF_LEFT})`)
651
- .afterClearStyles([TRANSFORM, OPACITY]);
652
- leavingBackButton.afterClearStyles([OPACITY]);
653
- leavingTitle.afterClearStyles([OPACITY]);
654
- leavingToolBarButtons.afterClearStyles([OPACITY]);
655
- }
656
- });
657
- }
658
- return rootAnimation;
659
- }
660
- catch (err) {
661
- throw err;
662
- }
663
- };
664
- /**
665
- * The scale of the back button during the animation
666
- * is computed based on the scale of the large title
667
- * and vice versa. However, we need to account for slight
668
- * variations in the size of the large title due to
669
- * padding and font weight. This value should be used to subtract
670
- * a small amount from the large title height when computing scales
671
- * to get more accurate scale results.
672
- */
673
- const LARGE_TITLE_SIZE_OFFSET = 10;
674
-
675
- export { iosTransitionAnimation, shadow };
4
+ import{c as t}from"./animation.js";import{g as o}from"./index2.js";const n=t=>document.querySelector(`${t}.ion-cloned-element`),a=t=>t.shadowRoot||t,s=t=>{const o="ION-TABS"===t.tagName?t:t.querySelector("ion-tabs"),n="ion-content ion-header:not(.header-collapse-condense-inactive) ion-title.title-large";if(null!=o){const t=o.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");return null!=t?t.querySelector(n):null}return t.querySelector(n)},e=(t,o)=>{const n="ION-TABS"===t.tagName?t:t.querySelector("ion-tabs");let a=[];if(null!=n){const t=n.querySelector("ion-tab:not(.tab-hidden), .ion-page:not(.ion-page-hidden)");null!=t&&(a=t.querySelectorAll("ion-buttons"))}else a=t.querySelectorAll("ion-buttons");for(const t of a){const n=t.closest("ion-header"),a=n&&!n.classList.contains("header-collapse-condense-inactive"),s=t.querySelector("ion-back-button"),e=t.classList.contains("buttons-collapse");if(null!==s&&("start"===t.slot||""===t.slot)&&(e&&a&&o||!e))return s}return null},r=(o,s,e,r,i,l,f,p,d)=>{var $,u;const b=s?`calc(100% - ${i.right+4}px)`:i.left-4+"px",m=s?"right":"left",y=s?"left":"right",X=s?"right":"left";let x=1,v=1,h=`scale(${v})`;const g="scale(1)";if(l&&f){const t=(null===($=l.textContent)||void 0===$?void 0:$.trim())===(null===(u=p.textContent)||void 0===u?void 0:u.trim());x=d.width/f.width,v=(d.height-c)/f.height,h=t?`scale(${x}, ${v})`:`scale(${v})`}const w=a(r).querySelector("ion-icon").getBoundingClientRect(),k=s?w.width/2-(w.right-i.right)+"px":i.left-w.width/2+"px",T=s?`-${window.innerWidth-i.right}px`:`${i.left}px`,A=`${d.top}px`,j=`${i.top}px`,B=e?[{offset:0,transform:`translate3d(${T}, ${j}, 0)`},{offset:1,transform:`translate3d(${k}, ${A}, 0)`}]:[{offset:0,transform:`translate3d(${k}, ${A}, 0)`},{offset:1,transform:`translate3d(${T}, ${j}, 0)`}],I=e?[{offset:0,opacity:1,transform:g},{offset:1,opacity:0,transform:h}]:[{offset:0,opacity:0,transform:h},{offset:1,opacity:1,transform:g}],N=e?[{offset:0,opacity:1,transform:"scale(1)"},{offset:.2,opacity:0,transform:"scale(0.6)"},{offset:1,opacity:0,transform:"scale(0.6)"}]:[{offset:0,opacity:0,transform:"scale(0.6)"},{offset:.6,opacity:0,transform:"scale(0.6)"},{offset:1,opacity:1,transform:"scale(1)"}],O=t(),S=t(),z=t(),q=n("ion-back-button"),C=a(q).querySelector(".button-text"),D=a(q).querySelector("ion-icon");q.text=r.text,q.mode=r.mode,q.icon=r.icon,q.color=r.color,q.disabled=r.disabled,q.style.setProperty("display","block"),q.style.setProperty("position","fixed"),S.addElement(D),O.addElement(C),z.addElement(q),z.beforeStyles({position:"absolute",top:"0px",[X]:"0px"}).beforeAddWrite((()=>{r.style.setProperty("display","none"),q.style.setProperty(m,b)})).afterAddWrite((()=>{r.style.setProperty("display",""),q.style.setProperty("display","none"),q.style.removeProperty(m)})).keyframes(B),O.beforeStyles({"transform-origin":`${m} top`}).keyframes(I),S.beforeStyles({"transform-origin":`${y} center`}).keyframes(N),o.addAnimation([O,S,z])},i=(o,a,s,e,r,i,l,f,p)=>{var d,$;const u=a?"right":"left",b=a?`calc(100% - ${r.right}px)`:`${r.left}px`,m=`${r.top}px`;let y=a?`-${window.innerWidth-l.right-8}px`:`${l.x+8}px`,X=.5;const x="scale(1)";let v=`scale(${X})`;if(f&&p){y=a?`-${window.innerWidth-p.right-8}px`:p.x-8+"px";const t=(null===(d=f.textContent)||void 0===d?void 0:d.trim())===(null===($=e.textContent)||void 0===$?void 0:$.trim());X=p.height/(i.height-c),v=t?`scale(${p.width/i.width}, ${X})`:`scale(${X})`}const h=l.top+l.height/2-r.height*X/2+"px",g=s?[{offset:0,opacity:0,transform:`translate3d(${y}, ${h}, 0) ${v}`},{offset:.1,opacity:0},{offset:1,opacity:1,transform:`translate3d(0px, ${m}, 0) ${x}`}]:[{offset:0,opacity:.99,transform:`translate3d(0px, ${m}, 0) ${x}`},{offset:.6,opacity:0},{offset:1,opacity:0,transform:`translate3d(${y}, ${h}, 0) ${v}`}],w=n("ion-title"),k=t();w.innerText=e.innerText,w.size=e.size,w.color=e.color,k.addElement(w),k.beforeStyles({"transform-origin":`${u} top`,height:`${r.height}px`,display:"",position:"relative",[u]:b}).beforeAddWrite((()=>{e.style.setProperty("opacity","0")})).afterAddWrite((()=>{e.style.setProperty("opacity",""),w.style.setProperty("display","none")})).keyframes(g),o.addAnimation(k)},l=(n,l)=>{var c;try{const f="cubic-bezier(0.32,0.72,0,1)",p="opacity",d="transform",$="0%",u=.8,b="rtl"===n.ownerDocument.dir,m=b?"-99.5%":"99.5%",y=b?"33%":"-33%",X=l.enteringEl,x=l.leavingEl,v="back"===l.direction,h=X.querySelector(":scope > ion-content"),g=X.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *"),w=X.querySelectorAll(":scope > ion-header > ion-toolbar"),k=t(),T=t();if(k.addElement(X).duration((null!==(c=l.duration)&&void 0!==c?c:0)||540).easing(l.easing||f).fill("both").beforeRemoveClass("ion-page-invisible"),x&&null!=n){const o=t();o.addElement(n),k.addAnimation(o)}if(h||0!==w.length||0!==g.length?(T.addElement(h),T.addElement(g)):T.addElement(X.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),k.addAnimation(T),v?T.beforeClearStyles([p]).fromTo("transform",`translateX(${y})`,`translateX(${$})`).fromTo(p,u,1):T.beforeClearStyles([p]).fromTo("transform",`translateX(${m})`,`translateX(${$})`),h){const o=a(h).querySelector(".transition-effect");if(o){const n=o.querySelector(".transition-cover"),a=o.querySelector(".transition-shadow"),s=t(),e=t(),r=t();s.addElement(o).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),e.addElement(n).beforeClearStyles([p]).fromTo(p,0,.1),r.addElement(a).beforeClearStyles([p]).fromTo(p,.03,.7),s.addAnimation([e,r]),T.addAnimation([s])}}const A=X.querySelector("ion-header.header-collapse-condense"),{forward:j,backward:B}=((t,o,n,l,c)=>{const f=e(l,n),p=s(c),d=s(l),$=e(c,n),u=null!==f&&null!==p&&!n,b=null!==d&&null!==$&&n;if(u){const s=p.getBoundingClientRect(),e=f.getBoundingClientRect(),l=a(f).querySelector(".button-text"),c=null==l?void 0:l.getBoundingClientRect(),d=a(p).querySelector(".toolbar-title").getBoundingClientRect();i(t,o,n,p,s,d,e,l,c),r(t,o,n,f,e,l,c,p,d)}else if(b){const s=d.getBoundingClientRect(),e=$.getBoundingClientRect(),l=a($).querySelector(".button-text"),c=null==l?void 0:l.getBoundingClientRect(),f=a(d).querySelector(".toolbar-title").getBoundingClientRect();i(t,o,n,d,s,f,e,l,c),r(t,o,n,$,e,l,c,d,f)}return{forward:u,backward:b}})(k,b,v,X,x);if(w.forEach((o=>{const n=t();n.addElement(o),k.addAnimation(n);const s=t();s.addElement(o.querySelector("ion-title"));const e=t(),r=Array.from(o.querySelectorAll("ion-buttons,[menuToggle]")),i=o.closest("ion-header"),l=null==i?void 0:i.classList.contains("header-collapse-condense-inactive");let c;c=r.filter(v?t=>{const o=t.classList.contains("buttons-collapse");return o&&!l||!o}:t=>!t.classList.contains("buttons-collapse")),e.addElement(c);const f=t();f.addElement(o.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])"));const d=t();d.addElement(a(o).querySelector(".toolbar-background"));const u=t(),X=o.querySelector("ion-back-button");if(X&&u.addElement(X),n.addAnimation([s,e,f,d,u]),e.fromTo(p,.01,1),f.fromTo(p,.01,1),v)l||s.fromTo("transform",`translateX(${y})`,`translateX(${$})`).fromTo(p,.01,1),f.fromTo("transform",`translateX(${y})`,`translateX(${$})`),u.fromTo(p,.01,1);else if(A||s.fromTo("transform",`translateX(${m})`,`translateX(${$})`).fromTo(p,.01,1),f.fromTo("transform",`translateX(${m})`,`translateX(${$})`),d.beforeClearStyles([p,"transform"]),(null==i?void 0:i.translucent)?d.fromTo("transform",b?"translateX(-100%)":"translateX(100%)","translateX(0px)"):d.fromTo(p,.01,"var(--opacity)"),j||u.fromTo(p,.01,1),X&&!j){const o=t();o.addElement(a(X).querySelector(".button-text")).fromTo("transform",b?"translateX(-100px)":"translateX(100px)","translateX(0px)"),n.addAnimation(o)}})),x){const n=t(),s=x.querySelector(":scope > ion-content"),e=x.querySelectorAll(":scope > ion-header > ion-toolbar"),r=x.querySelectorAll(":scope > ion-header > *:not(ion-toolbar), :scope > ion-footer > *");if(s||0!==e.length||0!==r.length?(n.addElement(s),n.addElement(r)):n.addElement(x.querySelector(":scope > .ion-page, :scope > ion-nav, :scope > ion-tabs")),k.addAnimation(n),v){n.beforeClearStyles([p]).fromTo("transform",`translateX(${$})`,b?"translateX(-100%)":"translateX(100%)");const t=o(x);k.afterAddWrite((()=>{"normal"===k.getDirection()&&t.style.setProperty("display","none")}))}else n.fromTo("transform",`translateX(${$})`,`translateX(${y})`).fromTo(p,1,u);if(s){const o=a(s).querySelector(".transition-effect");if(o){const a=o.querySelector(".transition-cover"),s=o.querySelector(".transition-shadow"),e=t(),r=t(),i=t();e.addElement(o).beforeStyles({opacity:"1",display:"block"}).afterStyles({opacity:"",display:""}),r.addElement(a).beforeClearStyles([p]).fromTo(p,.1,0),i.addElement(s).beforeClearStyles([p]).fromTo(p,.7,.03),e.addAnimation([r,i]),n.addAnimation([e])}}e.forEach((o=>{const n=t();n.addElement(o);const s=t();s.addElement(o.querySelector("ion-title"));const e=t(),r=o.querySelectorAll("ion-buttons,[menuToggle]"),i=o.closest("ion-header"),l=null==i?void 0:i.classList.contains("header-collapse-condense-inactive"),c=Array.from(r).filter((t=>{const o=t.classList.contains("buttons-collapse");return o&&!l||!o}));e.addElement(c);const f=t(),u=o.querySelectorAll(":scope > *:not(ion-title):not(ion-buttons):not([menuToggle])");u.length>0&&f.addElement(u);const m=t();m.addElement(a(o).querySelector(".toolbar-background"));const X=t(),x=o.querySelector("ion-back-button");if(x&&X.addElement(x),n.addAnimation([s,e,f,X,m]),k.addAnimation(n),X.fromTo(p,.99,0),e.fromTo(p,.99,0),f.fromTo(p,.99,0),v){if(l||s.fromTo("transform",`translateX(${$})`,b?"translateX(-100%)":"translateX(100%)").fromTo(p,.99,0),f.fromTo("transform",`translateX(${$})`,b?"translateX(-100%)":"translateX(100%)"),m.beforeClearStyles([p,"transform"]),(null==i?void 0:i.translucent)?m.fromTo("transform","translateX(0px)",b?"translateX(-100%)":"translateX(100%)"):m.fromTo(p,"var(--opacity)",0),x&&!B){const o=t();o.addElement(a(x).querySelector(".button-text")).fromTo("transform",`translateX(${$})`,`translateX(${(b?-124:124)+"px"})`),n.addAnimation(o)}}else l||s.fromTo("transform",`translateX(${$})`,`translateX(${y})`).fromTo(p,.99,0).afterClearStyles([d,p]),f.fromTo("transform",`translateX(${$})`,`translateX(${y})`).afterClearStyles([d,p]),X.afterClearStyles([p]),s.afterClearStyles([p]),e.afterClearStyles([p])}))}return k}catch(t){throw t}},c=10;export{l as iosTransitionAnimation,a as shadow}