@ionic/core 9.0.2 → 9.0.3-dev.11788449150.16022b1e

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 (1116) 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.js +1 -1
  65. package/components/ion-popover.js +1 -1
  66. package/components/ion-progress-bar.js +1 -1
  67. package/components/ion-radio-group.js +1 -1
  68. package/components/ion-radio.js +1 -1
  69. package/components/ion-range.js +1 -1
  70. package/components/ion-refresher-content.js +1 -1
  71. package/components/ion-refresher.js +1 -1
  72. package/components/ion-reorder-group.js +1 -1
  73. package/components/ion-reorder.js +1 -1
  74. package/components/ion-ripple-effect.js +1 -1
  75. package/components/ion-route-redirect.js +1 -1
  76. package/components/ion-route.js +1 -1
  77. package/components/ion-router-link.js +1 -1
  78. package/components/ion-router-outlet.js +1 -1
  79. package/components/ion-router.js +1 -1
  80. package/components/ion-row.js +1 -1
  81. package/components/ion-searchbar.js +1 -1
  82. package/components/ion-segment-button.js +1 -1
  83. package/components/ion-segment-content.js +1 -1
  84. package/components/ion-segment-view.js +1 -1
  85. package/components/ion-segment.js +1 -1
  86. package/components/ion-select-modal.js +1 -1
  87. package/components/ion-select-option.js +1 -1
  88. package/components/ion-select-popover.js +1 -1
  89. package/components/ion-select.js +1 -1
  90. package/components/ion-skeleton-text.js +1 -1
  91. package/components/ion-spinner.js +1 -1
  92. package/components/ion-split-pane.js +1 -1
  93. package/components/ion-tab-bar.js +1 -1
  94. package/components/ion-tab-button.js +1 -1
  95. package/components/ion-tab.js +1 -1
  96. package/components/ion-tabs.js +1 -1
  97. package/components/ion-text.js +1 -1
  98. package/components/ion-textarea.js +1 -1
  99. package/components/ion-thumbnail.js +1 -1
  100. package/components/ion-title.js +1 -1
  101. package/components/ion-toast.js +1 -1
  102. package/components/ion-toggle.js +1 -1
  103. package/components/ion-toolbar.js +1 -1
  104. package/components/p-B1AK6oR-.js +4 -0
  105. package/components/p-B8dfyFoB.js +4 -0
  106. package/components/p-B9UT2JwK.js +4 -0
  107. package/components/p-BBz0jPCg.js +4 -0
  108. package/components/p-BDqjX7Z_.js +4 -0
  109. package/components/p-BGP1kR6j.js +4 -0
  110. package/components/p-BLGqtLjb.js +4 -0
  111. package/components/p-BQUTtt8S.js +4 -0
  112. package/components/p-BUF_V-Kg.js +4 -0
  113. package/components/p-BYSs-jZz.js +4 -0
  114. package/components/{p-BT9-hMMz.js → p-BZmR0M4X.js} +1 -1
  115. package/components/{p-CWuIRJQN.js → p-BZtGrrX4.js} +1 -1
  116. package/{dist/ionic/p-DTxBioUO.js → components/p-BahD7B6k.js} +1 -1
  117. package/{dist/ionic/p-DZ6Hmc-8.js → components/p-BcxhVbtz.js} +1 -1
  118. package/components/p-BdAOHgnb.js +4 -0
  119. package/components/p-Be00fpKV.js +4 -0
  120. package/{dist/ionic/p-C8XilMh0.js → components/p-BkQ1V9ee.js} +1 -1
  121. package/components/p-Bkk8447d.js +4 -0
  122. package/components/p-C8aonLbo.js +4 -0
  123. package/components/p-C9cwz4xv.js +4 -0
  124. package/components/p-CDmCFFLL.js +4 -0
  125. package/components/{p-Cw6WocLJ.js → p-CN41sVGB.js} +1 -1
  126. package/components/p-CODBQrPj.js +4 -0
  127. package/components/p-CPXKIYkL.js +4 -0
  128. package/components/p-CPdOdJa7.js +4 -0
  129. package/components/p-CTTmpA7l.js +4 -0
  130. package/components/p-Cc3oC60a.js +4 -0
  131. package/components/{p-BMPN55of.js → p-CksPhDEa.js} +1 -1
  132. package/components/{p-Fl7ZFU74.js → p-ClnMyzlV.js} +1 -1
  133. package/components/p-Cm78Kk79.js +4 -0
  134. package/components/p-CmEe-Llj.js +4 -0
  135. package/components/{p-DM1gJSMP.js → p-CrNVENZG.js} +1 -1
  136. package/components/p-CsQsFkwO.js +4 -0
  137. package/components/{p-BQyuFxYc.js → p-CtLeQL1G.js} +1 -1
  138. package/components/p-CvRAtS4n.js +4 -0
  139. package/components/p-D1t981Ih.js +4 -0
  140. package/components/p-D5lFNdff.js +4 -0
  141. package/components/p-D9jEKvVd.js +4 -0
  142. package/components/p-DG-ZC7Js.js +4 -0
  143. package/components/p-DGfjyB0v.js +4 -0
  144. package/components/p-DJkuoL4u.js +4 -0
  145. package/{dist/ionic/p-BaeKWZ-a.js → components/p-DNrr6r3I.js} +1 -1
  146. package/components/p-DOdd_Inr.js +4 -0
  147. package/components/p-DOoxQDxg.js +4 -0
  148. package/components/p-DWBpR7SJ.js +4 -0
  149. package/components/{p-CEW4RXZO.js → p-DcOWEjmv.js} +1 -1
  150. package/components/p-DgEOEy6x.js +4 -0
  151. package/components/{p-DhNuxvJH.js → p-DgIAZUGe.js} +1 -1
  152. package/components/{p-qAXsfUff.js → p-DhBOoebx.js} +1 -1
  153. package/components/p-Dhi5xtNS.js +4 -0
  154. package/components/p-DkQNAyg8.js +4 -0
  155. package/components/p-DtPgvez6.js +4 -0
  156. package/components/p-DwAij6DN.js +4 -0
  157. package/components/p-DzaPYdjZ.js +4 -0
  158. package/components/p-Dzuh_AKJ.js +4 -0
  159. package/components/p-EayFnjkU.js +4 -0
  160. package/components/p-JAFy4ZHv.js +4 -0
  161. package/components/p-NcQUGze-.js +4 -0
  162. package/components/p-Uo-TYRpE.js +4 -0
  163. package/components/p-VLn2Ytmp.js +4 -0
  164. package/components/p-W8Yq_OMR.js +4 -0
  165. package/components/p-ZxET9sbA.js +4 -0
  166. package/components/p-cKiRADSB.js +4 -0
  167. package/components/p-e73ca-aN.js +4 -0
  168. package/components/p-fIOYmaqA.js +4 -0
  169. package/components/p-fh4o6dKR.js +4 -0
  170. package/components/p-vXpMhGrs.js +4 -0
  171. package/css/core.css +1 -1
  172. package/css/core.css.map +1 -1
  173. package/css/display.css +1 -1
  174. package/css/display.css.map +1 -1
  175. package/css/flex-utils.css +1 -1
  176. package/css/flex-utils.css.map +1 -1
  177. package/css/float-elements.css.map +1 -1
  178. package/css/global.bundle.css.map +1 -1
  179. package/css/ionic/bundle.ionic.css +1 -0
  180. package/css/ionic/bundle.ionic.css.map +1 -0
  181. package/css/ionic/core.ionic.css +1 -0
  182. package/css/ionic/core.ionic.css.map +1 -0
  183. package/css/ionic/global.bundle.ionic.css +1 -0
  184. package/css/ionic/global.bundle.ionic.css.map +1 -0
  185. package/css/ionic/ionic-swiper.ionic.css +1 -0
  186. package/css/ionic/ionic-swiper.ionic.css.map +1 -0
  187. package/css/ionic/link.ionic.css +1 -0
  188. package/css/ionic/link.ionic.css.map +1 -0
  189. package/css/ionic/structure.ionic.css +1 -0
  190. package/css/ionic/structure.ionic.css.map +1 -0
  191. package/css/ionic/typography.ionic.css +1 -0
  192. package/css/ionic/typography.ionic.css.map +1 -0
  193. package/css/ionic/utils.bundle.ionic.css +1 -0
  194. package/css/ionic/utils.bundle.ionic.css.map +1 -0
  195. package/css/ionic-swiper.css +1 -1
  196. package/css/ionic-swiper.css.map +1 -1
  197. package/css/ionic.bundle.css +1 -1
  198. package/css/ionic.bundle.css.map +1 -1
  199. package/css/normalize.css.map +1 -1
  200. package/css/padding.css.map +1 -1
  201. package/css/palettes/dark.always.css.map +1 -1
  202. package/css/palettes/dark.class.css.map +1 -1
  203. package/css/palettes/dark.system.css.map +1 -1
  204. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  205. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  206. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  207. package/css/palettes/high-contrast.always.css.map +1 -1
  208. package/css/palettes/high-contrast.class.css.map +1 -1
  209. package/css/palettes/high-contrast.system.css.map +1 -1
  210. package/css/structure.css.map +1 -1
  211. package/css/text-alignment.css.map +1 -1
  212. package/css/text-transformation.css.map +1 -1
  213. package/css/typography.css.map +1 -1
  214. package/css/utils.bundle.css +1 -1
  215. package/css/utils.bundle.css.map +1 -1
  216. package/dist/cjs/{animation-Kd1N7WTN.js → animation-DVrkairK.js} +3 -3
  217. package/dist/cjs/{app-globals-b1G4t26O.js → app-globals-CTxe9MxF.js} +1 -1
  218. package/dist/cjs/{button-active-CQCFubJJ.js → button-active-B8t6YMNb.js} +2 -2
  219. package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-w_r4U-_S.js} +3 -3
  220. package/dist/cjs/caret-down-vtVgfXIs.js +8 -0
  221. package/dist/cjs/caret-left-CxZXLRv5.js +8 -0
  222. package/dist/cjs/caret-right-CRCgv98E.js +8 -0
  223. package/dist/cjs/clear-button-press-controller-BKSn-dVq.js +45 -0
  224. package/dist/{esm/focus-visible-BmVRXR1y.js → cjs/focus-visible-BIj-I3-C.js} +27 -1
  225. package/dist/cjs/{format-bHU8N1g5.js → format-CSwmjLtu.js} +1 -1
  226. package/dist/cjs/{framework-delegate-d-fWfeI6.js → framework-delegate-Dmce7iqZ.js} +4 -2
  227. package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-DZEv3V5s.js} +1 -1
  228. package/dist/cjs/{helpers-7wzdhdeg.js → helpers-DFJMw-qZ.js} +71 -4
  229. package/dist/cjs/{index-C74Q3t6a.js → index-Bm6y0Ibt.js} +9 -8
  230. package/dist/cjs/{index-CQfEIyLK.js → index-BoQA7njo.js} +4 -4
  231. package/dist/cjs/{index-DXoo08JC.js → index-BsDPqfGS.js} +53 -4
  232. package/dist/cjs/{index-wOmugbdg.js → index-CxDnX7hd.js} +2 -0
  233. package/dist/cjs/{index-DFNrCX7M.js → index-DN51-BQl.js} +15 -15
  234. package/dist/cjs/{index-DtvKGwdh.js → index-DWP810QI.js} +2 -2
  235. package/dist/cjs/{index-KiSZqhYS.js → index-jHTqyXrs.js} +1 -1
  236. package/dist/cjs/index.cjs.js +13 -14
  237. package/dist/cjs/{input-shims-VJIiKBKv.js → input-shims-BFGH5o2Z.js} +18 -17
  238. package/dist/cjs/{input.utils-EHVE2RK_.js → input.utils-C5MTV3xv.js} +1 -1
  239. package/dist/cjs/ion-accordion_2.cjs.entry.js +61 -29
  240. package/dist/cjs/ion-action-sheet.cjs.entry.js +26 -24
  241. package/dist/cjs/ion-alert.cjs.entry.js +33 -31
  242. package/dist/cjs/ion-app_8.cjs.entry.js +454 -195
  243. package/dist/cjs/ion-avatar_3.cjs.entry.js +123 -13
  244. package/dist/cjs/ion-back-button.cjs.entry.js +31 -22
  245. package/dist/cjs/ion-backdrop.cjs.entry.js +10 -7
  246. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +54 -18
  247. package/dist/cjs/ion-button_2.cjs.entry.js +59 -22
  248. package/dist/cjs/ion-card_5.cjs.entry.js +55 -33
  249. package/dist/cjs/ion-checkbox.cjs.entry.js +34 -17
  250. package/dist/cjs/ion-chip.cjs.entry.js +50 -9
  251. package/dist/cjs/ion-col_3.cjs.entry.js +56 -62
  252. package/dist/cjs/ion-datetime-button.cjs.entry.js +13 -9
  253. package/dist/cjs/ion-datetime.cjs.entry.js +109 -34
  254. package/dist/cjs/ion-divider.cjs.entry.js +51 -0
  255. package/dist/cjs/ion-fab_3.cjs.entry.js +44 -28
  256. package/dist/cjs/ion-gallery-item.cjs.entry.js +58 -0
  257. package/dist/cjs/ion-gallery.cjs.entry.js +607 -0
  258. package/dist/cjs/ion-img.cjs.entry.js +8 -4
  259. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +90 -16
  260. package/dist/cjs/ion-input-otp.cjs.entry.js +73 -9
  261. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +53 -14
  262. package/dist/cjs/ion-input.cjs.entry.js +157 -38
  263. package/dist/cjs/ion-item-option_3.cjs.entry.js +465 -52
  264. package/dist/cjs/ion-item_8.cjs.entry.js +121 -50
  265. package/dist/cjs/ion-loading.cjs.entry.js +21 -19
  266. package/dist/cjs/ion-menu_3.cjs.entry.js +47 -29
  267. package/dist/cjs/ion-modal.cjs.entry.js +264 -139
  268. package/dist/cjs/ion-nav_2.cjs.entry.js +13 -10
  269. package/dist/cjs/ion-picker-column-option.cjs.entry.js +12 -8
  270. package/dist/cjs/ion-picker-column.cjs.entry.js +16 -16
  271. package/dist/cjs/ion-picker.cjs.entry.js +10 -6
  272. package/dist/cjs/ion-popover.cjs.entry.js +22 -20
  273. package/dist/cjs/ion-progress-bar.cjs.entry.js +27 -9
  274. package/dist/cjs/ion-radio_2.cjs.entry.js +36 -18
  275. package/dist/cjs/ion-range.cjs.entry.js +20 -13
  276. package/dist/cjs/ion-refresher_2.cjs.entry.js +39 -21
  277. package/dist/cjs/ion-reorder_2.cjs.entry.js +38 -14
  278. package/dist/cjs/ion-ripple-effect.cjs.entry.js +15 -7
  279. package/dist/cjs/ion-route_4.cjs.entry.js +11 -10
  280. package/dist/cjs/ion-searchbar.cjs.entry.js +146 -32
  281. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  282. package/dist/cjs/ion-segment-view.cjs.entry.js +13 -3
  283. package/dist/cjs/ion-segment_2.cjs.entry.js +23 -16
  284. package/dist/cjs/ion-select-modal.cjs.entry.js +51 -26
  285. package/dist/cjs/ion-select_3.cjs.entry.js +216 -77
  286. package/dist/cjs/ion-spinner.cjs.entry.js +30 -8
  287. package/dist/cjs/ion-split-pane.cjs.entry.js +13 -9
  288. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +149 -28
  289. package/dist/cjs/ion-tab_2.cjs.entry.js +8 -7
  290. package/dist/cjs/ion-text.cjs.entry.js +7 -7
  291. package/dist/cjs/ion-textarea.cjs.entry.js +190 -25
  292. package/dist/cjs/ion-toast.cjs.entry.js +72 -46
  293. package/dist/cjs/ion-toggle.cjs.entry.js +82 -26
  294. package/dist/cjs/ionic-global-BaVLW54G.js +522 -0
  295. package/dist/cjs/ionic.cjs.js +4 -4
  296. package/dist/cjs/{ios.transition-DYGiD6gM.js → ios.transition-Bm4N3WK1.js} +7 -5
  297. package/dist/cjs/{item-multiple-inputs-Dv6qrMhm.js → item-multiple-inputs-C3d1lMiz.js} +1 -1
  298. package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-5cEsoK5l.js} +4 -3
  299. package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-9uOUQmB-.js} +1 -1
  300. package/dist/cjs/list-a-7GSA6K.js +8 -0
  301. package/dist/cjs/loader.cjs.js +4 -4
  302. package/dist/cjs/{md.transition-CrSkaoz6.js → md.transition-Z-7hu2x1.js} +6 -5
  303. package/dist/cjs/{overlay-control-label-D2sdL2O8.js → overlay-control-label-DnRLQR1t.js} +13 -11
  304. package/dist/cjs/{overlays-BR21NUIG.js → overlays-Jn6TNpc3.js} +306 -18
  305. package/dist/cjs/scroll-hide-controller-DQ9ulQ11.js +345 -0
  306. package/dist/cjs/{select-option-render-D8ZEjYji.js → select-option-render-BUF8TPE0.js} +2 -2
  307. package/dist/cjs/{slot-mutation-controller-D6IjSEIh.js → slot-mutation-controller-C9i1ymbP.js} +5 -5
  308. package/dist/cjs/{status-tap-CNP5eD1R.js → status-tap-DT7J4fZQ.js} +4 -3
  309. package/dist/cjs/{swipe-back-BYb_nLJe.js → swipe-back-BIbF7bVy.js} +3 -2
  310. package/dist/cjs/{theme-Bw0rpaNN.js → theme-Cy4joHPt.js} +25 -1
  311. package/dist/cjs/validity-CoPMWggj.js +51 -0
  312. package/dist/cjs/x-BTF99yFH.js +8 -0
  313. package/dist/collection/collection-manifest.json +8 -0
  314. package/dist/collection/components/accordion/accordion.ionic.css +201 -0
  315. package/dist/collection/components/accordion/accordion.ios.css +73 -58
  316. package/dist/collection/components/accordion/accordion.js +41 -27
  317. package/dist/collection/components/accordion/accordion.md.css +67 -59
  318. package/dist/collection/components/accordion-group/accordion-group.ionic.css +93 -0
  319. package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
  320. package/dist/collection/components/accordion-group/accordion-group.js +44 -8
  321. package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
  322. package/dist/collection/components/action-sheet/action-sheet.ionic.css +494 -0
  323. package/dist/collection/components/action-sheet/action-sheet.ios.css +184 -54
  324. package/dist/collection/components/action-sheet/action-sheet.js +16 -13
  325. package/dist/collection/components/action-sheet/action-sheet.md.css +179 -55
  326. package/dist/collection/components/alert/alert.ionic.css +787 -0
  327. package/dist/collection/components/alert/alert.ios.css +247 -54
  328. package/dist/collection/components/alert/alert.js +22 -19
  329. package/dist/collection/components/alert/alert.md.css +243 -56
  330. package/dist/collection/components/app/app.js +15 -83
  331. package/dist/collection/components/avatar/avatar.ionic.css +385 -0
  332. package/dist/collection/components/avatar/avatar.ios.css +7 -33
  333. package/dist/collection/components/avatar/avatar.js +120 -4
  334. package/dist/collection/components/avatar/avatar.md.css +51 -0
  335. package/dist/collection/components/back-button/back-button.ios.css +60 -48
  336. package/dist/collection/components/back-button/back-button.js +27 -19
  337. package/dist/collection/components/back-button/back-button.md.css +60 -48
  338. package/dist/collection/components/backdrop/backdrop.ionic.css +109 -0
  339. package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
  340. package/dist/collection/components/backdrop/backdrop.js +12 -6
  341. package/dist/collection/components/backdrop/backdrop.md.css +56 -19
  342. package/dist/collection/components/badge/badge.ionic.css +272 -0
  343. package/dist/collection/components/badge/badge.ios.css +137 -12
  344. package/dist/collection/components/badge/badge.js +143 -9
  345. package/dist/collection/components/badge/badge.md.css +122 -12
  346. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
  347. package/dist/collection/components/breadcrumb/breadcrumb.js +43 -11
  348. package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
  349. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
  350. package/dist/collection/components/breadcrumbs/breadcrumbs.js +11 -9
  351. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
  352. package/dist/collection/components/button/button.ionic.css +644 -0
  353. package/dist/collection/components/button/button.ios.css +154 -46
  354. package/dist/collection/components/button/button.js +63 -27
  355. package/dist/collection/components/button/button.md.css +150 -50
  356. package/dist/collection/components/buttons/buttons.ionic.css +97 -0
  357. package/dist/collection/components/buttons/buttons.ios.css +59 -7
  358. package/dist/collection/components/buttons/buttons.js +15 -9
  359. package/dist/collection/components/buttons/buttons.md.css +55 -3
  360. package/dist/collection/components/card/card.ionic.css +144 -0
  361. package/dist/collection/components/card/card.ios.css +65 -14
  362. package/dist/collection/components/card/card.js +41 -10
  363. package/dist/collection/components/card/card.md.css +65 -14
  364. package/dist/collection/components/card-content/card-content.ionic.css +89 -0
  365. package/dist/collection/components/card-content/card-content.ios.css +20 -35
  366. package/dist/collection/components/card-content/card-content.js +12 -10
  367. package/dist/collection/components/card-content/card-content.md.css +20 -35
  368. package/dist/collection/components/card-header/card-header.ionic.css +85 -0
  369. package/dist/collection/components/card-header/card-header.ios.css +27 -15
  370. package/dist/collection/components/card-header/card-header.js +13 -10
  371. package/dist/collection/components/card-header/card-header.md.css +27 -15
  372. package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +144 -0
  373. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
  374. package/dist/collection/components/card-subtitle/card-subtitle.js +11 -8
  375. package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
  376. package/dist/collection/components/card-title/card-title.ios.css +73 -0
  377. package/dist/collection/components/card-title/card-title.js +11 -8
  378. package/dist/collection/components/card-title/card-title.md.css +73 -0
  379. package/dist/collection/components/checkbox/checkbox.ionic.css +543 -0
  380. package/dist/collection/components/checkbox/checkbox.ios.css +242 -117
  381. package/dist/collection/components/checkbox/checkbox.js +69 -14
  382. package/dist/collection/components/checkbox/checkbox.md.css +243 -118
  383. package/dist/collection/components/chip/chip.ionic.css +217 -0
  384. package/dist/collection/components/chip/chip.ios.css +67 -14
  385. package/dist/collection/components/chip/chip.js +108 -8
  386. package/dist/collection/components/chip/chip.md.css +67 -14
  387. package/dist/collection/components/col/col.css +192 -4
  388. package/dist/collection/components/col/col.js +211 -66
  389. package/dist/collection/components/content/content.css +47 -2
  390. package/dist/collection/components/content/content.js +16 -11
  391. package/dist/collection/components/datetime/datetime.ionic.css +703 -0
  392. package/dist/collection/components/datetime/datetime.ios.css +314 -118
  393. package/dist/collection/components/datetime/datetime.js +97 -20
  394. package/dist/collection/components/datetime/datetime.md.css +304 -107
  395. package/dist/collection/components/datetime/utils/data.js +5 -5
  396. package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -0
  397. package/dist/collection/components/datetime-button/datetime-button.js +11 -8
  398. package/dist/collection/components/datetime-button/datetime-button.md.css +6 -0
  399. package/dist/collection/components/divider/divider.ionic.css +148 -0
  400. package/dist/collection/components/divider/divider.ios.css +87 -0
  401. package/dist/collection/components/divider/divider.js +94 -0
  402. package/dist/collection/components/divider/divider.md.css +87 -0
  403. package/dist/collection/components/fab/fab.css +25 -1
  404. package/dist/collection/components/fab/fab.js +9 -5
  405. package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
  406. package/dist/collection/components/fab-button/fab-button.js +36 -21
  407. package/dist/collection/components/fab-button/fab-button.md.css +20 -8
  408. package/dist/collection/components/fab-list/fab-list.css +12 -0
  409. package/dist/collection/components/fab-list/fab-list.js +9 -5
  410. package/dist/collection/components/footer/footer-interface.js +1 -0
  411. package/dist/collection/components/footer/footer.ios.css +33 -6
  412. package/dist/collection/components/footer/footer.js +117 -25
  413. package/dist/collection/components/footer/footer.md.css +40 -0
  414. package/dist/collection/components/gallery/gallery-constants.js +12 -0
  415. package/dist/collection/components/gallery/gallery-interface.js +1 -0
  416. package/dist/collection/components/gallery/gallery.css +15 -0
  417. package/dist/collection/components/gallery/gallery.js +678 -0
  418. package/dist/collection/components/gallery/test/utils.js +100 -0
  419. package/dist/collection/components/gallery-item/gallery-item.css +49 -0
  420. package/dist/collection/components/gallery-item/gallery-item.js +98 -0
  421. package/dist/collection/components/grid/grid.css +12 -0
  422. package/dist/collection/components/grid/grid.js +9 -5
  423. package/dist/collection/components/header/header-interface.js +1 -0
  424. package/dist/collection/components/header/header.ionic.css +250 -0
  425. package/dist/collection/components/header/header.ios.css +178 -133
  426. package/dist/collection/components/header/header.js +180 -39
  427. package/dist/collection/components/header/header.md.css +199 -9
  428. package/dist/collection/components/header/header.utils.js +5 -13
  429. package/dist/collection/components/img/img.js +7 -2
  430. package/dist/collection/components/infinite-scroll/infinite-scroll.js +99 -5
  431. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
  432. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +16 -10
  433. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
  434. package/dist/collection/components/input/input.ionic.css +937 -0
  435. package/dist/collection/components/input/input.ios.css +245 -154
  436. package/dist/collection/components/input/input.js +183 -43
  437. package/dist/collection/components/input/input.md.css +215 -226
  438. package/dist/collection/components/input-otp/input-otp.ionic.css +371 -0
  439. package/dist/collection/components/input-otp/input-otp.ios.css +105 -60
  440. package/dist/collection/components/input-otp/input-otp.js +73 -7
  441. package/dist/collection/components/input-otp/input-otp.md.css +105 -60
  442. package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +78 -0
  443. package/dist/collection/components/input-password-toggle/input-password-toggle.js +48 -11
  444. package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
  445. package/dist/collection/components/item/item.ionic.css +496 -0
  446. package/dist/collection/components/item/item.ios.css +120 -80
  447. package/dist/collection/components/item/item.js +56 -21
  448. package/dist/collection/components/item/item.md.css +131 -79
  449. package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
  450. package/dist/collection/components/item-divider/item-divider.js +11 -8
  451. package/dist/collection/components/item-divider/item-divider.md.css +18 -0
  452. package/dist/collection/components/item-group/item-group.ios.css +12 -0
  453. package/dist/collection/components/item-group/item-group.js +13 -7
  454. package/dist/collection/components/item-group/item-group.md.css +12 -0
  455. package/dist/collection/components/item-option/item-option.ionic.css +277 -0
  456. package/dist/collection/components/item-option/item-option.ios.css +136 -29
  457. package/dist/collection/components/item-option/item-option.js +73 -9
  458. package/dist/collection/components/item-option/item-option.md.css +136 -29
  459. package/dist/collection/components/item-options/item-options.ionic.css +221 -0
  460. package/dist/collection/components/item-options/item-options.ios.css +77 -34
  461. package/dist/collection/components/item-options/item-options.js +13 -7
  462. package/dist/collection/components/item-options/item-options.md.css +77 -34
  463. package/dist/collection/components/item-sliding/item-sliding.ionic.css +211 -0
  464. package/dist/collection/components/item-sliding/item-sliding.js +419 -35
  465. package/dist/collection/components/item-sliding/{item-sliding.css → item-sliding.native.css} +84 -9
  466. package/dist/collection/components/item-sliding/test/test.utils.js +13 -0
  467. package/dist/collection/components/label/label.ios.css +18 -0
  468. package/dist/collection/components/label/label.js +11 -8
  469. package/dist/collection/components/label/label.md.css +18 -0
  470. package/dist/collection/components/list/list.ionic.css +212 -0
  471. package/dist/collection/components/list/list.ios.css +54 -14
  472. package/dist/collection/components/list/list.js +48 -9
  473. package/dist/collection/components/list/list.md.css +56 -16
  474. package/dist/collection/components/list-header/list-header.ionic.css +190 -0
  475. package/dist/collection/components/list-header/list-header.ios.css +82 -38
  476. package/dist/collection/components/list-header/list-header.js +11 -8
  477. package/dist/collection/components/list-header/list-header.md.css +82 -38
  478. package/dist/collection/components/loading/loading.ios.css +13 -1
  479. package/dist/collection/components/loading/loading.js +15 -12
  480. package/dist/collection/components/loading/loading.md.css +13 -1
  481. package/dist/collection/components/menu/menu.ios.css +15 -3
  482. package/dist/collection/components/menu/menu.js +12 -7
  483. package/dist/collection/components/menu/menu.md.css +15 -3
  484. package/dist/collection/components/menu-button/menu-button.ionic.css +236 -0
  485. package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
  486. package/dist/collection/components/menu-button/menu-button.js +26 -10
  487. package/dist/collection/components/menu-button/menu-button.md.css +49 -15
  488. package/dist/collection/components/menu-toggle/menu-toggle.js +8 -5
  489. package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
  490. package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
  491. package/dist/collection/components/modal/animations/sheet.js +8 -2
  492. package/dist/collection/components/modal/gestures/sheet.js +76 -10
  493. package/dist/collection/components/modal/modal.ionic.css +255 -0
  494. package/dist/collection/components/modal/modal.ios.css +178 -70
  495. package/dist/collection/components/modal/modal.js +52 -13
  496. package/dist/collection/components/modal/modal.md.css +178 -70
  497. package/dist/collection/components/nav/nav.css +7 -1
  498. package/dist/collection/components/nav/nav.js +10 -4
  499. package/dist/collection/components/nav-link/nav-link.js +5 -1
  500. package/dist/collection/components/note/note.ios.css +12 -0
  501. package/dist/collection/components/note/note.js +11 -8
  502. package/dist/collection/components/note/note.md.css +12 -0
  503. package/dist/collection/components/picker/picker.ios.css +15 -3
  504. package/dist/collection/components/picker/picker.js +8 -5
  505. package/dist/collection/components/picker/picker.md.css +15 -3
  506. package/dist/collection/components/picker-column/picker-column.css +9 -2
  507. package/dist/collection/components/picker-column/picker-column.js +8 -7
  508. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
  509. package/dist/collection/components/picker-column-option/picker-column-option.js +13 -7
  510. package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -0
  511. package/dist/collection/components/popover/popover.ionic.css +289 -0
  512. package/dist/collection/components/popover/popover.ios.css +13 -1
  513. package/dist/collection/components/popover/popover.js +19 -16
  514. package/dist/collection/components/popover/popover.md.css +13 -1
  515. package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
  516. package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
  517. package/dist/collection/components/progress-bar/progress-bar.js +43 -7
  518. package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
  519. package/dist/collection/components/radio/radio.ionic.css +422 -0
  520. package/dist/collection/components/radio/radio.ios.css +207 -102
  521. package/dist/collection/components/radio/radio.js +14 -9
  522. package/dist/collection/components/radio/radio.md.css +207 -102
  523. package/dist/collection/components/radio-group/radio-group.ionic.css +119 -0
  524. package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
  525. package/dist/collection/components/radio-group/radio-group.js +48 -7
  526. package/dist/collection/components/radio-group/radio-group.md.css +43 -19
  527. package/dist/collection/components/range/range.ionic.css +567 -0
  528. package/dist/collection/components/range/range.ios.css +128 -85
  529. package/dist/collection/components/range/range.js +16 -10
  530. package/dist/collection/components/range/range.md.css +128 -85
  531. package/dist/collection/components/refresher/refresher.ios.css +14 -1
  532. package/dist/collection/components/refresher/refresher.js +11 -8
  533. package/dist/collection/components/refresher/refresher.md.css +15 -2
  534. package/dist/collection/components/refresher-content/refresher-content.js +28 -7
  535. package/dist/collection/components/reorder/reorder.ios.css +6 -0
  536. package/dist/collection/components/reorder/reorder.js +33 -6
  537. package/dist/collection/components/reorder/reorder.md.css +6 -0
  538. package/dist/collection/components/reorder-group/reorder-group.css +6 -0
  539. package/dist/collection/components/reorder-group/reorder-group.js +8 -4
  540. package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
  541. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
  542. package/dist/collection/components/ripple-effect/ripple-effect.js +14 -6
  543. package/dist/collection/components/route/route.js +4 -0
  544. package/dist/collection/components/router/router.js +4 -0
  545. package/dist/collection/components/router-link/router-link.css +8 -2
  546. package/dist/collection/components/router-link/router-link.js +9 -5
  547. package/dist/collection/components/router-outlet/router-outlet.css +7 -1
  548. package/dist/collection/components/router-outlet/router-outlet.js +6 -3
  549. package/dist/collection/components/row/row.css +16 -0
  550. package/dist/collection/components/row/row.js +9 -2
  551. package/dist/collection/components/searchbar/searchbar.ionic.css +622 -0
  552. package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
  553. package/dist/collection/components/searchbar/searchbar.js +191 -42
  554. package/dist/collection/components/searchbar/searchbar.md.css +56 -18
  555. package/dist/collection/components/segment/segment.ionic.css +115 -0
  556. package/dist/collection/components/segment/segment.ios.css +45 -2
  557. package/dist/collection/components/segment/segment.js +11 -8
  558. package/dist/collection/components/segment/segment.md.css +45 -2
  559. package/dist/collection/components/segment-button/segment-button.ionic.css +352 -0
  560. package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
  561. package/dist/collection/components/segment-button/segment-button.js +11 -8
  562. package/dist/collection/components/segment-button/segment-button.md.css +148 -107
  563. package/dist/collection/components/segment-content/segment-content.js +1 -1
  564. package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
  565. package/dist/collection/components/segment-view/segment-view.js +13 -4
  566. package/dist/collection/components/segment-view/segment-view.md.css +6 -0
  567. package/dist/collection/components/select/select.ionic.css +864 -0
  568. package/dist/collection/components/select/select.ios.css +300 -148
  569. package/dist/collection/components/select/select.js +252 -81
  570. package/dist/collection/components/select/select.md.css +316 -150
  571. package/dist/collection/components/select-modal/select-modal.ionic.css +257 -0
  572. package/dist/collection/components/select-modal/select-modal.ios.css +293 -45
  573. package/dist/collection/components/select-modal/select-modal.js +61 -15
  574. package/dist/collection/components/select-modal/select-modal.md.css +273 -43
  575. package/dist/collection/components/select-option/select-option.js +8 -4
  576. package/dist/collection/components/select-popover/select-popover.ionic.css +255 -0
  577. package/dist/collection/components/select-popover/select-popover.ios.css +188 -124
  578. package/dist/collection/components/select-popover/select-popover.js +17 -9
  579. package/dist/collection/components/select-popover/select-popover.md.css +228 -47
  580. package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
  581. package/dist/collection/components/skeleton-text/skeleton-text.js +9 -5
  582. package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
  583. package/dist/collection/components/spinner/spinner.js +47 -6
  584. package/dist/collection/components/spinner/spinner.native.css +199 -0
  585. package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
  586. package/dist/collection/components/split-pane/split-pane.js +15 -8
  587. package/dist/collection/components/split-pane/split-pane.md.css +20 -2
  588. package/dist/collection/components/tab/tab.js +6 -2
  589. package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
  590. package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
  591. package/dist/collection/components/tab-bar/tab-bar.js +178 -15
  592. package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
  593. package/dist/collection/components/tab-button/tab-button.ionic.css +373 -0
  594. package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
  595. package/dist/collection/components/tab-button/tab-button.js +54 -9
  596. package/dist/collection/components/tab-button/tab-button.md.css +137 -93
  597. package/dist/collection/components/tabs/tabs.css +7 -1
  598. package/dist/collection/components/tabs/tabs.js +4 -1
  599. package/dist/collection/components/text/text.css +6 -0
  600. package/dist/collection/components/text/text.js +7 -6
  601. package/dist/collection/components/textarea/textarea.ionic.css +945 -0
  602. package/dist/collection/components/textarea/textarea.ios.css +301 -155
  603. package/dist/collection/components/textarea/textarea.js +215 -26
  604. package/dist/collection/components/textarea/textarea.md.css +315 -156
  605. package/dist/collection/components/thumbnail/thumbnail.css +6 -0
  606. package/dist/collection/components/thumbnail/thumbnail.js +9 -2
  607. package/dist/collection/components/title/title.ionic.css +127 -0
  608. package/dist/collection/components/title/title.ios.css +32 -4
  609. package/dist/collection/components/title/title.js +13 -7
  610. package/dist/collection/components/title/title.md.css +39 -4
  611. package/dist/collection/components/toast/animations/utils.js +1 -1
  612. package/dist/collection/components/toast/toast.ionic.css +394 -0
  613. package/dist/collection/components/toast/toast.ios.css +84 -45
  614. package/dist/collection/components/toast/toast.js +79 -13
  615. package/dist/collection/components/toast/toast.md.css +84 -45
  616. package/dist/collection/components/toggle/toggle.ionic.css +512 -0
  617. package/dist/collection/components/toggle/toggle.ios.css +247 -127
  618. package/dist/collection/components/toggle/toggle.js +72 -18
  619. package/dist/collection/components/toggle/toggle.md.css +245 -127
  620. package/dist/collection/components/toolbar/test/image.svg +1 -0
  621. package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
  622. package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
  623. package/dist/collection/components/toolbar/toolbar.js +216 -14
  624. package/dist/collection/components/toolbar/toolbar.md.css +90 -47
  625. package/dist/collection/global/ionic-global.js +239 -13
  626. package/dist/collection/utils/css-value-validation.js +39 -0
  627. package/dist/collection/utils/focus-trap.js +13 -2
  628. package/dist/collection/utils/focus-visible.js +22 -0
  629. package/dist/collection/utils/forms/clear-button-press-controller.js +40 -0
  630. package/dist/collection/utils/forms/index.js +1 -0
  631. package/dist/collection/utils/forms/validity.js +31 -0
  632. package/dist/collection/utils/framework-delegate.js +3 -1
  633. package/dist/collection/utils/hardware-back-button.js +15 -0
  634. package/dist/collection/utils/helpers.js +70 -3
  635. package/dist/collection/utils/keyboard/keyboard-controller.js +3 -1
  636. package/dist/collection/utils/media.js +1 -0
  637. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  638. package/dist/collection/utils/menu-controller/animations/push.js +2 -1
  639. package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
  640. package/dist/collection/utils/overlay-control-label.js +13 -11
  641. package/dist/collection/utils/overlays.js +287 -8
  642. package/dist/collection/utils/scroll-hide-controller.js +178 -0
  643. package/dist/collection/utils/test/playwright/drag-element.js +32 -9
  644. package/dist/collection/utils/test/playwright/generator.js +48 -23
  645. package/dist/collection/utils/test/playwright/page/utils/goto.js +10 -1
  646. package/dist/collection/utils/test/playwright/page/utils/set-content.js +26 -3
  647. package/dist/collection/utils/theme.js +25 -1
  648. package/dist/collection/utils/transition/ios.transition.js +1 -0
  649. package/dist/docs.json +8849 -288
  650. package/dist/esm/{animation-BFNVlYum.js → animation-DXpoXT3G.js} +2 -2
  651. package/dist/esm/{app-globals-BgX0BGL1.js → app-globals-gnMsODWu.js} +1 -1
  652. package/dist/esm/{button-active-BfOvDr3b.js → button-active-DtDlu9-d.js} +2 -2
  653. package/dist/esm/{capacitor-CFERIeaU.js → capacitor-CMyaZHxy.js} +1 -1
  654. package/dist/esm/caret-down-D1t981Ih.js +6 -0
  655. package/dist/esm/caret-left-fIOYmaqA.js +6 -0
  656. package/dist/esm/caret-right-BYSs-jZz.js +6 -0
  657. package/dist/esm/clear-button-press-controller-CWOPHFBc.js +43 -0
  658. package/dist/{cjs/focus-visible-CCvKiLh3.js → esm/focus-visible-vXpMhGrs.js} +23 -3
  659. package/dist/esm/{format-DDFE9jM5.js → format-DHkUcwuW.js} +1 -1
  660. package/dist/esm/{framework-delegate-BwNhx9NR.js → framework-delegate-DUQ69ajj.js} +4 -2
  661. package/dist/esm/{haptic-Cq4UAeka.js → haptic-Dal3yCq6.js} +1 -1
  662. package/dist/esm/{helpers-BSmc0nst.js → helpers-DTqW6MzS.js} +71 -5
  663. package/dist/esm/{index-D76bbuoi.js → index-B6qBfx1b.js} +1 -1
  664. package/dist/esm/{index-BvabGprD.js → index-BqQ15K9a.js} +2 -1
  665. package/dist/esm/{index-BuPaALjU.js → index-C2QkTAgc.js} +11 -11
  666. package/dist/esm/{index-C1b9CLFg.js → index-CpKLzrYn.js} +2 -2
  667. package/dist/esm/{index-DnA_7Bnx.js → index-D76uuG8P.js} +4 -4
  668. package/dist/esm/{index-CJln0gS3.js → index-D_YUqPZN.js} +4 -3
  669. package/dist/esm/{index-C23AVPx9.js → index-jsOqXOKf.js} +53 -4
  670. package/dist/esm/index.js +13 -14
  671. package/dist/esm/{input-shims-Dqk-Ou25.js → input-shims-DgFi_b6v.js} +7 -6
  672. package/dist/esm/{input.utils-rqoH22pW.js → input.utils-BV974hyf.js} +1 -1
  673. package/dist/esm/ion-accordion_2.entry.js +61 -29
  674. package/dist/esm/ion-action-sheet.entry.js +26 -24
  675. package/dist/esm/ion-alert.entry.js +33 -31
  676. package/dist/esm/ion-app_8.entry.js +453 -194
  677. package/dist/esm/ion-avatar_3.entry.js +123 -13
  678. package/dist/esm/ion-back-button.entry.js +31 -22
  679. package/dist/esm/ion-backdrop.entry.js +10 -7
  680. package/dist/esm/ion-breadcrumb_2.entry.js +54 -18
  681. package/dist/esm/ion-button_2.entry.js +59 -22
  682. package/dist/esm/ion-card_5.entry.js +55 -33
  683. package/dist/esm/ion-checkbox.entry.js +34 -17
  684. package/dist/esm/ion-chip.entry.js +50 -9
  685. package/dist/esm/ion-col_3.entry.js +56 -62
  686. package/dist/esm/ion-datetime-button.entry.js +13 -9
  687. package/dist/esm/ion-datetime.entry.js +109 -34
  688. package/dist/esm/ion-divider.entry.js +49 -0
  689. package/dist/esm/ion-fab_3.entry.js +44 -28
  690. package/dist/esm/ion-gallery-item.entry.js +56 -0
  691. package/dist/esm/ion-gallery.entry.js +605 -0
  692. package/dist/esm/ion-img.entry.js +8 -4
  693. package/dist/esm/ion-infinite-scroll_2.entry.js +90 -16
  694. package/dist/esm/ion-input-otp.entry.js +73 -9
  695. package/dist/esm/ion-input-password-toggle.entry.js +53 -14
  696. package/dist/esm/ion-input.entry.js +157 -38
  697. package/dist/esm/ion-item-option_3.entry.js +465 -52
  698. package/dist/esm/ion-item_8.entry.js +121 -50
  699. package/dist/esm/ion-loading.entry.js +21 -19
  700. package/dist/esm/ion-menu_3.entry.js +47 -29
  701. package/dist/esm/ion-modal.entry.js +217 -92
  702. package/dist/esm/ion-nav_2.entry.js +13 -10
  703. package/dist/esm/ion-picker-column-option.entry.js +12 -8
  704. package/dist/esm/ion-picker-column.entry.js +13 -13
  705. package/dist/esm/ion-picker.entry.js +10 -6
  706. package/dist/esm/ion-popover.entry.js +22 -20
  707. package/dist/esm/ion-progress-bar.entry.js +27 -9
  708. package/dist/esm/ion-radio_2.entry.js +36 -18
  709. package/dist/esm/ion-range.entry.js +20 -13
  710. package/dist/esm/ion-refresher_2.entry.js +39 -21
  711. package/dist/esm/ion-reorder_2.entry.js +38 -14
  712. package/dist/esm/ion-ripple-effect.entry.js +15 -7
  713. package/dist/esm/ion-route_4.entry.js +11 -10
  714. package/dist/esm/ion-searchbar.entry.js +146 -32
  715. package/dist/esm/ion-segment-content.entry.js +2 -2
  716. package/dist/esm/ion-segment-view.entry.js +13 -3
  717. package/dist/esm/ion-segment_2.entry.js +23 -16
  718. package/dist/esm/ion-select-modal.entry.js +51 -26
  719. package/dist/esm/ion-select_3.entry.js +216 -77
  720. package/dist/esm/ion-spinner.entry.js +30 -8
  721. package/dist/esm/ion-split-pane.entry.js +13 -9
  722. package/dist/esm/ion-tab-bar_2.entry.js +148 -27
  723. package/dist/esm/ion-tab_2.entry.js +8 -7
  724. package/dist/esm/ion-text.entry.js +7 -7
  725. package/dist/esm/ion-textarea.entry.js +190 -25
  726. package/dist/esm/ion-toast.entry.js +47 -21
  727. package/dist/esm/ion-toggle.entry.js +82 -26
  728. package/dist/esm/ionic-global-oK2heABF.js +511 -0
  729. package/dist/esm/ionic.js +5 -5
  730. package/dist/esm/{ios.transition-CWAgfQ1r.js → ios.transition-D6rsx0aJ.js} +7 -5
  731. package/dist/esm/{item-multiple-inputs-DZnIiOO_.js → item-multiple-inputs-CAlufDbv.js} +1 -1
  732. package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-Dzp50ozz.js} +1 -1
  733. package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-YBye__Ay.js} +4 -3
  734. package/dist/esm/list-Dhi5xtNS.js +6 -0
  735. package/dist/esm/loader.js +5 -5
  736. package/dist/esm/{md.transition-ZuqDDdDW.js → md.transition-0y4So3tu.js} +6 -5
  737. package/dist/esm/{overlay-control-label-BSQPZ79H.js → overlay-control-label-CODBQrPj.js} +13 -11
  738. package/dist/esm/{overlays-DKE0DgvE.js → overlays-CLlfG_qy.js} +303 -15
  739. package/dist/esm/scroll-hide-controller-BUZm0jSI.js +342 -0
  740. package/dist/esm/{select-option-render-CRP_teb1.js → select-option-render-DICJMeLf.js} +2 -2
  741. package/dist/esm/{slot-mutation-controller-B5NpUZ-N.js → slot-mutation-controller-C5Vj7Od7.js} +2 -2
  742. package/dist/esm/{status-tap-Cv9gb3ja.js → status-tap-VmNhEOZr.js} +4 -3
  743. package/dist/esm/{swipe-back-B2CmabKY.js → swipe-back-BHHiqew-.js} +3 -2
  744. package/dist/esm/{theme-byZM6qHV.js → theme-BUF_V-Kg.js} +25 -1
  745. package/dist/esm/validity-NcQUGze-.js +48 -0
  746. package/dist/esm/x-BDqjX7Z_.js +6 -0
  747. package/dist/html.html-data.json +2631 -150
  748. package/dist/ionic/index.esm.js +1 -1
  749. package/dist/ionic/ionic.esm.js +1 -1
  750. package/dist/ionic/p-04d96dad.entry.js +4 -0
  751. package/dist/ionic/p-08f20edc.entry.js +4 -0
  752. package/dist/ionic/p-0a924e6a.entry.js +4 -0
  753. package/dist/ionic/p-0f268972.entry.js +4 -0
  754. package/dist/ionic/p-18c6af89.entry.js +4 -0
  755. package/dist/ionic/p-1cc2a196.entry.js +4 -0
  756. package/dist/ionic/p-201f484e.entry.js +4 -0
  757. package/dist/ionic/p-26efcc45.entry.js +4 -0
  758. package/dist/ionic/p-2c3704b9.entry.js +4 -0
  759. package/dist/ionic/p-2da21af7.entry.js +4 -0
  760. package/dist/ionic/p-2e3acd77.entry.js +4 -0
  761. package/dist/ionic/p-2fc1521f.entry.js +4 -0
  762. package/dist/ionic/p-30c4458b.entry.js +4 -0
  763. package/dist/ionic/p-32829ef8.entry.js +4 -0
  764. package/dist/ionic/p-32be916d.entry.js +4 -0
  765. package/dist/ionic/p-384fb50d.entry.js +4 -0
  766. package/dist/ionic/p-3bb43e22.entry.js +4 -0
  767. package/dist/ionic/p-46709a42.entry.js +4 -0
  768. package/dist/ionic/p-4QzQhqmw.js +4 -0
  769. package/dist/ionic/p-4eec50dd.entry.js +4 -0
  770. package/dist/ionic/p-5217eb00.entry.js +4 -0
  771. package/dist/ionic/p-55e13406.entry.js +4 -0
  772. package/dist/ionic/p-6b23289a.entry.js +4 -0
  773. package/dist/ionic/p-73309d35.entry.js +4 -0
  774. package/dist/ionic/p-74ab5f49.entry.js +4 -0
  775. package/dist/ionic/p-7d2f3242.entry.js +4 -0
  776. package/dist/ionic/p-7e28cc53.entry.js +4 -0
  777. package/dist/ionic/p-84b5eafe.entry.js +4 -0
  778. package/dist/ionic/p-854b95f9.entry.js +4 -0
  779. package/dist/ionic/p-886236f0.entry.js +4 -0
  780. package/dist/ionic/p-8NLG9fne.js +4 -0
  781. package/dist/ionic/p-8a7bf6c7.entry.js +4 -0
  782. package/dist/ionic/p-8c446282.entry.js +4 -0
  783. package/dist/ionic/p-8dcd18cf.entry.js +4 -0
  784. package/dist/ionic/p-924182fc.entry.js +4 -0
  785. package/dist/ionic/p-92f21db6.entry.js +4 -0
  786. package/dist/ionic/p-945ed823.entry.js +4 -0
  787. package/dist/ionic/p-9ca59419.entry.js +4 -0
  788. package/dist/ionic/p-B3L20Lav.js +4 -0
  789. package/dist/ionic/p-B6aOaV_m.js +4 -0
  790. package/dist/ionic/p-BDqjX7Z_.js +4 -0
  791. package/dist/ionic/p-BUF_V-Kg.js +4 -0
  792. package/dist/ionic/{p-D7jHfs0Y.js → p-BUvFnCVr.js} +1 -1
  793. package/dist/ionic/{p-Bd72UYI2.js → p-BVv5nqxG.js} +1 -1
  794. package/dist/ionic/p-BYSs-jZz.js +4 -0
  795. package/dist/ionic/p-BdqFx5km.js +4 -0
  796. package/dist/ionic/p-BnRvdoDY.js +4 -0
  797. package/{components/p-DiuOa1vw.js → dist/ionic/p-BooNJoKP.js} +1 -1
  798. package/dist/ionic/p-BqQ15K9a.js +4 -0
  799. package/{components/p-6ZLn6K5e.js → dist/ionic/p-C0V6sqau.js} +1 -1
  800. package/dist/ionic/p-CD4Mty1V.js +4 -0
  801. package/dist/ionic/p-CE00jiiW.js +4 -0
  802. package/dist/ionic/p-CLVGlNRl.js +4 -0
  803. package/dist/ionic/p-CODBQrPj.js +4 -0
  804. package/dist/ionic/p-CP5-2cXj.js +4 -0
  805. package/dist/ionic/p-CRbXZpID.js +4 -0
  806. package/dist/ionic/p-CZ-V4tB0.js +4 -0
  807. package/dist/ionic/p-Cs5kzNVE.js +4 -0
  808. package/dist/ionic/p-CsmXfOZY.js +4 -0
  809. package/dist/ionic/p-CyXL8sF6.js +4 -0
  810. package/dist/ionic/{p-T71k3C35.js → p-D1ej8PMz.js} +1 -1
  811. package/dist/ionic/p-D1t981Ih.js +4 -0
  812. package/{components/p-DxhHlJln.js → dist/ionic/p-D8HyO4-0.js} +1 -1
  813. package/dist/ionic/p-DAFzmzMJ.js +4 -0
  814. package/{components/p-BgkOsq-d.js → dist/ionic/p-DFZcZ5hU.js} +1 -1
  815. package/dist/ionic/p-Dhi5xtNS.js +4 -0
  816. package/dist/ionic/{p-CkxVYPtX.js → p-DpE9LgN6.js} +1 -1
  817. package/dist/ionic/p-DvXo4Ng9.js +4 -0
  818. package/{components/p-C4VpVfrJ.js → dist/ionic/p-Izgzy5eB.js} +1 -1
  819. package/dist/ionic/p-NcQUGze-.js +4 -0
  820. package/dist/ionic/p-ac4ea8db.entry.js +4 -0
  821. package/dist/ionic/p-b10dc124.entry.js +4 -0
  822. package/dist/ionic/p-b411d90d.entry.js +4 -0
  823. package/dist/ionic/p-b7ce4a50.entry.js +4 -0
  824. package/dist/ionic/p-b83de44e.entry.js +4 -0
  825. package/dist/ionic/p-c7035f3f.entry.js +4 -0
  826. package/dist/ionic/p-c91fc9d4.entry.js +4 -0
  827. package/dist/ionic/p-cd05447f.entry.js +4 -0
  828. package/dist/ionic/p-ce1ab874.entry.js +4 -0
  829. package/dist/ionic/p-d0368d31.entry.js +4 -0
  830. package/dist/ionic/p-d1d3048b.entry.js +4 -0
  831. package/dist/ionic/p-db011674.entry.js +4 -0
  832. package/dist/ionic/p-dc000de0.entry.js +4 -0
  833. package/dist/ionic/p-e53980b0.entry.js +4 -0
  834. package/dist/ionic/p-e939adf3.entry.js +4 -0
  835. package/dist/ionic/p-e9fdff49.entry.js +4 -0
  836. package/dist/ionic/p-f29b784f.entry.js +4 -0
  837. package/dist/ionic/p-f82b13a6.entry.js +4 -0
  838. package/dist/ionic/p-fIOYmaqA.js +4 -0
  839. package/dist/ionic/p-fdb940e3.entry.js +4 -0
  840. package/dist/ionic/p-jsOqXOKf.js +6 -0
  841. package/dist/ionic/p-psKsVoNI.js +4 -0
  842. package/dist/ionic/p-si7ttuvL.js +4 -0
  843. package/dist/ionic/p-vXpMhGrs.js +4 -0
  844. package/dist/types/components/accordion/accordion.d.ts +6 -3
  845. package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
  846. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
  847. package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
  848. package/dist/types/components/alert/alert-interface.d.ts +3 -7
  849. package/dist/types/components/alert/alert.d.ts +3 -2
  850. package/dist/types/components/app/app.d.ts +4 -5
  851. package/dist/types/components/avatar/avatar.d.ts +32 -0
  852. package/dist/types/components/back-button/back-button.d.ts +2 -1
  853. package/dist/types/components/backdrop/backdrop.d.ts +4 -0
  854. package/dist/types/components/badge/badge.d.ts +34 -1
  855. package/dist/types/components/breadcrumb/breadcrumb.d.ts +4 -1
  856. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  857. package/dist/types/components/button/button.d.ts +23 -8
  858. package/dist/types/components/buttons/buttons.d.ts +5 -1
  859. package/dist/types/components/card/card.d.ts +8 -1
  860. package/dist/types/components/card-content/card-content.d.ts +2 -1
  861. package/dist/types/components/card-header/card-header.d.ts +3 -2
  862. package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
  863. package/dist/types/components/card-title/card-title.d.ts +2 -1
  864. package/dist/types/components/checkbox/checkbox.d.ts +14 -4
  865. package/dist/types/components/chip/chip.d.ts +26 -1
  866. package/dist/types/components/col/col.d.ts +52 -5
  867. package/dist/types/components/content/content.d.ts +3 -0
  868. package/dist/types/components/datetime/datetime.d.ts +26 -1
  869. package/dist/types/components/datetime/utils/data.d.ts +5 -5
  870. package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
  871. package/dist/types/components/divider/divider.d.ts +20 -0
  872. package/dist/types/components/fab/fab.d.ts +4 -0
  873. package/dist/types/components/fab-button/fab-button.d.ts +5 -3
  874. package/dist/types/components/fab-list/fab-list.d.ts +4 -0
  875. package/dist/types/components/footer/footer-interface.d.ts +1 -0
  876. package/dist/types/components/footer/footer.d.ts +20 -3
  877. package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
  878. package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
  879. package/dist/types/components/gallery/gallery.d.ts +218 -0
  880. package/dist/types/components/gallery/test/utils.d.ts +3 -0
  881. package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
  882. package/dist/types/components/grid/grid.d.ts +4 -0
  883. package/dist/types/components/header/header-interface.d.ts +1 -0
  884. package/dist/types/components/header/header.d.ts +26 -3
  885. package/dist/types/components/header/header.utils.d.ts +4 -5
  886. package/dist/types/components/img/img.d.ts +2 -0
  887. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
  888. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
  889. package/dist/types/components/input/input.d.ts +48 -5
  890. package/dist/types/components/input-otp/input-otp.d.ts +37 -0
  891. package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +2 -0
  892. package/dist/types/components/item/item.d.ts +11 -4
  893. package/dist/types/components/item-divider/item-divider.d.ts +2 -1
  894. package/dist/types/components/item-group/item-group.d.ts +4 -0
  895. package/dist/types/components/item-option/item-option.d.ts +18 -1
  896. package/dist/types/components/item-options/item-options.d.ts +4 -0
  897. package/dist/types/components/item-sliding/item-sliding.d.ts +47 -1
  898. package/dist/types/components/item-sliding/test/test.utils.d.ts +13 -0
  899. package/dist/types/components/label/label.d.ts +2 -1
  900. package/dist/types/components/list/list.d.ts +15 -1
  901. package/dist/types/components/list-header/list-header.d.ts +2 -1
  902. package/dist/types/components/loading/loading-interface.d.ts +2 -7
  903. package/dist/types/components/loading/loading.d.ts +3 -2
  904. package/dist/types/components/menu/menu.d.ts +3 -0
  905. package/dist/types/components/menu-button/menu-button.d.ts +3 -1
  906. package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
  907. package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
  908. package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
  909. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  910. package/dist/types/components/modal/modal-interface.d.ts +4 -7
  911. package/dist/types/components/modal/modal.d.ts +11 -1
  912. package/dist/types/components/nav/nav-interface.d.ts +9 -1
  913. package/dist/types/components/nav/nav.d.ts +5 -1
  914. package/dist/types/components/nav-link/nav-link.d.ts +4 -0
  915. package/dist/types/components/note/note.d.ts +2 -1
  916. package/dist/types/components/picker/picker.d.ts +2 -1
  917. package/dist/types/components/picker-column/picker-column.d.ts +2 -1
  918. package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
  919. package/dist/types/components/popover/popover-interface.d.ts +3 -6
  920. package/dist/types/components/popover/popover.d.ts +6 -5
  921. package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
  922. package/dist/types/components/radio/radio.d.ts +2 -1
  923. package/dist/types/components/radio-group/radio-group.d.ts +12 -0
  924. package/dist/types/components/range/range.d.ts +2 -1
  925. package/dist/types/components/refresher/refresher.d.ts +2 -1
  926. package/dist/types/components/refresher-content/refresher-content.d.ts +4 -0
  927. package/dist/types/components/reorder/reorder.d.ts +9 -0
  928. package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
  929. package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
  930. package/dist/types/components/route/route.d.ts +4 -0
  931. package/dist/types/components/router/router.d.ts +4 -0
  932. package/dist/types/components/router-link/router-link.d.ts +4 -0
  933. package/dist/types/components/router-outlet/router-outlet.d.ts +4 -1
  934. package/dist/types/components/row/row.d.ts +4 -0
  935. package/dist/types/components/searchbar/searchbar.d.ts +56 -10
  936. package/dist/types/components/segment/segment.d.ts +2 -1
  937. package/dist/types/components/segment-button/segment-button.d.ts +2 -1
  938. package/dist/types/components/select/select.d.ts +64 -15
  939. package/dist/types/components/select-modal/select-modal.d.ts +8 -0
  940. package/dist/types/components/select-option/select-option.d.ts +7 -4
  941. package/dist/types/components/select-popover/select-popover.d.ts +3 -0
  942. package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
  943. package/dist/types/components/spinner/spinner.d.ts +15 -0
  944. package/dist/types/components/split-pane/split-pane.d.ts +4 -0
  945. package/dist/types/components/tab/tab.d.ts +4 -0
  946. package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
  947. package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
  948. package/dist/types/components/tab-button/tab-button.d.ts +12 -1
  949. package/dist/types/components/tabs/tabs.d.ts +3 -0
  950. package/dist/types/components/text/text.d.ts +2 -1
  951. package/dist/types/components/textarea/textarea.d.ts +74 -4
  952. package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
  953. package/dist/types/components/title/title.d.ts +4 -0
  954. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  955. package/dist/types/components/toast/toast-interface.d.ts +3 -7
  956. package/dist/types/components/toast/toast.d.ts +19 -2
  957. package/dist/types/components/toggle/toggle.d.ts +15 -1
  958. package/dist/types/components/toolbar/toolbar.d.ts +43 -3
  959. package/dist/types/components.d.ts +1839 -211
  960. package/dist/types/global/ionic-global.d.ts +28 -2
  961. package/dist/types/interface.d.ts +3 -0
  962. package/dist/types/utils/config.d.ts +106 -2
  963. package/dist/types/utils/css-value-validation.d.ts +21 -0
  964. package/dist/types/utils/focus-trap.d.ts +1 -1
  965. package/dist/types/utils/focus-visible.d.ts +13 -0
  966. package/dist/types/utils/forms/clear-button-press-controller.d.ts +20 -0
  967. package/dist/types/utils/forms/index.d.ts +1 -0
  968. package/dist/types/utils/forms/validity.d.ts +7 -0
  969. package/dist/types/utils/helpers.d.ts +22 -0
  970. package/dist/types/utils/overlay-control-label.d.ts +11 -9
  971. package/dist/types/utils/overlays-interface.d.ts +31 -1
  972. package/dist/types/utils/overlays.d.ts +1 -1
  973. package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
  974. package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
  975. package/dist/types/utils/test/playwright/generator.d.ts +31 -2
  976. package/dist/types/utils/theme.d.ts +9 -0
  977. package/hydrate/index.js +5445 -1216
  978. package/hydrate/index.mjs +5445 -1216
  979. package/package.json +7 -3
  980. package/components/p-1sJ0ZDPe.js +0 -4
  981. package/components/p-5ldEpNdG.js +0 -4
  982. package/components/p-B1_TL6RQ.js +0 -4
  983. package/components/p-B4lxwJ8N.js +0 -4
  984. package/components/p-BF48Oc0v.js +0 -4
  985. package/components/p-BJr2B5hZ.js +0 -4
  986. package/components/p-BNIsryb2.js +0 -4
  987. package/components/p-BSQPZ79H.js +0 -4
  988. package/components/p-BU8a2IhR.js +0 -4
  989. package/components/p-BW_SlU2D.js +0 -4
  990. package/components/p-BWoa-cki.js +0 -4
  991. package/components/p-BYJRZKHa.js +0 -4
  992. package/components/p-BhamHSw3.js +0 -4
  993. package/components/p-Bi-it1EH.js +0 -4
  994. package/components/p-BmVRXR1y.js +0 -4
  995. package/components/p-C-NbvXu4.js +0 -4
  996. package/components/p-C09TXohi.js +0 -4
  997. package/components/p-C8Ck7_Eo.js +0 -4
  998. package/components/p-CG_zZq_I.js +0 -4
  999. package/components/p-CIGNaXM1.js +0 -4
  1000. package/components/p-CJgnoKcN.js +0 -4
  1001. package/components/p-CMRYD_yR.js +0 -4
  1002. package/components/p-CNLioZ3B.js +0 -4
  1003. package/components/p-COO0eJOA.js +0 -4
  1004. package/components/p-CWAks_S_.js +0 -4
  1005. package/components/p-Cd1WaN-0.js +0 -4
  1006. package/components/p-CqbGBmqb.js +0 -4
  1007. package/components/p-CrAKlX71.js +0 -4
  1008. package/components/p-Ctop2IWW.js +0 -4
  1009. package/components/p-D5w_FlVa.js +0 -4
  1010. package/components/p-D7-vHX0A.js +0 -4
  1011. package/components/p-D7wDJdFn.js +0 -4
  1012. package/components/p-DFLJvuRK.js +0 -4
  1013. package/components/p-DJztqcrH.js +0 -4
  1014. package/components/p-DL13ieTa.js +0 -4
  1015. package/components/p-DMBiAyOR.js +0 -4
  1016. package/components/p-DZRZic9C.js +0 -4
  1017. package/components/p-DnBNYc7u.js +0 -4
  1018. package/components/p-GGbIHyEF.js +0 -4
  1019. package/components/p-Hp8t4RMX.js +0 -4
  1020. package/components/p-LpMHEu3v.js +0 -4
  1021. package/components/p-M34T2gyX.js +0 -4
  1022. package/components/p-TWw4e4sO.js +0 -4
  1023. package/components/p-YjMkHuvH.js +0 -4
  1024. package/components/p-ZjP4CjeZ.js +0 -4
  1025. package/components/p-byZM6qHV.js +0 -4
  1026. package/components/p-cEN43Ahr.js +0 -4
  1027. package/dist/cjs/hardware-back-button-Bu4Dzw8l.js +0 -121
  1028. package/dist/cjs/index-DkNv4J_i.js +0 -10
  1029. package/dist/cjs/ionic-global-CYJNT-2P.js +0 -156
  1030. package/dist/cjs/keyboard-controller-PtZoN2GS.js +0 -167
  1031. package/dist/cjs/validity-BpS37YFM.js +0 -19
  1032. package/dist/esm/hardware-back-button-DmkiRgOT.js +0 -115
  1033. package/dist/esm/index-ZjP4CjeZ.js +0 -7
  1034. package/dist/esm/ionic-global-ZXjCXKH0.js +0 -151
  1035. package/dist/esm/keyboard-controller-DEwoa1ev.js +0 -165
  1036. package/dist/esm/validity-DJztqcrH.js +0 -17
  1037. package/dist/ionic/p-099b7f9f.entry.js +0 -4
  1038. package/dist/ionic/p-171a2278.entry.js +0 -4
  1039. package/dist/ionic/p-191a651e.entry.js +0 -4
  1040. package/dist/ionic/p-1f24cb24.entry.js +0 -4
  1041. package/dist/ionic/p-271c3640.entry.js +0 -4
  1042. package/dist/ionic/p-2ea4bb36.entry.js +0 -4
  1043. package/dist/ionic/p-338a02e0.entry.js +0 -4
  1044. package/dist/ionic/p-354d38d3.entry.js +0 -4
  1045. package/dist/ionic/p-38b9375b.entry.js +0 -4
  1046. package/dist/ionic/p-3bba83ee.entry.js +0 -4
  1047. package/dist/ionic/p-3e01c744.entry.js +0 -4
  1048. package/dist/ionic/p-458715a9.entry.js +0 -4
  1049. package/dist/ionic/p-4712a8a9.entry.js +0 -4
  1050. package/dist/ionic/p-4c3e50f8.entry.js +0 -4
  1051. package/dist/ionic/p-54cbb0a7.entry.js +0 -4
  1052. package/dist/ionic/p-561af487.entry.js +0 -4
  1053. package/dist/ionic/p-5906ea6f.entry.js +0 -4
  1054. package/dist/ionic/p-5cc09b40.entry.js +0 -4
  1055. package/dist/ionic/p-5d9094ac.entry.js +0 -4
  1056. package/dist/ionic/p-612ea3b1.entry.js +0 -4
  1057. package/dist/ionic/p-68cc89a6.entry.js +0 -4
  1058. package/dist/ionic/p-6e386853.entry.js +0 -4
  1059. package/dist/ionic/p-77c96e08.entry.js +0 -4
  1060. package/dist/ionic/p-7bfeccb3.entry.js +0 -4
  1061. package/dist/ionic/p-7e394cc3.entry.js +0 -4
  1062. package/dist/ionic/p-7fbb3319.entry.js +0 -4
  1063. package/dist/ionic/p-803059b6.entry.js +0 -4
  1064. package/dist/ionic/p-85599fe3.entry.js +0 -4
  1065. package/dist/ionic/p-8b80d9f9.entry.js +0 -4
  1066. package/dist/ionic/p-90f50a65.entry.js +0 -4
  1067. package/dist/ionic/p-9595e305.entry.js +0 -4
  1068. package/dist/ionic/p-9c5f2691.entry.js +0 -4
  1069. package/dist/ionic/p-9ee9c5b6.entry.js +0 -4
  1070. package/dist/ionic/p-BMPN55of.js +0 -4
  1071. package/dist/ionic/p-BMiZX1LT.js +0 -4
  1072. package/dist/ionic/p-BSQPZ79H.js +0 -4
  1073. package/dist/ionic/p-BY6BzzPF.js +0 -4
  1074. package/dist/ionic/p-BgOvhHy_.js +0 -4
  1075. package/dist/ionic/p-BhamHSw3.js +0 -4
  1076. package/dist/ionic/p-BijjLYjT.js +0 -4
  1077. package/dist/ionic/p-BmVRXR1y.js +0 -4
  1078. package/dist/ionic/p-BvabGprD.js +0 -4
  1079. package/dist/ionic/p-C23AVPx9.js +0 -6
  1080. package/dist/ionic/p-CER8qW8Y.js +0 -4
  1081. package/dist/ionic/p-CFuOr1Tu.js +0 -4
  1082. package/dist/ionic/p-CIGNaXM1.js +0 -4
  1083. package/dist/ionic/p-CJv-wOAd.js +0 -4
  1084. package/dist/ionic/p-CMZYmFb4.js +0 -4
  1085. package/dist/ionic/p-CmXuiRT6.js +0 -4
  1086. package/dist/ionic/p-D5t_-oMk.js +0 -4
  1087. package/dist/ionic/p-D6rHcCvc.js +0 -4
  1088. package/dist/ionic/p-DJztqcrH.js +0 -4
  1089. package/dist/ionic/p-DLM95R4x.js +0 -4
  1090. package/dist/ionic/p-DYUjHcuH.js +0 -4
  1091. package/dist/ionic/p-D_gb-kdd.js +0 -4
  1092. package/dist/ionic/p-DajLgJ4d.js +0 -4
  1093. package/dist/ionic/p-Do3zTvCA.js +0 -4
  1094. package/dist/ionic/p-ZjP4CjeZ.js +0 -4
  1095. package/dist/ionic/p-a8df96c8.entry.js +0 -4
  1096. package/dist/ionic/p-a8ff2489.entry.js +0 -4
  1097. package/dist/ionic/p-aff52029.entry.js +0 -4
  1098. package/dist/ionic/p-b3532b8d.entry.js +0 -4
  1099. package/dist/ionic/p-b9b4e85d.entry.js +0 -4
  1100. package/dist/ionic/p-byZM6qHV.js +0 -4
  1101. package/dist/ionic/p-ca1b8865.entry.js +0 -4
  1102. package/dist/ionic/p-cc4320d3.entry.js +0 -4
  1103. package/dist/ionic/p-d526798a.entry.js +0 -4
  1104. package/dist/ionic/p-d6755739.entry.js +0 -4
  1105. package/dist/ionic/p-d8c138d9.entry.js +0 -4
  1106. package/dist/ionic/p-dd01be0a.entry.js +0 -4
  1107. package/dist/ionic/p-e7f4b1e0.entry.js +0 -4
  1108. package/dist/ionic/p-ec00fd0d.entry.js +0 -4
  1109. package/dist/ionic/p-ee09ac9d.entry.js +0 -4
  1110. package/dist/ionic/p-efc0cf82.entry.js +0 -4
  1111. package/dist/ionic/p-f0fb23c1.entry.js +0 -4
  1112. package/dist/ionic/p-f83b3e0c.entry.js +0 -4
  1113. package/dist/ionic/p-fa50d493.entry.js +0 -4
  1114. package/dist/ionic/p-fe9ed9bd.entry.js +0 -4
  1115. package/dist/ionic/p-zWf7R2xV.js +0 -4
  1116. /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
@@ -1,21 +1,20 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, e as config, f as printIonWarning, h, d as Host, g as getElement, c as createEvent, a as readTask, i as forceUpdate, w as writeTask, j as printIonError } from './index-C23AVPx9.js';
5
- import { shouldUseCloseWatcher } from './hardware-back-button-DmkiRgOT.js';
6
- import { a as isPlatform, b as getIonMode } from './ionic-global-ZXjCXKH0.js';
7
- import { i as inheritAriaAttributes, h as hasLazyBuild, c as componentOnReady, e as clamp, s as shallowEqualStringMap } from './helpers-BSmc0nst.js';
4
+ import { r as registerInstance, h, e as config, d as Host, g as getElement, c as createEvent, a as readTask, i as forceUpdate, w as writeTask, f as printIonWarning, j as printIonError } from './index-jsOqXOKf.js';
5
+ import { focusElements } from './focus-visible-vXpMhGrs.js';
6
+ import { c as getIonTheme, a as isPlatform, b as getIonMode } from './ionic-global-oK2heABF.js';
7
+ import { i as inheritAriaAttributes, h as hasLazyBuild, c as componentOnReady, e as clamp, q as shallowEqualStringMap } from './helpers-DTqW6MzS.js';
8
8
  import { i as isRTL } from './dir-Dojwmvde.js';
9
- import { h as hostContext, c as createColorClasses } from './theme-byZM6qHV.js';
10
- import { b as findIonContent, p as printIonContentErrorMsg, g as getScrollElement } from './index-C1b9CLFg.js';
11
- import { c as createKeyboardController } from './keyboard-controller-DEwoa1ev.js';
9
+ import { h as hostContext, c as createColorClasses } from './theme-BUF_V-Kg.js';
10
+ import { b as findIonContent, p as printIonContentErrorMsg, g as getScrollElement } from './index-CpKLzrYn.js';
11
+ import { c as createScrollHideController, a as createKeyboardController } from './scroll-hide-controller-BUZm0jSI.js';
12
12
  import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
13
- import { a as attachComponent, d as detachComponent } from './framework-delegate-BwNhx9NR.js';
13
+ import { a as attachComponent, d as detachComponent } from './framework-delegate-DUQ69ajj.js';
14
14
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
15
- import { t as transition } from './index-DnA_7Bnx.js';
16
- import './index-ZjP4CjeZ.js';
17
- import './keyboard-DAF8GNJ9.js';
18
- import './capacitor-CFERIeaU.js';
15
+ import { t as transition } from './index-D76uuG8P.js';
16
+ import './keyboard-Dzp50ozz.js';
17
+ import './capacitor-CMyaZHxy.js';
19
18
 
20
19
  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}`;
21
20
 
@@ -23,51 +22,6 @@ const App = class {
23
22
  constructor(hostRef) {
24
23
  registerInstance(this, hostRef);
25
24
  }
26
- componentDidLoad() {
27
- {
28
- this.rIC(async () => {
29
- const isHybrid = isPlatform(window, 'hybrid');
30
- if (!config.getBoolean('_testing')) {
31
- import('./index-CJln0gS3.js').then((module) => module.startTapClick(config));
32
- }
33
- if (config.getBoolean('statusTap', isHybrid)) {
34
- import('./status-tap-Cv9gb3ja.js').then((module) => module.startStatusTap());
35
- }
36
- if (config.getBoolean('inputShims', needInputShims())) {
37
- /**
38
- * needInputShims() ensures that only iOS and Android
39
- * platforms proceed into this block.
40
- */
41
- const platform = isPlatform(window, 'ios') ? 'ios' : 'android';
42
- import('./input-shims-Dqk-Ou25.js').then((module) => module.startInputShims(config, platform));
43
- }
44
- const hardwareBackButtonModule = await import('./hardware-back-button-DmkiRgOT.js');
45
- const supportsHardwareBackButtonEvents = isHybrid || shouldUseCloseWatcher();
46
- if (config.getBoolean('hardwareBackButton', supportsHardwareBackButtonEvents)) {
47
- hardwareBackButtonModule.startHardwareBackButton();
48
- }
49
- else {
50
- /**
51
- * If an app sets hardwareBackButton: false and experimentalCloseWatcher: true
52
- * then the close watcher will not be used.
53
- */
54
- if (shouldUseCloseWatcher()) {
55
- 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.');
56
- }
57
- hardwareBackButtonModule.blockHardwareBackButton();
58
- }
59
- if (typeof window !== 'undefined') {
60
- import('./keyboard-Cj8mLJeq.js').then((module) => module.startKeyboardAssist(window));
61
- }
62
- import('./focus-visible-BmVRXR1y.js').then((module) => (this.focusVisible = module.startFocusVisible()));
63
- });
64
- }
65
- }
66
- disconnectedCallback() {
67
- if (this.loadTimeout) {
68
- clearTimeout(this.loadTimeout);
69
- }
70
- }
71
25
  /**
72
26
  * Used to set focus on an element that uses `ion-focusable`.
73
27
  * Do not use this if focusing the element as a result of a keyboard
@@ -80,52 +34,29 @@ const App = class {
80
34
  * @param elements An array of HTML elements to set focus on.
81
35
  */
82
36
  async setFocus(elements) {
83
- if (this.focusVisible) {
84
- this.focusVisible.setFocus(elements);
85
- }
86
- }
87
- rIC(callback) {
88
- if ('requestIdleCallback' in window) {
89
- window.requestIdleCallback(callback);
90
- }
91
- else {
92
- this.loadTimeout = setTimeout(callback, 32);
93
- }
37
+ /**
38
+ * The focus-visible utility is used to set focus on an
39
+ * element that uses `ion-focusable`.
40
+ */
41
+ focusElements(elements);
94
42
  }
95
43
  render() {
96
- const mode = getIonMode(this);
97
- return (h(Host, { key: '77a7459d3e42b3715a5a7e1cf468e2ebc99e54bb', class: {
98
- [mode]: true,
44
+ const theme = getIonTheme(this);
45
+ return (h(Host, { key: '3b7e84c7c4187287123413f90838cda89136b2a4', class: {
46
+ [theme]: true,
99
47
  'ion-page': true,
100
48
  'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),
101
49
  } }));
102
50
  }
103
51
  get el() { return getElement(this); }
104
52
  };
105
- const needInputShims = () => {
106
- /**
107
- * iOS always needs input shims
108
- */
109
- const needsShimsIOS = isPlatform(window, 'ios') && isPlatform(window, 'mobile');
110
- if (needsShimsIOS) {
111
- return true;
112
- }
113
- /**
114
- * Android only needs input shims when running
115
- * in the browser and only if the browser is using the
116
- * new Chrome 108+ resize behavior: https://developer.chrome.com/blog/viewport-resize-behavior/
117
- */
118
- const isAndroidMobileWeb = isPlatform(window, 'android') && isPlatform(window, 'mobileweb');
119
- if (isAndroidMobileWeb) {
120
- return true;
121
- }
122
- return false;
123
- };
124
53
  App.style = appCss();
125
54
 
126
- 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}`;
55
+ 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)}`;
56
+
57
+ 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}`;
127
58
 
128
- 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}`;
59
+ 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}`;
129
60
 
130
61
  const Buttons = class {
131
62
  constructor(hostRef) {
@@ -137,7 +68,7 @@ const Buttons = class {
137
68
  * first toolbar, the buttons will be hidden and will
138
69
  * only be shown once all toolbars have fully collapsed.
139
70
  *
140
- * Only applies in `ios` mode with `collapse` set to
71
+ * Only applies in the `ios` theme with `collapse` set to
141
72
  * `true` on `ion-header`.
142
73
  *
143
74
  * Typically used for [Collapsible Large Titles](https://ionicframework.com/docs/api/title#collapsible-large-titles)
@@ -145,19 +76,20 @@ const Buttons = class {
145
76
  this.collapse = false;
146
77
  }
147
78
  render() {
148
- const mode = getIonMode(this);
149
- return (h(Host, { key: '58c1fc5eb867d0731c63549b1ccb3ec3bbbe6e1b', class: {
150
- [mode]: true,
79
+ const theme = getIonTheme(this);
80
+ return (h(Host, { key: '95c107ba7871c801a5ef14c636dc8e2fe69debf3', class: {
81
+ [theme]: true,
151
82
  ['buttons-collapse']: this.collapse,
152
- } }, h("slot", { key: '0c8f95b9840c8fa0c4e50be84c5159620a3eb5c8' })));
83
+ } }, h("slot", { key: '58669abfce458e1344b84286d4200e305017b958' })));
153
84
  }
154
85
  };
155
86
  Buttons.style = {
87
+ ionic: buttonsIonicCss(),
156
88
  ios: buttonsIosCss(),
157
89
  md: buttonsMdCss()
158
90
  };
159
91
 
160
- 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)}`;
92
+ 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}}`;
161
93
 
162
94
  const Content = class {
163
95
  constructor(hostRef) {
@@ -365,9 +297,8 @@ const Content = class {
365
297
  this.resize();
366
298
  }, 100);
367
299
  }
368
- shouldForceOverscroll() {
300
+ shouldForceOverscroll(mode) {
369
301
  const { forceOverscroll } = this;
370
- const mode = getIonMode(this);
371
302
  return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
372
303
  }
373
304
  resize() {
@@ -563,12 +494,13 @@ const Content = class {
563
494
  render() {
564
495
  const { fixedSlotPlacement, inheritedAttributes, isMainContent, scrollX, scrollY, el } = this;
565
496
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
566
- const mode = getIonMode(this);
567
- const forceOverscroll = this.shouldForceOverscroll();
568
- const transitionShadow = mode === 'ios';
497
+ const theme = getIonTheme(this);
498
+ const mode = getIonMode(this, theme);
499
+ const forceOverscroll = this.shouldForceOverscroll(mode);
500
+ const transitionShadow = theme === 'ios';
569
501
  this.resize();
570
- return (h(Host, { key: '9551c759df407b10d809171641fc6e8f14d92219', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
571
- [mode]: true,
502
+ return (h(Host, { key: '8c7f646f58e7c38fb6d8661b1629b847a16753fb', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
503
+ [theme]: true,
572
504
  'content-fullscreen': this.fullscreen,
573
505
  'content-sizing': hostContext('ion-popover', this.el),
574
506
  overscroll: forceOverscroll,
@@ -576,12 +508,12 @@ const Content = class {
576
508
  }), style: {
577
509
  '--offset-top': `${this.cTop}px`,
578
510
  '--offset-bottom': `${this.cBottom}px`,
579
- }, ...inheritedAttributes }, h("div", { key: 'c6de8fd226f0d10a534eb107fe032ac155fbe68e', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: '082fc2936061360060b48221ecb1c864a3711fa0', class: {
511
+ }, ...inheritedAttributes }, h("div", { key: '2b0505c3fdf5c92938b8419c0f57f8d999aec6b3', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: '6b769596e491dea1d3618551497fde9364afdeda', class: {
580
512
  'inner-scroll': true,
581
513
  'scroll-x': scrollX,
582
514
  'scroll-y': scrollY,
583
515
  overscroll: (scrollX || scrollY) && forceOverscroll,
584
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '0d2286206facb22696a9ca7e74a3f6b7d2397aab' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
516
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: 'ba36c8468681d028352415039d2cb2a750f2638f' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
585
517
  }
586
518
  get el() { return getElement(this); }
587
519
  static get watchers() { return {
@@ -611,7 +543,8 @@ const getPageElement = (el) => {
611
543
  * between the popover and the edges of the screen. But if the popover contains
612
544
  * its own page element, we should use that instead.
613
545
  */
614
- const page = el.closest('ion-app, ion-page, .ion-page, page-inner, .popover-content');
546
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
547
+ const page = el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner, .popover-content`);
615
548
  if (page) {
616
549
  return page;
617
550
  }
@@ -675,45 +608,90 @@ const handleFooterFade = (scrollEl, baseEl) => {
675
608
  });
676
609
  };
677
610
 
678
- 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}`;
611
+ 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}`;
679
612
 
680
- 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}`;
613
+ 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}`;
614
+
615
+ 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}`;
681
616
 
682
617
  const Footer = class {
683
618
  constructor(hostRef) {
684
619
  registerInstance(this, hostRef);
685
620
  this.keyboardCtrl = null;
686
621
  this.keyboardCtrlPromise = null;
622
+ this.scrollHideCtrlPromise = null;
623
+ this.hasWarnedCollapse = false;
624
+ this.fadeSetupId = 0;
687
625
  this.keyboardVisible = false;
688
626
  /**
689
627
  * If `true`, the footer will be translucent.
690
- * Only applies when the mode is `"ios"` and the device supports
628
+ * Only applies when the theme is `"ios"` and the device supports
691
629
  * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
692
630
  *
693
631
  * Note: In order to scroll content behind the footer, the `fullscreen`
694
632
  * attribute needs to be set on the content.
695
633
  */
696
634
  this.translucent = false;
697
- this.checkCollapsibleFooter = () => {
698
- const mode = getIonMode(this);
699
- if (mode !== 'ios') {
635
+ this.checkCollapsibleFooter = async () => {
636
+ const { scrollEffect, collapse } = this;
637
+ if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
638
+ this.hasWarnedCollapse = true;
639
+ printIonWarning(`[ion-footer] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-footer scroll-effect="${collapse}">`, this.el);
640
+ }
641
+ const effect = scrollEffect ?? collapse;
642
+ // Skip teardown/rebuild if the effect hasn't changed.
643
+ // This prevents keyboard toggles (which trigger re-renders via
644
+ // @State keyboardVisible) from destroying the scroll controller
645
+ // and resetting isHidden.
646
+ if (effect === this.activeEffect) {
700
647
  return;
701
648
  }
702
- const { collapse } = this;
703
- const hasFade = collapse === 'fade';
649
+ const hasHide = effect === 'hide';
650
+ const hasFade = effect === 'fade';
704
651
  this.destroyCollapsibleFooter();
705
- if (hasFade) {
706
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
707
- const contentEl = pageEl ? findIonContent(pageEl) : null;
652
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
653
+ const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
654
+ const contentEl = pageEl ? findIonContent(pageEl) : null;
655
+ if (hasHide && contentEl) {
656
+ this.activeEffect = effect;
657
+ await this.setupScrollEffectHide(contentEl);
658
+ return;
659
+ }
660
+ // fade via the deprecated `collapse` prop is iOS-only.
661
+ // fade via the new `scrollEffect` prop works in all themes.
662
+ const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
663
+ if (hasFade && !isModeRestricted) {
708
664
  if (!contentEl) {
709
665
  printIonContentErrorMsg(this.el);
710
666
  return;
711
667
  }
712
668
  this.setupFadeFooter(contentEl);
669
+ this.activeEffect = effect;
670
+ }
671
+ };
672
+ this.setupScrollEffectHide = async (contentEl) => {
673
+ const setupPromise = createScrollHideController(contentEl, {
674
+ el: this.el,
675
+ cssVar: '--internal-footer-hide-height',
676
+ hiddenClass: 'footer-scroll-hidden',
677
+ contentPartnerClass: 'content-footer-hide-scroll-partner',
678
+ contentHiddenClass: 'content-footer-hide-scroll-hidden',
679
+ });
680
+ this.scrollHideCtrlPromise = setupPromise;
681
+ const controller = await setupPromise;
682
+ if (this.scrollHideCtrlPromise === setupPromise) {
683
+ this.scrollHideCtrlPromise = null;
684
+ controller.init();
685
+ this.scrollHideCtrl = controller;
713
686
  }
714
687
  };
715
688
  this.setupFadeFooter = async (contentEl) => {
716
- const scrollEl = (this.scrollEl = await getScrollElement(contentEl));
689
+ const setupId = ++this.fadeSetupId;
690
+ const scrollEl = await getScrollElement(contentEl);
691
+ if (this.fadeSetupId !== setupId) {
692
+ return;
693
+ }
694
+ this.scrollEl = scrollEl;
717
695
  /**
718
696
  * Handle fading of toolbars on scroll
719
697
  */
@@ -758,6 +736,7 @@ const Footer = class {
758
736
  }
759
737
  }
760
738
  disconnectedCallback() {
739
+ this.destroyCollapsibleFooter();
761
740
  if (this.keyboardCtrlPromise) {
762
741
  this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
763
742
  this.keyboardCtrlPromise = null;
@@ -768,29 +747,43 @@ const Footer = class {
768
747
  }
769
748
  }
770
749
  destroyCollapsibleFooter() {
750
+ this.activeEffect = undefined;
751
+ this.fadeSetupId++;
752
+ this.scrollHideCtrlPromise = null;
753
+ if (this.scrollHideCtrl) {
754
+ this.scrollHideCtrl.destroy();
755
+ this.scrollHideCtrl = undefined;
756
+ }
771
757
  if (this.scrollEl && this.contentScrollCallback) {
772
758
  this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);
773
759
  this.contentScrollCallback = undefined;
774
760
  }
775
761
  }
776
762
  render() {
777
- const { translucent, collapse } = this;
778
- const mode = getIonMode(this);
763
+ const { translucent, scrollEffect, collapse } = this;
764
+ const theme = getIonTheme(this);
765
+ const effect = scrollEffect ?? collapse;
766
+ // fade via the deprecated `collapse` prop is iOS-only.
767
+ const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
768
+ const hasHide = effect === 'hide';
769
+ const hasFade = effect === 'fade' && !isModeRestricted;
779
770
  const tabs = this.el.closest('ion-tabs');
780
771
  const tabBar = tabs?.querySelector(':scope > ion-tab-bar');
781
- return (h(Host, { key: '71939c4bbaef5062532a99ee2e33574102a9abad', role: "contentinfo", class: {
782
- [mode]: true,
772
+ return (h(Host, { key: 'a0777b4a639d22e15374879f018efcf589e756f8', role: "contentinfo", class: {
773
+ [theme]: true,
783
774
  // Used internally for styling
784
- [`footer-${mode}`]: true,
775
+ [`footer-${theme}`]: true,
785
776
  [`footer-translucent`]: translucent,
786
- [`footer-translucent-${mode}`]: translucent,
777
+ [`footer-translucent-${theme}`]: translucent,
787
778
  ['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
788
- [`footer-collapse-${collapse}`]: collapse !== undefined,
789
- } }, mode === 'ios' && translucent && h("div", { key: '2fa14f61661c47c661cecd696176728d6eafa74f', class: "footer-background" }), h("slot", { key: '8e63696e7c528d5c38201e546bf08135290d0945' })));
779
+ 'footer-collapse-fade': hasFade,
780
+ 'footer-scroll-effect-hide': hasHide,
781
+ } }, theme === 'ios' && translucent && h("div", { key: 'd78b46870cbf11c95b066d649c04ec398b66e614', class: "footer-background" }), h("slot", { key: '9dc34787cd29597fe1b1198db317602014ac1483' })));
790
782
  }
791
783
  get el() { return getElement(this); }
792
784
  };
793
785
  Footer.style = {
786
+ ionic: ionicFooterMdCss(),
794
787
  ios: footerIosCss(),
795
788
  md: footerMdCss()
796
789
  };
@@ -848,7 +841,7 @@ const setToolbarBackgroundOpacity = (headerEl, opacity) => {
848
841
  * has collapsed, so it is handled
849
842
  * by handleHeaderFade()
850
843
  */
851
- if (headerEl.collapse === 'fade') {
844
+ if ((headerEl.scrollEffect ?? headerEl.collapse) === 'fade') {
852
845
  return;
853
846
  }
854
847
  if (opacity === undefined) {
@@ -1006,46 +999,69 @@ const handleHeaderFade = (scrollEl, baseEl, condenseHeader) => {
1006
999
  * Get the role type for the ion-header.
1007
1000
  *
1008
1001
  * @param isInsideMenu If ion-header is inside ion-menu.
1009
- * @param isCondensed If ion-header has collapse="condense".
1010
- * @param mode The current mode.
1011
- * @returns 'none' if inside ion-menu or if condensed in md
1012
- * mode, otherwise 'banner'.
1002
+ * @returns 'none' if inside ion-menu, otherwise 'banner'.
1003
+ * Condensed headers start as 'banner' and have their role
1004
+ * toggled dynamically by setHeaderActive() on scroll.
1013
1005
  */
1014
- const getRoleType = (isInsideMenu, isCondensed, mode) => {
1006
+ const getRoleType = (isInsideMenu) => {
1015
1007
  // If the header is inside a menu, it should not have the banner role.
1016
1008
  if (isInsideMenu) {
1017
1009
  return ROLE_NONE;
1018
1010
  }
1019
- /**
1020
- * Only apply role="none" to `md` mode condensed headers
1021
- * since the large header is never shown.
1022
- */
1023
- if (isCondensed && mode === 'md') {
1024
- return ROLE_NONE;
1025
- }
1026
1011
  // Default to banner role.
1027
1012
  return ROLE_BANNER;
1028
1013
  };
1029
1014
 
1030
- 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}`;
1015
+ 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}}`;
1016
+
1017
+ 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}`;
1031
1018
 
1032
- 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}`;
1019
+ 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}`;
1033
1020
 
1034
1021
  const Header = class {
1035
1022
  constructor(hostRef) {
1036
1023
  registerInstance(this, hostRef);
1037
1024
  this.inheritedAttributes = {};
1025
+ this.scrollHideCtrlPromise = null;
1026
+ this.hasWarnedCollapse = false;
1027
+ this.fadeCondenseSetupId = 0;
1028
+ /**
1029
+ * If `true`, the header will have a line at the bottom.
1030
+ * TODO(ROU-10855): add support for this prop on ios/md themes
1031
+ */
1032
+ this.divider = false;
1038
1033
  /**
1039
1034
  * If `true`, the header will be translucent.
1040
- * Only applies when the mode is `"ios"` and the device supports
1035
+ * Only applies when the theme is `"ios"` or `"ionic"` and the device supports
1041
1036
  * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
1042
1037
  *
1043
1038
  * Note: In order to scroll content behind the header, the `fullscreen`
1044
1039
  * attribute needs to be set on the content.
1045
1040
  */
1046
1041
  this.translucent = false;
1042
+ this.setupScrollEffectHide = async (contentEl) => {
1043
+ const setupPromise = createScrollHideController(contentEl, {
1044
+ el: this.el,
1045
+ cssVar: '--internal-header-hide-height',
1046
+ hiddenClass: 'header-scroll-hidden',
1047
+ contentPartnerClass: 'content-header-hide-scroll-partner',
1048
+ contentHiddenClass: 'content-header-hide-scroll-hidden',
1049
+ });
1050
+ this.scrollHideCtrlPromise = setupPromise;
1051
+ const controller = await setupPromise;
1052
+ if (this.scrollHideCtrlPromise === setupPromise) {
1053
+ this.scrollHideCtrlPromise = null;
1054
+ controller.init();
1055
+ this.scrollHideCtrl = controller;
1056
+ }
1057
+ };
1047
1058
  this.setupFadeHeader = async (contentEl, condenseHeader) => {
1048
- const scrollEl = (this.scrollEl = await getScrollElement(contentEl));
1059
+ const setupId = ++this.fadeCondenseSetupId;
1060
+ const scrollEl = await getScrollElement(contentEl);
1061
+ if (this.fadeCondenseSetupId !== setupId) {
1062
+ return;
1063
+ }
1064
+ this.scrollEl = scrollEl;
1049
1065
  /**
1050
1066
  * Handle fading of toolbars on scroll
1051
1067
  */
@@ -1069,37 +1085,63 @@ const Header = class {
1069
1085
  this.destroyCollapsibleHeader();
1070
1086
  }
1071
1087
  async checkCollapsibleHeader() {
1072
- const mode = getIonMode(this);
1073
- if (mode !== 'ios') {
1088
+ const { scrollEffect, collapse } = this;
1089
+ if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
1090
+ this.hasWarnedCollapse = true;
1091
+ printIonWarning(`[ion-header] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-header scroll-effect="${collapse}">`, this.el);
1092
+ }
1093
+ const effect = scrollEffect ?? collapse;
1094
+ // Skip teardown/rebuild if the effect hasn't changed.
1095
+ // This prevents re-renders from destroying the scroll controller
1096
+ // and resetting isHidden.
1097
+ if (effect === this.activeEffect) {
1074
1098
  return;
1075
1099
  }
1076
- const { collapse } = this;
1077
- const hasCondense = collapse === 'condense';
1078
- const hasFade = collapse === 'fade';
1100
+ const hasHide = effect === 'hide';
1101
+ const hasCondense = effect === 'condense';
1102
+ const hasFade = effect === 'fade';
1079
1103
  this.destroyCollapsibleHeader();
1080
- if (hasCondense) {
1081
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
1082
- const contentEl = pageEl ? findIonContent(pageEl) : null;
1104
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
1105
+ const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
1106
+ const contentEl = pageEl ? findIonContent(pageEl) : null;
1107
+ if (hasHide && contentEl) {
1108
+ this.activeEffect = effect;
1109
+ await this.setupScrollEffectHide(contentEl);
1110
+ return;
1111
+ }
1112
+ // condense/fade via the deprecated `collapse` prop are iOS-only.
1113
+ // condense/fade via the new `scrollEffect` prop work in all themes.
1114
+ const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
1115
+ if (hasCondense && !isModeRestricted) {
1083
1116
  // Cloned elements are always needed in iOS transition
1084
1117
  writeTask(() => {
1085
1118
  const title = cloneElement('ion-title');
1086
1119
  title.size = 'large';
1087
1120
  cloneElement('ion-back-button');
1088
1121
  });
1089
- await this.setupCondenseHeader(contentEl, pageEl);
1122
+ const didSetup = await this.setupCondenseHeader(contentEl, pageEl);
1123
+ if (didSetup) {
1124
+ this.activeEffect = effect;
1125
+ }
1090
1126
  }
1091
- else if (hasFade) {
1092
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
1093
- const contentEl = pageEl ? findIonContent(pageEl) : null;
1127
+ else if (hasFade && !isModeRestricted) {
1094
1128
  if (!contentEl) {
1095
1129
  printIonContentErrorMsg(this.el);
1096
1130
  return;
1097
1131
  }
1098
- const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"]');
1132
+ const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"],ion-header[scroll-effect="condense"]');
1133
+ this.activeEffect = effect;
1099
1134
  await this.setupFadeHeader(contentEl, condenseHeader);
1100
1135
  }
1101
1136
  }
1102
1137
  destroyCollapsibleHeader() {
1138
+ this.activeEffect = undefined;
1139
+ this.fadeCondenseSetupId++;
1140
+ this.scrollHideCtrlPromise = null;
1141
+ if (this.scrollHideCtrl) {
1142
+ this.scrollHideCtrl.destroy();
1143
+ this.scrollHideCtrl = undefined;
1144
+ }
1103
1145
  if (this.intersectionObserver) {
1104
1146
  this.intersectionObserver.disconnect();
1105
1147
  this.intersectionObserver = undefined;
@@ -1116,21 +1158,39 @@ const Header = class {
1116
1158
  async setupCondenseHeader(contentEl, pageEl) {
1117
1159
  if (!contentEl || !pageEl) {
1118
1160
  printIonContentErrorMsg(this.el);
1119
- return;
1161
+ return false;
1120
1162
  }
1121
1163
  if (typeof IntersectionObserver === 'undefined') {
1122
- return;
1164
+ return false;
1165
+ }
1166
+ const setupId = ++this.fadeCondenseSetupId;
1167
+ const scrollEl = await getScrollElement(contentEl);
1168
+ if (this.fadeCondenseSetupId !== setupId) {
1169
+ return false;
1170
+ }
1171
+ this.scrollEl = scrollEl;
1172
+ /**
1173
+ * The condense effect requires an ion-title with size="large"
1174
+ * in the condense header. Without it, there is nothing to
1175
+ * collapse into the main header toolbar.
1176
+ */
1177
+ const hasLargeTitle = this.el.querySelector('ion-title[size="large"]') !== null;
1178
+ if (!hasLargeTitle) {
1179
+ printIonWarning('[ion-header] - The condense scroll effect requires an <ion-title size="large"> in the condense header.', this.el);
1180
+ return false;
1123
1181
  }
1124
- this.scrollEl = await getScrollElement(contentEl);
1125
1182
  const headers = pageEl.querySelectorAll('ion-header');
1126
- this.collapsibleMainHeader = Array.from(headers).find((header) => header.collapse !== 'condense');
1183
+ this.collapsibleMainHeader = Array.from(headers).find((header) => {
1184
+ const effect = header.scrollEffect ?? header.collapse;
1185
+ return effect !== 'condense';
1186
+ });
1127
1187
  if (!this.collapsibleMainHeader) {
1128
- return;
1188
+ return false;
1129
1189
  }
1130
1190
  const mainHeaderIndex = createHeaderIndex(this.collapsibleMainHeader);
1131
1191
  const scrollHeaderIndex = createHeaderIndex(this.el);
1132
1192
  if (!mainHeaderIndex || !scrollHeaderIndex) {
1133
- return;
1193
+ return false;
1134
1194
  }
1135
1195
  setHeaderActive(mainHeaderIndex, false);
1136
1196
  setToolbarBackgroundOpacity(mainHeaderIndex.el, 0);
@@ -1162,31 +1222,45 @@ const Header = class {
1162
1222
  this.collapsibleMainHeader.classList.add('header-collapse-main');
1163
1223
  }
1164
1224
  });
1225
+ return true;
1165
1226
  }
1166
1227
  render() {
1167
- const { translucent, inheritedAttributes } = this;
1168
- const mode = getIonMode(this);
1169
- const collapse = this.collapse || 'none';
1170
- const isCondensed = collapse === 'condense';
1228
+ const { translucent, inheritedAttributes, divider, scrollEffect, collapse } = this;
1229
+ const theme = getIonTheme(this);
1230
+ const effect = scrollEffect ?? collapse;
1231
+ // condense/fade via the deprecated `collapse` prop are iOS-only.
1232
+ const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
1233
+ const hasHide = effect === 'hide';
1234
+ const hasCondense = effect === 'condense' && !isModeRestricted && this.el.querySelector('ion-title[size="large"]') !== null;
1235
+ const hasFade = effect === 'fade' && !isModeRestricted;
1236
+ // The condense header should be hidden when
1237
+ // - deprecated collapse prop is used on non-iOS (mode restricted), or
1238
+ // - scrollEffect="condense" is set but no ion-title[size="large"] is present
1239
+ const isHiddenCondense = effect === 'condense' && !hasCondense;
1171
1240
  // banner role must be at top level, so remove role if inside a menu
1172
- const roleType = getRoleType(hostContext('ion-menu', this.el), isCondensed, mode);
1173
- return (h(Host, { key: '863c4568cd7b8c0ec55109f193bbbaed68a1346e', role: roleType, class: {
1174
- [mode]: true,
1241
+ const roleType = isHiddenCondense ? 'none' : getRoleType(hostContext('ion-menu', this.el));
1242
+ return (h(Host, { key: '09f60ca014bb7b3a85d3c0a94e7989d5dbc43f46', role: roleType, class: {
1243
+ [theme]: true,
1175
1244
  // Used internally for styling
1176
- [`header-${mode}`]: true,
1245
+ [`header-${theme}`]: true,
1177
1246
  [`header-translucent`]: this.translucent,
1178
- [`header-collapse-${collapse}`]: true,
1179
- [`header-translucent-${mode}`]: this.translucent,
1180
- }, ...inheritedAttributes }, mode === 'ios' && translucent && h("div", { key: '25c3bdce328b0b35607d154c8b8374679313d881', class: "header-background" }), h("slot", { key: 'b44fab0a9be7920b9650da26117c783e751e1702' })));
1247
+ ['header-collapse-condense']: hasCondense,
1248
+ ['header-collapse-condense-hidden']: isHiddenCondense,
1249
+ ['header-collapse-fade']: hasFade,
1250
+ [`header-translucent-${theme}`]: this.translucent,
1251
+ ['header-divider']: divider,
1252
+ 'header-scroll-effect-hide': hasHide,
1253
+ }, ...inheritedAttributes }, theme !== 'md' && translucent && h("div", { key: 'fd5ff245ae0166e5e1d50936cacc98c90625db48', class: "header-background" }), h("slot", { key: '1baa31af87b9eb6406a21073ec65afa191dfbb3d' })));
1181
1254
  }
1182
1255
  get el() { return getElement(this); }
1183
1256
  };
1184
1257
  Header.style = {
1258
+ ionic: headerIonicCss(),
1185
1259
  ios: headerIosCss(),
1186
1260
  md: headerMdCss()
1187
1261
  };
1188
1262
 
1189
- const routerOutletCss = () => `:host{left:0;right:0;top:0;bottom:0;position:absolute;contain:layout size style;z-index:0}`;
1263
+ const routerOutletCss = () => `:host{right:0;left:0;top:0;bottom:0;position:absolute;contain:layout size style;z-index:0}`;
1190
1264
 
1191
1265
  const RouterOutlet = class {
1192
1266
  constructor(hostRef) {
@@ -1197,7 +1271,7 @@ const RouterOutlet = class {
1197
1271
  this.lockController = createLockController();
1198
1272
  this.gestureOrAnimationInProgress = false;
1199
1273
  /**
1200
- * The mode determines which platform styles to use.
1274
+ * The mode determines the platform behaviors of the component.
1201
1275
  */
1202
1276
  this.mode = getIonMode(this);
1203
1277
  /**
@@ -1218,7 +1292,7 @@ const RouterOutlet = class {
1218
1292
  this.swipeHandler.onStart();
1219
1293
  }
1220
1294
  };
1221
- this.gesture = (await import('./swipe-back-B2CmabKY.js')).createSwipeBackGesture(this.el, () => !this.gestureOrAnimationInProgress && !!this.swipeHandler && this.swipeHandler.canStart(), () => onStart(), (step) => this.ani?.progressStep(step), (shouldComplete, step, dur) => {
1295
+ this.gesture = (await import('./swipe-back-BHHiqew-.js')).createSwipeBackGesture(this.el, () => !this.gestureOrAnimationInProgress && !!this.swipeHandler && this.swipeHandler.canStart(), () => onStart(), (step) => this.ani?.progressStep(step), (shouldComplete, step, dur) => {
1222
1296
  if (this.ani) {
1223
1297
  this.ani.onFinish(() => {
1224
1298
  this.gestureOrAnimationInProgress = false;
@@ -1380,7 +1454,7 @@ const RouterOutlet = class {
1380
1454
  return true;
1381
1455
  }
1382
1456
  render() {
1383
- return h("slot", { key: '249e7d8a063c781db52fa535e42d648c7bf2909a' });
1457
+ return h("slot", { key: '7d8d23f014629831caf7fceaa36cbcef2fffb4bd' });
1384
1458
  }
1385
1459
  get el() { return getElement(this); }
1386
1460
  static get watchers() { return {
@@ -1394,9 +1468,11 @@ const RouterOutlet = class {
1394
1468
  };
1395
1469
  RouterOutlet.style = routerOutletCss();
1396
1470
 
1397
- 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)}}`;
1471
+ 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}`;
1472
+
1473
+ 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)}}`;
1398
1474
 
1399
- 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}`;
1475
+ 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}`;
1400
1476
 
1401
1477
  const ToolbarTitle = class {
1402
1478
  constructor(hostRef) {
@@ -1419,13 +1495,13 @@ const ToolbarTitle = class {
1419
1495
  return this.size !== undefined ? this.size : 'default';
1420
1496
  }
1421
1497
  render() {
1422
- const mode = getIonMode(this);
1498
+ const theme = getIonTheme(this);
1423
1499
  const size = this.getSize();
1424
- return (h(Host, { key: 'c5f0b913ff0a22d9bf02da48a313a613c2ac8fe7', class: createColorClasses(this.color, {
1425
- [mode]: true,
1500
+ return (h(Host, { key: '0d59a262a77d8c338f6e0dd03cd7bdfabea81491', class: createColorClasses(this.color, {
1501
+ [theme]: true,
1426
1502
  [`title-${size}`]: true,
1427
1503
  'title-rtl': document.dir === 'rtl',
1428
- }) }, h("div", { key: '5253b9e39fb764bfe1e57370719139f8a83e9904', class: "toolbar-title" }, h("slot", { key: 'e38b1eccb0175c36f8cab211aee7ce4d61fc9035' }))));
1504
+ }) }, h("div", { key: '7666f10764ac8c017ce827c3cf81c26b73b6c37b', class: "toolbar-title" }, h("slot", { key: 'a3e46affecea26185c83cb39a41c8442201e71e8' }))));
1429
1505
  }
1430
1506
  get el() { return getElement(this); }
1431
1507
  static get watchers() { return {
@@ -1435,18 +1511,29 @@ const ToolbarTitle = class {
1435
1511
  }; }
1436
1512
  };
1437
1513
  ToolbarTitle.style = {
1514
+ ionic: titleIonicCss(),
1438
1515
  ios: titleIosCss(),
1439
1516
  md: titleMdCss()
1440
1517
  };
1441
1518
 
1442
- 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%}`;
1519
+ 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}`;
1443
1520
 
1444
- 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}`;
1521
+ 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%}`;
1522
+
1523
+ 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}`;
1445
1524
 
1446
1525
  const Toolbar = class {
1447
1526
  constructor(hostRef) {
1448
1527
  registerInstance(this, hostRef);
1449
1528
  this.childrenStyles = new Map();
1529
+ this.slotClasses = [
1530
+ 'has-start-content',
1531
+ 'has-end-content',
1532
+ 'has-primary-content',
1533
+ 'has-secondary-content',
1534
+ ];
1535
+ this.showClasses = ['show-start', 'show-end', 'show-primary', 'show-secondary'];
1536
+ this.slotSizeVars = ['--start-end-size', '--primary-secondary-size'];
1450
1537
  }
1451
1538
  componentWillLoad() {
1452
1539
  const buttons = Array.from(this.el.querySelectorAll('ion-buttons'));
@@ -1463,6 +1550,170 @@ const Toolbar = class {
1463
1550
  if (lastButtons) {
1464
1551
  lastButtons.classList.add('buttons-last-slot');
1465
1552
  }
1553
+ this.updateSlotClasses();
1554
+ }
1555
+ componentDidLoad() {
1556
+ this.updateSlotClasses();
1557
+ this.updateSlotWidths();
1558
+ }
1559
+ titlePlacementChanged() {
1560
+ this.updateSlotClasses();
1561
+ }
1562
+ /**
1563
+ * Gets the title placement.
1564
+ * Returns the title placement if it is set, otherwise returns `"center"`
1565
+ * for `ionic` and `ios`, and `"start"` for `md`.
1566
+ */
1567
+ getTitlePlacement() {
1568
+ if (this.titlePlacement !== undefined) {
1569
+ return this.titlePlacement;
1570
+ }
1571
+ return getIonTheme(this) === 'ionic' || getIonTheme(this) === 'ios' ? 'center' : 'start';
1572
+ }
1573
+ /**
1574
+ * Updates the CSS custom properties for slot widths
1575
+ * This ensures that slots shown by their met conditions
1576
+ * have a minimum width matching their required slot
1577
+ */
1578
+ updateSlotWidths(tries = 0) {
1579
+ // Set timeout to try to execute after everything is rendered
1580
+ setTimeout(() => {
1581
+ // Attempt to measure and update
1582
+ const success = this.measureAndUpdateSlots();
1583
+ // If not all measurements were successful, try again in 100 ms
1584
+ // cap recursion at 5 tries for safety
1585
+ if (!success && tries < 5) {
1586
+ setTimeout(() => {
1587
+ this.updateSlotWidths(tries + 1);
1588
+ }, 100);
1589
+ }
1590
+ });
1591
+ }
1592
+ /**
1593
+ * Measure the widths of the slots and update the CSS custom properties
1594
+ * for the minimum width of each pair of slots based on the largest width in each pair.
1595
+ * Returns whether we successfully measured all of the slots we expect to have content.
1596
+ * If not, the content probably hasn't rendered yet and we need to try again.
1597
+ */
1598
+ measureAndUpdateSlots() {
1599
+ // Define the relationship between slots based on the conditions array
1600
+ // Group slots that should have the same width
1601
+ const slotPairs = [
1602
+ { name: 'start-end', slots: ['start', 'end'] },
1603
+ { name: 'primary-secondary', slots: ['primary', 'secondary'] },
1604
+ ];
1605
+ // First, measure all slot widths
1606
+ const slotWidths = new Map();
1607
+ let allMeasurementsSuccessful = true;
1608
+ // Measure all slots with content
1609
+ const slots = ['start', 'end', 'primary', 'secondary'];
1610
+ slots.forEach((slot) => {
1611
+ if (this.el.classList.contains(`has-${slot}-content`)) {
1612
+ const slotElement = this.el.shadowRoot?.querySelector(`slot[name="${slot}"]`);
1613
+ if (slotElement) {
1614
+ // Check if the slot contains an img or ion-img
1615
+ const assignedElements = slotElement.assignedElements({ flatten: true });
1616
+ const hasImg = assignedElements.some((el) => {
1617
+ if (el.tagName === 'IMG' || el.tagName === 'ION-IMG') {
1618
+ return true;
1619
+ }
1620
+ // Check for nested images
1621
+ return el.querySelector('img, ion-img') !== null;
1622
+ });
1623
+ // Temporarily allow slot to size to content by setting flex-basis
1624
+ // to 'auto'. This ensures that slotted images can render at their
1625
+ // intrinsic width for measurement.
1626
+ if (hasImg) {
1627
+ const { name } = slotPairs.find((pair) => pair.slots.includes(slot));
1628
+ this.el.style.setProperty(`--${name}-size`, 'auto');
1629
+ }
1630
+ const width = slotElement.offsetWidth;
1631
+ if (width > 0) {
1632
+ slotWidths.set(slot, width);
1633
+ }
1634
+ else {
1635
+ allMeasurementsSuccessful = false;
1636
+ }
1637
+ }
1638
+ }
1639
+ });
1640
+ // Then set the CSS custom properties based on the largest width in each pair
1641
+ slotPairs.forEach(({ name, slots }) => {
1642
+ // Find the maximum width among the slots in this pair
1643
+ let maxWidth = 0;
1644
+ let hasAnyContent = false;
1645
+ slots.forEach((slot) => {
1646
+ if (slotWidths.has(slot)) {
1647
+ hasAnyContent = true;
1648
+ maxWidth = Math.max(maxWidth, slotWidths.get(slot) ?? 0);
1649
+ }
1650
+ });
1651
+ // If at least one slot in the pair has content, set the min-width for the pair
1652
+ if (hasAnyContent && maxWidth > 0) {
1653
+ // Set a single CSS variable for the pair
1654
+ this.el.style.setProperty(`--${name}-size`, `${maxWidth}px`);
1655
+ }
1656
+ });
1657
+ return allMeasurementsSuccessful;
1658
+ }
1659
+ /**
1660
+ * Removes all slot visibility classes and slot width CSS variables.
1661
+ */
1662
+ removeSlotClasses() {
1663
+ this.el.classList.remove(...this.slotClasses, ...this.showClasses);
1664
+ this.slotSizeVars.forEach((cssVar) => this.el.style.removeProperty(cssVar));
1665
+ }
1666
+ updateSlotClasses() {
1667
+ const titlePlacement = this.getTitlePlacement();
1668
+ if (titlePlacement !== 'center') {
1669
+ this.removeSlotClasses();
1670
+ return;
1671
+ }
1672
+ // Check if slots have content
1673
+ const slots = ['start', 'end', 'primary', 'secondary'];
1674
+ const classesToAdd = [];
1675
+ const classesToRemove = [];
1676
+ slots.forEach((slot) => {
1677
+ const slotHasContent = this.hasSlotContent(slot);
1678
+ const slotClass = `has-${slot}-content`;
1679
+ if (slotHasContent) {
1680
+ classesToAdd.push(slotClass);
1681
+ }
1682
+ else {
1683
+ classesToRemove.push(slotClass);
1684
+ }
1685
+ });
1686
+ // Force visibilities in certain conditions. This works by adding a class to the toolbar
1687
+ // named `show-{slot}`. This class will be added if the toolbar has the required slots
1688
+ // and does not have any of the excluded slots, otherwise it will be removed.
1689
+ // This is useful to enforce centering of the toolbar content when there are different amounts
1690
+ // of slots on either side of the toolbar.
1691
+ const conditions = [
1692
+ { name: 'end', requiredSlots: ['start'], excludeSlots: ['end', 'primary'] },
1693
+ { name: 'start', requiredSlots: ['end'], excludeSlots: ['start', 'secondary'] },
1694
+ { name: 'secondary', requiredSlots: ['primary'], excludeSlots: ['secondary', 'start'] },
1695
+ { name: 'primary', requiredSlots: ['secondary'], excludeSlots: ['primary', 'end'] },
1696
+ ];
1697
+ conditions.forEach((condition) => {
1698
+ const hasRequiredSlots = condition.requiredSlots.every((slot) => classesToAdd.includes(`has-${slot}-content`));
1699
+ const hasExcludedSlots = condition.excludeSlots.some((slot) => classesToAdd.includes(`has-${slot}-content`));
1700
+ const className = `show-${condition.name}`;
1701
+ if (hasRequiredSlots && !hasExcludedSlots) {
1702
+ classesToAdd.push(className);
1703
+ }
1704
+ else {
1705
+ classesToRemove.push(className);
1706
+ }
1707
+ });
1708
+ // Add classes to the toolbar element
1709
+ this.el.classList.add(...classesToAdd);
1710
+ this.el.classList.remove(...classesToRemove);
1711
+ // Update slot widths after classes have been updated
1712
+ this.updateSlotWidths();
1713
+ }
1714
+ hasSlotContent(slotName) {
1715
+ const slotNode = this.el.shadowRoot?.querySelector(`slot[name="${slotName}"]`);
1716
+ return !!slotNode && slotNode.assignedNodes().length > 0;
1466
1717
  }
1467
1718
  childrenStyle(ev) {
1468
1719
  ev.stopPropagation();
@@ -1487,22 +1738,30 @@ const Toolbar = class {
1487
1738
  }
1488
1739
  }
1489
1740
  render() {
1490
- const mode = getIonMode(this);
1741
+ const theme = getIonTheme(this);
1491
1742
  const childStyles = {};
1492
- this.childrenStyles.forEach((value) => {
1493
- Object.assign(childStyles, value);
1743
+ this.childrenStyles.forEach((style) => {
1744
+ Object.assign(childStyles, style);
1494
1745
  });
1495
- return (h(Host, { key: 'c16803dc4eae9972ef19bf43aa74b94feb4fd4c1', class: {
1496
- ...childStyles,
1746
+ const titlePlacement = this.getTitlePlacement();
1747
+ return (h(Host, { key: '642c8e5813e8f6c8164905d2f951407b0b204d47', class: {
1497
1748
  ...createColorClasses(this.color, {
1498
- [mode]: true,
1749
+ [theme]: true,
1499
1750
  'in-toolbar': hostContext('ion-toolbar', this.el),
1751
+ [`toolbar-title-placement-${titlePlacement}`]: true,
1500
1752
  }),
1501
- } }, h("div", { key: '20e3f85844c94b8399c245d2df125e6ab678d681', class: "toolbar-background", part: "background" }), h("div", { key: '12f09e324e8d9130b9d30c493106b500233fb016', class: "toolbar-container", part: "container" }, h("slot", { key: '6da0fe99ee0c4d7c969712e2908a4e7e6be5ed2c', name: "start" }), h("slot", { key: '177c346d6dcabb7857d810cda7d25c6dde32e6e2', name: "secondary" }), h("div", { key: '8c921b415940c71bf4c1a2c5c6887f36ad1afd16', class: "toolbar-content", part: "content" }, h("slot", { key: '1f2976b80d967bd51e86ed1357b363271d655df2' })), h("slot", { key: '0f7618044a7e8b0d9b715a8e208070f7ef2ee4c8', name: "primary" }), h("slot", { key: '125c393197e0660a3c2638dd4628c41ef7e05f19', name: "end" }))));
1753
+ ...childStyles,
1754
+ } }, h("div", { key: '6eb233aee80d46cbd807ba2291635ae3e9b21061', class: "toolbar-background", part: "background" }), h("div", { key: '781045c0f7a39ca78c5ca62e28e2c6783f7fcebf', class: "toolbar-container", part: "container" }, h("slot", { key: 'b15f81d53459ec8025b25c099096c6cdf569611f', name: "start", onSlotchange: () => this.updateSlotClasses }), h("slot", { key: 'c3204e0de1f7408e459154a04eb6d0eb5e569165', name: "secondary", onSlotchange: () => this.updateSlotClasses }), h("div", { key: 'a3674b28c55f9c62993e99109257c91b6360e001', class: "toolbar-content", part: "content" }, h("slot", { key: '80bf9e4305e2962f3b3ec300a3b8ef8006f18d78' })), h("slot", { key: '3bdc1b80ba028914efe0e0b3eda5af1aa6e178c5', name: "primary", onSlotchange: () => this.updateSlotClasses }), h("slot", { key: 'e2ad4237188f4bd0f132d015c07432f13a9f27ce', name: "end", onSlotchange: () => this.updateSlotClasses }))));
1502
1755
  }
1503
1756
  get el() { return getElement(this); }
1757
+ static get watchers() { return {
1758
+ "titlePlacement": [{
1759
+ "titlePlacementChanged": 0
1760
+ }]
1761
+ }; }
1504
1762
  };
1505
1763
  Toolbar.style = {
1764
+ ionic: toolbarIonicCss(),
1506
1765
  ios: toolbarIosCss(),
1507
1766
  md: toolbarMdCss()
1508
1767
  };