@ionic/core 8.8.18-dev.11786399582.1d58c37d → 8.8.18-dev.11786487682.1e6f798f

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