@ionic/core 8.8.18-dev.11786109471.1285bcfb → 8.8.18-dev.11786355346.19605941

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 (1141) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-divider.d.ts +11 -0
  27. package/components/ion-divider.js +4 -0
  28. package/components/ion-fab-button.js +1 -1
  29. package/components/ion-fab-list.js +1 -1
  30. package/components/ion-fab.js +1 -1
  31. package/components/ion-footer.js +1 -1
  32. package/components/ion-gallery-item.d.ts +11 -0
  33. package/components/ion-gallery-item.js +4 -0
  34. package/components/ion-gallery.d.ts +11 -0
  35. package/components/ion-gallery.js +4 -0
  36. package/components/ion-grid.js +1 -1
  37. package/components/ion-header.js +1 -1
  38. package/components/ion-icon.js +1 -1
  39. package/components/ion-img.js +1 -1
  40. package/components/ion-infinite-scroll-content.js +1 -1
  41. package/components/ion-infinite-scroll.js +1 -1
  42. package/components/ion-input-otp.js +1 -1
  43. package/components/ion-input-password-toggle.js +1 -1
  44. package/components/ion-input.js +1 -1
  45. package/components/ion-item-divider.js +1 -1
  46. package/components/ion-item-group.js +1 -1
  47. package/components/ion-item-option.js +1 -1
  48. package/components/ion-item-options.js +1 -1
  49. package/components/ion-item-sliding.js +1 -1
  50. package/components/ion-item.js +1 -1
  51. package/components/ion-label.js +1 -1
  52. package/components/ion-list-header.js +1 -1
  53. package/components/ion-list.js +1 -1
  54. package/components/ion-loading.js +1 -1
  55. package/components/ion-menu-button.js +1 -1
  56. package/components/ion-menu-toggle.js +1 -1
  57. package/components/ion-menu.js +1 -1
  58. package/components/ion-modal.js +1 -1
  59. package/components/ion-nav-link.js +1 -1
  60. package/components/ion-nav.js +1 -1
  61. package/components/ion-note.js +1 -1
  62. package/components/ion-picker-column-option.js +1 -1
  63. package/components/ion-picker-column.js +1 -1
  64. package/components/ion-picker-legacy-column.js +1 -1
  65. package/components/ion-picker-legacy.js +1 -1
  66. package/components/ion-picker.js +1 -1
  67. package/components/ion-popover.js +1 -1
  68. package/components/ion-progress-bar.js +1 -1
  69. package/components/ion-radio-group.js +1 -1
  70. package/components/ion-radio.js +1 -1
  71. package/components/ion-range.js +1 -1
  72. package/components/ion-refresher-content.js +1 -1
  73. package/components/ion-refresher.js +1 -1
  74. package/components/ion-reorder-group.js +1 -1
  75. package/components/ion-reorder.js +1 -1
  76. package/components/ion-ripple-effect.js +1 -1
  77. package/components/ion-route-redirect.js +1 -1
  78. package/components/ion-route.js +1 -1
  79. package/components/ion-router-link.js +1 -1
  80. package/components/ion-router-outlet.js +1 -1
  81. package/components/ion-router.js +1 -1
  82. package/components/ion-row.js +1 -1
  83. package/components/ion-searchbar.js +1 -1
  84. package/components/ion-segment-button.js +1 -1
  85. package/components/ion-segment-content.js +1 -1
  86. package/components/ion-segment-view.js +1 -1
  87. package/components/ion-segment.js +1 -1
  88. package/components/ion-select-modal.js +1 -1
  89. package/components/ion-select-option.js +1 -1
  90. package/components/ion-select-popover.js +1 -1
  91. package/components/ion-select.js +1 -1
  92. package/components/ion-skeleton-text.js +1 -1
  93. package/components/ion-spinner.js +1 -1
  94. package/components/ion-split-pane.js +1 -1
  95. package/components/ion-tab-bar.js +1 -1
  96. package/components/ion-tab-button.js +1 -1
  97. package/components/ion-tab.js +1 -1
  98. package/components/ion-tabs.js +1 -1
  99. package/components/ion-text.js +1 -1
  100. package/components/ion-textarea.js +1 -1
  101. package/components/ion-thumbnail.js +1 -1
  102. package/components/ion-title.js +1 -1
  103. package/components/ion-toast.js +1 -1
  104. package/components/ion-toggle.js +1 -1
  105. package/components/ion-toolbar.js +1 -1
  106. package/components/p-3VXQGlP7.js +4 -0
  107. package/components/{p-BkKAANMJ.js → p-B2SvA6NE.js} +1 -1
  108. package/components/p-B5krYTuW.js +4 -0
  109. package/components/p-B6a9IJZ0.js +4 -0
  110. package/components/p-BArGQkuV.js +4 -0
  111. package/components/p-BDqjX7Z_.js +4 -0
  112. package/components/{p-Cf2jSDS8.js → p-BE21dB_a.js} +1 -1
  113. package/components/p-BG-Q139o.js +4 -0
  114. package/components/{p-cyNmxje6.js → p-BPxMDyfV.js} +1 -1
  115. package/components/p-BWH3I3Dl.js +4 -0
  116. package/components/p-BYSs-jZz.js +4 -0
  117. package/components/{p-DqLB8yFQ.js → p-BZwQa9ey.js} +1 -1
  118. package/components/{p-C_hpsif8.js → p-B_jBop0E.js} +1 -1
  119. package/components/p-BbVhJs-a.js +4 -0
  120. package/components/p-Bc6odfwr.js +4 -0
  121. package/components/p-BjW8SOqw.js +4 -0
  122. package/components/p-BkWXBpOv.js +4 -0
  123. package/components/p-Bt9GDUv-.js +4 -0
  124. package/components/p-BvNVjXg4.js +4 -0
  125. package/components/p-BwKpO3Is.js +4 -0
  126. package/components/p-BwlU9cX_.js +4 -0
  127. package/components/{p-Osve4qkc.js → p-Bz4JFPmj.js} +1 -1
  128. package/components/p-CBxy8OYq.js +4 -0
  129. package/components/p-CGdeq57o.js +4 -0
  130. package/components/p-CHPdgLHZ.js +4 -0
  131. package/components/p-CMZlqiT7.js +4 -0
  132. package/components/p-CMzkbes2.js +4 -0
  133. package/components/p-CODBQrPj.js +4 -0
  134. package/components/p-COPA4jD9.js +4 -0
  135. package/components/p-CPnW-OVE.js +4 -0
  136. package/components/p-CRmBpp1v.js +4 -0
  137. package/components/p-CT3P-wjL.js +4 -0
  138. package/components/p-CVYFPBs-.js +4 -0
  139. package/components/p-CVqhQif1.js +4 -0
  140. package/components/p-Cc3oC60a.js +4 -0
  141. package/components/p-CjY4Hs1X.js +4 -0
  142. package/components/p-CrYjk-l3.js +4 -0
  143. package/components/p-CsUcWJuB.js +4 -0
  144. package/components/p-D0Iqw6OZ.js +4 -0
  145. package/{dist/ionic/p-D13Eaw-8.js → components/p-D0fnq0lf.js} +1 -1
  146. package/components/p-D1kNlmYt.js +4 -0
  147. package/components/p-D1t981Ih.js +4 -0
  148. package/components/p-D9C5yWpF.js +4 -0
  149. package/components/p-DDNG-IsR.js +4 -0
  150. package/components/p-DJSp7Si8.js +4 -0
  151. package/components/p-DL5wyRub.js +4 -0
  152. package/components/{p-ChIZKXUu.js → p-DWoO0801.js} +1 -1
  153. package/components/p-DXKZXLjV.js +4 -0
  154. package/components/p-DaJxRxSQ.js +4 -0
  155. package/components/p-Dhi5xtNS.js +4 -0
  156. package/components/p-Do8qRv6r.js +4 -0
  157. package/components/p-Dt--PjSF.js +4 -0
  158. package/components/p-DylrHLJF.js +4 -0
  159. package/components/p-FCT_QxQG.js +4 -0
  160. package/components/p-OCde3AhO.js +4 -0
  161. package/components/p-OPFCgx0m.js +4 -0
  162. package/{dist/ionic/p-VAemlbDS.js → components/p-PCVpe9Tq.js} +1 -1
  163. package/components/p-Rkm2AOZ2.js +4 -0
  164. package/components/p-WSZErkoI.js +4 -0
  165. package/components/p-bHSMZulH.js +4 -0
  166. package/components/p-fIOYmaqA.js +4 -0
  167. package/components/p-hNcst9K9.js +4 -0
  168. package/components/p-hW_3y-wm.js +4 -0
  169. package/components/p-nLMDgmzd.js +4 -0
  170. package/components/p-oI96rnOD.js +4 -0
  171. package/components/p-r_CFQBc1.js +4 -0
  172. package/components/p-vXpMhGrs.js +4 -0
  173. package/components/p-zBZRdRDd.js +4 -0
  174. package/css/core.css +1 -1
  175. package/css/core.css.map +1 -1
  176. package/css/display.css +1 -1
  177. package/css/display.css.map +1 -1
  178. package/css/flex-utils.css +1 -1
  179. package/css/flex-utils.css.map +1 -1
  180. package/css/float-elements.css.map +1 -1
  181. package/css/global.bundle.css.map +1 -1
  182. package/css/ionic/bundle.ionic.css +1 -0
  183. package/css/ionic/bundle.ionic.css.map +1 -0
  184. package/css/ionic/core.ionic.css +1 -0
  185. package/css/ionic/core.ionic.css.map +1 -0
  186. package/css/ionic/global.bundle.ionic.css +1 -0
  187. package/css/ionic/global.bundle.ionic.css.map +1 -0
  188. package/css/ionic/ionic-swiper.ionic.css +1 -0
  189. package/css/ionic/ionic-swiper.ionic.css.map +1 -0
  190. package/css/ionic/link.ionic.css +1 -0
  191. package/css/ionic/link.ionic.css.map +1 -0
  192. package/css/ionic/structure.ionic.css +1 -0
  193. package/css/ionic/structure.ionic.css.map +1 -0
  194. package/css/ionic/typography.ionic.css +1 -0
  195. package/css/ionic/typography.ionic.css.map +1 -0
  196. package/css/ionic/utils.bundle.ionic.css +1 -0
  197. package/css/ionic/utils.bundle.ionic.css.map +1 -0
  198. package/css/ionic-swiper.css +1 -1
  199. package/css/ionic-swiper.css.map +1 -1
  200. package/css/ionic.bundle.css +1 -1
  201. package/css/ionic.bundle.css.map +1 -1
  202. package/css/normalize.css.map +1 -1
  203. package/css/padding.css.map +1 -1
  204. package/css/palettes/dark.always.css.map +1 -1
  205. package/css/palettes/dark.class.css.map +1 -1
  206. package/css/palettes/dark.system.css.map +1 -1
  207. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  208. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  209. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  210. package/css/palettes/high-contrast.always.css.map +1 -1
  211. package/css/palettes/high-contrast.class.css.map +1 -1
  212. package/css/palettes/high-contrast.system.css.map +1 -1
  213. package/css/structure.css.map +1 -1
  214. package/css/text-alignment.css.map +1 -1
  215. package/css/text-transformation.css.map +1 -1
  216. package/css/typography.css.map +1 -1
  217. package/css/utils.bundle.css +1 -1
  218. package/css/utils.bundle.css.map +1 -1
  219. package/dist/cjs/{animation-BJq0kcy2.js → animation-B3xfVcDO.js} +3 -3
  220. package/dist/cjs/{app-globals-BlqrqKTN.js → app-globals-3ZoCVkn-.js} +1 -1
  221. package/dist/cjs/{button-active-0mPOKmV2.js → button-active-3tZKuPbT.js} +2 -2
  222. package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-CQSg1uCo.js} +3 -3
  223. package/dist/cjs/caret-down-vtVgfXIs.js +8 -0
  224. package/dist/cjs/caret-left-CxZXLRv5.js +8 -0
  225. package/dist/cjs/caret-right-CRCgv98E.js +8 -0
  226. package/dist/cjs/config-DWdFbSNK.js +35 -0
  227. package/dist/cjs/{focus-visible-CCvKiLh3.js → focus-visible-BIj-I3-C.js} +24 -0
  228. package/dist/cjs/{format-PxvGiOik.js → format-BCIkDef_.js} +1 -1
  229. package/dist/cjs/{framework-delegate-BtICZDHr.js → framework-delegate-DC5nq_NN.js} +4 -2
  230. package/dist/cjs/{haptic-ClPPQ_PS.js → haptic-eix26ESE.js} +1 -1
  231. package/dist/cjs/{helpers-Cv23MFHM.js → helpers-DiOgV5hw.js} +71 -4
  232. package/dist/cjs/{index-BERfRao3.js → index-BaJ7_YbC.js} +4 -4
  233. package/dist/cjs/index-Bj07IRTB.js +429 -0
  234. package/dist/cjs/{index-Dqpns5vP.js → index-BxEZd5IE.js} +2 -34
  235. package/dist/cjs/{index-DqmRDbxg.js → index-CxDnX7hd.js} +3 -1
  236. package/dist/cjs/{index-aC4x3Fk3.js → index-DYRcC3bw.js} +15 -15
  237. package/dist/cjs/{index-Ct7gcRif.js → index-GZU9YrFc.js} +41 -4
  238. package/dist/cjs/{index-D81eLYUM.js → index-bX3nz2vw.js} +9 -8
  239. package/dist/cjs/index.cjs.js +16 -16
  240. package/dist/cjs/{input-shims-DpA1zUN9.js → input-shims-BSEBw22J.js} +18 -17
  241. package/dist/cjs/{input.utils-DetjmtH2.js → input.utils-D68wgI2Y.js} +5 -5
  242. package/dist/cjs/ion-accordion_2.cjs.entry.js +61 -29
  243. package/dist/cjs/ion-action-sheet.cjs.entry.js +41 -22
  244. package/dist/cjs/ion-alert.cjs.entry.js +78 -41
  245. package/dist/cjs/ion-app_8.cjs.entry.js +458 -194
  246. package/dist/cjs/ion-avatar_3.cjs.entry.js +125 -13
  247. package/dist/cjs/ion-back-button.cjs.entry.js +31 -22
  248. package/dist/cjs/ion-backdrop.cjs.entry.js +10 -7
  249. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +54 -18
  250. package/dist/cjs/ion-button_2.cjs.entry.js +61 -24
  251. package/dist/cjs/ion-card_5.cjs.entry.js +55 -33
  252. package/dist/cjs/ion-checkbox.cjs.entry.js +34 -17
  253. package/dist/cjs/ion-chip.cjs.entry.js +50 -9
  254. package/dist/cjs/ion-col_3.cjs.entry.js +56 -57
  255. package/dist/cjs/ion-datetime-button.cjs.entry.js +13 -9
  256. package/dist/cjs/ion-datetime_3.cjs.entry.js +121 -46
  257. package/dist/cjs/ion-divider.cjs.entry.js +51 -0
  258. package/dist/cjs/ion-fab_3.cjs.entry.js +44 -28
  259. package/dist/cjs/ion-gallery-item.cjs.entry.js +59 -0
  260. package/dist/cjs/ion-gallery.cjs.entry.js +607 -0
  261. package/dist/cjs/ion-img.cjs.entry.js +8 -4
  262. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +93 -17
  263. package/dist/cjs/ion-input-otp.cjs.entry.js +74 -9
  264. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +53 -15
  265. package/dist/cjs/ion-input.cjs.entry.js +146 -35
  266. package/dist/cjs/ion-item-option_3.cjs.entry.js +467 -52
  267. package/dist/cjs/ion-item_8.cjs.entry.js +121 -50
  268. package/dist/cjs/ion-loading.cjs.entry.js +22 -19
  269. package/dist/cjs/ion-menu_3.cjs.entry.js +47 -29
  270. package/dist/cjs/ion-modal.cjs.entry.js +298 -142
  271. package/dist/cjs/ion-nav_2.cjs.entry.js +14 -11
  272. package/dist/cjs/ion-picker-column-option.cjs.entry.js +12 -8
  273. package/dist/cjs/ion-picker-column.cjs.entry.js +14 -14
  274. package/dist/cjs/ion-picker.cjs.entry.js +10 -6
  275. package/dist/cjs/ion-popover.cjs.entry.js +21 -19
  276. package/dist/cjs/ion-progress-bar.cjs.entry.js +27 -9
  277. package/dist/cjs/ion-radio_2.cjs.entry.js +36 -18
  278. package/dist/cjs/ion-range.cjs.entry.js +20 -13
  279. package/dist/cjs/ion-refresher_2.cjs.entry.js +43 -24
  280. package/dist/cjs/ion-reorder_2.cjs.entry.js +38 -14
  281. package/dist/cjs/ion-ripple-effect.cjs.entry.js +15 -7
  282. package/dist/cjs/ion-route_4.cjs.entry.js +11 -10
  283. package/dist/cjs/ion-searchbar.cjs.entry.js +160 -27
  284. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  285. package/dist/cjs/ion-segment-view.cjs.entry.js +13 -3
  286. package/dist/cjs/ion-segment_2.cjs.entry.js +23 -16
  287. package/dist/cjs/ion-select-modal.cjs.entry.js +114 -38
  288. package/dist/cjs/ion-select_3.cjs.entry.js +557 -108
  289. package/dist/cjs/ion-spinner.cjs.entry.js +30 -8
  290. package/dist/cjs/ion-split-pane.cjs.entry.js +13 -9
  291. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +150 -28
  292. package/dist/cjs/ion-tab_2.cjs.entry.js +8 -7
  293. package/dist/cjs/ion-text.cjs.entry.js +7 -7
  294. package/dist/cjs/ion-textarea.cjs.entry.js +137 -23
  295. package/dist/cjs/ion-toast.cjs.entry.js +70 -46
  296. package/dist/cjs/ion-toggle.cjs.entry.js +82 -26
  297. package/dist/cjs/ionic-global-QoUqobrQ.js +519 -0
  298. package/dist/cjs/ionic.cjs.js +4 -4
  299. package/dist/cjs/{ios.transition-BOSWOaiK.js → ios.transition-DpFQfFfT.js} +7 -5
  300. package/dist/cjs/{item-multiple-inputs-D-gyg57c.js → item-multiple-inputs-BG9f5_eV.js} +1 -1
  301. package/dist/cjs/{keyboard-UuAS4D_9.js → keyboard-Bn0Ppim6.js} +1 -1
  302. package/dist/cjs/{keyboard-hHzlEQpk.js → keyboard-faZBQysj.js} +4 -3
  303. package/dist/cjs/list-a-7GSA6K.js +8 -0
  304. package/dist/cjs/loader.cjs.js +4 -4
  305. package/dist/cjs/{md.transition-B8-wBZqt.js → md.transition-ChJcoZUH.js} +6 -5
  306. package/dist/cjs/{notch-controller-18PzRGXd.js → notch-controller-BO0UGB4F.js} +4 -4
  307. package/dist/cjs/overlay-control-label-DnRLQR1t.js +52 -0
  308. package/dist/cjs/{overlays-DdtIYQUH.js → overlays-CFGbPUmE.js} +309 -18
  309. package/dist/cjs/scroll-hide-controller-G9HOmmhN.js +345 -0
  310. package/dist/cjs/select-option-render-DqBHEjDn.js +124 -0
  311. package/dist/cjs/{status-tap-N1kaBbuk.js → status-tap-x2qDo5QR.js} +4 -3
  312. package/dist/cjs/{swipe-back-C0GCB18x.js → swipe-back-CvZt_4YX.js} +3 -2
  313. package/dist/cjs/{theme-CeDs6Hcv.js → theme-IlOsGAz7.js} +25 -1
  314. package/dist/cjs/validity-QmuwEptc.js +51 -0
  315. package/dist/cjs/x-BTF99yFH.js +8 -0
  316. package/dist/collection/collection-manifest.json +9 -1
  317. package/dist/collection/components/accordion/accordion.ionic.css +201 -0
  318. package/dist/collection/components/accordion/accordion.ios.css +73 -58
  319. package/dist/collection/components/accordion/accordion.js +41 -27
  320. package/dist/collection/components/accordion/accordion.md.css +67 -59
  321. package/dist/collection/components/accordion-group/accordion-group.ionic.css +93 -0
  322. package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
  323. package/dist/collection/components/accordion-group/accordion-group.js +44 -8
  324. package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
  325. package/dist/collection/components/action-sheet/action-sheet.ionic.css +494 -0
  326. package/dist/collection/components/action-sheet/action-sheet.ios.css +367 -11
  327. package/dist/collection/components/action-sheet/action-sheet.js +32 -13
  328. package/dist/collection/components/action-sheet/action-sheet.md.css +306 -10
  329. package/dist/collection/components/alert/alert.ionic.css +787 -0
  330. package/dist/collection/components/alert/alert.ios.css +481 -19
  331. package/dist/collection/components/alert/alert.js +67 -30
  332. package/dist/collection/components/alert/alert.md.css +464 -29
  333. package/dist/collection/components/app/app.js +15 -83
  334. package/dist/collection/components/avatar/avatar.ionic.css +385 -0
  335. package/dist/collection/components/avatar/avatar.ios.css +7 -33
  336. package/dist/collection/components/avatar/avatar.js +120 -4
  337. package/dist/collection/components/avatar/avatar.md.css +51 -0
  338. package/dist/collection/components/back-button/back-button.ios.css +60 -48
  339. package/dist/collection/components/back-button/back-button.js +27 -19
  340. package/dist/collection/components/back-button/back-button.md.css +60 -48
  341. package/dist/collection/components/backdrop/backdrop.ionic.css +109 -0
  342. package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
  343. package/dist/collection/components/backdrop/backdrop.js +12 -6
  344. package/dist/collection/components/backdrop/backdrop.md.css +56 -19
  345. package/dist/collection/components/badge/badge.ionic.css +272 -0
  346. package/dist/collection/components/badge/badge.ios.css +137 -12
  347. package/dist/collection/components/badge/badge.js +145 -9
  348. package/dist/collection/components/badge/badge.md.css +122 -12
  349. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
  350. package/dist/collection/components/breadcrumb/breadcrumb.js +43 -11
  351. package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
  352. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
  353. package/dist/collection/components/breadcrumbs/breadcrumbs.js +11 -9
  354. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
  355. package/dist/collection/components/button/button.ionic.css +644 -0
  356. package/dist/collection/components/button/button.ios.css +154 -46
  357. package/dist/collection/components/button/button.js +63 -27
  358. package/dist/collection/components/button/button.md.css +150 -50
  359. package/dist/collection/components/buttons/buttons.ionic.css +97 -0
  360. package/dist/collection/components/buttons/buttons.ios.css +59 -7
  361. package/dist/collection/components/buttons/buttons.js +15 -9
  362. package/dist/collection/components/buttons/buttons.md.css +55 -3
  363. package/dist/collection/components/card/card.ionic.css +144 -0
  364. package/dist/collection/components/card/card.ios.css +65 -14
  365. package/dist/collection/components/card/card.js +41 -10
  366. package/dist/collection/components/card/card.md.css +65 -14
  367. package/dist/collection/components/card-content/card-content.ionic.css +89 -0
  368. package/dist/collection/components/card-content/card-content.ios.css +20 -35
  369. package/dist/collection/components/card-content/card-content.js +12 -10
  370. package/dist/collection/components/card-content/card-content.md.css +20 -35
  371. package/dist/collection/components/card-header/card-header.ionic.css +85 -0
  372. package/dist/collection/components/card-header/card-header.ios.css +27 -15
  373. package/dist/collection/components/card-header/card-header.js +13 -10
  374. package/dist/collection/components/card-header/card-header.md.css +27 -15
  375. package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +144 -0
  376. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
  377. package/dist/collection/components/card-subtitle/card-subtitle.js +11 -8
  378. package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
  379. package/dist/collection/components/card-title/card-title.ios.css +73 -0
  380. package/dist/collection/components/card-title/card-title.js +11 -8
  381. package/dist/collection/components/card-title/card-title.md.css +73 -0
  382. package/dist/collection/components/checkbox/checkbox.ionic.css +543 -0
  383. package/dist/collection/components/checkbox/checkbox.ios.css +242 -117
  384. package/dist/collection/components/checkbox/checkbox.js +69 -14
  385. package/dist/collection/components/checkbox/checkbox.md.css +243 -118
  386. package/dist/collection/components/chip/chip.ionic.css +217 -0
  387. package/dist/collection/components/chip/chip.ios.css +67 -14
  388. package/dist/collection/components/chip/chip.js +108 -8
  389. package/dist/collection/components/chip/chip.md.css +67 -14
  390. package/dist/collection/components/col/col.css +192 -4
  391. package/dist/collection/components/col/col.js +211 -61
  392. package/dist/collection/components/content/content.css +47 -2
  393. package/dist/collection/components/content/content.js +16 -11
  394. package/dist/collection/components/datetime/datetime.ionic.css +703 -0
  395. package/dist/collection/components/datetime/datetime.ios.css +302 -106
  396. package/dist/collection/components/datetime/datetime.js +97 -20
  397. package/dist/collection/components/datetime/datetime.md.css +293 -96
  398. package/dist/collection/components/datetime/utils/data.js +5 -5
  399. package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -0
  400. package/dist/collection/components/datetime-button/datetime-button.js +11 -8
  401. package/dist/collection/components/datetime-button/datetime-button.md.css +6 -0
  402. package/dist/collection/components/divider/divider.ionic.css +148 -0
  403. package/dist/collection/components/divider/divider.ios.css +87 -0
  404. package/dist/collection/components/divider/divider.js +94 -0
  405. package/dist/collection/components/divider/divider.md.css +87 -0
  406. package/dist/collection/components/fab/fab.css +25 -1
  407. package/dist/collection/components/fab/fab.js +9 -5
  408. package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
  409. package/dist/collection/components/fab-button/fab-button.js +36 -21
  410. package/dist/collection/components/fab-button/fab-button.md.css +20 -8
  411. package/dist/collection/components/fab-list/fab-list.css +12 -0
  412. package/dist/collection/components/fab-list/fab-list.js +9 -5
  413. package/dist/collection/components/footer/footer-interface.js +1 -0
  414. package/dist/collection/components/footer/footer.ios.css +33 -6
  415. package/dist/collection/components/footer/footer.js +117 -25
  416. package/dist/collection/components/footer/footer.md.css +40 -0
  417. package/dist/collection/components/gallery/gallery-constants.js +12 -0
  418. package/dist/collection/components/gallery/gallery-interface.js +1 -0
  419. package/dist/collection/components/gallery/gallery.css +15 -0
  420. package/dist/collection/components/gallery/gallery.js +679 -0
  421. package/dist/collection/components/gallery/test/utils.js +100 -0
  422. package/dist/collection/components/gallery-item/gallery-item.css +49 -0
  423. package/dist/collection/components/gallery-item/gallery-item.js +99 -0
  424. package/dist/collection/components/grid/grid.css +12 -0
  425. package/dist/collection/components/grid/grid.js +9 -5
  426. package/dist/collection/components/header/header-interface.js +1 -0
  427. package/dist/collection/components/header/header.ionic.css +250 -0
  428. package/dist/collection/components/header/header.ios.css +178 -133
  429. package/dist/collection/components/header/header.js +181 -39
  430. package/dist/collection/components/header/header.md.css +199 -9
  431. package/dist/collection/components/header/header.utils.js +6 -13
  432. package/dist/collection/components/img/img.js +8 -2
  433. package/dist/collection/components/infinite-scroll/infinite-scroll.js +100 -5
  434. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
  435. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +16 -10
  436. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
  437. package/dist/collection/components/input/input.ionic.css +891 -0
  438. package/dist/collection/components/input/input.ios.css +224 -137
  439. package/dist/collection/components/input/input.js +172 -39
  440. package/dist/collection/components/input/input.md.css +194 -209
  441. package/dist/collection/components/input-otp/input-otp.ionic.css +371 -0
  442. package/dist/collection/components/input-otp/input-otp.ios.css +105 -60
  443. package/dist/collection/components/input-otp/input-otp.js +74 -7
  444. package/dist/collection/components/input-otp/input-otp.md.css +105 -60
  445. package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +78 -0
  446. package/dist/collection/components/input-password-toggle/input-password-toggle.js +48 -12
  447. package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
  448. package/dist/collection/components/item/item.ionic.css +496 -0
  449. package/dist/collection/components/item/item.ios.css +120 -80
  450. package/dist/collection/components/item/item.js +56 -21
  451. package/dist/collection/components/item/item.md.css +131 -79
  452. package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
  453. package/dist/collection/components/item-divider/item-divider.js +11 -8
  454. package/dist/collection/components/item-divider/item-divider.md.css +18 -0
  455. package/dist/collection/components/item-group/item-group.ios.css +12 -0
  456. package/dist/collection/components/item-group/item-group.js +13 -7
  457. package/dist/collection/components/item-group/item-group.md.css +12 -0
  458. package/dist/collection/components/item-option/item-option.ionic.css +277 -0
  459. package/dist/collection/components/item-option/item-option.ios.css +136 -29
  460. package/dist/collection/components/item-option/item-option.js +73 -9
  461. package/dist/collection/components/item-option/item-option.md.css +136 -29
  462. package/dist/collection/components/item-options/item-options.ionic.css +221 -0
  463. package/dist/collection/components/item-options/item-options.ios.css +77 -34
  464. package/dist/collection/components/item-options/item-options.js +13 -7
  465. package/dist/collection/components/item-options/item-options.md.css +77 -34
  466. package/dist/collection/components/item-sliding/item-sliding.ionic.css +211 -0
  467. package/dist/collection/components/item-sliding/item-sliding.js +421 -35
  468. package/dist/collection/components/item-sliding/{item-sliding.css → item-sliding.native.css} +84 -9
  469. package/dist/collection/components/item-sliding/test/test.utils.js +13 -0
  470. package/dist/collection/components/label/label.ios.css +18 -0
  471. package/dist/collection/components/label/label.js +11 -8
  472. package/dist/collection/components/label/label.md.css +18 -0
  473. package/dist/collection/components/list/list.ionic.css +212 -0
  474. package/dist/collection/components/list/list.ios.css +54 -14
  475. package/dist/collection/components/list/list.js +48 -9
  476. package/dist/collection/components/list/list.md.css +56 -16
  477. package/dist/collection/components/list-header/list-header.ionic.css +190 -0
  478. package/dist/collection/components/list-header/list-header.ios.css +82 -38
  479. package/dist/collection/components/list-header/list-header.js +11 -8
  480. package/dist/collection/components/list-header/list-header.md.css +82 -38
  481. package/dist/collection/components/loading/loading.ios.css +13 -1
  482. package/dist/collection/components/loading/loading.js +14 -11
  483. package/dist/collection/components/loading/loading.md.css +13 -1
  484. package/dist/collection/components/menu/menu.ios.css +15 -3
  485. package/dist/collection/components/menu/menu.js +12 -7
  486. package/dist/collection/components/menu/menu.md.css +15 -3
  487. package/dist/collection/components/menu-button/menu-button.ionic.css +236 -0
  488. package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
  489. package/dist/collection/components/menu-button/menu-button.js +26 -10
  490. package/dist/collection/components/menu-button/menu-button.md.css +49 -15
  491. package/dist/collection/components/menu-toggle/menu-toggle.js +8 -5
  492. package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
  493. package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
  494. package/dist/collection/components/modal/animations/sheet.js +8 -2
  495. package/dist/collection/components/modal/gestures/sheet.js +99 -15
  496. package/dist/collection/components/modal/gestures/swipe-to-close.js +32 -3
  497. package/dist/collection/components/modal/gestures/utils.js +0 -17
  498. package/dist/collection/components/modal/modal.ionic.css +255 -0
  499. package/dist/collection/components/modal/modal.ios.css +178 -70
  500. package/dist/collection/components/modal/modal.js +50 -12
  501. package/dist/collection/components/modal/modal.md.css +178 -70
  502. package/dist/collection/components/nav/nav.css +7 -1
  503. package/dist/collection/components/nav/nav.js +11 -5
  504. package/dist/collection/components/nav-link/nav-link.js +5 -1
  505. package/dist/collection/components/note/note.ios.css +12 -0
  506. package/dist/collection/components/note/note.js +11 -8
  507. package/dist/collection/components/note/note.md.css +12 -0
  508. package/dist/collection/components/picker/picker.ios.css +15 -3
  509. package/dist/collection/components/picker/picker.js +8 -5
  510. package/dist/collection/components/picker/picker.md.css +15 -3
  511. package/dist/collection/components/picker-column/picker-column.css +9 -2
  512. package/dist/collection/components/picker-column/picker-column.js +8 -7
  513. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
  514. package/dist/collection/components/picker-column-option/picker-column-option.js +13 -7
  515. package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -0
  516. package/dist/collection/components/picker-legacy/picker.ios.css +13 -1
  517. package/dist/collection/components/picker-legacy/picker.js +7 -6
  518. package/dist/collection/components/picker-legacy/picker.md.css +13 -1
  519. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +12 -0
  520. package/dist/collection/components/picker-legacy-column/picker-column.js +4 -4
  521. package/dist/collection/components/picker-legacy-column/picker-column.md.css +12 -0
  522. package/dist/collection/components/popover/popover.ionic.css +290 -0
  523. package/dist/collection/components/popover/popover.ios.css +29 -1
  524. package/dist/collection/components/popover/popover.js +18 -15
  525. package/dist/collection/components/popover/popover.md.css +29 -1
  526. package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
  527. package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
  528. package/dist/collection/components/progress-bar/progress-bar.js +43 -7
  529. package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
  530. package/dist/collection/components/radio/radio.ionic.css +422 -0
  531. package/dist/collection/components/radio/radio.ios.css +207 -102
  532. package/dist/collection/components/radio/radio.js +14 -9
  533. package/dist/collection/components/radio/radio.md.css +207 -102
  534. package/dist/collection/components/radio-group/radio-group.ionic.css +119 -0
  535. package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
  536. package/dist/collection/components/radio-group/radio-group.js +48 -7
  537. package/dist/collection/components/radio-group/radio-group.md.css +43 -19
  538. package/dist/collection/components/range/range.ionic.css +567 -0
  539. package/dist/collection/components/range/range.ios.css +128 -85
  540. package/dist/collection/components/range/range.js +16 -10
  541. package/dist/collection/components/range/range.md.css +128 -85
  542. package/dist/collection/components/refresher/refresher.ios.css +14 -1
  543. package/dist/collection/components/refresher/refresher.js +13 -10
  544. package/dist/collection/components/refresher/refresher.md.css +15 -2
  545. package/dist/collection/components/refresher-content/refresher-content.js +28 -7
  546. package/dist/collection/components/reorder/reorder.ios.css +6 -0
  547. package/dist/collection/components/reorder/reorder.js +33 -6
  548. package/dist/collection/components/reorder/reorder.md.css +6 -0
  549. package/dist/collection/components/reorder-group/reorder-group.css +6 -0
  550. package/dist/collection/components/reorder-group/reorder-group.js +8 -4
  551. package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
  552. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
  553. package/dist/collection/components/ripple-effect/ripple-effect.js +14 -6
  554. package/dist/collection/components/route/route.js +4 -0
  555. package/dist/collection/components/router/router.js +4 -0
  556. package/dist/collection/components/router-link/router-link.css +8 -2
  557. package/dist/collection/components/router-link/router-link.js +9 -5
  558. package/dist/collection/components/router-outlet/router-outlet.css +7 -1
  559. package/dist/collection/components/router-outlet/router-outlet.js +6 -3
  560. package/dist/collection/components/row/row.css +16 -0
  561. package/dist/collection/components/row/row.js +9 -2
  562. package/dist/collection/components/searchbar/searchbar.ionic.css +622 -0
  563. package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
  564. package/dist/collection/components/searchbar/searchbar.js +205 -37
  565. package/dist/collection/components/searchbar/searchbar.md.css +56 -18
  566. package/dist/collection/components/segment/segment.ionic.css +115 -0
  567. package/dist/collection/components/segment/segment.ios.css +45 -2
  568. package/dist/collection/components/segment/segment.js +11 -8
  569. package/dist/collection/components/segment/segment.md.css +45 -2
  570. package/dist/collection/components/segment-button/segment-button.ionic.css +352 -0
  571. package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
  572. package/dist/collection/components/segment-button/segment-button.js +11 -8
  573. package/dist/collection/components/segment-button/segment-button.md.css +148 -107
  574. package/dist/collection/components/segment-content/segment-content.js +1 -1
  575. package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
  576. package/dist/collection/components/segment-view/segment-view.js +13 -4
  577. package/dist/collection/components/segment-view/segment-view.md.css +6 -0
  578. package/dist/collection/components/select/select.ionic.css +809 -0
  579. package/dist/collection/components/select/select.ios.css +348 -176
  580. package/dist/collection/components/select/select.js +521 -92
  581. package/dist/collection/components/select/select.md.css +364 -178
  582. package/dist/collection/components/select-modal/select-modal.ionic.css +257 -0
  583. package/dist/collection/components/select-modal/select-modal.ios.css +466 -0
  584. package/dist/collection/components/select-modal/select-modal.js +126 -30
  585. package/dist/collection/components/select-modal/select-modal.md.css +394 -0
  586. package/dist/collection/components/select-option/select-option.js +72 -4
  587. package/dist/collection/components/select-popover/select-popover.ionic.css +255 -0
  588. package/dist/collection/components/select-popover/select-popover.ios.css +302 -20
  589. package/dist/collection/components/select-popover/select-popover.js +89 -29
  590. package/dist/collection/components/select-popover/select-popover.md.css +345 -0
  591. package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
  592. package/dist/collection/components/skeleton-text/skeleton-text.js +9 -5
  593. package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
  594. package/dist/collection/components/spinner/spinner.js +47 -6
  595. package/dist/collection/components/spinner/spinner.native.css +199 -0
  596. package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
  597. package/dist/collection/components/split-pane/split-pane.js +15 -8
  598. package/dist/collection/components/split-pane/split-pane.md.css +20 -2
  599. package/dist/collection/components/tab/tab.js +6 -2
  600. package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
  601. package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
  602. package/dist/collection/components/tab-bar/tab-bar.js +179 -15
  603. package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
  604. package/dist/collection/components/tab-button/tab-button.ionic.css +373 -0
  605. package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
  606. package/dist/collection/components/tab-button/tab-button.js +54 -9
  607. package/dist/collection/components/tab-button/tab-button.md.css +137 -93
  608. package/dist/collection/components/tabs/tabs.css +7 -1
  609. package/dist/collection/components/tabs/tabs.js +4 -1
  610. package/dist/collection/components/text/text.css +6 -0
  611. package/dist/collection/components/text/text.js +7 -6
  612. package/dist/collection/components/textarea/textarea.ionic.css +898 -0
  613. package/dist/collection/components/textarea/textarea.ios.css +298 -158
  614. package/dist/collection/components/textarea/textarea.js +162 -24
  615. package/dist/collection/components/textarea/textarea.md.css +312 -159
  616. package/dist/collection/components/thumbnail/thumbnail.css +6 -0
  617. package/dist/collection/components/thumbnail/thumbnail.js +9 -2
  618. package/dist/collection/components/title/title.ionic.css +127 -0
  619. package/dist/collection/components/title/title.ios.css +32 -4
  620. package/dist/collection/components/title/title.js +13 -7
  621. package/dist/collection/components/title/title.md.css +39 -4
  622. package/dist/collection/components/toast/animations/utils.js +1 -1
  623. package/dist/collection/components/toast/toast.ionic.css +394 -0
  624. package/dist/collection/components/toast/toast.ios.css +84 -45
  625. package/dist/collection/components/toast/toast.js +76 -13
  626. package/dist/collection/components/toast/toast.md.css +84 -45
  627. package/dist/collection/components/toggle/toggle.ionic.css +512 -0
  628. package/dist/collection/components/toggle/toggle.ios.css +247 -127
  629. package/dist/collection/components/toggle/toggle.js +72 -18
  630. package/dist/collection/components/toggle/toggle.md.css +245 -127
  631. package/dist/collection/components/toolbar/test/image.svg +1 -0
  632. package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
  633. package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
  634. package/dist/collection/components/toolbar/toolbar.js +218 -13
  635. package/dist/collection/components/toolbar/toolbar.md.css +90 -47
  636. package/dist/collection/global/ionic-global.js +241 -13
  637. package/dist/collection/utils/content/index.js +0 -30
  638. package/dist/collection/utils/css-value-validation.js +39 -0
  639. package/dist/collection/utils/focus-trap.js +13 -2
  640. package/dist/collection/utils/focus-visible.js +22 -0
  641. package/dist/collection/utils/forms/validity.js +31 -0
  642. package/dist/collection/utils/framework-delegate.js +3 -1
  643. package/dist/collection/utils/hardware-back-button.js +15 -0
  644. package/dist/collection/utils/helpers.js +70 -3
  645. package/dist/collection/utils/keyboard/keyboard-controller.js +3 -1
  646. package/dist/collection/utils/media.js +1 -0
  647. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  648. package/dist/collection/utils/menu-controller/animations/push.js +2 -1
  649. package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
  650. package/dist/collection/utils/overlay-control-label.js +47 -0
  651. package/dist/collection/utils/overlays.js +290 -8
  652. package/dist/collection/utils/sanitization/index.js +274 -18
  653. package/dist/collection/utils/scroll-hide-controller.js +178 -0
  654. package/dist/collection/utils/select-option-render.js +119 -0
  655. package/dist/collection/utils/test/playwright/drag-element.js +32 -9
  656. package/dist/collection/utils/test/playwright/generator.js +48 -23
  657. package/dist/collection/utils/test/playwright/page/utils/goto.js +14 -5
  658. package/dist/collection/utils/test/playwright/page/utils/set-content.js +26 -3
  659. package/dist/collection/utils/theme.js +25 -1
  660. package/dist/collection/utils/transition/ios.transition.js +1 -0
  661. package/dist/docs.json +9090 -286
  662. package/dist/esm/{animation-DLJpuoEz.js → animation-B2qdQ_ou.js} +2 -2
  663. package/dist/esm/{app-globals-D0C5S4hU.js → app-globals-DZ-iIjxA.js} +1 -1
  664. package/dist/esm/{button-active-BSpTQmS9.js → button-active-BmajAby6.js} +2 -2
  665. package/dist/esm/{capacitor-CFERIeaU.js → capacitor-CtQSWUU0.js} +1 -1
  666. package/dist/esm/caret-down-D1t981Ih.js +6 -0
  667. package/dist/esm/caret-left-fIOYmaqA.js +6 -0
  668. package/dist/esm/caret-right-BYSs-jZz.js +6 -0
  669. package/dist/esm/config-BwKpO3Is.js +31 -0
  670. package/dist/esm/{focus-visible-BmVRXR1y.js → focus-visible-vXpMhGrs.js} +23 -1
  671. package/dist/esm/{format-CAmvpAez.js → format-2WlZcMvG.js} +1 -1
  672. package/dist/esm/{framework-delegate-FnPGymXL.js → framework-delegate-DO2QXccA.js} +4 -2
  673. package/dist/esm/{haptic-DzAMWJuk.js → haptic-DFgKNCce.js} +1 -1
  674. package/dist/esm/{helpers-HEqiOzXb.js → helpers-DfF5_wJc.js} +71 -5
  675. package/dist/esm/{index-DV3sJJW8.js → index-B4Kq2YNk.js} +3 -2
  676. package/dist/esm/{index-B_dQk_WE.js → index-BIUWGRUl.js} +4 -4
  677. package/dist/esm/{index-BRHzoo00.js → index-BjaaZqVY.js} +4 -3
  678. package/dist/esm/{index-tcQvqkiX.js → index-C0EQceqV.js} +41 -4
  679. package/dist/esm/{index-Q6UPU0Ay.js → index-Di034G4O.js} +11 -11
  680. package/dist/esm/{index-Dw-wN0Ja.js → index-KxK0gcRp.js} +3 -33
  681. package/dist/esm/index-Mq5pCWmZ.js +424 -0
  682. package/dist/esm/index.js +14 -14
  683. package/dist/esm/{input-shims-LXhI7LEx.js → input-shims-DvNNw70a.js} +7 -6
  684. package/dist/esm/{input.utils-Y6NgW8bw.js → input.utils-_LkBfBWt.js} +3 -3
  685. package/dist/esm/ion-accordion_2.entry.js +61 -29
  686. package/dist/esm/ion-action-sheet.entry.js +41 -22
  687. package/dist/esm/ion-alert.entry.js +77 -40
  688. package/dist/esm/ion-app_8.entry.js +457 -193
  689. package/dist/esm/ion-avatar_3.entry.js +125 -13
  690. package/dist/esm/ion-back-button.entry.js +31 -22
  691. package/dist/esm/ion-backdrop.entry.js +10 -7
  692. package/dist/esm/ion-breadcrumb_2.entry.js +54 -18
  693. package/dist/esm/ion-button_2.entry.js +61 -24
  694. package/dist/esm/ion-card_5.entry.js +55 -33
  695. package/dist/esm/ion-checkbox.entry.js +34 -17
  696. package/dist/esm/ion-chip.entry.js +50 -9
  697. package/dist/esm/ion-col_3.entry.js +56 -57
  698. package/dist/esm/ion-datetime-button.entry.js +13 -9
  699. package/dist/esm/ion-datetime_3.entry.js +121 -46
  700. package/dist/esm/ion-divider.entry.js +49 -0
  701. package/dist/esm/ion-fab_3.entry.js +44 -28
  702. package/dist/esm/ion-gallery-item.entry.js +57 -0
  703. package/dist/esm/ion-gallery.entry.js +605 -0
  704. package/dist/esm/ion-img.entry.js +8 -4
  705. package/dist/esm/ion-infinite-scroll_2.entry.js +92 -16
  706. package/dist/esm/ion-input-otp.entry.js +74 -9
  707. package/dist/esm/ion-input-password-toggle.entry.js +53 -15
  708. package/dist/esm/ion-input.entry.js +146 -35
  709. package/dist/esm/ion-item-option_3.entry.js +467 -52
  710. package/dist/esm/ion-item_8.entry.js +121 -50
  711. package/dist/esm/ion-loading.entry.js +21 -18
  712. package/dist/esm/ion-menu_3.entry.js +47 -29
  713. package/dist/esm/ion-modal.entry.js +264 -108
  714. package/dist/esm/ion-nav_2.entry.js +14 -11
  715. package/dist/esm/ion-picker-column-option.entry.js +12 -8
  716. package/dist/esm/ion-picker-column.entry.js +13 -13
  717. package/dist/esm/ion-picker.entry.js +10 -6
  718. package/dist/esm/ion-popover.entry.js +21 -19
  719. package/dist/esm/ion-progress-bar.entry.js +27 -9
  720. package/dist/esm/ion-radio_2.entry.js +36 -18
  721. package/dist/esm/ion-range.entry.js +20 -13
  722. package/dist/esm/ion-refresher_2.entry.js +41 -22
  723. package/dist/esm/ion-reorder_2.entry.js +38 -14
  724. package/dist/esm/ion-ripple-effect.entry.js +15 -7
  725. package/dist/esm/ion-route_4.entry.js +11 -10
  726. package/dist/esm/ion-searchbar.entry.js +160 -27
  727. package/dist/esm/ion-segment-content.entry.js +2 -2
  728. package/dist/esm/ion-segment-view.entry.js +13 -3
  729. package/dist/esm/ion-segment_2.entry.js +23 -16
  730. package/dist/esm/ion-select-modal.entry.js +114 -38
  731. package/dist/esm/ion-select_3.entry.js +557 -108
  732. package/dist/esm/ion-spinner.entry.js +30 -8
  733. package/dist/esm/ion-split-pane.entry.js +13 -9
  734. package/dist/esm/ion-tab-bar_2.entry.js +149 -27
  735. package/dist/esm/ion-tab_2.entry.js +8 -7
  736. package/dist/esm/ion-text.entry.js +7 -7
  737. package/dist/esm/ion-textarea.entry.js +137 -23
  738. package/dist/esm/ion-toast.entry.js +45 -21
  739. package/dist/esm/ion-toggle.entry.js +82 -26
  740. package/dist/esm/ionic-global-BpkTponr.js +508 -0
  741. package/dist/esm/ionic.js +5 -5
  742. package/dist/esm/{ios.transition-ClFrsIrS.js → ios.transition-CgScDbsb.js} +7 -5
  743. package/dist/esm/{item-multiple-inputs-DlNuqNJm.js → item-multiple-inputs-C6onMFOo.js} +1 -1
  744. package/dist/esm/{keyboard-CUw4ekVy.js → keyboard-CyyguLDw.js} +1 -1
  745. package/dist/esm/{keyboard-ywgs5efA.js → keyboard-WJix-wcz.js} +4 -3
  746. package/dist/esm/list-Dhi5xtNS.js +6 -0
  747. package/dist/esm/loader.js +5 -5
  748. package/dist/esm/{md.transition-D0msQmzI.js → md.transition-DThqYazt.js} +6 -5
  749. package/dist/esm/{notch-controller-DKDjU_O7.js → notch-controller-MTblRxjD.js} +2 -2
  750. package/dist/esm/overlay-control-label-CODBQrPj.js +49 -0
  751. package/dist/esm/{overlays-Dg0q2_tJ.js → overlays-tv6nLsmk.js} +306 -15
  752. package/dist/esm/scroll-hide-controller-CUNW7EpD.js +342 -0
  753. package/dist/esm/select-option-render-BlKZ2H83.js +122 -0
  754. package/dist/esm/{status-tap-vO-6s4Yp.js → status-tap-CoPI1M2q.js} +4 -3
  755. package/dist/esm/{swipe-back-DQ1q5MgD.js → swipe-back-qmvTRnSq.js} +3 -2
  756. package/dist/esm/{theme-DiVJyqlX.js → theme-DaJxRxSQ.js} +25 -1
  757. package/dist/esm/validity-BjW8SOqw.js +48 -0
  758. package/dist/esm/x-BDqjX7Z_.js +6 -0
  759. package/dist/html.html-data.json +2707 -168
  760. package/dist/ionic/index.esm.js +1 -1
  761. package/dist/ionic/ionic.esm.js +1 -1
  762. package/dist/ionic/p--sroV-k-.js +4 -0
  763. package/dist/ionic/p-05ce9821.entry.js +4 -0
  764. package/dist/ionic/p-085b8cdf.entry.js +4 -0
  765. package/dist/ionic/p-0ef6bfc4.entry.js +4 -0
  766. package/dist/ionic/p-176d37f8.entry.js +4 -0
  767. package/dist/ionic/p-18b7771e.entry.js +4 -0
  768. package/dist/ionic/p-19f34fe5.entry.js +4 -0
  769. package/dist/ionic/p-1b6e3914.entry.js +4 -0
  770. package/dist/ionic/p-2740db6e.entry.js +4 -0
  771. package/dist/ionic/p-2a1abbb1.entry.js +4 -0
  772. package/dist/ionic/p-2d9c681b.entry.js +4 -0
  773. package/dist/ionic/p-2fba8f15.entry.js +4 -0
  774. package/dist/ionic/p-3886bfbe.entry.js +4 -0
  775. package/dist/ionic/p-3ab9c35a.entry.js +4 -0
  776. package/dist/ionic/p-3b4c5cb5.entry.js +4 -0
  777. package/dist/ionic/p-3cfb4ff2.entry.js +4 -0
  778. package/dist/ionic/p-41afaf15.entry.js +4 -0
  779. package/dist/ionic/p-47b9dac0.entry.js +4 -0
  780. package/dist/ionic/p-54419365.entry.js +4 -0
  781. package/dist/ionic/p-54b7972e.entry.js +4 -0
  782. package/dist/ionic/p-602cf876.entry.js +4 -0
  783. package/dist/ionic/p-678ee14a.entry.js +4 -0
  784. package/dist/ionic/p-679c1448.entry.js +4 -0
  785. package/dist/ionic/p-68ea8ed1.entry.js +4 -0
  786. package/dist/ionic/p-6e1ec775.entry.js +4 -0
  787. package/dist/ionic/p-745d6b2b.entry.js +4 -0
  788. package/dist/ionic/p-77254b78.entry.js +4 -0
  789. package/dist/ionic/{p-C0eMdTCW.js → p-7k7Q1A38.js} +1 -1
  790. package/dist/ionic/p-89fedfda.entry.js +4 -0
  791. package/dist/ionic/p-8cf82b85.entry.js +4 -0
  792. package/dist/ionic/p-8d5fd199.entry.js +4 -0
  793. package/dist/ionic/p-9087119f.entry.js +4 -0
  794. package/dist/ionic/p-9c508a22.entry.js +4 -0
  795. package/dist/ionic/p-B4Kq2YNk.js +4 -0
  796. package/dist/ionic/p-BDSH5ckF.js +4 -0
  797. package/dist/ionic/p-BDqjX7Z_.js +4 -0
  798. package/dist/ionic/p-BFy_BK46.js +4 -0
  799. package/dist/ionic/p-BYSs-jZz.js +4 -0
  800. package/dist/ionic/p-BjW8SOqw.js +4 -0
  801. package/dist/ionic/p-BlZo7Gy-.js +4 -0
  802. package/dist/ionic/p-Bq8S4vhI.js +4 -0
  803. package/dist/ionic/p-BwKpO3Is.js +4 -0
  804. package/dist/ionic/p-C0EQceqV.js +5 -0
  805. package/dist/ionic/p-C1I_d964.js +4 -0
  806. package/dist/ionic/p-CB91Gr9M.js +4 -0
  807. package/dist/ionic/p-CEkwLb3L.js +4 -0
  808. package/dist/ionic/p-CJsJQPQD.js +4 -0
  809. package/dist/ionic/p-CODBQrPj.js +4 -0
  810. package/dist/ionic/p-Ch7MBNn_.js +4 -0
  811. package/dist/ionic/p-Cipl19Qe.js +4 -0
  812. package/dist/ionic/{p-DC3RagnA.js → p-Cm20lBQw.js} +1 -1
  813. package/dist/ionic/p-CnAWnbNK.js +4 -0
  814. package/dist/ionic/p-D1t981Ih.js +4 -0
  815. package/dist/ionic/p-D4MT1z4_.js +4 -0
  816. package/dist/ionic/p-D4veLKCq.js +4 -0
  817. package/dist/ionic/p-DF7ubVci.js +4 -0
  818. package/dist/ionic/p-DMaSfupH.js +4 -0
  819. package/{components/p-D13Eaw-8.js → dist/ionic/p-DQDmksdT.js} +1 -1
  820. package/dist/ionic/p-DTsDGZPd.js +4 -0
  821. package/dist/ionic/p-DaJxRxSQ.js +4 -0
  822. package/dist/ionic/p-DdCaKRle.js +4 -0
  823. package/dist/ionic/p-Dhi5xtNS.js +4 -0
  824. package/dist/ionic/p-Dy243NXW.js +4 -0
  825. package/dist/ionic/{p-CKvCXMs9.js → p-OkgYzj-7.js} +1 -1
  826. package/dist/ionic/p-YIsE5bNG.js +4 -0
  827. package/dist/ionic/p-a4af8e39.entry.js +4 -0
  828. package/dist/ionic/p-b2368a93.entry.js +4 -0
  829. package/dist/ionic/p-b275f17e.entry.js +4 -0
  830. package/dist/ionic/p-c5635175.entry.js +4 -0
  831. package/dist/ionic/p-c76d57fb.entry.js +4 -0
  832. package/dist/ionic/p-ca3a07b5.entry.js +4 -0
  833. package/dist/ionic/p-ced3cda1.entry.js +4 -0
  834. package/dist/ionic/p-cf22e991.entry.js +4 -0
  835. package/dist/ionic/p-d0c1d21d.entry.js +4 -0
  836. package/dist/ionic/p-d0d42da6.entry.js +4 -0
  837. package/dist/ionic/p-d1de76b8.entry.js +4 -0
  838. package/dist/ionic/p-d33dfc12.entry.js +4 -0
  839. package/dist/ionic/p-d34bfb61.entry.js +4 -0
  840. package/dist/ionic/p-dbc08f67.entry.js +4 -0
  841. package/dist/ionic/p-dc8e0b91.entry.js +4 -0
  842. package/dist/ionic/p-df642ef5.entry.js +4 -0
  843. package/dist/ionic/p-e04d63e1.entry.js +4 -0
  844. package/dist/ionic/p-e3615478.entry.js +4 -0
  845. package/dist/ionic/p-f1810d29.entry.js +4 -0
  846. package/dist/ionic/p-f1a8aead.entry.js +4 -0
  847. package/dist/ionic/p-f69af9d3.entry.js +4 -0
  848. package/dist/ionic/p-f8001f8f.entry.js +4 -0
  849. package/dist/ionic/p-f8b63ebb.entry.js +4 -0
  850. package/dist/ionic/p-fIOYmaqA.js +4 -0
  851. package/dist/ionic/p-fc6d26ff.entry.js +4 -0
  852. package/dist/ionic/p-im8OkZlj.js +4 -0
  853. package/dist/ionic/p-lMb_45ax.js +4 -0
  854. package/dist/ionic/p-oUgyLDGL.js +4 -0
  855. package/dist/ionic/p-vXpMhGrs.js +4 -0
  856. package/dist/types/components/accordion/accordion.d.ts +6 -3
  857. package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
  858. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
  859. package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
  860. package/dist/types/components/alert/alert-interface.d.ts +3 -7
  861. package/dist/types/components/alert/alert.d.ts +3 -2
  862. package/dist/types/components/app/app.d.ts +4 -5
  863. package/dist/types/components/avatar/avatar.d.ts +32 -0
  864. package/dist/types/components/back-button/back-button.d.ts +2 -1
  865. package/dist/types/components/backdrop/backdrop.d.ts +4 -0
  866. package/dist/types/components/badge/badge.d.ts +34 -1
  867. package/dist/types/components/breadcrumb/breadcrumb.d.ts +4 -1
  868. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  869. package/dist/types/components/button/button.d.ts +23 -8
  870. package/dist/types/components/buttons/buttons.d.ts +5 -1
  871. package/dist/types/components/card/card.d.ts +8 -1
  872. package/dist/types/components/card-content/card-content.d.ts +2 -1
  873. package/dist/types/components/card-header/card-header.d.ts +3 -2
  874. package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
  875. package/dist/types/components/card-title/card-title.d.ts +2 -1
  876. package/dist/types/components/checkbox/checkbox.d.ts +14 -4
  877. package/dist/types/components/chip/chip.d.ts +26 -1
  878. package/dist/types/components/col/col.d.ts +52 -5
  879. package/dist/types/components/content/content.d.ts +3 -0
  880. package/dist/types/components/datetime/datetime.d.ts +26 -1
  881. package/dist/types/components/datetime/utils/data.d.ts +5 -5
  882. package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
  883. package/dist/types/components/divider/divider.d.ts +20 -0
  884. package/dist/types/components/fab/fab.d.ts +4 -0
  885. package/dist/types/components/fab-button/fab-button.d.ts +5 -3
  886. package/dist/types/components/fab-list/fab-list.d.ts +4 -0
  887. package/dist/types/components/footer/footer-interface.d.ts +1 -0
  888. package/dist/types/components/footer/footer.d.ts +20 -3
  889. package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
  890. package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
  891. package/dist/types/components/gallery/gallery.d.ts +218 -0
  892. package/dist/types/components/gallery/test/utils.d.ts +3 -0
  893. package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
  894. package/dist/types/components/grid/grid.d.ts +4 -0
  895. package/dist/types/components/header/header-interface.d.ts +1 -0
  896. package/dist/types/components/header/header.d.ts +26 -3
  897. package/dist/types/components/header/header.utils.d.ts +4 -5
  898. package/dist/types/components/img/img.d.ts +3 -0
  899. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
  900. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
  901. package/dist/types/components/input/input.d.ts +37 -5
  902. package/dist/types/components/input-otp/input-otp.d.ts +37 -0
  903. package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +2 -0
  904. package/dist/types/components/item/item.d.ts +11 -4
  905. package/dist/types/components/item-divider/item-divider.d.ts +2 -1
  906. package/dist/types/components/item-group/item-group.d.ts +4 -0
  907. package/dist/types/components/item-option/item-option.d.ts +18 -1
  908. package/dist/types/components/item-options/item-options.d.ts +4 -0
  909. package/dist/types/components/item-sliding/item-sliding.d.ts +47 -1
  910. package/dist/types/components/item-sliding/test/test.utils.d.ts +13 -0
  911. package/dist/types/components/label/label.d.ts +2 -1
  912. package/dist/types/components/list/list.d.ts +15 -1
  913. package/dist/types/components/list-header/list-header.d.ts +2 -1
  914. package/dist/types/components/loading/loading-interface.d.ts +2 -7
  915. package/dist/types/components/loading/loading.d.ts +3 -2
  916. package/dist/types/components/menu/menu.d.ts +3 -0
  917. package/dist/types/components/menu-button/menu-button.d.ts +3 -1
  918. package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
  919. package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
  920. package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
  921. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  922. package/dist/types/components/modal/gestures/utils.d.ts +0 -11
  923. package/dist/types/components/modal/modal-interface.d.ts +4 -7
  924. package/dist/types/components/modal/modal.d.ts +11 -1
  925. package/dist/types/components/nav/nav-interface.d.ts +9 -1
  926. package/dist/types/components/nav/nav.d.ts +5 -1
  927. package/dist/types/components/nav-link/nav-link.d.ts +4 -0
  928. package/dist/types/components/note/note.d.ts +2 -1
  929. package/dist/types/components/picker/picker.d.ts +2 -1
  930. package/dist/types/components/picker-column/picker-column.d.ts +2 -1
  931. package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
  932. package/dist/types/components/picker-legacy/picker.d.ts +2 -1
  933. package/dist/types/components/popover/popover-interface.d.ts +3 -6
  934. package/dist/types/components/popover/popover.d.ts +6 -5
  935. package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
  936. package/dist/types/components/radio/radio.d.ts +2 -1
  937. package/dist/types/components/radio-group/radio-group.d.ts +12 -0
  938. package/dist/types/components/range/range.d.ts +2 -1
  939. package/dist/types/components/refresher/refresher.d.ts +2 -1
  940. package/dist/types/components/refresher-content/refresher-content.d.ts +4 -0
  941. package/dist/types/components/reorder/reorder.d.ts +9 -0
  942. package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
  943. package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
  944. package/dist/types/components/route/route.d.ts +4 -0
  945. package/dist/types/components/router/router.d.ts +4 -0
  946. package/dist/types/components/router-link/router-link.d.ts +4 -0
  947. package/dist/types/components/router-outlet/router-outlet.d.ts +4 -1
  948. package/dist/types/components/row/row.d.ts +4 -0
  949. package/dist/types/components/searchbar/searchbar.d.ts +59 -10
  950. package/dist/types/components/segment/segment.d.ts +2 -1
  951. package/dist/types/components/segment-button/segment-button.d.ts +2 -1
  952. package/dist/types/components/select/select-interface.d.ts +31 -0
  953. package/dist/types/components/select/select.d.ts +66 -13
  954. package/dist/types/components/select-modal/select-modal.d.ts +8 -0
  955. package/dist/types/components/select-option/select-option.d.ts +45 -1
  956. package/dist/types/components/select-popover/select-popover.d.ts +3 -0
  957. package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
  958. package/dist/types/components/spinner/spinner.d.ts +15 -0
  959. package/dist/types/components/split-pane/split-pane.d.ts +4 -0
  960. package/dist/types/components/tab/tab.d.ts +4 -0
  961. package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
  962. package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
  963. package/dist/types/components/tab-button/tab-button.d.ts +12 -1
  964. package/dist/types/components/tabs/tabs.d.ts +3 -0
  965. package/dist/types/components/text/text.d.ts +2 -1
  966. package/dist/types/components/textarea/textarea.d.ts +53 -4
  967. package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
  968. package/dist/types/components/title/title.d.ts +4 -0
  969. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  970. package/dist/types/components/toast/toast-interface.d.ts +3 -7
  971. package/dist/types/components/toast/toast.d.ts +19 -2
  972. package/dist/types/components/toggle/toggle.d.ts +15 -1
  973. package/dist/types/components/toolbar/toolbar.d.ts +43 -3
  974. package/dist/types/components.d.ts +1881 -210
  975. package/dist/types/global/ionic-global.d.ts +28 -2
  976. package/dist/types/interface.d.ts +3 -0
  977. package/dist/types/utils/config.d.ts +106 -2
  978. package/dist/types/utils/content/index.d.ts +0 -12
  979. package/dist/types/utils/css-value-validation.d.ts +21 -0
  980. package/dist/types/utils/focus-trap.d.ts +1 -1
  981. package/dist/types/utils/focus-visible.d.ts +13 -0
  982. package/dist/types/utils/forms/validity.d.ts +7 -0
  983. package/dist/types/utils/helpers.d.ts +22 -0
  984. package/dist/types/utils/overlay-control-label.d.ts +34 -0
  985. package/dist/types/utils/overlays-interface.d.ts +31 -1
  986. package/dist/types/utils/overlays.d.ts +1 -1
  987. package/dist/types/utils/sanitization/index.d.ts +58 -2
  988. package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
  989. package/dist/types/utils/select-option-render.d.ts +53 -0
  990. package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
  991. package/dist/types/utils/test/playwright/generator.d.ts +31 -2
  992. package/dist/types/utils/theme.d.ts +9 -0
  993. package/hydrate/index.js +6445 -1444
  994. package/hydrate/index.mjs +6445 -1444
  995. package/package.json +9 -5
  996. package/components/p--JUspHvy.js +0 -4
  997. package/components/p-A3O24YmY.js +0 -4
  998. package/components/p-ABkNVeU9.js +0 -4
  999. package/components/p-B-JJgYSG.js +0 -4
  1000. package/components/p-B9jFTlwE.js +0 -4
  1001. package/components/p-BLmJ0zRm.js +0 -4
  1002. package/components/p-BMI53wYL.js +0 -4
  1003. package/components/p-BMaKgJFV.js +0 -4
  1004. package/components/p-BSEgsdFI.js +0 -4
  1005. package/components/p-BlIAuGv2.js +0 -4
  1006. package/components/p-BmVRXR1y.js +0 -4
  1007. package/components/p-Bnsn6KaP.js +0 -4
  1008. package/components/p-BsBCoGa-.js +0 -4
  1009. package/components/p-Bz0dSlXZ.js +0 -4
  1010. package/components/p-CHqRYvYm.js +0 -4
  1011. package/components/p-CIGNaXM1.js +0 -4
  1012. package/components/p-CO7fmmxt.js +0 -4
  1013. package/components/p-CQGnMY3n.js +0 -4
  1014. package/components/p-CSZf8_j0.js +0 -4
  1015. package/components/p-C_xFdyXe.js +0 -4
  1016. package/components/p-Cfx4M1Bn.js +0 -4
  1017. package/components/p-CkMSOsFF.js +0 -4
  1018. package/components/p-CmR5uXej.js +0 -4
  1019. package/components/p-Cp4GRDqq.js +0 -4
  1020. package/components/p-CsNJ1ULL.js +0 -4
  1021. package/components/p-CtWGkNnJ.js +0 -4
  1022. package/components/p-CzCbeKys.js +0 -4
  1023. package/components/p-D-aHdMxW.js +0 -4
  1024. package/components/p-D0d8qTwj.js +0 -4
  1025. package/components/p-D3xo7hqU.js +0 -4
  1026. package/components/p-D6Ynv7Xh.js +0 -4
  1027. package/components/p-D7uN07a3.js +0 -4
  1028. package/components/p-DCnGU1fF.js +0 -4
  1029. package/components/p-DGvrK8dD.js +0 -4
  1030. package/components/p-DJztqcrH.js +0 -4
  1031. package/components/p-DOFCbuQR.js +0 -4
  1032. package/components/p-DV5mPYQS.js +0 -4
  1033. package/components/p-DWkAgceV.js +0 -4
  1034. package/components/p-DiVJyqlX.js +0 -4
  1035. package/components/p-DqZAXv2t.js +0 -4
  1036. package/components/p-R8zmRi4c.js +0 -4
  1037. package/components/p-SLS1rDZM.js +0 -4
  1038. package/components/p-ZjP4CjeZ.js +0 -4
  1039. package/components/p-aJ6PBUvj.js +0 -4
  1040. package/components/p-gAg0kXZp.js +0 -4
  1041. package/components/p-j5IxBIan.js +0 -4
  1042. package/components/p-k_E4tX5Z.js +0 -4
  1043. package/components/p-oD4kcBRX.js +0 -4
  1044. package/components/p-rCa2eL0j.js +0 -4
  1045. package/components/p-scxfI1Dd.js +0 -4
  1046. package/components/p-tr4_8ZS8.js +0 -4
  1047. package/components/p-vRBNsYbs.js +0 -4
  1048. package/components/p-yzCsOZE2.js +0 -4
  1049. package/dist/cjs/config-xninhj0J.js +0 -201
  1050. package/dist/cjs/hardware-back-button-iUuF_76h.js +0 -121
  1051. package/dist/cjs/index-DkNv4J_i.js +0 -10
  1052. package/dist/cjs/ionic-global-B-cA6LkY.js +0 -151
  1053. package/dist/cjs/keyboard-controller-GXBiBRKS.js +0 -167
  1054. package/dist/cjs/validity-BpS37YFM.js +0 -19
  1055. package/dist/esm/config-DQCONYYp.js +0 -195
  1056. package/dist/esm/hardware-back-button-B93Gru0Y.js +0 -115
  1057. package/dist/esm/index-ZjP4CjeZ.js +0 -7
  1058. package/dist/esm/ionic-global-Cp_eT4sZ.js +0 -146
  1059. package/dist/esm/keyboard-controller-BaaVITYt.js +0 -165
  1060. package/dist/esm/validity-DJztqcrH.js +0 -17
  1061. package/dist/ionic/p-01f81ea5.entry.js +0 -4
  1062. package/dist/ionic/p-06c232a4.entry.js +0 -4
  1063. package/dist/ionic/p-0caa922c.entry.js +0 -4
  1064. package/dist/ionic/p-0dc33652.entry.js +0 -4
  1065. package/dist/ionic/p-0fa9c382.entry.js +0 -4
  1066. package/dist/ionic/p-10e833ef.entry.js +0 -4
  1067. package/dist/ionic/p-21eb76d5.entry.js +0 -4
  1068. package/dist/ionic/p-27d30585.entry.js +0 -4
  1069. package/dist/ionic/p-2a05aa64.entry.js +0 -4
  1070. package/dist/ionic/p-2b204c59.entry.js +0 -4
  1071. package/dist/ionic/p-2bb2cb18.entry.js +0 -4
  1072. package/dist/ionic/p-2fa58e80.entry.js +0 -4
  1073. package/dist/ionic/p-3353c229.entry.js +0 -4
  1074. package/dist/ionic/p-34586ead.entry.js +0 -4
  1075. package/dist/ionic/p-37e720da.entry.js +0 -4
  1076. package/dist/ionic/p-390ca786.entry.js +0 -4
  1077. package/dist/ionic/p-3ae5f277.entry.js +0 -4
  1078. package/dist/ionic/p-4654ae1c.entry.js +0 -4
  1079. package/dist/ionic/p-4745f534.entry.js +0 -4
  1080. package/dist/ionic/p-4858af1f.entry.js +0 -4
  1081. package/dist/ionic/p-4baa5b82.entry.js +0 -4
  1082. package/dist/ionic/p-4e92a11f.entry.js +0 -4
  1083. package/dist/ionic/p-5018dfc8.entry.js +0 -4
  1084. package/dist/ionic/p-50e1194a.entry.js +0 -4
  1085. package/dist/ionic/p-5334df12.entry.js +0 -4
  1086. package/dist/ionic/p-5d1da0a2.entry.js +0 -4
  1087. package/dist/ionic/p-5eb8e86d.entry.js +0 -4
  1088. package/dist/ionic/p-65ebdf1b.entry.js +0 -4
  1089. package/dist/ionic/p-746fa988.entry.js +0 -4
  1090. package/dist/ionic/p-75dc25ba.entry.js +0 -4
  1091. package/dist/ionic/p-7c319341.entry.js +0 -4
  1092. package/dist/ionic/p-8158d422.entry.js +0 -4
  1093. package/dist/ionic/p-829367ed.entry.js +0 -4
  1094. package/dist/ionic/p-84d5ce05.entry.js +0 -4
  1095. package/dist/ionic/p-874b4bd8.entry.js +0 -4
  1096. package/dist/ionic/p-8eb8ee76.entry.js +0 -4
  1097. package/dist/ionic/p-9eeaBrnk.js +0 -4
  1098. package/dist/ionic/p-9f9db3a2.entry.js +0 -4
  1099. package/dist/ionic/p-BGqMS-oh.js +0 -4
  1100. package/dist/ionic/p-BUFIpxKM.js +0 -4
  1101. package/dist/ionic/p-BmVRXR1y.js +0 -4
  1102. package/dist/ionic/p-CFlfIb2g.js +0 -4
  1103. package/dist/ionic/p-CIGNaXM1.js +0 -4
  1104. package/dist/ionic/p-CmcFnK-B.js +0 -4
  1105. package/dist/ionic/p-CtWGkNnJ.js +0 -4
  1106. package/dist/ionic/p-Cx3IXROA.js +0 -4
  1107. package/dist/ionic/p-D-3ycHmd.js +0 -4
  1108. package/dist/ionic/p-D4uTWt4-.js +0 -4
  1109. package/dist/ionic/p-DIuEbVLu.js +0 -4
  1110. package/dist/ionic/p-DJztqcrH.js +0 -4
  1111. package/dist/ionic/p-DV3sJJW8.js +0 -4
  1112. package/dist/ionic/p-DiVJyqlX.js +0 -4
  1113. package/dist/ionic/p-DoJvtrbw.js +0 -4
  1114. package/dist/ionic/p-DqN5EA2O.js +0 -4
  1115. package/dist/ionic/p-DzWaWHGc.js +0 -4
  1116. package/dist/ionic/p-KjNvRoEp.js +0 -4
  1117. package/dist/ionic/p-Nqf6uvGh.js +0 -4
  1118. package/dist/ionic/p-SNAkTDfm.js +0 -4
  1119. package/dist/ionic/p-ZjP4CjeZ.js +0 -4
  1120. package/dist/ionic/p-a3bdcae6.entry.js +0 -4
  1121. package/dist/ionic/p-aaeedb6b.entry.js +0 -4
  1122. package/dist/ionic/p-af55a72f.entry.js +0 -4
  1123. package/dist/ionic/p-b2020591.entry.js +0 -4
  1124. package/dist/ionic/p-b9fadbfe.entry.js +0 -4
  1125. package/dist/ionic/p-biz8zWmJ.js +0 -4
  1126. package/dist/ionic/p-c0fb8edd.entry.js +0 -4
  1127. package/dist/ionic/p-c38b648e.entry.js +0 -4
  1128. package/dist/ionic/p-c4d8641b.entry.js +0 -4
  1129. package/dist/ionic/p-c6e49f3f.entry.js +0 -4
  1130. package/dist/ionic/p-ca2ab74d.entry.js +0 -4
  1131. package/dist/ionic/p-d1aac015.entry.js +0 -4
  1132. package/dist/ionic/p-d889ff6d.entry.js +0 -4
  1133. package/dist/ionic/p-dfa8d673.entry.js +0 -4
  1134. package/dist/ionic/p-ef4c3bee.entry.js +0 -4
  1135. package/dist/ionic/p-f386f6ae.entry.js +0 -4
  1136. package/dist/ionic/p-mjKAFv89.js +0 -4
  1137. package/dist/ionic/p-tcQvqkiX.js +0 -5
  1138. package/dist/ionic/p-uWtqTrG8.js +0 -4
  1139. package/dist/ionic/p-viFHDgRs.js +0 -4
  1140. package/dist/ionic/p-xWb6fgfq.js +0 -4
  1141. /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
@@ -3,21 +3,20 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var index = require('./index-Ct7gcRif.js');
7
- var hardwareBackButton = require('./hardware-back-button-iUuF_76h.js');
8
- var ionicGlobal = require('./ionic-global-B-cA6LkY.js');
9
- var helpers = require('./helpers-Cv23MFHM.js');
6
+ var index = require('./index-GZU9YrFc.js');
7
+ var focusVisible = require('./focus-visible-BIj-I3-C.js');
8
+ var ionicGlobal = require('./ionic-global-QoUqobrQ.js');
9
+ var helpers = require('./helpers-DiOgV5hw.js');
10
10
  var dir = require('./dir-Cn0z1rJH.js');
11
- var theme = require('./theme-CeDs6Hcv.js');
12
- var index$1 = require('./index-Dqpns5vP.js');
13
- var keyboardController = require('./keyboard-controller-GXBiBRKS.js');
11
+ var theme = require('./theme-IlOsGAz7.js');
12
+ var index$1 = require('./index-BxEZd5IE.js');
13
+ var scrollHideController = require('./scroll-hide-controller-G9HOmmhN.js');
14
14
  var cubicBezier = require('./cubic-bezier-DAjy1V-e.js');
15
- var frameworkDelegate = require('./framework-delegate-BtICZDHr.js');
15
+ var frameworkDelegate = require('./framework-delegate-DC5nq_NN.js');
16
16
  var lockController = require('./lock-controller-aDB9wrEf.js');
17
- var index$2 = require('./index-BERfRao3.js');
18
- require('./index-DkNv4J_i.js');
19
- require('./keyboard-UuAS4D_9.js');
20
- require('./capacitor-DmA66EwP.js');
17
+ var index$2 = require('./index-BaJ7_YbC.js');
18
+ require('./keyboard-Bn0Ppim6.js');
19
+ require('./capacitor-CQSg1uCo.js');
21
20
 
22
21
  const appCss = () => `html.plt-mobile ion-app{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.plt-mobile ion-app [contenteditable]{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}ion-app.force-statusbar-padding{--ion-safe-area-top:20px}`;
23
22
 
@@ -25,51 +24,6 @@ const App = class {
25
24
  constructor(hostRef) {
26
25
  index.registerInstance(this, hostRef);
27
26
  }
28
- componentDidLoad() {
29
- {
30
- this.rIC(async () => {
31
- const isHybrid = ionicGlobal.isPlatform(window, 'hybrid');
32
- if (!index.config.getBoolean('_testing')) {
33
- Promise.resolve().then(function () { return require('./index-D81eLYUM.js'); }).then((module) => module.startTapClick(index.config));
34
- }
35
- if (index.config.getBoolean('statusTap', isHybrid)) {
36
- Promise.resolve().then(function () { return require('./status-tap-N1kaBbuk.js'); }).then((module) => module.startStatusTap());
37
- }
38
- if (index.config.getBoolean('inputShims', needInputShims())) {
39
- /**
40
- * needInputShims() ensures that only iOS and Android
41
- * platforms proceed into this block.
42
- */
43
- const platform = ionicGlobal.isPlatform(window, 'ios') ? 'ios' : 'android';
44
- Promise.resolve().then(function () { return require('./input-shims-DpA1zUN9.js'); }).then((module) => module.startInputShims(index.config, platform));
45
- }
46
- const hardwareBackButtonModule = await Promise.resolve().then(function () { return require('./hardware-back-button-iUuF_76h.js'); });
47
- const supportsHardwareBackButtonEvents = isHybrid || hardwareBackButton.shouldUseCloseWatcher();
48
- if (index.config.getBoolean('hardwareBackButton', supportsHardwareBackButtonEvents)) {
49
- hardwareBackButtonModule.startHardwareBackButton();
50
- }
51
- else {
52
- /**
53
- * If an app sets hardwareBackButton: false and experimentalCloseWatcher: true
54
- * then the close watcher will not be used.
55
- */
56
- if (hardwareBackButton.shouldUseCloseWatcher()) {
57
- index.printIonWarning('[ion-app] - experimentalCloseWatcher was set to `true`, but hardwareBackButton was set to `false`. Both config options must be `true` for the Close Watcher API to be used.');
58
- }
59
- hardwareBackButtonModule.blockHardwareBackButton();
60
- }
61
- if (typeof window !== 'undefined') {
62
- Promise.resolve().then(function () { return require('./keyboard-hHzlEQpk.js'); }).then((module) => module.startKeyboardAssist(window));
63
- }
64
- Promise.resolve().then(function () { return require('./focus-visible-CCvKiLh3.js'); }).then((module) => (this.focusVisible = module.startFocusVisible()));
65
- });
66
- }
67
- }
68
- disconnectedCallback() {
69
- if (this.loadTimeout) {
70
- clearTimeout(this.loadTimeout);
71
- }
72
- }
73
27
  /**
74
28
  * Used to set focus on an element that uses `ion-focusable`.
75
29
  * Do not use this if focusing the element as a result of a keyboard
@@ -82,52 +36,29 @@ const App = class {
82
36
  * @param elements An array of HTML elements to set focus on.
83
37
  */
84
38
  async setFocus(elements) {
85
- if (this.focusVisible) {
86
- this.focusVisible.setFocus(elements);
87
- }
88
- }
89
- rIC(callback) {
90
- if ('requestIdleCallback' in window) {
91
- window.requestIdleCallback(callback);
92
- }
93
- else {
94
- this.loadTimeout = setTimeout(callback, 32);
95
- }
39
+ /**
40
+ * The focus-visible utility is used to set focus on an
41
+ * element that uses `ion-focusable`.
42
+ */
43
+ focusVisible.focusElements(elements);
96
44
  }
97
45
  render() {
98
- const mode = ionicGlobal.getIonMode(this);
99
- return (index.h(index.Host, { key: '77a7459d3e42b3715a5a7e1cf468e2ebc99e54bb', class: {
100
- [mode]: true,
46
+ const theme = ionicGlobal.getIonTheme(this);
47
+ return (index.h(index.Host, { key: '3b7e84c7c4187287123413f90838cda89136b2a4', class: {
48
+ [theme]: true,
101
49
  'ion-page': true,
102
50
  'force-statusbar-padding': index.config.getBoolean('_forceStatusbarPadding'),
103
51
  } }));
104
52
  }
105
53
  get el() { return index.getElement(this); }
106
54
  };
107
- const needInputShims = () => {
108
- /**
109
- * iOS always needs input shims
110
- */
111
- const needsShimsIOS = ionicGlobal.isPlatform(window, 'ios') && ionicGlobal.isPlatform(window, 'mobile');
112
- if (needsShimsIOS) {
113
- return true;
114
- }
115
- /**
116
- * Android only needs input shims when running
117
- * in the browser and only if the browser is using the
118
- * new Chrome 108+ resize behavior: https://developer.chrome.com/blog/viewport-resize-behavior/
119
- */
120
- const isAndroidMobileWeb = ionicGlobal.isPlatform(window, 'android') && ionicGlobal.isPlatform(window, 'mobileweb');
121
- if (isAndroidMobileWeb) {
122
- return true;
123
- }
124
- return false;
125
- };
126
55
  App.style = appCss();
127
56
 
128
- const buttonsIosCss = () => `.sc-ion-buttons-ios-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:99}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-s ion-button{--padding-top:3px;--padding-bottom:3px;--padding-start:5px;--padding-end:5px;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px;min-height:32px}.sc-ion-buttons-ios-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-ios-s ion-button:not(.button-round){--border-radius:4px}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button{--color:initial;--border-color:initial;--background-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-solid,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-solid{--background:var(--ion-color-contrast);--background-focused:#000;--background-focused-opacity:.12;--background-activated:#000;--background-activated-opacity:.12;--background-hover:var(--ion-color-base);--background-hover-opacity:0.45;--color:var(--ion-color-base);--color-focused:var(--ion-color-base)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-clear,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-clear{--color-activated:var(--ion-color-contrast);--color-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-outline,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-outline{--color-activated:var(--ion-color-base);--color-focused:var(--ion-color-contrast);--background-activated:var(--ion-color-contrast)}.sc-ion-buttons-ios-s .button-clear,.sc-ion-buttons-ios-s .button-outline{--background-activated:transparent;--background-focused:currentColor;--background-hover:transparent}.sc-ion-buttons-ios-s .button-solid:not(.ion-color){--background-focused:#000;--background-focused-opacity:.12;--background-activated:#000;--background-activated-opacity:.12}.sc-ion-buttons-ios-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-end:0.3em;margin-inline-end:0.3em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-start:0.4em;margin-inline-start:0.4em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:1.65em;line-height:0.67}`;
57
+ const buttonsIonicCss = () => `.sc-ion-buttons-ionic-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.sc-ion-buttons-ionic-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ionic-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-ionic-s .button-clear{--color:var(--token-text-default, var(--token-primitives-neutral-1200, #242424));--background:transparent;--background-activated:transparent;--background-focused:transparent;--background-hover:transparent}.sc-ion-buttons-ionic-s .button-has-icon-only{width:var(--token-scale-1000, 40px);height:var(--token-scale-1000, 40px)}.sc-ion-buttons-ionic-s ion-icon[slot=icon-only]{font-size:var(--token-font-size-500, 1.25rem)}`;
58
+
59
+ const buttonsIosCss = () => `.sc-ion-buttons-ios-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-h{z-index:99}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-s ion-button{--padding-top:3px;--padding-bottom:3px;--padding-start:5px;--padding-end:5px;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px;min-height:32px}.sc-ion-buttons-ios-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-ios-s ion-button:not(.button-round){--border-radius:4px}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button{--color:initial;--border-color:initial;--background-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-solid,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-solid{--background:var(--ion-color-contrast);--background-focused:#000;--background-focused-opacity:0.12;--background-activated:#000;--background-activated-opacity:0.12;--background-hover:var(--ion-color-base);--background-hover-opacity:0.45;--color:var(--ion-color-base);--color-focused:var(--ion-color-base)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-clear,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-clear{--color-activated:var(--ion-color-contrast);--color-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-outline,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-outline{--color-activated:var(--ion-color-base);--color-focused:var(--ion-color-contrast);--background-activated:var(--ion-color-contrast)}.sc-ion-buttons-ios-s .button-clear,.sc-ion-buttons-ios-s .button-outline{--background-activated:transparent;--background-focused:currentColor;--background-hover:transparent}.sc-ion-buttons-ios-s .button-solid:not(.ion-color){--background-focused:#000;--background-focused-opacity:0.12;--background-activated:#000;--background-activated-opacity:0.12}.sc-ion-buttons-ios-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-end:0.3em;margin-inline-end:0.3em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-start:0.4em;margin-inline-start:0.4em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:1.65em;line-height:0.67}`;
129
60
 
130
- const buttonsMdCss = () => `.sc-ion-buttons-md-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:99}.sc-ion-buttons-md-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-md-s ion-button{--padding-top:3px;--padding-bottom:3px;--padding-start:8px;--padding-end:8px;--box-shadow:none;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px;min-height:32px}.sc-ion-buttons-md-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-md-s ion-button:not(.button-round){--border-radius:2px}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button{--color:initial;--color-focused:var(--ion-color-contrast);--color-hover:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-contrast);--background-hover:var(--ion-color-contrast)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-solid,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-solid{--background:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-shade);--background-hover:var(--ion-color-base);--color:var(--ion-color-base);--color-focused:var(--ion-color-base);--color-hover:var(--ion-color-base)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-outline,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-outline{--border-color:var(--ion-color-contrast)}.sc-ion-buttons-md-s .button-has-icon-only.button-clear{--padding-top:12px;--padding-end:12px;--padding-bottom:12px;--padding-start:12px;--border-radius:50%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:3rem;height:3rem}.sc-ion-buttons-md-s .button{--background-hover:currentColor}.sc-ion-buttons-md-s .button-solid{--color:var(--ion-toolbar-background, var(--ion-background-color, #fff));--background:var(--ion-toolbar-color, var(--ion-text-color, #424242));--background-activated:transparent;--background-focused:currentColor}.sc-ion-buttons-md-s .button-outline{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor;--border-color:currentColor}.sc-ion-buttons-md-s .button-clear{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor}.sc-ion-buttons-md-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-end:0.3em;margin-inline-end:0.3em;font-size:1.4em}.sc-ion-buttons-md-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-start:0.4em;margin-inline-start:0.4em;font-size:1.4em}.sc-ion-buttons-md-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:1.8em}`;
61
+ const buttonsMdCss = () => `.sc-ion-buttons-md-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.sc-ion-buttons-md-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-md-h{z-index:99}.sc-ion-buttons-md-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-md-s ion-button{--padding-top:3px;--padding-bottom:3px;--padding-start:8px;--padding-end:8px;--box-shadow:none;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px;min-height:32px}.sc-ion-buttons-md-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-md-s ion-button:not(.button-round){--border-radius:2px}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button{--color:initial;--color-focused:var(--ion-color-contrast);--color-hover:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-contrast);--background-hover:var(--ion-color-contrast)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-solid,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-solid{--background:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-shade);--background-hover:var(--ion-color-base);--color:var(--ion-color-base);--color-focused:var(--ion-color-base);--color-hover:var(--ion-color-base)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-outline,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-outline{--border-color:var(--ion-color-contrast)}.sc-ion-buttons-md-s .button-has-icon-only.button-clear{--padding-top:12px;--padding-end:12px;--padding-bottom:12px;--padding-start:12px;--border-radius:50%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:3rem;height:3rem}.sc-ion-buttons-md-s .button{--background-hover:currentColor}.sc-ion-buttons-md-s .button-solid{--color:var(--ion-toolbar-background, var(--ion-background-color, #fff));--background:var(--ion-toolbar-color, var(--ion-text-color, #424242));--background-activated:transparent;--background-focused:currentColor}.sc-ion-buttons-md-s .button-outline{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor;--border-color:currentColor}.sc-ion-buttons-md-s .button-clear{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor}.sc-ion-buttons-md-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-end:0.3em;margin-inline-end:0.3em;font-size:1.4em}.sc-ion-buttons-md-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-start:0.4em;margin-inline-start:0.4em;font-size:1.4em}.sc-ion-buttons-md-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:1.8em}`;
131
62
 
132
63
  const Buttons = class {
133
64
  constructor(hostRef) {
@@ -139,7 +70,7 @@ const Buttons = class {
139
70
  * first toolbar, the buttons will be hidden and will
140
71
  * only be shown once all toolbars have fully collapsed.
141
72
  *
142
- * Only applies in `ios` mode with `collapse` set to
73
+ * Only applies in the `ios` theme with `collapse` set to
143
74
  * `true` on `ion-header`.
144
75
  *
145
76
  * Typically used for [Collapsible Large Titles](https://ionicframework.com/docs/api/title#collapsible-large-titles)
@@ -147,19 +78,20 @@ const Buttons = class {
147
78
  this.collapse = false;
148
79
  }
149
80
  render() {
150
- const mode = ionicGlobal.getIonMode(this);
151
- return (index.h(index.Host, { key: '58c1fc5eb867d0731c63549b1ccb3ec3bbbe6e1b', class: {
152
- [mode]: true,
81
+ const theme = ionicGlobal.getIonTheme(this);
82
+ return (index.h(index.Host, { key: '95c107ba7871c801a5ef14c636dc8e2fe69debf3', class: {
83
+ [theme]: true,
153
84
  ['buttons-collapse']: this.collapse,
154
- } }, index.h("slot", { key: '0c8f95b9840c8fa0c4e50be84c5159620a3eb5c8' })));
85
+ } }, index.h("slot", { key: '58669abfce458e1344b84286d4200e305017b958' })));
155
86
  }
156
87
  };
157
88
  Buttons.style = {
89
+ ionic: buttonsIonicCss(),
158
90
  ios: buttonsIosCss(),
159
91
  md: buttonsMdCss()
160
92
  };
161
93
 
162
- const contentCss = () => `:host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}#background-content{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);-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:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom) + var(--internal-content-safe-area-padding-bottom, 0px));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;-ms-touch-action:pan-x pan-y pinch-zoom;touch-action:pan-x pan-y pinch-zoom}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;z-index:0;will-change:scroll-position}.scroll-y{overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{overflow-x:var(--overflow);overscroll-behavior-x:contain}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:""}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:0;contain:none}:host(.content-sizing) .inner-scroll{position:relative;top:0;bottom:0;margin-top:calc(var(--offset-top) * -1);margin-bottom:calc(var(--offset-bottom) * -1)}.transition-effect{display:none;position:absolute;width:100%;height:100vh;opacity:0;pointer-events:none}:host(.content-ltr) .transition-effect{left:-100%;}:host(.content-rtl) .transition-effect{right:-100%;}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;width:100%;height:100%;-webkit-box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03);box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03)}:host(.content-ltr) .transition-shadow{right:0;}:host(.content-rtl) .transition-shadow{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}`;
94
+ const contentCss = () => `:host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}#background-content{right:0px;left:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{right:0px;left:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);-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:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom) + var(--internal-content-safe-area-padding-bottom, 0px));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;-ms-touch-action:pan-x pan-y pinch-zoom;touch-action:pan-x pan-y pinch-zoom}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;z-index:0;will-change:scroll-position}.scroll-y{overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{overflow-x:var(--overflow);overscroll-behavior-x:contain}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:""}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:0;contain:none}:host(.content-sizing) .inner-scroll{position:relative;top:0;bottom:0;margin-top:calc(var(--offset-top) * -1);margin-bottom:calc(var(--offset-bottom) * -1)}.transition-effect{display:none;position:absolute;width:100%;height:100vh;opacity:0;pointer-events:none}:host(.content-ltr) .transition-effect{left:-100%;}:host(.content-rtl) .transition-effect{right:-100%;}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;width:100%;height:100%;-webkit-box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03);box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03)}:host(.content-ltr) .transition-shadow{right:0;}:host(.content-rtl) .transition-shadow{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}:host(.content-header-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll{-webkit-transition:height 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:height 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), height 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), height 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1)}:host(.content-header-hide-scroll-partner:not(.content-fullscreen).content-header-hide-scroll-hidden) .inner-scroll{height:calc(100% + var(--internal-header-hide-height, 0px));-webkit-transform:translateY(calc(-1 * var(--internal-header-hide-height, 0px)));transform:translateY(calc(-1 * var(--internal-header-hide-height, 0px)));-webkit-transition:height 200ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:height 200ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), height 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), height 200ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1)}:host(.content-footer-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll{-webkit-transition:height 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:height 200ms cubic-bezier(0.16, 1, 0.3, 1)}:host(.content-footer-hide-scroll-partner:not(.content-fullscreen).content-footer-hide-scroll-hidden) .inner-scroll{height:calc(100% + var(--internal-footer-hide-height, 0px));-webkit-transition:height 350ms cubic-bezier(0.4, 0, 1, 1);transition:height 350ms cubic-bezier(0.4, 0, 1, 1)}:host(.content-tab-bar-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll{-webkit-transition:height 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:height 200ms cubic-bezier(0.16, 1, 0.3, 1)}:host(.content-tab-bar-hide-scroll-partner:not(.content-fullscreen).content-tab-bar-hide-scroll-hidden) .inner-scroll{height:calc(100% + var(--internal-tab-bar-hide-height, 0px));-webkit-transition:height 350ms cubic-bezier(0.4, 0, 1, 1);transition:height 350ms cubic-bezier(0.4, 0, 1, 1)}@media (prefers-reduced-motion: reduce){:host(.content-header-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll,:host(.content-header-hide-scroll-partner:not(.content-fullscreen).content-header-hide-scroll-hidden) .inner-scroll,:host(.content-footer-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll,:host(.content-footer-hide-scroll-partner:not(.content-fullscreen).content-footer-hide-scroll-hidden) .inner-scroll,:host(.content-tab-bar-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll,:host(.content-tab-bar-hide-scroll-partner:not(.content-fullscreen).content-tab-bar-hide-scroll-hidden) .inner-scroll{-webkit-transition:none;transition:none}}`;
163
95
 
164
96
  const Content = class {
165
97
  constructor(hostRef) {
@@ -322,9 +254,8 @@ const Content = class {
322
254
  this.resize();
323
255
  }, 100);
324
256
  }
325
- shouldForceOverscroll() {
257
+ shouldForceOverscroll(mode) {
326
258
  const { forceOverscroll } = this;
327
- const mode = ionicGlobal.getIonMode(this);
328
259
  return forceOverscroll === undefined ? mode === 'ios' && ionicGlobal.isPlatform('ios') : forceOverscroll;
329
260
  }
330
261
  resize() {
@@ -520,12 +451,13 @@ const Content = class {
520
451
  render() {
521
452
  const { fixedSlotPlacement, inheritedAttributes, isMainContent, scrollX, scrollY, el } = this;
522
453
  const rtl = dir.isRTL(el) ? 'rtl' : 'ltr';
523
- const mode = ionicGlobal.getIonMode(this);
524
- const forceOverscroll = this.shouldForceOverscroll();
525
- const transitionShadow = mode === 'ios';
454
+ const theme$1 = ionicGlobal.getIonTheme(this);
455
+ const mode = ionicGlobal.getIonMode(this, theme$1);
456
+ const forceOverscroll = this.shouldForceOverscroll(mode);
457
+ const transitionShadow = theme$1 === 'ios';
526
458
  this.resize();
527
- return (index.h(index.Host, Object.assign({ key: '8c1bc4a4df8698d3884741eb38512dc059210c50', role: isMainContent ? 'main' : undefined, class: theme.createColorClasses(this.color, {
528
- [mode]: true,
459
+ return (index.h(index.Host, Object.assign({ key: 'd7f325c30b698dc42ec5e8c45b29e82749743cf4', role: isMainContent ? 'main' : undefined, class: theme.createColorClasses(this.color, {
460
+ [theme$1]: true,
529
461
  'content-fullscreen': this.fullscreen,
530
462
  'content-sizing': theme.hostContext('ion-popover', this.el),
531
463
  overscroll: forceOverscroll,
@@ -533,12 +465,12 @@ const Content = class {
533
465
  }), style: {
534
466
  '--offset-top': `${this.cTop}px`,
535
467
  '--offset-bottom': `${this.cBottom}px`,
536
- } }, inheritedAttributes), index.h("div", { key: '5e7412549b51ef7543d9378ecab9aac6bc461588', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? index.h("slot", { name: "fixed" }) : null, index.h("div", { key: '33f6fbf7e1e027c7cbd2dda95b487f18dc648cef', class: {
468
+ } }, inheritedAttributes), index.h("div", { key: 'c93b2c622a69c7fd153bbe9b0c6f8c24d85ed969', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? index.h("slot", { name: "fixed" }) : null, index.h("div", { key: '1700cc94e464ad1ab1c6672270f9649e90be3a5e', class: {
537
469
  'inner-scroll': true,
538
470
  'scroll-x': scrollX,
539
471
  'scroll-y': scrollY,
540
472
  overscroll: (scrollX || scrollY) && forceOverscroll,
541
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, index.h("slot", { key: '00c8fe7b9e73533c702273c9457d274195d54e98' })), transitionShadow ? (index.h("div", { class: "transition-effect" }, index.h("div", { class: "transition-cover" }), index.h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? index.h("slot", { name: "fixed" }) : null));
473
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, index.h("slot", { key: 'bff713ead4f61730e3f36b5af4b771ae62bde6cd' })), transitionShadow ? (index.h("div", { class: "transition-effect" }, index.h("div", { class: "transition-cover" }), index.h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? index.h("slot", { name: "fixed" }) : null));
542
474
  }
543
475
  get el() { return index.getElement(this); }
544
476
  };
@@ -564,7 +496,8 @@ const getPageElement = (el) => {
564
496
  * between the popover and the edges of the screen. But if the popover contains
565
497
  * its own page element, we should use that instead.
566
498
  */
567
- const page = el.closest('ion-app, ion-page, .ion-page, page-inner, .popover-content');
499
+ const appRootSelector = index.config.get('appRootSelector', 'ion-app');
500
+ const page = el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner, .popover-content`);
568
501
  if (page) {
569
502
  return page;
570
503
  }
@@ -628,45 +561,90 @@ const handleFooterFade = (scrollEl, baseEl) => {
628
561
  });
629
562
  };
630
563
 
631
- const footerIosCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-ios ion-toolbar:first-of-type{--border-width:0.55px 0 0}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.footer-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.footer-translucent-ios ion-toolbar{--opacity:.8}}.footer-ios.ion-no-border ion-toolbar:first-of-type{--border-width:0}.footer-collapse-fade ion-toolbar{--opacity-scale:inherit}`;
564
+ const ionicFooterMdCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-collapse-fade ion-toolbar{--opacity-scale:inherit}ion-footer.footer-scroll-effect-hide{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1)}ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1)}@media (prefers-reduced-motion: reduce){ion-footer.footer-scroll-effect-hide,ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transition:none;transition:none}}.footer-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.footer-md.footer-collapse-fade{-webkit-box-shadow:none;box-shadow:none}.footer-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
632
565
 
633
- const footerMdCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.footer-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
566
+ const footerIosCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-collapse-fade ion-toolbar{--opacity-scale:inherit}ion-footer.footer-scroll-effect-hide{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1)}ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1)}@media (prefers-reduced-motion: reduce){ion-footer.footer-scroll-effect-hide,ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transition:none;transition:none}}.footer-ios ion-toolbar:first-of-type{--border-width:0.55px 0 0}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.footer-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.footer-translucent-ios ion-toolbar{--opacity:0.8}}.footer-ios.ion-no-border ion-toolbar:first-of-type{--border-width:0}`;
567
+
568
+ const footerMdCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-collapse-fade ion-toolbar{--opacity-scale:inherit}ion-footer.footer-scroll-effect-hide{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1)}ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1)}@media (prefers-reduced-motion: reduce){ion-footer.footer-scroll-effect-hide,ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transition:none;transition:none}}.footer-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.footer-md.footer-collapse-fade{-webkit-box-shadow:none;box-shadow:none}.footer-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
634
569
 
635
570
  const Footer = class {
636
571
  constructor(hostRef) {
637
572
  index.registerInstance(this, hostRef);
638
573
  this.keyboardCtrl = null;
639
574
  this.keyboardCtrlPromise = null;
575
+ this.scrollHideCtrlPromise = null;
576
+ this.hasWarnedCollapse = false;
577
+ this.fadeSetupId = 0;
640
578
  this.keyboardVisible = false;
641
579
  /**
642
580
  * If `true`, the footer will be translucent.
643
- * Only applies when the mode is `"ios"` and the device supports
581
+ * Only applies when the theme is `"ios"` and the device supports
644
582
  * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
645
583
  *
646
584
  * Note: In order to scroll content behind the footer, the `fullscreen`
647
585
  * attribute needs to be set on the content.
648
586
  */
649
587
  this.translucent = false;
650
- this.checkCollapsibleFooter = () => {
651
- const mode = ionicGlobal.getIonMode(this);
652
- if (mode !== 'ios') {
588
+ this.checkCollapsibleFooter = async () => {
589
+ const { scrollEffect, collapse } = this;
590
+ if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
591
+ this.hasWarnedCollapse = true;
592
+ index.printIonWarning(`[ion-footer] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-footer scroll-effect="${collapse}">`, this.el);
593
+ }
594
+ const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
595
+ // Skip teardown/rebuild if the effect hasn't changed.
596
+ // This prevents keyboard toggles (which trigger re-renders via
597
+ // @State keyboardVisible) from destroying the scroll controller
598
+ // and resetting isHidden.
599
+ if (effect === this.activeEffect) {
653
600
  return;
654
601
  }
655
- const { collapse } = this;
656
- const hasFade = collapse === 'fade';
602
+ const hasHide = effect === 'hide';
603
+ const hasFade = effect === 'fade';
657
604
  this.destroyCollapsibleFooter();
658
- if (hasFade) {
659
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
660
- const contentEl = pageEl ? index$1.findIonContent(pageEl) : null;
605
+ const appRootSelector = index.config.get('appRootSelector', 'ion-app');
606
+ const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
607
+ const contentEl = pageEl ? index$1.findIonContent(pageEl) : null;
608
+ if (hasHide && contentEl) {
609
+ this.activeEffect = effect;
610
+ await this.setupScrollEffectHide(contentEl);
611
+ return;
612
+ }
613
+ // fade via the deprecated `collapse` prop is iOS-only.
614
+ // fade via the new `scrollEffect` prop works in all themes.
615
+ const isModeRestricted = scrollEffect === undefined && ionicGlobal.getIonTheme(this) !== 'ios';
616
+ if (hasFade && !isModeRestricted) {
661
617
  if (!contentEl) {
662
618
  index$1.printIonContentErrorMsg(this.el);
663
619
  return;
664
620
  }
665
621
  this.setupFadeFooter(contentEl);
622
+ this.activeEffect = effect;
623
+ }
624
+ };
625
+ this.setupScrollEffectHide = async (contentEl) => {
626
+ const setupPromise = scrollHideController.createScrollHideController(contentEl, {
627
+ el: this.el,
628
+ cssVar: '--internal-footer-hide-height',
629
+ hiddenClass: 'footer-scroll-hidden',
630
+ contentPartnerClass: 'content-footer-hide-scroll-partner',
631
+ contentHiddenClass: 'content-footer-hide-scroll-hidden',
632
+ });
633
+ this.scrollHideCtrlPromise = setupPromise;
634
+ const controller = await setupPromise;
635
+ if (this.scrollHideCtrlPromise === setupPromise) {
636
+ this.scrollHideCtrlPromise = null;
637
+ controller.init();
638
+ this.scrollHideCtrl = controller;
666
639
  }
667
640
  };
668
641
  this.setupFadeFooter = async (contentEl) => {
669
- const scrollEl = (this.scrollEl = await index$1.getScrollElement(contentEl));
642
+ const setupId = ++this.fadeSetupId;
643
+ const scrollEl = await index$1.getScrollElement(contentEl);
644
+ if (this.fadeSetupId !== setupId) {
645
+ return;
646
+ }
647
+ this.scrollEl = scrollEl;
670
648
  /**
671
649
  * Handle fading of toolbars on scroll
672
650
  */
@@ -684,7 +662,7 @@ const Footer = class {
684
662
  this.checkCollapsibleFooter();
685
663
  }
686
664
  async connectedCallback() {
687
- const promise = keyboardController.createKeyboardController(async (keyboardOpen, waitForResize) => {
665
+ const promise = scrollHideController.createKeyboardController(async (keyboardOpen, waitForResize) => {
688
666
  /**
689
667
  * If the keyboard is hiding, then we need to wait
690
668
  * for the webview to resize. Otherwise, the footer
@@ -711,6 +689,7 @@ const Footer = class {
711
689
  }
712
690
  }
713
691
  disconnectedCallback() {
692
+ this.destroyCollapsibleFooter();
714
693
  if (this.keyboardCtrlPromise) {
715
694
  this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
716
695
  this.keyboardCtrlPromise = null;
@@ -721,29 +700,43 @@ const Footer = class {
721
700
  }
722
701
  }
723
702
  destroyCollapsibleFooter() {
703
+ this.activeEffect = undefined;
704
+ this.fadeSetupId++;
705
+ this.scrollHideCtrlPromise = null;
706
+ if (this.scrollHideCtrl) {
707
+ this.scrollHideCtrl.destroy();
708
+ this.scrollHideCtrl = undefined;
709
+ }
724
710
  if (this.scrollEl && this.contentScrollCallback) {
725
711
  this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);
726
712
  this.contentScrollCallback = undefined;
727
713
  }
728
714
  }
729
715
  render() {
730
- const { translucent, collapse } = this;
731
- const mode = ionicGlobal.getIonMode(this);
716
+ const { translucent, scrollEffect, collapse } = this;
717
+ const theme = ionicGlobal.getIonTheme(this);
718
+ const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
719
+ // fade via the deprecated `collapse` prop is iOS-only.
720
+ const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
721
+ const hasHide = effect === 'hide';
722
+ const hasFade = effect === 'fade' && !isModeRestricted;
732
723
  const tabs = this.el.closest('ion-tabs');
733
724
  const tabBar = tabs === null || tabs === void 0 ? void 0 : tabs.querySelector(':scope > ion-tab-bar');
734
- return (index.h(index.Host, { key: '71939c4bbaef5062532a99ee2e33574102a9abad', role: "contentinfo", class: {
735
- [mode]: true,
725
+ return (index.h(index.Host, { key: 'a0777b4a639d22e15374879f018efcf589e756f8', role: "contentinfo", class: {
726
+ [theme]: true,
736
727
  // Used internally for styling
737
- [`footer-${mode}`]: true,
728
+ [`footer-${theme}`]: true,
738
729
  [`footer-translucent`]: translucent,
739
- [`footer-translucent-${mode}`]: translucent,
730
+ [`footer-translucent-${theme}`]: translucent,
740
731
  ['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
741
- [`footer-collapse-${collapse}`]: collapse !== undefined,
742
- } }, mode === 'ios' && translucent && index.h("div", { key: '2fa14f61661c47c661cecd696176728d6eafa74f', class: "footer-background" }), index.h("slot", { key: '8e63696e7c528d5c38201e546bf08135290d0945' })));
732
+ 'footer-collapse-fade': hasFade,
733
+ 'footer-scroll-effect-hide': hasHide,
734
+ } }, theme === 'ios' && translucent && index.h("div", { key: 'd78b46870cbf11c95b066d649c04ec398b66e614', class: "footer-background" }), index.h("slot", { key: '9dc34787cd29597fe1b1198db317602014ac1483' })));
743
735
  }
744
736
  get el() { return index.getElement(this); }
745
737
  };
746
738
  Footer.style = {
739
+ ionic: ionicFooterMdCss(),
747
740
  ios: footerIosCss(),
748
741
  md: footerMdCss()
749
742
  };
@@ -795,13 +788,14 @@ const handleContentScroll = (scrollEl, scrollHeaderIndex, contentEl) => {
795
788
  });
796
789
  };
797
790
  const setToolbarBackgroundOpacity = (headerEl, opacity) => {
791
+ var _a;
798
792
  /**
799
793
  * Fading in the backdrop opacity
800
794
  * should happen after the large title
801
795
  * has collapsed, so it is handled
802
796
  * by handleHeaderFade()
803
797
  */
804
- if (headerEl.collapse === 'fade') {
798
+ if (((_a = headerEl.scrollEffect) !== null && _a !== void 0 ? _a : headerEl.collapse) === 'fade') {
805
799
  return;
806
800
  }
807
801
  if (opacity === undefined) {
@@ -959,46 +953,69 @@ const handleHeaderFade = (scrollEl, baseEl, condenseHeader) => {
959
953
  * Get the role type for the ion-header.
960
954
  *
961
955
  * @param isInsideMenu If ion-header is inside ion-menu.
962
- * @param isCondensed If ion-header has collapse="condense".
963
- * @param mode The current mode.
964
- * @returns 'none' if inside ion-menu or if condensed in md
965
- * mode, otherwise 'banner'.
956
+ * @returns 'none' if inside ion-menu, otherwise 'banner'.
957
+ * Condensed headers start as 'banner' and have their role
958
+ * toggled dynamically by setHeaderActive() on scroll.
966
959
  */
967
- const getRoleType = (isInsideMenu, isCondensed, mode) => {
960
+ const getRoleType = (isInsideMenu) => {
968
961
  // If the header is inside a menu, it should not have the banner role.
969
962
  if (isInsideMenu) {
970
963
  return ROLE_NONE;
971
964
  }
972
- /**
973
- * Only apply role="none" to `md` mode condensed headers
974
- * since the large header is never shown.
975
- */
976
- if (isCondensed && mode === 'md') {
977
- return ROLE_NONE;
978
- }
979
965
  // Default to banner role.
980
966
  return ROLE_BANNER;
981
967
  };
982
968
 
983
- const headerIosCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-ios ion-toolbar:last-of-type{--border-width:0 0 0.55px}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.header-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.header-translucent-ios ion-toolbar{--opacity:.8}.header-collapse-condense-inactive .header-background{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}}.header-ios.ion-no-border ion-toolbar:last-of-type{--border-width:0}.header-collapse-fade ion-toolbar{--opacity-scale:inherit}.header-collapse-fade.header-transitioning ion-toolbar{--background:transparent;--border-style:none}.header-collapse-condense{z-index:9}.header-collapse-condense ion-toolbar{position:-webkit-sticky;position:sticky;top:0}.header-collapse-condense ion-toolbar:first-of-type{padding-top:0px;z-index:1}.header-collapse-condense ion-toolbar{z-index:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}.header-collapse-condense ion-toolbar ion-searchbar{padding-top:0px;padding-bottom:13px}.header-collapse-main{--opacity-scale:1}.header-collapse-main ion-toolbar{--opacity-scale:inherit}.header-collapse-main ion-toolbar.in-toolbar ion-title,.header-collapse-main ion-toolbar.in-toolbar ion-buttons{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.header-collapse-condense ion-toolbar,.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--background:var(--ion-background-color, #fff)}.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--border-style:none;--opacity-scale:1}.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse{opacity:0;pointer-events:none}.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-buttons.buttons-collapse{visibility:hidden}ion-header.header-ios:not(.header-collapse-main):has(~ion-content ion-header.header-ios[collapse=condense],~ion-content ion-header.header-ios.header-collapse-condense){opacity:0}`;
969
+ const headerIonicCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-collapse-fade ion-toolbar{--opacity-scale:inherit}.header-collapse-fade.header-transitioning ion-toolbar{--background:transparent;--border-style:none}.header-collapse-condense{z-index:9}.header-collapse-condense ion-toolbar{position:-webkit-sticky;position:sticky;top:0}.header-collapse-condense ion-toolbar:first-of-type{padding-top:0px;z-index:1}.header-collapse-condense ion-toolbar{z-index:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}.header-collapse-condense ion-toolbar ion-searchbar{padding-top:0px;padding-bottom:13px}.header-collapse-main{--opacity-scale:1}.header-collapse-main ion-toolbar{--opacity-scale:inherit}.header-collapse-main ion-toolbar.in-toolbar ion-title,.header-collapse-main ion-toolbar.in-toolbar ion-buttons{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.header-collapse-condense ion-toolbar,.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--background:var(--ion-background-color, #fff)}.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--border-style:none;--opacity-scale:1}.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse{opacity:0;pointer-events:none}.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-buttons.buttons-collapse{visibility:hidden}ion-header:not(.header-collapse-main):has(~ion-content ion-header.header-collapse-condense){opacity:0}.header-collapse-condense-hidden{display:none}ion-header.header-scroll-effect-hide{-webkit-transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1)}ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);opacity:0}@media (prefers-reduced-motion: reduce){ion-header.header-scroll-effect-hide,ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transition:none;transition:none}}ion-header{z-index:10}ion-header.header-divider{border-bottom:var(--token-border-size-025, var(--token-scale-025, 1px)) var(--token-border-style-solid, solid) var(--token-border-default, var(--token-primitives-neutral-400, #d5d5d5))}ion-toolbar+ion-toolbar{--padding-start:var(--token-space-400, var(--token-scale-400, 16px));--padding-end:var(--token-space-400, var(--token-scale-400, 16px))}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.header-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(var(--token-scale-100, 4px));backdrop-filter:saturate(180%) blur(var(--token-scale-100, 4px))}.header-translucent-ionic ion-toolbar{--opacity:0.7}}`;
984
970
 
985
- const headerMdCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.header-md.header-collapse-condense{display:none}.header-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
971
+ const headerIosCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-collapse-fade ion-toolbar{--opacity-scale:inherit}.header-collapse-fade.header-transitioning ion-toolbar{--background:transparent;--border-style:none}.header-collapse-condense{z-index:9}.header-collapse-condense ion-toolbar{position:-webkit-sticky;position:sticky;top:0}.header-collapse-condense ion-toolbar:first-of-type{padding-top:0px;z-index:1}.header-collapse-condense ion-toolbar{z-index:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}.header-collapse-condense ion-toolbar ion-searchbar{padding-top:0px;padding-bottom:13px}.header-collapse-main{--opacity-scale:1}.header-collapse-main ion-toolbar{--opacity-scale:inherit}.header-collapse-main ion-toolbar.in-toolbar ion-title,.header-collapse-main ion-toolbar.in-toolbar ion-buttons{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.header-collapse-condense ion-toolbar,.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--background:var(--ion-background-color, #fff)}.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--border-style:none;--opacity-scale:1}.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse{opacity:0;pointer-events:none}.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-buttons.buttons-collapse{visibility:hidden}ion-header:not(.header-collapse-main):has(~ion-content ion-header.header-collapse-condense){opacity:0}.header-collapse-condense-hidden{display:none}ion-header.header-scroll-effect-hide{-webkit-transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1)}ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);opacity:0}@media (prefers-reduced-motion: reduce){ion-header.header-scroll-effect-hide,ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transition:none;transition:none}}ion-header{z-index:10}.header-ios ion-toolbar:last-of-type{--border-width:0 0 0.55px}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.header-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.header-translucent-ios ion-toolbar{--opacity:0.8}.header-collapse-condense-inactive .header-background{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}}.header-ios.ion-no-border ion-toolbar:last-of-type{--border-width:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}`;
972
+
973
+ const headerMdCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-collapse-fade ion-toolbar{--opacity-scale:inherit}.header-collapse-fade.header-transitioning ion-toolbar{--background:transparent;--border-style:none}.header-collapse-condense{z-index:9}.header-collapse-condense ion-toolbar{position:-webkit-sticky;position:sticky;top:0}.header-collapse-condense ion-toolbar:first-of-type{padding-top:0px;z-index:1}.header-collapse-condense ion-toolbar{z-index:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}.header-collapse-condense ion-toolbar ion-searchbar{padding-top:0px;padding-bottom:13px}.header-collapse-main{--opacity-scale:1}.header-collapse-main ion-toolbar{--opacity-scale:inherit}.header-collapse-main ion-toolbar.in-toolbar ion-title,.header-collapse-main ion-toolbar.in-toolbar ion-buttons{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.header-collapse-condense ion-toolbar,.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--background:var(--ion-background-color, #fff)}.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--border-style:none;--opacity-scale:1}.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse{opacity:0;pointer-events:none}.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-buttons.buttons-collapse{visibility:hidden}ion-header:not(.header-collapse-main):has(~ion-content ion-header.header-collapse-condense){opacity:0}.header-collapse-condense-hidden{display:none}ion-header.header-scroll-effect-hide{-webkit-transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1)}ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);opacity:0}@media (prefers-reduced-motion: reduce){ion-header.header-scroll-effect-hide,ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transition:none;transition:none}}ion-header{z-index:10}.header-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.header-md.header-collapse-condense{-webkit-box-shadow:none;box-shadow:none}.header-md.header-collapse-condense-inactive:not(.header-collapse-condense){-webkit-box-shadow:none;box-shadow:none}.header-md.header-collapse-fade{-webkit-box-shadow:none;box-shadow:none}.header-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
986
974
 
987
975
  const Header = class {
988
976
  constructor(hostRef) {
989
977
  index.registerInstance(this, hostRef);
990
978
  this.inheritedAttributes = {};
979
+ this.scrollHideCtrlPromise = null;
980
+ this.hasWarnedCollapse = false;
981
+ this.fadeCondenseSetupId = 0;
982
+ /**
983
+ * If `true`, the header will have a line at the bottom.
984
+ * TODO(ROU-10855): add support for this prop on ios/md themes
985
+ */
986
+ this.divider = false;
991
987
  /**
992
988
  * If `true`, the header will be translucent.
993
- * Only applies when the mode is `"ios"` and the device supports
989
+ * Only applies when the theme is `"ios"` or `"ionic"` and the device supports
994
990
  * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
995
991
  *
996
992
  * Note: In order to scroll content behind the header, the `fullscreen`
997
993
  * attribute needs to be set on the content.
998
994
  */
999
995
  this.translucent = false;
996
+ this.setupScrollEffectHide = async (contentEl) => {
997
+ const setupPromise = scrollHideController.createScrollHideController(contentEl, {
998
+ el: this.el,
999
+ cssVar: '--internal-header-hide-height',
1000
+ hiddenClass: 'header-scroll-hidden',
1001
+ contentPartnerClass: 'content-header-hide-scroll-partner',
1002
+ contentHiddenClass: 'content-header-hide-scroll-hidden',
1003
+ });
1004
+ this.scrollHideCtrlPromise = setupPromise;
1005
+ const controller = await setupPromise;
1006
+ if (this.scrollHideCtrlPromise === setupPromise) {
1007
+ this.scrollHideCtrlPromise = null;
1008
+ controller.init();
1009
+ this.scrollHideCtrl = controller;
1010
+ }
1011
+ };
1000
1012
  this.setupFadeHeader = async (contentEl, condenseHeader) => {
1001
- const scrollEl = (this.scrollEl = await index$1.getScrollElement(contentEl));
1013
+ const setupId = ++this.fadeCondenseSetupId;
1014
+ const scrollEl = await index$1.getScrollElement(contentEl);
1015
+ if (this.fadeCondenseSetupId !== setupId) {
1016
+ return;
1017
+ }
1018
+ this.scrollEl = scrollEl;
1002
1019
  /**
1003
1020
  * Handle fading of toolbars on scroll
1004
1021
  */
@@ -1022,37 +1039,63 @@ const Header = class {
1022
1039
  this.destroyCollapsibleHeader();
1023
1040
  }
1024
1041
  async checkCollapsibleHeader() {
1025
- const mode = ionicGlobal.getIonMode(this);
1026
- if (mode !== 'ios') {
1042
+ const { scrollEffect, collapse } = this;
1043
+ if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
1044
+ this.hasWarnedCollapse = true;
1045
+ index.printIonWarning(`[ion-header] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-header scroll-effect="${collapse}">`, this.el);
1046
+ }
1047
+ const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
1048
+ // Skip teardown/rebuild if the effect hasn't changed.
1049
+ // This prevents re-renders from destroying the scroll controller
1050
+ // and resetting isHidden.
1051
+ if (effect === this.activeEffect) {
1027
1052
  return;
1028
1053
  }
1029
- const { collapse } = this;
1030
- const hasCondense = collapse === 'condense';
1031
- const hasFade = collapse === 'fade';
1054
+ const hasHide = effect === 'hide';
1055
+ const hasCondense = effect === 'condense';
1056
+ const hasFade = effect === 'fade';
1032
1057
  this.destroyCollapsibleHeader();
1033
- if (hasCondense) {
1034
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
1035
- const contentEl = pageEl ? index$1.findIonContent(pageEl) : null;
1058
+ const appRootSelector = index.config.get('appRootSelector', 'ion-app');
1059
+ const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
1060
+ const contentEl = pageEl ? index$1.findIonContent(pageEl) : null;
1061
+ if (hasHide && contentEl) {
1062
+ this.activeEffect = effect;
1063
+ await this.setupScrollEffectHide(contentEl);
1064
+ return;
1065
+ }
1066
+ // condense/fade via the deprecated `collapse` prop are iOS-only.
1067
+ // condense/fade via the new `scrollEffect` prop work in all themes.
1068
+ const isModeRestricted = scrollEffect === undefined && ionicGlobal.getIonTheme(this) !== 'ios';
1069
+ if (hasCondense && !isModeRestricted) {
1036
1070
  // Cloned elements are always needed in iOS transition
1037
1071
  index.writeTask(() => {
1038
1072
  const title = cloneElement('ion-title');
1039
1073
  title.size = 'large';
1040
1074
  cloneElement('ion-back-button');
1041
1075
  });
1042
- await this.setupCondenseHeader(contentEl, pageEl);
1076
+ const didSetup = await this.setupCondenseHeader(contentEl, pageEl);
1077
+ if (didSetup) {
1078
+ this.activeEffect = effect;
1079
+ }
1043
1080
  }
1044
- else if (hasFade) {
1045
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
1046
- const contentEl = pageEl ? index$1.findIonContent(pageEl) : null;
1081
+ else if (hasFade && !isModeRestricted) {
1047
1082
  if (!contentEl) {
1048
1083
  index$1.printIonContentErrorMsg(this.el);
1049
1084
  return;
1050
1085
  }
1051
- const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"]');
1086
+ const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"],ion-header[scroll-effect="condense"]');
1087
+ this.activeEffect = effect;
1052
1088
  await this.setupFadeHeader(contentEl, condenseHeader);
1053
1089
  }
1054
1090
  }
1055
1091
  destroyCollapsibleHeader() {
1092
+ this.activeEffect = undefined;
1093
+ this.fadeCondenseSetupId++;
1094
+ this.scrollHideCtrlPromise = null;
1095
+ if (this.scrollHideCtrl) {
1096
+ this.scrollHideCtrl.destroy();
1097
+ this.scrollHideCtrl = undefined;
1098
+ }
1056
1099
  if (this.intersectionObserver) {
1057
1100
  this.intersectionObserver.disconnect();
1058
1101
  this.intersectionObserver = undefined;
@@ -1069,21 +1112,40 @@ const Header = class {
1069
1112
  async setupCondenseHeader(contentEl, pageEl) {
1070
1113
  if (!contentEl || !pageEl) {
1071
1114
  index$1.printIonContentErrorMsg(this.el);
1072
- return;
1115
+ return false;
1073
1116
  }
1074
1117
  if (typeof IntersectionObserver === 'undefined') {
1075
- return;
1118
+ return false;
1119
+ }
1120
+ const setupId = ++this.fadeCondenseSetupId;
1121
+ const scrollEl = await index$1.getScrollElement(contentEl);
1122
+ if (this.fadeCondenseSetupId !== setupId) {
1123
+ return false;
1124
+ }
1125
+ this.scrollEl = scrollEl;
1126
+ /**
1127
+ * The condense effect requires an ion-title with size="large"
1128
+ * in the condense header. Without it, there is nothing to
1129
+ * collapse into the main header toolbar.
1130
+ */
1131
+ const hasLargeTitle = this.el.querySelector('ion-title[size="large"]') !== null;
1132
+ if (!hasLargeTitle) {
1133
+ index.printIonWarning('[ion-header] - The condense scroll effect requires an <ion-title size="large"> in the condense header.', this.el);
1134
+ return false;
1076
1135
  }
1077
- this.scrollEl = await index$1.getScrollElement(contentEl);
1078
1136
  const headers = pageEl.querySelectorAll('ion-header');
1079
- this.collapsibleMainHeader = Array.from(headers).find((header) => header.collapse !== 'condense');
1137
+ this.collapsibleMainHeader = Array.from(headers).find((header) => {
1138
+ var _a;
1139
+ const effect = (_a = header.scrollEffect) !== null && _a !== void 0 ? _a : header.collapse;
1140
+ return effect !== 'condense';
1141
+ });
1080
1142
  if (!this.collapsibleMainHeader) {
1081
- return;
1143
+ return false;
1082
1144
  }
1083
1145
  const mainHeaderIndex = createHeaderIndex(this.collapsibleMainHeader);
1084
1146
  const scrollHeaderIndex = createHeaderIndex(this.el);
1085
1147
  if (!mainHeaderIndex || !scrollHeaderIndex) {
1086
- return;
1148
+ return false;
1087
1149
  }
1088
1150
  setHeaderActive(mainHeaderIndex, false);
1089
1151
  setToolbarBackgroundOpacity(mainHeaderIndex.el, 0);
@@ -1115,31 +1177,45 @@ const Header = class {
1115
1177
  this.collapsibleMainHeader.classList.add('header-collapse-main');
1116
1178
  }
1117
1179
  });
1180
+ return true;
1118
1181
  }
1119
1182
  render() {
1120
- const { translucent, inheritedAttributes } = this;
1121
- const mode = ionicGlobal.getIonMode(this);
1122
- const collapse = this.collapse || 'none';
1123
- const isCondensed = collapse === 'condense';
1183
+ const { translucent, inheritedAttributes, divider, scrollEffect, collapse } = this;
1184
+ const theme$1 = ionicGlobal.getIonTheme(this);
1185
+ const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
1186
+ // condense/fade via the deprecated `collapse` prop are iOS-only.
1187
+ const isModeRestricted = scrollEffect === undefined && theme$1 !== 'ios';
1188
+ const hasHide = effect === 'hide';
1189
+ const hasCondense = effect === 'condense' && !isModeRestricted && this.el.querySelector('ion-title[size="large"]') !== null;
1190
+ const hasFade = effect === 'fade' && !isModeRestricted;
1191
+ // The condense header should be hidden when
1192
+ // - deprecated collapse prop is used on non-iOS (mode restricted), or
1193
+ // - scrollEffect="condense" is set but no ion-title[size="large"] is present
1194
+ const isHiddenCondense = effect === 'condense' && !hasCondense;
1124
1195
  // banner role must be at top level, so remove role if inside a menu
1125
- const roleType = getRoleType(theme.hostContext('ion-menu', this.el), isCondensed, mode);
1126
- return (index.h(index.Host, Object.assign({ key: '863c4568cd7b8c0ec55109f193bbbaed68a1346e', role: roleType, class: {
1127
- [mode]: true,
1196
+ const roleType = isHiddenCondense ? 'none' : getRoleType(theme.hostContext('ion-menu', this.el));
1197
+ return (index.h(index.Host, Object.assign({ key: '09f60ca014bb7b3a85d3c0a94e7989d5dbc43f46', role: roleType, class: {
1198
+ [theme$1]: true,
1128
1199
  // Used internally for styling
1129
- [`header-${mode}`]: true,
1200
+ [`header-${theme$1}`]: true,
1130
1201
  [`header-translucent`]: this.translucent,
1131
- [`header-collapse-${collapse}`]: true,
1132
- [`header-translucent-${mode}`]: this.translucent,
1133
- } }, inheritedAttributes), mode === 'ios' && translucent && index.h("div", { key: '25c3bdce328b0b35607d154c8b8374679313d881', class: "header-background" }), index.h("slot", { key: 'b44fab0a9be7920b9650da26117c783e751e1702' })));
1202
+ ['header-collapse-condense']: hasCondense,
1203
+ ['header-collapse-condense-hidden']: isHiddenCondense,
1204
+ ['header-collapse-fade']: hasFade,
1205
+ [`header-translucent-${theme$1}`]: this.translucent,
1206
+ ['header-divider']: divider,
1207
+ 'header-scroll-effect-hide': hasHide,
1208
+ } }, inheritedAttributes), theme$1 !== 'md' && translucent && index.h("div", { key: 'fd5ff245ae0166e5e1d50936cacc98c90625db48', class: "header-background" }), index.h("slot", { key: '1baa31af87b9eb6406a21073ec65afa191dfbb3d' })));
1134
1209
  }
1135
1210
  get el() { return index.getElement(this); }
1136
1211
  };
1137
1212
  Header.style = {
1213
+ ionic: headerIonicCss(),
1138
1214
  ios: headerIosCss(),
1139
1215
  md: headerMdCss()
1140
1216
  };
1141
1217
 
1142
- const routerOutletCss = () => `:host{left:0;right:0;top:0;bottom:0;position:absolute;contain:layout size style;z-index:0}`;
1218
+ const routerOutletCss = () => `:host{right:0;left:0;top:0;bottom:0;position:absolute;contain:layout size style;z-index:0}`;
1143
1219
 
1144
1220
  const RouterOutlet = class {
1145
1221
  constructor(hostRef) {
@@ -1150,7 +1226,7 @@ const RouterOutlet = class {
1150
1226
  this.lockController = lockController.createLockController();
1151
1227
  this.gestureOrAnimationInProgress = false;
1152
1228
  /**
1153
- * The mode determines which platform styles to use.
1229
+ * The mode determines the platform behaviors of the component.
1154
1230
  */
1155
1231
  this.mode = ionicGlobal.getIonMode(this);
1156
1232
  /**
@@ -1170,7 +1246,7 @@ const RouterOutlet = class {
1170
1246
  this.swipeHandler.onStart();
1171
1247
  }
1172
1248
  };
1173
- this.gesture = (await Promise.resolve().then(function () { return require('./swipe-back-C0GCB18x.js'); })).createSwipeBackGesture(this.el, () => !this.gestureOrAnimationInProgress && !!this.swipeHandler && this.swipeHandler.canStart(), () => onStart(), (step) => { var _a; return (_a = this.ani) === null || _a === void 0 ? void 0 : _a.progressStep(step); }, (shouldComplete, step, dur) => {
1249
+ this.gesture = (await Promise.resolve().then(function () { return require('./swipe-back-CvZt_4YX.js'); })).createSwipeBackGesture(this.el, () => !this.gestureOrAnimationInProgress && !!this.swipeHandler && this.swipeHandler.canStart(), () => onStart(), (step) => { var _a; return (_a = this.ani) === null || _a === void 0 ? void 0 : _a.progressStep(step); }, (shouldComplete, step, dur) => {
1174
1250
  if (this.ani) {
1175
1251
  this.ani.onFinish(() => {
1176
1252
  this.gestureOrAnimationInProgress = false;
@@ -1316,7 +1392,7 @@ const RouterOutlet = class {
1316
1392
  return true;
1317
1393
  }
1318
1394
  render() {
1319
- return index.h("slot", { key: '386c41745b61daba161cf75063da97fe29ba36cb' });
1395
+ return index.h("slot", { key: '56e3d06ed939755796058e30ef19fbc7f7cb490d' });
1320
1396
  }
1321
1397
  get el() { return index.getElement(this); }
1322
1398
  static get watchers() { return {
@@ -1327,9 +1403,11 @@ const RouterOutlet = class {
1327
1403
  };
1328
1404
  RouterOutlet.style = routerOutletCss();
1329
1405
 
1330
- const titleIosCss = () => `:host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}:host(.ion-color){color:var(--ion-color-base)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host{top:0;-webkit-padding-start:90px;padding-inline-start:90px;-webkit-padding-end:90px;padding-inline-end:90px;padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);position:absolute;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0);font-size:min(1.0625rem, 20.4px);font-weight:600;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;pointer-events:none}:host{inset-inline-start:0}:host(.title-small){-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:6px;padding-bottom:16px;position:relative;font-size:min(0.8125rem, 23.4px);font-weight:normal}:host(.title-large){-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:12px;padding-inline-end:12px;padding-top:2px;padding-bottom:4px;-webkit-transform-origin:left center;transform-origin:left center;position:static;-ms-flex-align:end;align-items:flex-end;min-width:100%;font-size:min(2.125rem, 61.2px);font-weight:700;text-align:start}:host(.title-large.title-rtl){-webkit-transform-origin:right center;transform-origin:right center}:host(.title-large.ion-cloned-element){--color:var(--ion-text-color, #000);font-family:var(--ion-font-family)}:host(.title-large) .toolbar-title{-webkit-transform-origin:inherit;transform-origin:inherit;width:auto}:host-context([dir=rtl]):host(.title-large) .toolbar-title,:host-context([dir=rtl]).title-large .toolbar-title{-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}@supports selector(:dir(rtl)){:host(.title-large:dir(rtl)) .toolbar-title{-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}}`;
1406
+ const titleIonicCss = () => `:host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host{font-size:var(--token-font-size-450, 1.125rem);font-weight:var(--token-font-weight-medium, 500);letter-spacing:var(--token-font-letter-spacing-0, 0%);line-height:var(--token-font-line-height-700, var(--token-scale-700, 28px));text-decoration:none;text-transform:none;-webkit-box-sizing:border-box;box-sizing:border-box;pointer-events:none}:host(.title-large){font-size:var(--token-font-size-700, 1.75rem);font-weight:var(--token-font-weight-medium, 500);letter-spacing:var(--token-font-letter-spacing-0, 0%);line-height:var(--token-font-line-height-900, var(--token-scale-900, 36px));text-decoration:none;text-transform:none}`;
1407
+
1408
+ const titleIosCss = () => `:host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host(.ion-color){color:var(--ion-color-base)}:host{top:0;-webkit-padding-start:90px;padding-inline-start:90px;-webkit-padding-end:90px;padding-inline-end:90px;padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);position:absolute;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0);font-size:min(1.0625rem, 20.4px);font-weight:600;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;pointer-events:none}:host{inset-inline-start:0}:host(.title-small){-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:6px;padding-bottom:16px;position:relative;font-size:min(0.8125rem, 23.4px);font-weight:normal}:host(.title-large){-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:12px;padding-inline-end:12px;padding-top:2px;padding-bottom:4px;-webkit-transform-origin:left center;transform-origin:left center;position:static;-ms-flex-align:end;align-items:flex-end;min-width:100%;font-size:min(2.125rem, 61.2px);font-weight:700;text-align:start}:host(.title-large.title-rtl){-webkit-transform-origin:right center;transform-origin:right center}:host(.title-large.ion-cloned-element){--color:var(--ion-text-color, #000);font-family:var(--ion-font-family)}:host(.title-large) .toolbar-title{-webkit-transform-origin:inherit;transform-origin:inherit;width:auto}:host-context([dir=rtl]):host(.title-large) .toolbar-title,:host-context([dir=rtl]).title-large .toolbar-title{-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}@supports selector(:dir(rtl)){:host(.title-large:dir(rtl)) .toolbar-title{-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}}`;
1331
1409
 
1332
- const titleMdCss = () => `:host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}:host(.ion-color){color:var(--ion-color-base)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px;padding-top:0;padding-bottom:0;font-size:1.25rem;font-weight:500;letter-spacing:0.0125em}:host(.title-small){width:100%;height:100%;font-size:0.9375rem;font-weight:normal}`;
1410
+ const titleMdCss = () => `:host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host(.ion-color){color:var(--ion-color-base)}:host{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px;padding-top:0;padding-bottom:0;font-size:1.25rem;font-weight:500;letter-spacing:0.0125em}:host(.title-small){width:100%;height:100%;font-size:0.9375rem;font-weight:normal}:host(.title-large){width:100%;height:100%;font-size:1.75rem;font-weight:400}`;
1333
1411
 
1334
1412
  const ToolbarTitle = class {
1335
1413
  constructor(hostRef) {
@@ -1352,13 +1430,13 @@ const ToolbarTitle = class {
1352
1430
  return this.size !== undefined ? this.size : 'default';
1353
1431
  }
1354
1432
  render() {
1355
- const mode = ionicGlobal.getIonMode(this);
1433
+ const theme$1 = ionicGlobal.getIonTheme(this);
1356
1434
  const size = this.getSize();
1357
- return (index.h(index.Host, { key: '44e63f8439df64c470692904427b417e19406476', class: theme.createColorClasses(this.color, {
1358
- [mode]: true,
1435
+ return (index.h(index.Host, { key: 'd64e86bed418cba707d4a26c9274f18ed06c0e9e', class: theme.createColorClasses(this.color, {
1436
+ [theme$1]: true,
1359
1437
  [`title-${size}`]: true,
1360
1438
  'title-rtl': document.dir === 'rtl',
1361
- }) }, index.h("div", { key: '784cf60a0db16045391891cc8fad0c7dbeba4039', class: "toolbar-title" }, index.h("slot", { key: '0c720a50479ba257e8756337aeb9b0ab7516a227' }))));
1439
+ }) }, index.h("div", { key: '386a71e974cde0bfbf5b655d69ed5f718de8ce48', class: "toolbar-title" }, index.h("slot", { key: '8aa804c9e1b11574a42268805d3117a085e699b4' }))));
1362
1440
  }
1363
1441
  get el() { return index.getElement(this); }
1364
1442
  static get watchers() { return {
@@ -1368,18 +1446,29 @@ const ToolbarTitle = class {
1368
1446
  }; }
1369
1447
  };
1370
1448
  ToolbarTitle.style = {
1449
+ ionic: titleIonicCss(),
1371
1450
  ios: titleIosCss(),
1372
1451
  md: titleMdCss()
1373
1452
  };
1374
1453
 
1375
- const toolbarIosCss = () => `:host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:block;position:relative;width:100%;padding-right:var(--ion-safe-area-right);padding-left:var(--ion-safe-area-left);color:var(--color);font-family:var(--ion-font-family, inherit);contain:content;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{-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);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));z-index:-1;pointer-events:none}::slotted(ion-progress-bar){left:0;right:0;bottom:0;position:absolute}:host{--background:var(--ion-toolbar-background, var(--ion-color-step-50, var(--ion-background-color-step-50, #f7f7f7)));--color:var(--ion-toolbar-color, var(--ion-text-color, #000));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, var(--ion-background-color-step-150, rgba(0, 0, 0, 0.2)))));--padding-top:3px;--padding-bottom:3px;--padding-start:4px;--padding-end:4px;--min-height:44px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:4;order:4;min-width:0}:host(.toolbar-segment) .toolbar-content{display:-ms-inline-flexbox;display:inline-flex}:host(.toolbar-searchbar) .toolbar-container{padding-top:0;padding-bottom:0}:host(.toolbar-searchbar) ::slotted(*){-ms-flex-item-align:start;align-self:start}:host(.toolbar-searchbar) ::slotted(ion-chip){margin-top:3px}::slotted(ion-buttons){min-height:38px}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:3;order:3}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}:host(.toolbar-title-large) .toolbar-container{-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:start;align-items:flex-start}:host(.toolbar-title-large) .toolbar-content ion-title{-ms-flex:1;flex:1;-ms-flex-order:8;order:8;min-width:100%}`;
1454
+ const toolbarIonicCss = () => `:host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:block;position:relative;width:100%;padding-right:var(--ion-safe-area-right);padding-left:var(--ion-safe-area-left);color:var(--color);contain:content;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-container{-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);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));pointer-events:none}::slotted(ion-progress-bar){right:0;left:0;bottom:0;position:absolute}:host{--background:var(--token-bg-surface-default, var(--token-primitives-base-white, #ffffff));--color:var(--token-text-default, var(--token-primitives-neutral-1200, #242424));--border-color:currentColor;--padding-top:var(--token-space-200, var(--token-scale-200, 8px));--padding-bottom:var(--token-space-200, var(--token-scale-200, 8px));--padding-start:var(--token-space-200, var(--token-scale-200, 8px));--padding-end:var(--token-space-200, var(--token-scale-200, 8px));--min-height:var(--token-scale-1400, 56px)}.toolbar-container{gap:var(--token-space-400, var(--token-scale-400, 16px));z-index:10}.toolbar-background{z-index:-1}.toolbar-content{-ms-flex:1 1 auto;flex:1 1 auto;min-width:0}:host(.toolbar-searchbar) ::slotted(ion-searchbar){padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}::slotted(ion-buttons){gap:var(--token-space-200, var(--token-scale-200, 8px))}::slotted(ion-title){-webkit-padding-start:var(--token-space-200, var(--token-scale-200, 8px));padding-inline-start:var(--token-space-200, var(--token-scale-200, 8px));-webkit-padding-end:var(--token-space-200, var(--token-scale-200, 8px));padding-inline-end:var(--token-space-200, var(--token-scale-200, 8px))}:host(.toolbar-title-large) ::slotted(ion-title){-webkit-padding-start:var(--token-space-400, var(--token-scale-400, 16px));padding-inline-start:var(--token-space-400, var(--token-scale-400, 16px));-webkit-padding-end:var(--token-space-400, var(--token-scale-400, 16px));padding-inline-end:var(--token-space-400, var(--token-scale-400, 16px))}:host(.has-end-content) slot[name=end],:host(.show-end) slot[name=end]{display:-ms-flexbox;display:flex;-ms-flex:0 0 var(--start-end-size, 0);flex:0 0 var(--start-end-size, 0);-ms-flex-pack:end;justify-content:flex-end;text-align:end}:host(.has-start-content) slot[name=start],:host(.show-start) slot[name=start]{display:-ms-flexbox;display:flex;-ms-flex:0 0 var(--start-end-size, 0);flex:0 0 var(--start-end-size, 0)}:host(.has-primary-content) slot[name=primary],:host(.show-primary) slot[name=primary]{display:-ms-flexbox;display:flex;-ms-flex:0 0 var(--primary-secondary-size, 0);flex:0 0 var(--primary-secondary-size, 0);-ms-flex-pack:end;justify-content:flex-end;text-align:end}:host(.has-secondary-content) slot[name=secondary],:host(.show-secondary) slot[name=secondary]{display:-ms-flexbox;display:flex;-ms-flex:0 0 var(--primary-secondary-size, 0);flex:0 0 var(--primary-secondary-size, 0)}:host(.toolbar-title-placement-start) ::slotted(ion-title){text-align:start}:host(.toolbar-title-placement-center) ::slotted(ion-title){text-align:center}:host(.toolbar-title-placement-end) ::slotted(ion-title){text-align:end}`;
1376
1455
 
1377
- const toolbarMdCss = () => `:host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:block;position:relative;width:100%;padding-right:var(--ion-safe-area-right);padding-left:var(--ion-safe-area-left);color:var(--color);font-family:var(--ion-font-family, inherit);contain:content;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{-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);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));z-index:-1;pointer-events:none}::slotted(ion-progress-bar){left:0;right:0;bottom:0;position:absolute}:host{--background:var(--ion-toolbar-background, var(--ion-background-color, #fff));--color:var(--ion-toolbar-color, var(--ion-text-color, #424242));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, var(--ion-background-color-step-150, #c1c4cd))));--padding-top:0;--padding-bottom:0;--padding-start:0;--padding-end:0;--min-height:56px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:3;order:3;min-width:0;max-width:100%}::slotted(.buttons-first-slot){-webkit-margin-start:4px;margin-inline-start:4px}::slotted(.buttons-last-slot){-webkit-margin-end:4px;margin-inline-end:4px}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:4;order:4}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}`;
1456
+ const toolbarIosCss = () => `:host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:block;position:relative;width:100%;padding-right:var(--ion-safe-area-right);padding-left:var(--ion-safe-area-left);color:var(--color);contain:content;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-container{-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);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));pointer-events:none}::slotted(ion-progress-bar){right:0;left:0;bottom:0;position:absolute}:host{font-family:var(--ion-font-family, inherit);z-index:10}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{z-index:10}.toolbar-background{z-index:-1}:host{--background:var(--ion-toolbar-background, var(--ion-color-step-50, var(--ion-background-color-step-50, #f7f7f7)));--color:var(--ion-toolbar-color, var(--ion-text-color, #000));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, var(--ion-background-color-step-150, rgba(0, 0, 0, 0.2)))));--padding-top:3px;--padding-bottom:3px;--padding-start:4px;--padding-end:4px;--min-height:44px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:4;order:4;min-width:0}:host(.toolbar-segment) .toolbar-content{display:-ms-inline-flexbox;display:inline-flex}:host(.toolbar-searchbar) .toolbar-container{padding-top:0;padding-bottom:0}:host(.toolbar-searchbar) ::slotted(*){-ms-flex-item-align:start;align-self:start}:host(.toolbar-searchbar) ::slotted(ion-chip){margin-top:3px}::slotted(ion-buttons){min-height:38px}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:3;order:3}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}:host(.toolbar-title-large) .toolbar-container{-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:start;align-items:flex-start}:host(.toolbar-title-large) .toolbar-content ion-title{-ms-flex:1;flex:1;-ms-flex-order:8;order:8;min-width:100%}`;
1457
+
1458
+ const toolbarMdCss = () => `:host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:block;position:relative;width:100%;padding-right:var(--ion-safe-area-right);padding-left:var(--ion-safe-area-left);color:var(--color);contain:content;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-container{-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);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}.toolbar-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));pointer-events:none}::slotted(ion-progress-bar){right:0;left:0;bottom:0;position:absolute}:host{font-family:var(--ion-font-family, inherit);z-index:10}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{z-index:10}.toolbar-background{z-index:-1}:host{--background:var(--ion-toolbar-background, var(--ion-background-color, #fff));--color:var(--ion-toolbar-color, var(--ion-text-color, #424242));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, var(--ion-background-color-step-150, #c1c4cd))));--padding-top:0;--padding-bottom:0;--padding-start:0;--padding-end:0;--min-height:56px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:3;order:3;min-width:0;max-width:100%}::slotted(.buttons-first-slot){-webkit-margin-start:4px;margin-inline-start:4px}::slotted(.buttons-last-slot){-webkit-margin-end:4px;margin-inline-end:4px}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:4;order:4}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}`;
1378
1459
 
1379
1460
  const Toolbar = class {
1380
1461
  constructor(hostRef) {
1381
1462
  index.registerInstance(this, hostRef);
1382
1463
  this.childrenStyles = new Map();
1464
+ this.slotClasses = [
1465
+ 'has-start-content',
1466
+ 'has-end-content',
1467
+ 'has-primary-content',
1468
+ 'has-secondary-content',
1469
+ ];
1470
+ this.showClasses = ['show-start', 'show-end', 'show-primary', 'show-secondary'];
1471
+ this.slotSizeVars = ['--start-end-size', '--primary-secondary-size'];
1383
1472
  }
1384
1473
  componentWillLoad() {
1385
1474
  const buttons = Array.from(this.el.querySelectorAll('ion-buttons'));
@@ -1396,6 +1485,173 @@ const Toolbar = class {
1396
1485
  if (lastButtons) {
1397
1486
  lastButtons.classList.add('buttons-last-slot');
1398
1487
  }
1488
+ this.updateSlotClasses();
1489
+ }
1490
+ componentDidLoad() {
1491
+ this.updateSlotClasses();
1492
+ this.updateSlotWidths();
1493
+ }
1494
+ titlePlacementChanged() {
1495
+ this.updateSlotClasses();
1496
+ }
1497
+ /**
1498
+ * Gets the title placement.
1499
+ * Returns the title placement if it is set, otherwise returns `"center"`
1500
+ * for `ionic` and `ios`, and `"start"` for `md`.
1501
+ */
1502
+ getTitlePlacement() {
1503
+ if (this.titlePlacement !== undefined) {
1504
+ return this.titlePlacement;
1505
+ }
1506
+ return ionicGlobal.getIonTheme(this) === 'ionic' || ionicGlobal.getIonTheme(this) === 'ios' ? 'center' : 'start';
1507
+ }
1508
+ /**
1509
+ * Updates the CSS custom properties for slot widths
1510
+ * This ensures that slots shown by their met conditions
1511
+ * have a minimum width matching their required slot
1512
+ */
1513
+ updateSlotWidths(tries = 0) {
1514
+ // Set timeout to try to execute after everything is rendered
1515
+ setTimeout(() => {
1516
+ // Attempt to measure and update
1517
+ const success = this.measureAndUpdateSlots();
1518
+ // If not all measurements were successful, try again in 100 ms
1519
+ // cap recursion at 5 tries for safety
1520
+ if (!success && tries < 5) {
1521
+ setTimeout(() => {
1522
+ this.updateSlotWidths(tries + 1);
1523
+ }, 100);
1524
+ }
1525
+ });
1526
+ }
1527
+ /**
1528
+ * Measure the widths of the slots and update the CSS custom properties
1529
+ * for the minimum width of each pair of slots based on the largest width in each pair.
1530
+ * Returns whether we successfully measured all of the slots we expect to have content.
1531
+ * If not, the content probably hasn't rendered yet and we need to try again.
1532
+ */
1533
+ measureAndUpdateSlots() {
1534
+ // Define the relationship between slots based on the conditions array
1535
+ // Group slots that should have the same width
1536
+ const slotPairs = [
1537
+ { name: 'start-end', slots: ['start', 'end'] },
1538
+ { name: 'primary-secondary', slots: ['primary', 'secondary'] },
1539
+ ];
1540
+ // First, measure all slot widths
1541
+ const slotWidths = new Map();
1542
+ let allMeasurementsSuccessful = true;
1543
+ // Measure all slots with content
1544
+ const slots = ['start', 'end', 'primary', 'secondary'];
1545
+ slots.forEach((slot) => {
1546
+ var _a;
1547
+ if (this.el.classList.contains(`has-${slot}-content`)) {
1548
+ const slotElement = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`slot[name="${slot}"]`);
1549
+ if (slotElement) {
1550
+ // Check if the slot contains an img or ion-img
1551
+ const assignedElements = slotElement.assignedElements({ flatten: true });
1552
+ const hasImg = assignedElements.some((el) => {
1553
+ if (el.tagName === 'IMG' || el.tagName === 'ION-IMG') {
1554
+ return true;
1555
+ }
1556
+ // Check for nested images
1557
+ return el.querySelector('img, ion-img');
1558
+ });
1559
+ // Temporarily allow slot to size to content by setting flex-basis
1560
+ // to 'auto'. This ensures that slotted images can render at their
1561
+ // intrinsic width for measurement.
1562
+ if (hasImg) {
1563
+ const { name } = slotPairs.find((pair) => pair.slots.includes(slot));
1564
+ this.el.style.setProperty(`--${name}-size`, 'auto');
1565
+ }
1566
+ const width = slotElement.offsetWidth;
1567
+ if (width > 0) {
1568
+ slotWidths.set(slot, width);
1569
+ }
1570
+ else {
1571
+ allMeasurementsSuccessful = false;
1572
+ }
1573
+ }
1574
+ }
1575
+ });
1576
+ // Then set the CSS custom properties based on the largest width in each pair
1577
+ slotPairs.forEach(({ name, slots }) => {
1578
+ // Find the maximum width among the slots in this pair
1579
+ let maxWidth = 0;
1580
+ let hasAnyContent = false;
1581
+ slots.forEach((slot) => {
1582
+ var _a;
1583
+ if (slotWidths.has(slot)) {
1584
+ hasAnyContent = true;
1585
+ maxWidth = Math.max(maxWidth, (_a = slotWidths.get(slot)) !== null && _a !== void 0 ? _a : 0);
1586
+ }
1587
+ });
1588
+ // If at least one slot in the pair has content, set the min-width for the pair
1589
+ if (hasAnyContent && maxWidth > 0) {
1590
+ // Set a single CSS variable for the pair
1591
+ this.el.style.setProperty(`--${name}-size`, `${maxWidth}px`);
1592
+ }
1593
+ });
1594
+ return allMeasurementsSuccessful;
1595
+ }
1596
+ /**
1597
+ * Removes all slot visibility classes and slot width CSS variables.
1598
+ */
1599
+ removeSlotClasses() {
1600
+ this.el.classList.remove(...this.slotClasses, ...this.showClasses);
1601
+ this.slotSizeVars.forEach((cssVar) => this.el.style.removeProperty(cssVar));
1602
+ }
1603
+ updateSlotClasses() {
1604
+ const titlePlacement = this.getTitlePlacement();
1605
+ if (titlePlacement !== 'center') {
1606
+ this.removeSlotClasses();
1607
+ return;
1608
+ }
1609
+ // Check if slots have content
1610
+ const slots = ['start', 'end', 'primary', 'secondary'];
1611
+ const classesToAdd = [];
1612
+ const classesToRemove = [];
1613
+ slots.forEach((slot) => {
1614
+ const slotHasContent = this.hasSlotContent(slot);
1615
+ const slotClass = `has-${slot}-content`;
1616
+ if (slotHasContent) {
1617
+ classesToAdd.push(slotClass);
1618
+ }
1619
+ else {
1620
+ classesToRemove.push(slotClass);
1621
+ }
1622
+ });
1623
+ // Force visibilities in certain conditions. This works by adding a class to the toolbar
1624
+ // named `show-{slot}`. This class will be added if the toolbar has the required slots
1625
+ // and does not have any of the excluded slots, otherwise it will be removed.
1626
+ // This is useful to enforce centering of the toolbar content when there are different amounts
1627
+ // of slots on either side of the toolbar.
1628
+ const conditions = [
1629
+ { name: 'end', requiredSlots: ['start'], excludeSlots: ['end', 'primary'] },
1630
+ { name: 'start', requiredSlots: ['end'], excludeSlots: ['start', 'secondary'] },
1631
+ { name: 'secondary', requiredSlots: ['primary'], excludeSlots: ['secondary', 'start'] },
1632
+ { name: 'primary', requiredSlots: ['secondary'], excludeSlots: ['primary', 'end'] },
1633
+ ];
1634
+ conditions.forEach((condition) => {
1635
+ const hasRequiredSlots = condition.requiredSlots.every((slot) => classesToAdd.includes(`has-${slot}-content`));
1636
+ const hasExcludedSlots = condition.excludeSlots.some((slot) => classesToAdd.includes(`has-${slot}-content`));
1637
+ const className = `show-${condition.name}`;
1638
+ if (hasRequiredSlots && !hasExcludedSlots) {
1639
+ classesToAdd.push(className);
1640
+ }
1641
+ else {
1642
+ classesToRemove.push(className);
1643
+ }
1644
+ });
1645
+ // Add classes to the toolbar element
1646
+ this.el.classList.add(...classesToAdd);
1647
+ this.el.classList.remove(...classesToRemove);
1648
+ // Update slot widths after classes have been updated
1649
+ this.updateSlotWidths();
1650
+ }
1651
+ hasSlotContent(slotName) {
1652
+ var _a;
1653
+ const slotNode = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`slot[name="${slotName}"]`);
1654
+ return !!slotNode && slotNode.assignedNodes().length > 0;
1399
1655
  }
1400
1656
  childrenStyle(ev) {
1401
1657
  ev.stopPropagation();
@@ -1420,19 +1676,27 @@ const Toolbar = class {
1420
1676
  }
1421
1677
  }
1422
1678
  render() {
1423
- const mode = ionicGlobal.getIonMode(this);
1679
+ const theme$1 = ionicGlobal.getIonTheme(this);
1424
1680
  const childStyles = {};
1425
- this.childrenStyles.forEach((value) => {
1426
- Object.assign(childStyles, value);
1681
+ this.childrenStyles.forEach((style) => {
1682
+ Object.assign(childStyles, style);
1427
1683
  });
1428
- return (index.h(index.Host, { key: 'b849db2863778dee6c5a251bffa1b3a657aeb036', class: Object.assign(Object.assign({}, childStyles), theme.createColorClasses(this.color, {
1429
- [mode]: true,
1684
+ const titlePlacement = this.getTitlePlacement();
1685
+ return (index.h(index.Host, { key: 'bcb621674157410d7eaeb006779bdd677346587e', class: Object.assign(Object.assign({}, theme.createColorClasses(this.color, {
1686
+ [theme$1]: true,
1430
1687
  'in-toolbar': theme.hostContext('ion-toolbar', this.el),
1431
- })) }, index.h("div", { key: '67f5bba9c4f527c3f35bfe1313a2b85741f9b246', class: "toolbar-background", part: "background" }), index.h("div", { key: '085e8c68f056e5b0deb9d1606431fbeb45dae8e5', class: "toolbar-container", part: "container" }, index.h("slot", { key: '15227c79c3baf883fd8c43fdb7e1313453933c79', name: "start" }), index.h("slot", { key: '0b8a7f7e685aa31c80d9bc03446ccc3a9d07e0e8', name: "secondary" }), index.h("div", { key: '57e4628c1fa89df79dd80456259db961bb691404', class: "toolbar-content", part: "content" }, index.h("slot", { key: '82c2f6e1acf8d96db259bd8baf295881801edbd5' })), index.h("slot", { key: 'b2d4afb15214199f206c0a5e08b581e4c9c2f58a', name: "primary" }), index.h("slot", { key: 'bfb909a0c472f8834046c2ea23bef2f562167ad3', name: "end" }))));
1688
+ [`toolbar-title-placement-${titlePlacement}`]: true,
1689
+ })), childStyles) }, index.h("div", { key: '0d31a98b2571b9a0ae142fbdfd83e2ebdcd8e069', class: "toolbar-background", part: "background" }), index.h("div", { key: 'de938534c487c6cb4060dac44b40c2d872130f50', class: "toolbar-container", part: "container" }, index.h("slot", { key: 'a337150d353e439eae67c31ff86e383ed51f3d8f', name: "start", onSlotchange: () => this.updateSlotClasses }), index.h("slot", { key: '02effd3ce0cdad5ec5645fa58ccb329321449190', name: "secondary", onSlotchange: () => this.updateSlotClasses }), index.h("div", { key: '3e22f5feda2aea02117bdea2fe8a4b8905ba82f6', class: "toolbar-content", part: "content" }, index.h("slot", { key: 'ebf828643ff05a8bf662a54715d21d0859168d31' })), index.h("slot", { key: 'a6940648dfe25a7aa8792a1bd9267437274f333c', name: "primary", onSlotchange: () => this.updateSlotClasses }), index.h("slot", { key: 'afb1d61aa0e430fcf483ba482af64762474e06fe', name: "end", onSlotchange: () => this.updateSlotClasses }))));
1432
1690
  }
1433
1691
  get el() { return index.getElement(this); }
1692
+ static get watchers() { return {
1693
+ "titlePlacement": [{
1694
+ "titlePlacementChanged": 0
1695
+ }]
1696
+ }; }
1434
1697
  };
1435
1698
  Toolbar.style = {
1699
+ ionic: toolbarIonicCss(),
1436
1700
  ios: toolbarIosCss(),
1437
1701
  md: toolbarMdCss()
1438
1702
  };